src/pyams_viewlet/manager.py
changeset 5 a8a94e2863b0
parent 2 842ab9ef3982
child 15 3b4da52e3776
equal deleted inserted replaced
4:656f5c43687d 5:a8a94e2863b0
    58         if viewlet is None:
    58         if viewlet is None:
    59             raise ComponentLookupError('No provider with name `%s` found.' % name)
    59             raise ComponentLookupError('No provider with name `%s` found.' % name)
    60 
    60 
    61         # If the viewlet cannot be accessed, then raise an
    61         # If the viewlet cannot be accessed, then raise an
    62         # unauthorized error
    62         # unauthorized error
    63         if viewlet.permission and not self.request.has_permission(viewlet.permission):
    63         if viewlet.permission and not self.request.has_permission(viewlet.permission, context=self.context):
    64             raise HTTPUnauthorized('You are not authorized to access the provider called `%s`.' % name)
    64             raise HTTPUnauthorized('You are not authorized to access the provider called `%s`.' % name)
    65 
    65 
    66         # Return the viewlet.
    66         # Return the viewlet.
    67         return viewlet
    67         return viewlet
    68 
    68 
    83         ``viewlets`` is a list of tuples of the form (name, viewlet).
    83         ``viewlets`` is a list of tuples of the form (name, viewlet).
    84         """
    84         """
    85         # Only return viewlets accessible to the principal
    85         # Only return viewlets accessible to the principal
    86         request = self.request
    86         request = self.request
    87         return [(name, viewlet) for name, viewlet in viewlets
    87         return [(name, viewlet) for name, viewlet in viewlets
    88                 if (not viewlet.permission) or request.has_permission(viewlet.permission)]
    88                 if (not viewlet.permission) or request.has_permission(viewlet.permission, context=self.context)]
    89 
    89 
    90     def sort(self, viewlets):
    90     def sort(self, viewlets):
    91         """Sort the viewlets.
    91         """Sort the viewlets.
    92 
    92 
    93         ``viewlets`` is a list of tuples of the form (name, viewlet).
    93         ``viewlets`` is a list of tuples of the form (name, viewlet).
    98     def update(self):
    98     def update(self):
    99         """See zope.contentprovider.interfaces.IContentProvider"""
    99         """See zope.contentprovider.interfaces.IContentProvider"""
   100         self.__updated = True
   100         self.__updated = True
   101 
   101 
   102         # check permission
   102         # check permission
   103         if self.permission and not self.request.has_permission(self.permission):
   103         if self.permission and not self.request.has_permission(self.permission, context=self.context):
   104             return
   104             return
   105         # Find all content providers for the region
   105         # Find all content providers for the region
   106         viewlets = self._get_viewlets()
   106         viewlets = self._get_viewlets()
   107         # Just use the viewlets from now on
   107         # Just use the viewlets from now on
   108         self.viewlets = []
   108         self.viewlets = []
   129             viewlet.update()
   129             viewlet.update()
   130 
   130 
   131     def render(self):
   131     def render(self):
   132         """See zope.contentprovider.interfaces.IContentProvider"""
   132         """See zope.contentprovider.interfaces.IContentProvider"""
   133         # Now render the view
   133         # Now render the view
   134         if self.permission and not self.request.has_permission(self.permission):
   134         if self.permission and not self.request.has_permission(self.permission, context=self.context):
   135             return ''
   135             return ''
   136         if not self.viewlets:
   136         if not self.viewlets:
   137             return ''
   137             return ''
   138         if self.template:
   138         if self.template:
   139             return self.template(viewlets=self.viewlets)
   139             return self.template(viewlets=self.viewlets)
   173         return sorted(viewlets, key=get_weight)
   173         return sorted(viewlets, key=get_weight)
   174 
   174 
   175 
   175 
   176 def is_available(viewlet):
   176 def is_available(viewlet):
   177     try:
   177     try:
   178         return ((not viewlet.permission) or viewlet.request.has_permission(viewlet.permission)) and viewlet.available
   178         return ((not viewlet.permission) or
       
   179                 viewlet.request.has_permission(viewlet.permission, context=viewlet.context)) and \
       
   180                viewlet.available
   179     except AttributeError:
   181     except AttributeError:
   180         return True
   182         return True
   181 
   183 
   182 
   184 
   183 class ConditionalViewletManager(WeightOrderedViewletManager):
   185 class ConditionalViewletManager(WeightOrderedViewletManager):