[Checkins] SVN: zope.component/branches/chrism-zope.interface-componentregistry/src/zope/component/interfaces.py Move IComponentArchitecture back to zope.component
Chris McDonough
chrism at plope.com
Sun Sep 11 11:40:16 EST 2011
Log message for revision 122768:
Move IComponentArchitecture back to zope.component
Changed:
U zope.component/branches/chrism-zope.interface-componentregistry/src/zope/component/interfaces.py
-=-
Modified: zope.component/branches/chrism-zope.interface-componentregistry/src/zope/component/interfaces.py
===================================================================
--- zope.component/branches/chrism-zope.interface-componentregistry/src/zope/component/interfaces.py 2011-09-11 16:40:06 UTC (rev 122767)
+++ zope.component/branches/chrism-zope.interface-componentregistry/src/zope/component/interfaces.py 2011-09-11 16:40:16 UTC (rev 122768)
@@ -23,7 +23,6 @@
from zope.interface.interfaces import Misused
from zope.interface.interfaces import IObjectEvent
from zope.interface.interfaces import ObjectEvent
-from zope.interface.interfaces import IComponentArchitecture
from zope.interface.interfaces import IComponentLookup
from zope.interface.interfaces import IComponentRegistrationConvenience
from zope.interface.interfaces import IRegistry
@@ -43,6 +42,267 @@
from zope.interface.interfaces import IComponentRegistry
from zope.interface.interfaces import IComponents
+class IComponentArchitecture(Interface):
+ """The Component Architecture is defined by two key components: Adapters
+ and Utiltities. Both are managed by site managers. All other components
+ build on top of them.
+ """
+ # Site Manager API
+
+ def getGlobalSiteManager():
+ """Return the global site manager.
+
+ This function should never fail and always return an object that
+ provides `IGlobalSiteManager`.
+ """
+
+ def getSiteManager(context=None):
+ """Get the nearest site manager in the given context.
+
+ If `context` is `None`, return the global site manager.
+
+ If the `context` is not `None`, it is expected that an adapter
+ from the `context` to `IComponentLookup` can be found. If no
+ adapter is found, a `ComponentLookupError` is raised.
+
+ """
+
+ # Utility API
+
+ def getUtility(interface, name='', context=None):
+ """Get the utility that provides interface
+
+ Returns the nearest utility to the context that implements the
+ specified interface. If one is not found, raises
+ ComponentLookupError.
+ """
+
+ def queryUtility(interface, name='', default=None, context=None):
+ """Look for the utility that provides interface
+
+ Returns the nearest utility to the context that implements
+ the specified interface. If one is not found, returns default.
+ """
+
+ def queryNextUtility(context, interface, name='', default=None):
+ """Query for the next available utility.
+
+ Find the next available utility providing `interface` and having the
+ specified name. If no utility was found, return the specified `default`
+ value.
+ """
+
+ def getNextUtility(context, interface, name=''):
+ """Get the next available utility.
+
+ If no utility was found, a `ComponentLookupError` is raised.
+ """
+
+ def getUtilitiesFor(interface, context=None):
+ """Return the utilities that provide an interface
+
+ An iterable of utility name-value pairs is returned.
+ """
+
+ def getAllUtilitiesRegisteredFor(interface, context=None):
+ """Return all registered utilities for an interface
+
+ This includes overridden utilities.
+
+ An iterable of utility instances is returned. No names are
+ returned.
+ """
+
+ # Adapter API
+
+ def getAdapter(object,
+ interface=Interface, name=_u(''),
+ context=None):
+ """Get a named adapter to an interface for an object
+
+ Returns an adapter that can adapt object to interface. If a matching
+ adapter cannot be found, raises ComponentLookupError.
+
+ If context is None, an application-defined policy is used to choose
+ an appropriate service manager from which to get an 'Adapters' service.
+
+ If 'context' is not None, context is adapted to IServiceService,
+ and this adapter's 'Adapters' service is used.
+ """
+
+ def getAdapterInContext(object, interface, context):
+ """Get a special adapter to an interface for an object
+
+ NOTE: This method should only be used if a custom context
+ needs to be provided to provide custom component
+ lookup. Otherwise, call the interface, as in::
+
+ interface(object)
+
+ Returns an adapter that can adapt object to interface. If a matching
+ adapter cannot be found, raises ComponentLookupError.
+
+ Context is adapted to IServiceService, and this adapter's
+ 'Adapters' service is used.
+
+ If the object has a __conform__ method, this method will be
+ called with the requested interface. If the method returns a
+ non-None value, that value will be returned. Otherwise, if the
+ object already implements the interface, the object will be
+ returned.
+ """
+
+ def getMultiAdapter(objects,
+ interface=Interface, name='',
+ context=None):
+ """Look for a multi-adapter to an interface for an objects
+
+ Returns a multi-adapter that can adapt objects to interface. If a
+ matching adapter cannot be found, raises ComponentLookupError.
+
+ If context is None, an application-defined policy is used to choose
+ an appropriate service manager from which to get an 'Adapters' service.
+
+ If 'context' is not None, context is adapted to IServiceService,
+ and this adapter's 'Adapters' service is used.
+
+ The name consisting of an empty string is reserved for unnamed
+ adapters. The unnamed adapter methods will often call the
+ named adapter methods with an empty string for a name.
+ """
+
+ def queryAdapter(object, interface=Interface, name=_u(''),
+ default=None, context=None):
+ """Look for a named adapter to an interface for an object
+
+ Returns an adapter that can adapt object to interface. If a matching
+ adapter cannot be found, returns the default.
+
+ If context is None, an application-defined policy is used to choose
+ an appropriate service manager from which to get an 'Adapters' service.
+
+ If 'context' is not None, context is adapted to IServiceService,
+ and this adapter's 'Adapters' service is used.
+ """
+
+ def queryAdapterInContext(object, interface, context, default=None):
+ """Look for a special adapter to an interface for an object
+
+ NOTE: This method should only be used if a custom context
+ needs to be provided to provide custom component
+ lookup. Otherwise, call the interface, as in::
+
+ interface(object, default)
+
+ Returns an adapter that can adapt object to interface. If a matching
+ adapter cannot be found, returns the default.
+
+ Context is adapted to IServiceService, and this adapter's
+ 'Adapters' service is used.
+
+ If the object has a __conform__ method, this method will be
+ called with the requested interface. If the method returns a
+ non-None value, that value will be returned. Otherwise, if the
+ object already implements the interface, the object will be
+ returned.
+ """
+
+ def queryMultiAdapter(objects,
+ interface=Interface, name=_u(''),
+ default=None,
+ context=None):
+ """Look for a multi-adapter to an interface for objects
+
+ Returns a multi-adapter that can adapt objects to interface. If a
+ matching adapter cannot be found, returns the default.
+
+ If context is None, an application-defined policy is used to choose
+ an appropriate service manager from which to get an 'Adapters' service.
+
+ If 'context' is not None, context is adapted to IServiceService,
+ and this adapter's 'Adapters' service is used.
+
+ The name consisting of an empty string is reserved for unnamed
+ adapters. The unnamed adapter methods will often call the
+ named adapter methods with an empty string for a name.
+ """
+
+ def getAdapters(objects, provided, context=None):
+ """Look for all matching adapters to a provided interface for objects
+
+ Return a list of adapters that match. If an adapter is named, only the
+ most specific adapter of a given name is returned.
+
+ If context is None, an application-defined policy is used to choose
+ an appropriate service manager from which to get an 'Adapters'
+ service.
+
+ If 'context' is not None, context is adapted to IServiceService,
+ and this adapter's 'Adapters' service is used.
+ """
+
+ def subscribers(required, provided, context=None):
+ """Get subscribers
+
+ Subscribers are returned that provide the provided interface
+ and that depend on and are computed from the sequence of
+ required objects.
+
+ If context is None, an application-defined policy is used to choose
+ an appropriate service manager from which to get an 'Adapters'
+ service.
+
+ If 'context' is not None, context is adapted to IServiceService,
+ and this adapter's 'Adapters' service is used.
+ """
+
+ def handle(*objects):
+ """Call all of the handlers for the given objects
+
+ Handlers are subscription adapter factories that don't produce
+ anything. They do all of their work when called. Handlers
+ are typically used to handle events.
+
+ """
+
+
+ def adapts(*interfaces):
+ """Declare that a class adapts the given interfaces.
+
+ This function can only be used in a class definition.
+
+ (TODO, allow classes to be passed as well as interfaces.)
+ """
+
+ # Factory service
+
+ def createObject(factory_name, *args, **kwargs):
+ """Create an object using a factory
+
+ Finds the named factory in the current site and calls it with
+ the given arguments. If a matching factory cannot be found
+ raises ComponentLookupError. Returns the created object.
+
+ A context keyword argument can be provided to cause the
+ factory to be looked up in a location other than the current
+ site. (Of course, this means that it is impossible to pass a
+ keyword argument named "context" to the factory.
+ """
+
+ def getFactoryInterfaces(name, context=None):
+ """Get interfaces implemented by a factory
+
+ Finds the factory of the given name that is nearest to the
+ context, and returns the interface or interface tuple that
+ object instances created by the named factory will implement.
+ """
+
+ def getFactoriesFor(interface, context=None):
+ """Return a tuple (name, factory) of registered factories that
+ create objects which implement the given interface.
+ """
+
+
class IPossibleSite(Interface):
"""An object that could be a site.
"""
More information about the checkins
mailing list