def utility(_context, provides=None, component=None, factory=None, permission=None, name=''): if factory and component: raise TypeError("Can't specify factory and component.") if provides is None: if factory: provides = list(implementedBy(factory)) else: provides = list(providedBy(component)) if len(provides) == 1: provides = provides[0] else: raise TypeError("Missing 'provides' attribute") if name == '': if factory: name = getName(factory) else: name = getName(component) if permission is not None: component = proxify(component, provides=provides, permission=permission) _context.action( discriminator = ('utility', provides, name), callable = handler, args = ('registerUtility', component, provides, name, _context.info), kw = dict(factory=factory), ) _context.action( discriminator = None, callable = provideInterface, args = ('', provides), )
def adapter(_context, factory, provides=None, for_=None, permission=None, name='', trusted=False, locate=False): if for_ is None: if len(factory) == 1: for_ = adaptedBy(factory[0]) if for_ is None: raise TypeError("No for attribute was provided and can't " "determine what the factory adapts.") for_ = tuple(for_) if provides is None: if len(factory) == 1: p = list(implementedBy(factory[0])) if len(p) == 1: provides = p[0] if provides is None: raise TypeError("Missing 'provides' attribute") if name == '': if len(factory) == 1: name = getName(factory[0]) # Generate a single factory from multiple factories: factories = factory if len(factories) == 1: factory = factories[0] elif len(factories) < 1: raise ComponentConfigurationError("No factory specified") elif len(factories) > 1 and len(for_) != 1: raise ComponentConfigurationError( "Can't use multiple factories and multiple for") else: factory = _rolledUpFactory(factories) if permission is not None: factory = protectedFactory(factory, provides, permission) # invoke custom adapter factories if locate or permission is not None or trusted: factory = securityAdapterFactory(factory, permission, locate, trusted) _context.action( discriminator=('adapter', for_, provides, name), callable=handler, args=('registerAdapter', factory, for_, provides, name, _context.info), ) _context.action(discriminator=None, callable=provideInterface, args=('', provides)) if for_: for iface in for_: if iface is not None: _context.action(discriminator=None, callable=provideInterface, args=('', iface))
def adapter(_context, factory, provides=None, for_=None, permission=None, name='', trusted=False, locate=False): if for_ is None: if len(factory) == 1: for_ = adaptedBy(factory[0]) if for_ is None: raise TypeError("No for attribute was provided and can't " "determine what the factory adapts.") for_ = tuple(for_) if provides is None: if len(factory) == 1: p = list(implementedBy(factory[0])) if len(p) == 1: provides = p[0] if provides is None: raise TypeError("Missing 'provides' attribute") if name == '': if len(factory) == 1: name = getName(factory[0]) # Generate a single factory from multiple factories: factories = factory if len(factories) == 1: factory = factories[0] elif len(factories) < 1: raise ComponentConfigurationError("No factory specified") elif len(factories) > 1 and len(for_) != 1: raise ComponentConfigurationError( "Can't use multiple factories and multiple for") else: factory = _rolledUpFactory(factories) if permission is not None: factory = protectedFactory(factory, provides, permission) # invoke custom adapter factories if locate or permission is not None or trusted: factory = securityAdapterFactory(factory, permission, locate, trusted) _context.action( discriminator = ('adapter', for_, provides, name), callable = handler, args = ('registerAdapter', factory, for_, provides, name, _context.info), ) _context.action( discriminator = None, callable = provideInterface, args = ('', provides) ) if for_: for iface in for_: if iface is not None: _context.action( discriminator = None, callable = provideInterface, args = ('', iface) )