Exemple #1
0
def adapter(_context, factory, provides=None, for_=None, name=''):

    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)

    _context.action(
        discriminator=('adapter', for_, provides, name),
        callable=handler,
        args=('registerAdapter', factory, for_, provides, name))
    _context.action(
        discriminator=None,
        callable=provide_interface,
        args=('', provides))
    if for_:
        for iface in for_:
            if iface is not None:
                _context.action(
                    discriminator=None,
                    callable=provide_interface,
                    args=('', iface))
Exemple #2
0
def adapter(_context, factory, provides=None, for_=None, name=''):

    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)

    _context.action(discriminator=('adapter', for_, provides, name),
                    callable=handler,
                    args=('registerAdapter', factory, for_, provides, name))
    _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))
Exemple #3
0
def subscriber(_context, for_=None, factory=None, handler=None, provides=None):
    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.")

    for_ = tuple(for_)

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

    if provides is not None:
        _context.action(
            discriminator=None,
            callable=provide_interface,
            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=provide_interface,
                args=('', iface))
Exemple #4
0
def subscriber(_context, for_=None, factory=None, handler=None, provides=None):
    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.")

    for_ = tuple(for_)

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

    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))
 def _callFUT(self, obj):
     from guillotina.component._declaration import adaptedBy
     return adaptedBy(obj)
 def _callFUT(self, obj):
     from guillotina.component._declaration import adaptedBy
     return adaptedBy(obj)