def __init__(self, _context, provides, class_=None, component=None, name=''): if class_ is not None: assert component is None, "Both class and component specified" self.component = class_() else: assert component is not None, \ "Neither class nor component specified" self.component = component self._context = _context self.provides = provides self.name = name self.permission_collector = PermissionCollectingContext() self.contentdirective = ClassDirective(self.permission_collector, class_)
class SecuredUtilityDirective: def __init__(self, _context, provides, class_=None, component=None, name=''): if class_ is not None: assert component is None, "Both class and component specified" self.component = class_() else: assert component is not None, \ "Neither class nor component specified" self.component = component self._context = _context self.provides = provides self.name = name self.permission_collector = PermissionCollectingContext() self.contentdirective = ClassDirective(self.permission_collector, class_) def require(self, _context, **kw): self.contentdirective.require(_context, **kw) def allow(self, _context, **kw): self.contentdirective.allow(_context, **kw) def __call__(self): # Set up the utility with an appropriate proxy. # Note that this does not take into account other security # directives on this content made later on during the execution # of the zcml. checker = Checker(self.permission_collector.get_permissions, self.permission_collector.set_permissions) component = ProxyFactory(self.component, checker=checker) utility(self._context, self.provides, component=component, name=self.name) return ()
def __init__(self, _context, provides, class_=None, component=None, name=''): if class_ is not None: assert component is None, "Both class and component specified" self.component = class_() else: assert component is not None, \ "Neither class nor component specified" self.component = component self._context = _context self.provides = provides self.name = name self.permission_collector = PermissionCollectingContext() self.contentdirective = ClassDirective( self.permission_collector, class_)
class SecuredUtilityDirective: def __init__(self, _context, provides, class_=None, component=None, name=''): if class_ is not None: assert component is None, "Both class and component specified" self.component = class_() else: assert component is not None, \ "Neither class nor component specified" self.component = component self._context = _context self.provides = provides self.name = name self.permission_collector = PermissionCollectingContext() self.contentdirective = ClassDirective( self.permission_collector, class_) def require(self, _context, **kw): self.contentdirective.require(_context, **kw) def allow(self, _context, **kw): self.contentdirective.allow(_context, **kw) def __call__(self): # Set up the utility with an appropriate proxy. # Note that this does not take into account other security # directives on this content made later on during the execution # of the zcml. checker = Checker( self.permission_collector.get_permissions, self.permission_collector.set_permissions) component = ProxyFactory(self.component, checker=checker) utility( self._context, self.provides, component=component, name=self.name) return ()
def addMenuItem(_context, title, description='', menu=None, for_=None, class_=None, factory=None, view=None, icon=None, filter=None, permission=None, layer=IDefaultBrowserLayer, extra=None, order=0, item_class=None): """Create an add menu item for a given class or factory As a convenience, a class can be provided, in which case, a factory is automatically defined based on the class. In this case, the factory id is based on the class name. """ if for_ is not None: _context.action(discriminator=None, callable=provideInterface, args=('', for_)) forname = 'For' + for_.getName() else: for_ = IAdding forname = '' if menu is not None: if isinstance(menu, six.string_types): menu = getUtility(IMenuItemType, menu) if menu is None: raise ValueError("Missing menu id '%s'" % menu) if class_ is None: if factory is None: raise ValueError("Must specify either class or factory") else: if factory is not None: raise ValueError("Can't specify both class and factory") if permission is None: raise ValueError( "A permission must be specified when a class is used") factory = "BrowserAdd%s__%s.%s" % (forname, class_.__module__, class_.__name__) ClassDirective(_context, class_).factory(_context, id=factory) extra = {'factory': factory} if view: action = view # This action will check if the view exists _context.action(discriminator=None, callable=_checkViewFor, args=(for_, layer, view), order=999999) else: action = factory if menu == None: menu = AddMenu return menuItemsDirective(_context, menu, for_, layer=layer).menuItem(_context, action, title, description, icon, filter, permission, extra, order, item_class)