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.header.interfaces import IHeaderTarget, IHeaderRenderer, IHeaderSettings |
21 from pyams_content.features.header.interfaces import IHeaderTarget, IHeaderRenderer, IHeaderSettings |
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 = IHeaderSettings(target) |
50 settings = IHeaderSettings(target) |
45 while settings.inherit: |
51 while settings.inherit: |
46 settings = IHeaderSettings(settings.parent) |
52 settings = IHeaderSettings(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(BaseHeaderRenderer, 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(BaseHeaderRenderer, 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=(IHeaderTarget, IPyAMSLayer), provides=IHeaderRenderer) |
73 @adapter_config(name=HIDDEN_RENDERER_NAME, context=(IHeaderTarget, IPyAMSLayer), provides=IHeaderRenderer) |
51 class HiddenHeaderRenderer(BaseHeaderRenderer): |
74 class HiddenHeaderRenderer(BaseHeaderRenderer): |
52 """Hidden header renderer""" |
75 """Hidden header renderer""" |
53 |
76 |