diff -r a5e56749ca3d -r 3d259e1718ef src/pyams_content/features/footer/skin/__init__.py --- a/src/pyams_content/features/footer/skin/__init__.py Fri Oct 12 14:33:03 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -# -# Copyright (c) 2008-2018 Thierry Florac -# All Rights Reserved. -# -# This software is subject to the provisions of the Zope Public License, -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -# FOR A PARTICULAR PURPOSE. -# - -__docformat__ = 'restructuredtext' - - -# import standard library -import logging -logger = logging.getLogger('PyAMS (content)') - -# import interfaces -from pyams_content.features.footer.interfaces import IFooterTarget, IFooterRenderer, IFooterSettings -from pyams_content.features.renderer.interfaces import HIDDEN_RENDERER_NAME -from pyams_portal.interfaces import PREVIEW_MODE -from pyams_skin.layer import IPyAMSLayer -from pyams_utils.interfaces import ICacheKeyValue -from pyams_utils.interfaces.url import DISPLAY_CONTEXT - -# import packages -from pyams_cache.beaker import get_cache -from pyams_content.features.renderer.skin import BaseContentRenderer -from pyams_portal.portlet import PORTLETS_CACHE_REGION, PORTLETS_CACHE_NAME, PORTLETS_CACHE_KEY -from pyams_utils.adapter import adapter_config -from pyams_utils.traversing import get_parent -from pyramid.decorator import reify -from zope.interface import implementer - -from pyams_content import _ - - -@implementer(IFooterRenderer) -class BaseFooterRenderer(BaseContentRenderer): - """Base footer renderer""" - - name = None - settings_key = None - - @reify - def settings_target(self): - context = self.request.annotations.get(DISPLAY_CONTEXT) - if context is None: - context = self.context - return get_parent(context, IFooterTarget) - - @reify - def settings(self): - if self.settings_interface is None: - return None - target = self.settings_target - settings = IFooterSettings(target) - while settings.inherit: - settings = IFooterSettings(settings.parent) - return settings.settings - - @reify - def cache_key(self): - return PORTLETS_CACHE_KEY.format(portlet=self.name, - context=ICacheKeyValue(self.settings_target), - lang=self.request.locale_name) - - def render(self): - preview_mode = self.request.annotations.get(PREVIEW_MODE, False) - if preview_mode: - return super(BaseFooterRenderer, self).render() - else: - portlets_cache = get_cache(PORTLETS_CACHE_REGION, PORTLETS_CACHE_NAME) - cache_key = self.cache_key - if self.context is not self.request.context: # display shared content - cache_key = '{0}::shared'.format(cache_key) - try: - result = portlets_cache.get_value(cache_key) - logger.debug("Retrieving footer content from cache key {0}".format(cache_key)) - except KeyError: - result = super(BaseFooterRenderer, self).render() - portlets_cache.set_value(cache_key, result) - logger.debug("Storing footer content to cache key {0}".format(cache_key)) - return result - - -@adapter_config(name=HIDDEN_RENDERER_NAME, context=(IFooterTarget, IPyAMSLayer), provides=IFooterRenderer) -class HiddenFooterRenderer(BaseFooterRenderer): - """Hidden footer renderer""" - - name = HIDDEN_RENDERER_NAME - label = _("Hidden footer") - weight = -999 - - def render(self): - return ''