src/pyams_content/features/footer/skin/__init__.py
changeset 801 c7585a24ca8b
parent 762 2df58f4a11df
child 809 efdeebb63567
equal deleted inserted replaced
800:2b5460ecb254 801:c7585a24ca8b
    12 
    12 
    13 __docformat__ = 'restructuredtext'
    13 __docformat__ = 'restructuredtext'
    14 
    14 
    15 
    15 
    16 # import standard library
    16 # import standard library
       
    17 import logging
       
    18 logger = logging.getLogger('PyAMS (content)')
    17 
    19 
    18 # import interfaces
    20 # import interfaces
    19 from pyams_content.features.footer.interfaces import IFooterTarget, IFooterRenderer, IFooterSettings
    21 from pyams_content.features.footer.interfaces import IFooterTarget, IFooterRenderer, IFooterSettings
    20 from pyams_content.features.renderer.interfaces import HIDDEN_RENDERER_NAME
    22 from pyams_content.features.renderer.interfaces import HIDDEN_RENDERER_NAME
       
    23 from pyams_portal.interfaces import PREVIEW_MODE
    21 from pyams_skin.layer import IPyAMSLayer
    24 from pyams_skin.layer import IPyAMSLayer
       
    25 from pyams_utils.interfaces import ICacheKeyValue
    22 from pyams_utils.interfaces.url import DISPLAY_CONTEXT
    26 from pyams_utils.interfaces.url import DISPLAY_CONTEXT
    23 
    27 
    24 # import packages
    28 # import packages
       
    29 from pyams_cache.beaker import get_cache
    25 from pyams_content.features.renderer.skin import BaseContentRenderer
    30 from pyams_content.features.renderer.skin import BaseContentRenderer
       
    31 from pyams_portal.portlet import PORTLETS_CACHE_REGION, PORTLETS_CACHE_NAME, PORTLETS_CACHE_KEY
    26 from pyams_utils.adapter import adapter_config
    32 from pyams_utils.adapter import adapter_config
    27 from pyams_utils.traversing import get_parent
    33 from pyams_utils.traversing import get_parent
    28 from pyramid.decorator import reify
    34 from pyramid.decorator import reify
    29 
    35 
    30 from pyams_content import _
    36 from pyams_content import _
    44         settings = IFooterSettings(target)
    50         settings = IFooterSettings(target)
    45         while settings.inherit:
    51         while settings.inherit:
    46             settings = IFooterSettings(settings.parent)
    52             settings = IFooterSettings(settings.parent)
    47         return settings.settings
    53         return settings.settings
    48 
    54 
       
    55     def render(self):
       
    56         preview_mode = self.request.annotations.get(PREVIEW_MODE, False)
       
    57         if preview_mode:
       
    58             return super(BaseFooterRenderer, self).render()
       
    59         else:
       
    60             portlets_cache = get_cache(PORTLETS_CACHE_REGION, PORTLETS_CACHE_NAME)
       
    61             cache_key = PORTLETS_CACHE_KEY.format(portlet=self.name,
       
    62                                                   context=ICacheKeyValue(self.settings))
       
    63             try:
       
    64                 result = portlets_cache.get_value(cache_key)
       
    65                 logger.debug("Retrieving header content from cache key {0}".format(cache_key))
       
    66             except KeyError:
       
    67                 result = super(BaseFooterRenderer, self).render()
       
    68                 portlets_cache.set_value(cache_key, result)
       
    69                 logger.debug("Storing header content for cache key {0}".format(cache_key))
       
    70             return result
       
    71 
    49 
    72 
    50 @adapter_config(name=HIDDEN_RENDERER_NAME, context=(IFooterTarget, IPyAMSLayer), provides=IFooterRenderer)
    73 @adapter_config(name=HIDDEN_RENDERER_NAME, context=(IFooterTarget, IPyAMSLayer), provides=IFooterRenderer)
    51 class HiddenFooterRenderer(BaseFooterRenderer):
    74 class HiddenFooterRenderer(BaseFooterRenderer):
    52     """Hidden footer renderer"""
    75     """Hidden footer renderer"""
    53 
    76