src/pyams_portal/portlet.py
changeset 107 563e611a329f
parent 102 b3460ef91e43
child 110 0560f0ceb80f
equal deleted inserted replaced
106:1aa90799dde1 107:563e611a329f
    21 
    21 
    22 # import interfaces
    22 # import interfaces
    23 from pyams_form.interfaces.form import IFormContextPermissionChecker
    23 from pyams_form.interfaces.form import IFormContextPermissionChecker
    24 from pyams_portal.interfaces import IPortlet, IPortletSettings, IPortletConfiguration, IPortletPreviewer, \
    24 from pyams_portal.interfaces import IPortlet, IPortletSettings, IPortletConfiguration, IPortletPreviewer, \
    25     IPortletRenderer, IPortalPortletsConfiguration, IPortalTemplate, IPortalContext, IPortalPage, \
    25     IPortletRenderer, IPortalPortletsConfiguration, IPortalTemplate, IPortalContext, IPortalPage, \
    26     IPortalTemplateConfiguration, MANAGE_TEMPLATE_PERMISSION
    26     IPortalTemplateConfiguration, MANAGE_TEMPLATE_PERMISSION, IPortletRendererSettings
    27 from zope.traversing.interfaces import ITraversable
    27 from zope.traversing.interfaces import ITraversable
    28 
    28 
    29 # import packages
    29 # import packages
    30 from persistent import Persistent
    30 from persistent import Persistent
    31 from persistent.mapping import PersistentMapping
    31 from persistent.mapping import PersistentMapping
    32 from pyams_utils.adapter import adapter_config, ContextAdapter, get_adapter_weight
    32 from pyams_utils.adapter import adapter_config, ContextAdapter, get_adapter_weight, get_annotation_adapter
    33 from pyams_utils.request import check_request
    33 from pyams_utils.request import check_request
    34 from pyams_utils.vocabulary import vocabulary_config
    34 from pyams_utils.vocabulary import vocabulary_config
    35 from pyams_viewlet.viewlet import ViewContentProvider
    35 from pyams_viewlet.viewlet import ViewContentProvider
    36 from pyramid.exceptions import ConfigurationError
    36 from pyramid.exceptions import ConfigurationError
    37 from pyramid.renderers import render
    37 from pyramid.renderers import render
   165 
   165 
   166 @implementer(IPortletRenderer)
   166 @implementer(IPortletRenderer)
   167 class PortletRenderer(PortletContentProvider):
   167 class PortletRenderer(PortletContentProvider):
   168     """Portlet renderer adapter"""
   168     """Portlet renderer adapter"""
   169 
   169 
       
   170     settings_interface = None
       
   171     settings_key = None
       
   172 
   170     target_interface = None
   173     target_interface = None
       
   174 
   171     weight = 0
   175     weight = 0
   172 
   176 
   173     @property
   177     @property
   174     def slot_configuration(self):
   178     def slot_configuration(self):
   175         template = IPortalPage(self.context).template
   179         template = IPortalPage(self.context).template
   234         renderer = request.registry.queryMultiAdapter((request.root, request, request, self), IPortletRenderer,
   238         renderer = request.registry.queryMultiAdapter((request.root, request, request, self), IPortletRenderer,
   235                                                       name=self._renderer)
   239                                                       name=self._renderer)
   236         if (renderer is not None) and (renderer.target_interface is not None):
   240         if (renderer is not None) and (renderer.target_interface is not None):
   237             alsoProvides(self, renderer.target_interface)
   241             alsoProvides(self, renderer.target_interface)
   238 
   242 
       
   243     def get_renderer(self, request=None):
       
   244         if request is None:
       
   245             request = check_request()
       
   246         return request.registry.queryMultiAdapter((request.root, request, request, self), IPortletRenderer,
       
   247                                                   name=self._renderer)
       
   248 
   239     @property
   249     @property
   240     def configuration(self):
   250     def configuration(self):
   241         return self.__parent__
   251         return self.__parent__
       
   252 
       
   253 
       
   254 @adapter_config(context=IPortletSettings, provides=IPortletRendererSettings)
       
   255 def portlet_renderer_settings_adapter(context):
       
   256     renderer = context.get_renderer()
       
   257     if not renderer.settings_interface:
       
   258         return None
       
   259     return get_annotation_adapter(context, renderer.settings_key, renderer.settings_interface)
   242 
   260 
   243 
   261 
   244 @implementer(IPortletConfiguration)
   262 @implementer(IPortletConfiguration)
   245 class PortletConfiguration(Persistent, Contained):
   263 class PortletConfiguration(Persistent, Contained):
   246     """Portlet configuration persistent class
   264     """Portlet configuration persistent class