The protocols.adapters module provides support for doing ``adapter arithmetic'' such as determining which of two adapter paths is shorter, composing a new adapter from two existing adapters, and updating an adapter registry with a new adapter path. See section 1.1.7 for a more general discussion of adapter arithmetic.
a1 is a2
), either
one is returned
If none of the above conditions apply, then the adapter precedence is considered ambiguous, and a TypeError is raised.
This function is used by updateWithSimplestAdapter to determine whether a new adapter declaration should result in a registry update. Note that the determination of adapter composition length uses the __adapterCount__ attribute, if present. (It is assumed to be 1 if not present. See composeAdapters() for more details.)
extendingAdapter(baseAdapter(object))
when called with object
. (Note: the actual
implementation verifies that baseAdapter didn't return None
before it calls extendingAdapter).
If this function creates a new adapter factory, the factory will have an __adapterCount__ attribute set to the sum of the __adapterCount__ attributes of the input adapter factories. If an input factory does not have an __adapterCount__ attribute, it is assumed to equal 1. This is done so that the minimumAdapter() can compare the length of composed adapter chains.
(adapter,depth)
tuple, if and only if
the new entry would be a ``shorter path'' than the existing entry, if any.
(I.e., if minimumAdapter(old, adapter, oldDepth, depth)
returns adapter, and adapter is not the existing registered
adapter. The function returns a true value if it updates the contents of
mapping.
This function is used to manage type-to-protocol, protocol-to-protocol, and
object-to-protocol adapter registries, keyed by type or protocol. The
mapping argument must be a mapping providing __setitem__()
and get() methods. Values stored in the mapping will be
(adapter,depth)
tuples.