Exemple #1
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
Exemple #2
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
Exemple #3
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
        self._utility_registrations_cache.unregisterUtility(
            provided, name, component)

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

        return True
Exemple #4
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
Exemple #5
0
    def unregisterSubscriptionAdapter(
        self,
        factory=None,
        required=None,
        provided=None,
        name=u'',
    ):
        if name:
            raise TypeError("Named subscribers are not yet supported")
        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)

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

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

        self._subscription_registrations[:] = new
        self.adapters.unsubscribe(required, provided, factory)

        notify(
            Unregistered(
                SubscriptionRegistration(self, required, provided, name,
                                         factory, '')))

        return True