def getAdapterFactory(fromInterface, toInterface, default): """Return registered adapter for a given class and interface. Note that is tied to the *Twisted* global registry, and will thus not find adapters registered elsewhere. """ self = globalRegistry if not isinstance(fromInterface, interface.InterfaceClass): fromInterface = declarations.implementedBy(fromInterface) factory = self.lookup1(fromInterface, toInterface) if factory is None: factory = default return factory
def registerAdapter(adapterFactory, origInterface, *interfaceClasses): """Register an adapter class. An adapter class is expected to implement the given interface, by adapting instances implementing 'origInterface'. An adapter class's __init__ method should accept one parameter, an instance implementing 'origInterface'. """ self = globalRegistry assert interfaceClasses, "You need to pass an Interface" global ALLOW_DUPLICATES # deal with class->interface adapters: if not isinstance(origInterface, interface.InterfaceClass): origInterface = declarations.implementedBy(origInterface) for interfaceClass in interfaceClasses: factory = _registered(self, origInterface, interfaceClass) if factory is not None and not ALLOW_DUPLICATES: raise ValueError("an adapter (%s) was already registered." % (factory, )) for interfaceClass in interfaceClasses: self.register([origInterface], interfaceClass, '', adapterFactory)
def implementedBy(self, cls): """Test whether the specification is implemented by a class or factory. Raise TypeError if argument is neither a class nor a callable.""" spec = implementedBy(cls) return self in spec._implied