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))
评论列表
文章目录