Beispiel #1
0
def subscriber(
    _context, for_=None, factory=None, handler=None, provides=None, permission=None, trusted=False, locate=False
):
    if factory is None:
        if handler is None:
            raise TypeError("No factory or handler provided")
        if provides is not None:
            raise TypeError("Cannot use handler with provides")
        factory = handler
    else:
        if handler is not None:
            raise TypeError("Cannot use handler with factory")
        if provides is None:
            raise TypeError("You must specify a provided interface when registering " "a factory")

    if for_ is None:
        for_ = adaptedBy(factory)
        if for_ is None:
            raise TypeError(
                "No for attribute was provided and can't " "determine what the factory (or handler) adapts."
            )

    if permission is not None:
        factory = protectedFactory(factory, provides, permission)

    for_ = tuple(for_)

    # invoke custom adapter factories
    if locate or permission is not None or trusted:
        factory = securityAdapterFactory(factory, permission, locate, trusted)

    if handler is not None:
        _context.action(
            discriminator=None, callable=_handler, args=("registerHandler", handler, for_, _BLANK, _context.info)
        )
    else:
        _context.action(
            discriminator=None,
            callable=_handler,
            args=("registerSubscriptionAdapter", factory, for_, provides, _BLANK, _context.info),
        )

    if provides is not None:
        _context.action(discriminator=None, callable=provideInterface, args=("", provides))

    # For each interface, state that the adapter provides that interface.
    for iface in for_:
        if iface is not None:
            _context.action(discriminator=None, callable=provideInterface, args=("", iface))
Beispiel #2
0
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")

    # 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))
Beispiel #3
0
def subscriber(_context,
               for_=None,
               factory=None,
               handler=None,
               provides=None,
               permission=None,
               trusted=False,
               locate=False):
    if factory is None:
        if handler is None:
            raise TypeError("No factory or handler provided")
        if provides is not None:
            raise TypeError("Cannot use handler with provides")
        factory = handler
    else:
        if handler is not None:
            raise TypeError("Cannot use handler with factory")
        if provides is None:
            raise TypeError(
                "You must specify a provided interface when registering "
                "a factory")

    if for_ is None:
        for_ = adaptedBy(factory)
        if for_ is None:
            raise TypeError("No for attribute was provided and can't "
                            "determine what the factory (or handler) adapts.")

    if permission is not None:
        factory = protectedFactory(factory, provides, permission)

    for_ = tuple(for_)

    # invoke custom adapter factories
    if locate or permission is not None or trusted:
        factory = securityAdapterFactory(factory, permission, locate, trusted)

    if handler is not None:
        _context.action(
            discriminator=None,
            callable=_handler,
            args=('registerHandler', handler, for_, u'', _context.info),
        )
    else:
        _context.action(
            discriminator=None,
            callable=_handler,
            args=('registerSubscriptionAdapter', factory, for_, provides, u'',
                  _context.info),
        )

    if provides is not None:
        _context.action(discriminator=None,
                        callable=provideInterface,
                        args=('', provides))

    # For each interface, state that the adapter provides that interface.
    for iface in for_:
        if iface is not None:
            _context.action(discriminator=None,
                            callable=provideInterface,
                            args=('', iface))
Beispiel #4
0
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))
Beispiel #5
0
 def _callFUT(self, *args, **kw):
     from zope.component.security import securityAdapterFactory
     return securityAdapterFactory(*args, **kw)
Beispiel #6
0
 def _callFUT(self, *args, **kw):
     from zope.component.security import securityAdapterFactory
     return securityAdapterFactory(*args, **kw)