def handle_aggregate_crowd(name, crowd_names): factories = getCrowdsUtility().factories try: crowds = [factories[crowd_name] for crowd_name in crowd_names] except KeyError: raise ValueError("invalid crowd id", crowd_name) class AggregateCrowdFactory(AggregateCrowd): def crowdFactories(self): return crowds handle_crowd(name, AggregateCrowdFactory)
def switch_description(_context, group=None, action=None, crowd=None, crowd_factory=None, use_crowd=None, use_crowd_factory=None): if crowd is not None and crowd_factory is not None: raise TypeError("Must specify either crowd or crowd_factory.") if use_crowd is not None and use_crowd_factory is not None: raise TypeError("Must specify either use_crowd or use_crowd_factory.") if action is not None and group is None: raise TypeError("Must specify group when specifying action.") if crowd is not None: crowd_getter = lambda: getCrowdsUtility().getFactory(crowd) elif crowd_factory is not None: crowd_getter = lambda: crowd_factory else: crowd_getter = lambda: None if use_crowd is not None: replacement_crowd_getter = lambda: getCrowdsUtility().getFactory( use_crowd) elif use_crowd_factory is not None: replacement_crowd_getter = lambda: use_crowd_factory else: replacement_crowd_getter = lambda: None discriminator = ('switch_description', group, action, crowd, crowd_factory, use_crowd, use_crowd_factory) _context.action(discriminator=discriminator, callable=handle_switch_description, args=(_context, group, action, crowd_getter, replacement_crowd_getter), order=ZCML_REGISTER_DESCRIPTION_SWITCHING)
def switch_description(_context, group=None, action=None, crowd=None, crowd_factory=None, use_crowd=None, use_crowd_factory=None): if crowd is not None and crowd_factory is not None: raise TypeError("Must specify either crowd or crowd_factory.") if use_crowd is not None and use_crowd_factory is not None: raise TypeError("Must specify either use_crowd or use_crowd_factory.") if action is not None and group is None: raise TypeError("Must specify group when specifying action.") if crowd is not None: crowd_getter = lambda: getCrowdsUtility().getFactory(crowd) elif crowd_factory is not None: crowd_getter = lambda: crowd_factory else: crowd_getter = lambda: None if use_crowd is not None: replacement_crowd_getter = lambda: getCrowdsUtility().getFactory(use_crowd) elif use_crowd_factory is not None: replacement_crowd_getter = lambda: use_crowd_factory else: replacement_crowd_getter = lambda: None discriminator = ('switch_description', group, action, crowd, crowd_factory, use_crowd, use_crowd_factory) _context.action(discriminator=discriminator, callable=handle_switch_description, args=(_context, group, action, crowd_getter, replacement_crowd_getter), order=ZCML_REGISTER_DESCRIPTION_SWITCHING)
def describe_crowd(_context, group=None, action=None, interface=None, permission=None, crowd=None, crowd_factory=None, factory=None, title=None, description=None): if crowd is not None and crowd_factory is not None: raise TypeError("Must specify either crowd or crowd_factory.") if action is not None and group is None: raise TypeError("Must specify group when specifying action.") if crowd is not None: crowd_getter = lambda: getCrowdsUtility().getFactory(crowd) elif crowd_factory is not None: crowd_getter = lambda: crowd_factory else: crowd_getter = lambda: None if factory is None: if title is None and description is None: raise TypeError("Must specify either description factory" " or title/description.") factory = CrowdDescription factory_dict = {} if title is not None: factory_dict['title'] = title if description is not None: factory_dict['description'] = description new_factory = type(factory.__name__, (factory, ), factory_dict) discriminator = ('describe_crowd', group, action, interface, permission, crowd, crowd_factory) _context.action(discriminator=discriminator, callable=handle_crowd_description, args=(_context, group, action, interface, permission, crowd_getter, new_factory), order=ZCML_REGISTER_CROWD_DESCRIPTIONS)
def handle_allow(crowdname, permission, interface): """Handler for the ZCML <allow> directive. interface is the interface for which the security declaration is issued, crowdname is a string, permission is an identifier for a permission. The function registers the given crowd factory in the ICrowdsUtility. An adapter to ICrowd is provided if interface is specified. """ utility = getCrowdsUtility() discriminator = (permission, interface) if discriminator not in utility.crowds: utility.crowds[discriminator] = [] if interface is not None: registerCrowdAdapter(permission, interface) utility.crowds[discriminator].append(crowdname)
def handle_crowd(name, factory): """Handler for the ZCML <crowd> directive.""" getCrowdsUtility().factories[name] = factory
def crowdFactories(self): return getCrowdsUtility().getFactories(self.permission, self.interface)