Exemplo n.º 1
0
    def registerUtility(self, component=None, provided=None, name=_u(''), 
                        info=_u(''), event=True, factory=None):
        if factory:
            if component:
                raise TypeError("Can't specify factory and component.")
            component = factory()

        if provided is None:
            provided = _getUtilityProvided(component)

        reg = self._utility_registrations.get((provided, name))
        if reg is not None:
            if reg[:2] == (component, info):
                # already registered
                return
            self.unregisterUtility(reg[0], provided, name)

        subscribed = False
        for ((p, _), data) in iter(self._utility_registrations.items()):
            if p == provided and data[0] == component:
                subscribed = True
                break

        self._utility_registrations[(provided, name)] = component, info, factory
        self.utilities.register((), provided, name, component)

        if not subscribed:
            self.utilities.subscribe((), provided, component)

        if event:
            notify(Registered(
                UtilityRegistration(self, provided, name, component, info,
                                    factory)
                ))
Exemplo n.º 2
0
    def registerAdapter(self, factory, required=None, provided=None, 
                        name=_u(''), info=_u(''), event=True):
        if provided is None:
            provided = _getAdapterProvided(factory)
        required = _getAdapterRequired(factory, required)
        self._adapter_registrations[(required, provided, name)
                                    ] = factory, info
        self.adapters.register(required, provided, name, factory)

        if event:
            notify(Registered(
                AdapterRegistration(self, required, provided, name,
                                    factory, info)
                ))
Exemplo n.º 3
0
    def registerHandler(self,
                        factory,
                        required=None,
                        name=_u(''),
                        info=_u(''),
                        event=True):
        if name:
            raise TypeError("Named handlers are not yet supported")
        required = _getAdapterRequired(factory, required)
        self._handler_registrations.append((required, name, factory, info))
        self.adapters.subscribe(required, None, factory)

        if event:
            notify(
                Registered(
                    HandlerRegistration(self, required, name, factory, info)))
Exemplo n.º 4
0
    def registerAdapter(self, factory, required=None, provided=None,
                        name=_u(''), info=_u(''), event=True):
        if provided is None:
            provided = _getAdapterProvided(factory)
        required = _getAdapterRequired(factory, required)
        if name == _u(''):
            name = _getName(factory)
        self._adapter_registrations[(required, provided, name)
                                    ] = factory, info
        self.adapters.register(required, provided, name, factory)

        if event:
            notify(Registered(
                AdapterRegistration(self, required, provided, name,
                                    factory, info)
                ))
Exemplo n.º 5
0
    def unregisterAdapter(self, factory=None,
                          required=None, provided=None, name=_u(''),
                          ):
        if provided is None:
            if factory is None:
                raise TypeError("Must specify one of factory and provided")
            provided = _getAdapterProvided(factory)

        if (required is None) and (factory is None):
            raise TypeError("Must specify one of factory and required")

        required = _getAdapterRequired(factory, required)
        old = self._adapter_registrations.get((required, provided, name))
        if (old is None) or ((factory is not None) and
                             (factory != old[0])):
            return False

        del self._adapter_registrations[(required, provided, name)]
        self.adapters.unregister(required, provided, name)

        notify(Unregistered(
            AdapterRegistration(self, required, provided, name,
                                *old)
            ))

        return True
Exemplo n.º 6
0
    def registerHandler(self,
                        factory, required=None,
                        name=_u(''), info=_u(''),
                        event=True):
        if name:
            raise TypeError("Named handlers are not yet supported")
        required = _getAdapterRequired(factory, required)
        self._handler_registrations.append(
            (required, name, factory, info)
            )
        self.adapters.subscribe(required, None, factory)

        if event:
            notify(Registered(
                HandlerRegistration(self, required, name, factory, info)
                ))
Exemplo n.º 7
0
    def unregisterHandler(self, factory=None, required=None, name=_u('')):
        if name:
            raise TypeError("Named subscribers are not yet supported")

        if (required is None) and (factory is None):
            raise TypeError("Must specify one of factory and required")

        required = _getAdapterRequired(factory, required)

        if factory is None:
            new = [(r, n, f, i)
                   for (r, n, f, i)
                   in self._handler_registrations
                   if r != required
                   ]
        else:
            new = [(r, n, f, i)
                   for (r, n, f, i)
                   in self._handler_registrations
                   if not (r == required and f == factory)
                   ]

        if len(new) == len(self._handler_registrations):
            return False

        self._handler_registrations[:] = new
        self.adapters.unsubscribe(required, None, factory)

        notify(Unregistered(
            HandlerRegistration(self, required, name, factory, '')
            ))

        return True
Exemplo n.º 8
0
    def unregisterAdapter(
            self,
            factory=None,
            required=None,
            provided=None,
            name=_u(''),
    ):
        if provided is None:
            if factory is None:
                raise TypeError("Must specify one of factory and provided")
            provided = _getAdapterProvided(factory)

        if (required is None) and (factory is None):
            raise TypeError("Must specify one of factory and required")

        required = _getAdapterRequired(factory, required)
        old = self._adapter_registrations.get((required, provided, name))
        if (old is None) or ((factory is not None) and (factory != old[0])):
            return False

        del self._adapter_registrations[(required, provided, name)]
        self.adapters.unregister(required, provided, name)

        notify(
            Unregistered(
                AdapterRegistration(self, required, provided, name, *old)))

        return True
Exemplo n.º 9
0
    def unregisterHandler(self, factory=None, required=None, name=_u('')):
        if name:
            raise TypeError("Named subscribers are not yet supported")

        if (required is None) and (factory is None):
            raise TypeError("Must specify one of factory and required")

        required = _getAdapterRequired(factory, required)

        if factory is None:
            new = [(r, n, f, i) for (r, n, f, i) in self._handler_registrations
                   if r != required]
        else:
            new = [(r, n, f, i) for (r, n, f, i) in self._handler_registrations
                   if not (r == required and f == factory)]

        if len(new) == len(self._handler_registrations):
            return False

        self._handler_registrations[:] = new
        self.adapters.unsubscribe(required, None, factory)

        notify(
            Unregistered(HandlerRegistration(self, required, name, factory,
                                             '')))

        return True
Exemplo n.º 10
0
    def registerUtility(self,
                        component=None,
                        provided=None,
                        name=_u(''),
                        info=_u(''),
                        event=True,
                        factory=None):
        if factory:
            if component:
                raise TypeError("Can't specify factory and component.")
            component = factory()

        if provided is None:
            provided = _getUtilityProvided(component)

        if name == _u(''):
            name = _getName(component)

        reg = self._utility_registrations.get((provided, name))
        if reg is not None:
            if reg[:2] == (component, info):
                # already registered
                return
            self.unregisterUtility(reg[0], provided, name)

        subscribed = False
        for ((p, _), data) in iter(self._utility_registrations.items()):
            if p == provided and data[0] == component:
                subscribed = True
                break

        self._utility_registrations[(provided,
                                     name)] = component, info, factory
        self.utilities.register((), provided, name, component)

        if not subscribed:
            self.utilities.subscribe((), provided, component)

        if event:
            notify(
                Registered(
                    UtilityRegistration(self, provided, name, component, info,
                                        factory)))
Exemplo n.º 11
0
    def registerSubscriptionAdapter(self,
                                    factory, required=None, provided=None,
                                    name=_u(''), info=_u(''),
                                    event=True):
        if name:
            raise TypeError("Named subscribers are not yet supported")
        if provided is None:
            provided = _getAdapterProvided(factory)
        required = _getAdapterRequired(factory, required)
        self._subscription_registrations.append(
            (required, provided, name, factory, info)
            )
        self.adapters.subscribe(required, provided, factory)

        if event:
            notify(Registered(
                SubscriptionRegistration(self, required, provided, name,
                                         factory, info)
                ))
Exemplo n.º 12
0
    def registerSubscriptionAdapter(self,
                                    factory, required=None, provided=None,
                                    name=_u(''), info=_u(''),
                                    event=True):
        if name:
            raise TypeError("Named subscribers are not yet supported")
        if provided is None:
            provided = _getAdapterProvided(factory)
        required = _getAdapterRequired(factory, required)
        self._subscription_registrations.append(
            (required, provided, name, factory, info)
            )
        self.adapters.subscribe(required, provided, factory)

        if event:
            notify(Registered(
                SubscriptionRegistration(self, required, provided, name,
                                         factory, info)
                ))
Exemplo n.º 13
0
    def unregisterUtility(self,
                          component=None,
                          provided=None,
                          name=_u(''),
                          factory=None):
        if factory:
            if component:
                raise TypeError("Can't specify factory and component.")
            component = factory()

        if provided is None:
            if component is None:
                raise TypeError("Must specify one of component, factory and "
                                "provided")
            provided = _getUtilityProvided(component)

        old = self._utility_registrations.get((provided, name))
        if (old is None) or ((component is not None) and
                             (component != old[0])):
            return False

        if component is None:
            component = old[0]

        # Note that component is now the old thing registered

        del self._utility_registrations[(provided, name)]
        self.utilities.unregister((), provided, name)

        subscribed = False
        for ((p, _), data) in iter(self._utility_registrations.items()):
            if p == provided and data[0] == component:
                subscribed = True
                break

        if not subscribed:
            self.utilities.unsubscribe((), provided, component)

        notify(
            Unregistered(
                UtilityRegistration(self, provided, name, component,
                                    *old[1:])))

        return True
Exemplo n.º 14
0
    def unregisterUtility(self, component=None, provided=None, name=_u(''),
                          factory=None):
        if factory:
            if component:
                raise TypeError("Can't specify factory and component.")
            component = factory()

        if provided is None:
            if component is None:
                raise TypeError("Must specify one of component, factory and "
                                "provided")
            provided = _getUtilityProvided(component)

        old = self._utility_registrations.get((provided, name))
        if (old is None) or ((component is not None) and
                             (component != old[0])):
            return False

        if component is None:
            component = old[0]

        # Note that component is now the old thing registered

        del self._utility_registrations[(provided, name)]
        self.utilities.unregister((), provided, name)

        subscribed = False
        for ((p, _), data) in iter(self._utility_registrations.items()):
            if p == provided and data[0] == component:
                subscribed = True
                break

        if not subscribed:
            self.utilities.unsubscribe((), provided, component)

        notify(Unregistered(
            UtilityRegistration(self, provided, name, component, *old[1:])
            ))

        return True
Exemplo n.º 15
0
def _getName(component):
    try:
        return component.__component_name__
    except AttributeError:
        return _u('')
Exemplo n.º 16
0
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Interface Package Interfaces
"""
__docformat__ = 'restructuredtext'

from zope.interface.interface import Attribute
from zope.interface.interface import Interface
from zope.interface.declarations import implementer
from zope.interface._compat import _u

_BLANK = _u('')

class IElement(Interface):
    """Objects that have basic documentation and tagged values.
    """

    __name__ = Attribute('__name__', 'The object name')
    __doc__  = Attribute('__doc__', 'The object doc string')

    def getTaggedValue(tag):
        """Returns the value associated with `tag`.

        Raise a `KeyError` of the tag isn't set.
        """

    def queryTaggedValue(tag, default=None):
Exemplo n.º 17
0
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Adapter management
"""
import weakref

from zope.interface import providedBy
from zope.interface import Interface
from zope.interface import ro
from zope.interface._compat import _u
from zope.interface._compat import _normalize_name

_BLANK = _u('')


class BaseAdapterRegistry(object):

    # List of methods copied from lookup sub-objects:
    _delegated = ('lookup', 'queryMultiAdapter', 'lookup1', 'queryAdapter',
                  'adapter_hook', 'lookupAll', 'names', 'subscriptions',
                  'subscribers')

    # All registries maintain a generation that can be used by verifying
    # registries
    _generation = 0

    def __init__(self, bases=()):
Exemplo n.º 18
0
 def getMultiAdapter(self, objects, interface, name=_u('')):
     adapter = self.adapters.queryMultiAdapter(objects, interface, name)
     if adapter is None:
         raise ComponentLookupError(objects, interface, name)
     return adapter
Exemplo n.º 19
0
 def queryMultiAdapter(self, objects, interface, name=_u(''), 
                       default=None):
     return self.adapters.queryMultiAdapter(
         objects, interface, name, default)
Exemplo n.º 20
0
 def getUtility(self, provided, name=_u('')):
     utility = self.utilities.lookup((), provided, name)
     if utility is None:
         raise ComponentLookupError(provided, name)
     return utility
Exemplo n.º 21
0
 def queryUtility(self, provided, name=_u(''), default=None):
     return self.utilities.lookup((), provided, name, default)
Exemplo n.º 22
0
 def test__normalize_name_unicode(self):
     from zope.interface.adapter import _normalize_name
     from zope.interface._compat import _u
     USTR = _u('ustr')
     self.assertEqual(_normalize_name(USTR), USTR)
Exemplo n.º 23
0
 def queryUtility(self, provided, name=_u(''), default=None):
     return self.utilities.lookup((), provided, name, default)
Exemplo n.º 24
0
 def getMultiAdapter(self, objects, interface, name=_u('')):
     adapter = self.adapters.queryMultiAdapter(objects, interface, name)
     if adapter is None:
         raise ComponentLookupError(objects, interface, name)
     return adapter
Exemplo n.º 25
0
 def queryMultiAdapter(self, objects, interface, name=_u(''), default=None):
     return self.adapters.queryMultiAdapter(objects, interface, name,
                                            default)
Exemplo n.º 26
0
 def getUtility(self, provided, name=_u('')):
     utility = self.utilities.lookup((), provided, name)
     if utility is None:
         raise ComponentLookupError(provided, name)
     return utility