ó
    Ï›‘h?“  ã                   óˆ  • S r SSKrSSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SSKJ
r
  SS	KJr  S
S/r " S S5      r\" 5       r\
 " S S5      5       r\
 " S S\5      5       r " S S5      r " S S\\5      r\" \5       " S S
\5      5       r " S S\\5      r\" \5       " S S\5      5       rS rS rS rS rg)zAdapter management
é    N©Ú	Interface)Úimplementer)Ú
providedBy)Úro)Ú_normalize_name)Ú_use_c_impl)ÚIAdapterRegistryÚAdapterRegistryÚVerifyingAdapterRegistryc                   óÖ   • \ rS rSrSrSrSrSS jrS r\	" S S 5      r
S	 r\r\r\r\rS
 rS rS rS rS rSS jr\SS j5       rS rS rSS jrS rS rS r SS jr!S r"S r#Sr$g)ÚBaseAdapterRegistryé@   a  
A basic implementation of the data storage and algorithms required
for a :class:`zope.interface.interfaces.IAdapterRegistry`.

Subclasses can set the following attributes to control how the data
is stored; in particular, these hooks can be helpful for ZODB
persistence. They can be class attributes that are the named
(or similar) type, or they can be methods that act as a constructor
for an object that behaves like the types defined here; this object
will not assume that they are type objects, but subclasses are free
to do so:

_sequenceType = list
  This is the type used for our two mutable top-level "byorder" sequences.
  Must support mutation operations like ``append()`` and ``del
  seq[index]``.  These are usually small (< 10). Although at least one of
  them is accessed when performing lookups or queries on this object, the
  other is untouched. In many common scenarios, both are only required
  when mutating registrations and subscriptions (like what
  :meth:`zope.interface.interfaces.IComponents.registerUtility` does).
  This use pattern makes it an ideal candidate to be a
  :class:`~persistent.list.PersistentList`.

_leafSequenceType = tuple
  This is the type used for the leaf sequences of subscribers.
  It could be set to a ``PersistentList`` to avoid many unnecessary data
  loads when subscribers aren't being used. Mutation operations are
  directed through :meth:`_addValueToLeaf` and
  :meth:`_removeValueFromLeaf`; if you use a mutable type, you'll need to
  override those.

_mappingType = dict
  This is the mutable mapping type used for the keyed mappings.  A
  :class:`~persistent.mapping.PersistentMapping` could be used to help
  reduce the number of data loads when the registry is large and parts of
  it are rarely used. Further reductions in data loads can come from using
  a :class:`~BTrees.OOBTree.OOBTree`, but care is required to be sure that
  all required/provided values are fully ordered (e.g., no required or
  provided values that are classes can be used).

_providedType = dict
  This is the mutable mapping type used for the ``_provided`` mapping.
  This is separate from the generic mapping type because the values
  are always integers, so one might choose to use a more optimized data
  structure such as a :class:`~BTrees.OIBTree.OIBTree`.
  The same caveats regarding key types
  apply as for ``_mappingType``.

It is possible to also set these on an instance, but because of the need
to potentially also override :meth:`_addValueToLeaf` and
:meth:`_removeValueFromLeaf`, this may be less useful in a persistent
scenario; using a subclass is recommended.

.. versionchanged:: 5.3.0
    Add support for customizing the way internal data
    structures are created.
.. versionchanged:: 5.3.0
    Add methods :meth:`rebuild`, :meth:`allRegistrations`
    and :meth:`allSubscriptions`.
)	ÚlookupÚqueryMultiAdapterÚlookup1ÚqueryAdapterÚadapter_hookÚ	lookupAllÚnamesÚsubscriptionsÚsubscribersr   c                 ó®   • U R                  5       U l        U R                  5       U l        U R                  5       U l        U R                  5         Xl        g ©N)Ú_sequenceTypeÚ	_adaptersÚ_subscribersÚ_providedTypeÚ	_providedÚ_createLookupÚ	__bases__©ÚselfÚbasess     ÚZC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\zope/interface/adapter.pyÚ__init__ÚBaseAdapterRegistry.__init__‡   sN   € ð ×+Ñ+Ó-ˆŒð !×.Ñ.Ó0ˆÔð ×+Ñ+Ó-ˆŒð  	×ÑÔð �ó    c                 óx   • XR                   S'   [        R                  " U 5      U l        U R                  U 5        g)z�
If subclasses need to track when ``__bases__`` changes, they
can override this method.

Subclasses must still call this method.
r!   N)Ú__dict__r   Úchangedr"   s     r%   Ú	_setBasesÚBaseAdapterRegistry._setBases¶   s+   € ð &+�‰�kÑ"Ü—%’%˜“+ˆŒØ�‰�TÕr(   c                 ó    • U R                   S   $ )Nr!   )r*   ©r#   s    r%   Ú<lambda>ÚBaseAdapterRegistry.<lambda>Á   s   €  d§m¡m°KÒ&@r(   c                 ó$   • U R                  U5      $ r   )r,   r"   s     r%   r0   r1   Â   s   € ¨T¯^©^¸EÔ-Br(   c                 óœ   • U R                  U 5      U l        U R                   H&  n[        U R                  U5      U R                  U'   M(     g r   )ÚLookupClassÚ	_v_lookupÚ
_delegatedÚgetattrr*   )r#   Únames     r%   r    Ú!BaseAdapterRegistry._createLookupÅ   s;   € Ø×)Ñ)¨$Ó/ˆŒØ—O”OˆDÜ")¨$¯.©.¸$Ó"?ˆD�M‰M˜$Óò $r(   c                 ó   • Uc  U4$ X4-   $ )a©  
Add the value *new_item* to the *existing_leaf_sequence*, which may
be ``None``.

Subclasses that redefine `_leafSequenceType` should override this
method.

:param existing_leaf_sequence:
    If *existing_leaf_sequence* is not *None*, it will be an instance
    of `_leafSequenceType`. (Unless the object has been unpickled from
    an old pickle and the class definition has changed, in which case
    it may be an instance of a previous definition, commonly a
    `tuple`.)

:return:
   This method returns the new value to be stored. It may mutate the
   sequence in place if it was not ``None`` and the type is mutable,
   but it must also return it.

.. versionadded:: 5.3.0
© )r#   Úexisting_leaf_sequenceÚnew_items      r%   Ú_addValueToLeafÚ#BaseAdapterRegistry._addValueToLeafÔ   s   € ð, "Ñ)Ø�;ÐØ%¨Ñ3Ð3r(   c                 óR   • [        U Vs/ s H  o3U:w  d  M
  UPM     sn5      $ s  snf )aÁ  
Remove the item *to_remove* from the (non-``None``, non-empty)
*existing_leaf_sequence* and return the mutated sequence.

If there is more than one item that is equal to *to_remove*
they must all be removed.

Subclasses that redefine `_leafSequenceType` should override
this method. Note that they can call this method to help
in their implementation; this implementation will always
return a new tuple constructed by iterating across
the *existing_leaf_sequence* and omitting items equal to *to_remove*.

:param existing_leaf_sequence:
   As for `_addValueToLeaf`, probably an instance of
   `_leafSequenceType` but possibly an older type; never `None`.
:return:
   A version of *existing_leaf_sequence* with all items equal to
   *to_remove* removed. Must not return `None`. However,
   returning an empty
   object, even of another type such as the empty tuple, ``()`` is
   explicitly allowed; such an object will never be stored.

.. versionadded:: 5.3.0
)Útuple)r#   r<   Ú	to_removeÚvs       r%   Ú_removeValueFromLeafÚ(BaseAdapterRegistry._removeValueFromLeafî   s(   € ô4 Ñ!7ÓJÒ!7˜AÀ	¹>—aÑ!7ÑJÓKÐKùÒJs   Š	$—$c                 ód   • U =R                   S-  sl         U R                  R                  U5        g ©Né   )Ú_generationr5   r+   )r#   Úoriginally_changeds     r%   r+   ÚBaseAdapterRegistry.changed
  s&   € Ø×Ò˜AÑÕØ�‰×ÑÐ1Õ2r(   c                 óî  • [        U[        5      (       d  [        S5      eUc  U R                  XX45        g [	        U Vs/ s H  n[        U5      PM     sn5      n[        U5      n[        U5      nU R                  n[        U5      U::  a0  UR                  U R                  5       5        [        U5      U::  a  M0  Xv   nX4-   n	U	 H-  n
UR                  U
5      nUc  U R                  5       nX¸U
'   UnM/     UR                  U5      UL a  g XHU'   U R                  R                  US5      S-   nXÀR                  U'   US:X  a  U R                  R                  U5        U R                  U 5        g s  snf )Núname is not a stringr   rH   )Ú
isinstanceÚstrÚ
ValueErrorÚ
unregisterrA   Ú_convert_None_to_Interfacer   Úlenr   ÚappendÚ_mappingTypeÚgetr   r5   Úadd_extendorr+   )r#   ÚrequiredÚprovidedr8   ÚvalueÚrÚorderÚbyorderÚ
componentsÚkeyÚkÚdÚns                r%   ÚregisterÚBaseAdapterRegistry.register  sS  € Ü˜$¤×$Ñ$ÜÐ3Ó4Ð4Ø‰=Ø�O‰O˜H°Ô<ØäÁÓJÂ¸AÔ4°QÖ7ÁÑJÓKˆÜ˜tÓ$ˆÜ�H“ˆØ—.‘.ˆÜ�'‹l˜eÓ#Ø�N‰N˜4×,Ñ,Ó.Ô/ô �'‹l˜eÕ#à‘^ˆ
Ø˜Ñ$ˆãˆAØ—‘˜qÓ!ˆAØ‰yØ×%Ñ%Ó'�Ø !˜1‘ØŠJñ ð �>‰>˜$Ó 5Ò(Øà �4Ñà�N‰N×Ñ˜x¨Ó+¨aÑ/ˆØ#$�‰�xÑ Ø�‹6Ø�N‰N×'Ñ'¨Ô1à�‰�TÕùò5 Ks   Á E2c                 ó  • [        U Vs/ s H  n[        U5      PM     sn5      n[        U5      n[        U5      U::  a  g X   nX#4-   nU H  n	UR                  U	5      n
U
c    g U
nM     UR                  U5      $ s  snf r   )rA   rR   rS   rV   )r#   r]   rX   rY   r8   r[   r\   r^   r_   r`   ra   s              r%   Ú
_find_leafÚBaseAdapterRegistry._find_leaf1  sˆ   € ô ÁÓJÂ¸AÔ4°QÖ7ÁÑJÓKˆÜ�H“ˆÜˆw‹<˜5Ó Øà‘^ˆ
Ø˜Ñ$ˆãˆAØ—‘˜qÓ!ˆAØ‰yÙØŠJñ	 ð �~‰~˜dÓ#Ð#ùò Ks   ŠA<c                 óP   • U R                  U R                  UU[        U5      5      $ r   )rf   r   r   )r#   rX   rY   r8   s       r%   Ú
registeredÚBaseAdapterRegistry.registeredG  s(   € Ø�‰Ø�N‰NØØÜ˜DÓ!ó	
ð 	
r(   c              #   óØ   #   • US:X  a#  UR                  5        H  u  pEX44-   U4v •  M     g UR                  5        H'  u  pEX44-   nU R                  XRS-
  U5       S h  v•N   M)     g  N	7f)Nr   rH   )ÚitemsÚ_allKeys)Úclsr^   ÚiÚparent_kr`   rC   Únew_parent_ks          r%   rm   ÚBaseAdapterRegistry._allKeysO  sk   é € à�‹6Ø"×(Ñ(Ö*‘�Ø ‘o qÐ(Ô(ò +ð #×(Ñ(Ö*‘�Ø'¨$™�ØŸ<™<¨¨q©5°,Ó?×?Ò?ò +á?ùs   ‚AA*ÁA(Á
A*c              #   óÀ   #   • [        U5       HK  u  p#U R                  X2S-   5       H.  u  pE[        U5      US-   :X  d   eUS U nUS   nUS   nXgX…4v •  M0     MM     g 7f)NrH   é   éþÿÿÿéÿÿÿÿ)Ú	enumeraterm   rS   )	r#   r]   ro   r^   r_   rZ   rX   rY   r8   s	            r%   Ú_all_entriesÚ BaseAdapterRegistry._all_entriesY  sq   é € ô ' wÖ/‰MˆAð #Ÿm™m¨J¸A¹Ö>‘
�Ü˜3“x 1 q¡5Ó(Ð(Ð(Ø˜r ˜7�Ø˜r™7�Ø˜2‘w�Ø¨4Ð7Ô7ó ?ò 0ùs   ‚AAc              #   óV   #   • U R                  U R                  5       Sh  v•N   g N7f)a  
Yields tuples ``(required, provided, name, value)`` for all
the registrations that this object holds.

These tuples could be passed as the arguments to the
:meth:`register` method on another adapter registry to
duplicate the registrations this object holds.

.. versionadded:: 5.3.0
N)rx   r   r/   s    r%   ÚallRegistrationsÚ$BaseAdapterRegistry.allRegistrationsk  s   é € ð ×$Ñ$ T§^¡^Ó4×4Ó4ùs   ‚)¡'¢)Nc                 óÂ  • [        U Vs/ s H  n[        U5      PM     sn5      n[        U5      nU R                  nU[        U5      :¼  a  gXv   nX4-   n	/ n
U	 H-  nUR	                  U5      nUc    g U
R                  X‹45        UnM/     UR	                  U5      nUc  g Ub  XÔLa  g Xƒ	 U(       dJ  [        U
5       H  u  pëXë   nU(       a    OXë	 M     U(       a   US   (       d  US	 U(       a  US   (       d  M  U R                  U   S-
  nUS:X  a)  U R                  U	 U R                  R                  U5        OXðR                  U'   U R                  U 5        g s  snf )NFrv   rH   r   )rA   rR   rS   r   rV   rT   Úreversedr   r5   Úremove_extendorr+   )r#   rX   rY   r8   rZ   r[   r\   r]   r^   r_   Úlookupsr`   ra   ÚoldÚcomprb   s                   r%   rQ   ÚBaseAdapterRegistry.unregisterx  sW  € ÜÁÓJÂ¸AÔ4°QÖ7ÁÑJÓKˆÜ�H“ˆØ—.‘.ˆØ”C˜“LÓ ØØ‘^ˆ
Ø˜Ñ$ˆð ˆÛˆAØ—‘˜qÓ!ˆAØ‰yÙØ�N‰N˜J˜?Ô+ØŠJñ ð �n‰n˜TÓ"ˆØ‰;ØØÑ CÒ$4ØàÐÞô $ GÖ,‘�Ø‘G�ÞÙàšñ -ö  '¨"§+Ø˜B�Kö  '¨"§+¡+à�N‰N˜8Ñ$ qÑ(ˆØ�‹6Ø—‘˜xÐ(Ø�N‰N×*Ñ*¨8Õ4à'(�N‰N˜8Ñ$à�‰�TÕùò[ Ks   ŠEc                 óŠ  • [        U Vs/ s H  n[        U5      PM     sn5      nSn[        U5      nU R                  n[        U5      U::  a0  UR	                  U R                  5       5        [        U5      U::  a  M0  Xv   nX4-   n	U	 H-  n
UR                  U
5      nUc  U R                  5       nX¸U
'   UnM/     U R                  UR                  U5      U5      X…'   UbN  U R                  R                  US5      S-   nXÀR                  U'   US:X  a  U R                  R                  U5        U R                  U 5        g s  snf )NÚ r   rH   )rA   rR   rS   r   rT   rU   rV   r>   r   r5   rW   r+   )r#   rX   rY   rZ   r[   r8   r\   r]   r^   r_   r`   ra   rb   s                r%   Ú	subscribeÚBaseAdapterRegistry.subscribe¨  s)  € ÜÁÓJÂ¸AÔ4°QÖ7ÁÑJÓKˆØˆÜ�H“ˆØ×#Ñ#ˆÜ�'‹l˜eÓ#Ø�N‰N˜4×,Ñ,Ó.Ô/ô �'‹l˜eÕ#à‘^ˆ
Ø˜Ñ$ˆãˆAØ—‘˜qÓ!ˆAØ‰yØ×%Ñ%Ó'�Ø !˜1‘ØŠJñ ð  ×/Ñ/°
·±¸tÓ0DÀeÓLˆ
ÑàÑØ—‘×"Ñ" 8¨QÓ/°!Ñ3ˆAØ'(�N‰N˜8Ñ$Ø�A‹vØ—‘×+Ñ+¨HÔ5à�‰�TÕùò1 Ks   ŠE c                 ób   • U R                  U R                  UUS5      =(       d    SnX4;   a  U$ S $ )Nr…   r;   )rf   r   )r#   rX   rY   Ú
subscriberr   s        r%   Ú
subscribedÚBaseAdapterRegistry.subscribedÃ  sA   € Ø—o‘oØ×ÑØØØó	
÷ ð
 ð 	ð (Ó6ˆzÐ@¸DÐ@r(   c              #   ót   #   • U R                  U R                  5       H  u  pp4U H	  nXU4v •  M     M     g7f)a  
Yields tuples ``(required, provided, value)`` for all the
subscribers that this object holds.

These tuples could be passed as the arguments to the
:meth:`subscribe` method on another adapter registry to
duplicate the registrations this object holds.

.. versionadded:: 5.3.0
N)rx   r   )r#   rX   rY   Ú_namerZ   rC   s         r%   ÚallSubscriptionsÚ$BaseAdapterRegistry.allSubscriptionsÌ  sA   é € ð 15×0AÑ0AØ×Ñö1
Ñ,ˆH ó �Ø¨1Ð-Ô-ó ò1
ùs   ‚68c                 óL  • [        U Vs/ s H  n[        U5      PM     sn5      n[        U5      nU R                  nU[        U5      :¼  a  g Xe   nX4-   n/ n	U H-  n
UR	                  U
5      nUc    g U	R                  Xz45        UnM/     UR	                  S5      nU(       d  g [        U5      nUc  SnOU R                  XÃ5      nA[        U5      U:X  a  g U(       a  XçS'   OMUS	 [        U	5       H  u  púXú   nU(       a    OXú	 M     U(       a   US   (       d  US	 U(       a  US   (       d  M  Ub\  U R                  U   [        U5      -   U-
  nUS:X  a)  U R                  U	 U R                  R                  U5        OUU R                  U'   U R                  U 5        g s  snf )Nr…   r;   rv   r   )rA   rR   rS   r   rV   rT   rD   r~   r   r5   r   r+   )r#   rX   rY   rZ   r[   r\   r]   r^   r_   r€   r`   ra   r�   Úlen_oldÚnewr‚   rb   s                    r%   ÚunsubscribeÚBaseAdapterRegistry.unsubscribeÝ  s�  € ÜÁÓJÂ¸AÔ4°QÖ7ÁÑJÓKˆÜ�H“ˆØ×#Ñ#ˆØ”C˜“LÓ ØØ‘^ˆ
Ø˜Ñ$ˆð ˆÛˆAØ—‘˜qÓ!ˆAØ‰yÙØ�N‰N˜J˜?Ô+ØŠJñ ð �n‰n˜RÓ ˆÞàÜ�c“(ˆØ‰=ð
 ‰Cà×+Ñ+¨CÓ7ˆCð äˆs‹8�wÓàæØ �rŠNð ˜2�Ü# GÖ,‘�Ø‘G�ÞÙàšñ -ö  '¨"§+Ø˜B�Kö  '¨"§+¡+ð ÑØ—‘˜xÑ(¬3¨s«8Ñ3°gÑ=ˆAØ�A‹vØ—N‘N 8Ð,Ø—‘×.Ñ.¨xÕ8à+,�—‘˜xÑ(à�‰�TÕùòE Ks   ŠF!c                 ó   • U R                  5       nU R                  5       nS nU" U5      nU" U5      nU R                  U R                  5        U H  nU R                  " U6   M     U H  nU R
                  " U6   M     g)aí  
Rebuild (and replace) all the internal data structures of this
object.

This is useful, especially for persistent implementations, if
you suspect an issue with reference counts keeping interfaces
alive even though they are no longer used.

It is also useful if you or a subclass change the data types
(``_mappingType`` and friends) that are to be used.

This method replaces all internal data structures with new objects;
it specifically does not re-use any storage.

.. versionadded:: 5.3.0
c                 ó€   •  [        U 5      n[        R                  " U4U 5      $ ! [         a    [        S5      s $ f = f©Nr;   )ÚnextÚStopIterationÚiterÚ	itertoolsÚchain)ÚitÚfirsts     r%   ÚbufferÚ+BaseAdapterRegistry.rebuild.<locals>.buffer8  s?   € ð Ü˜R›�ô —?’? E 8¨RÓ0Ð0øô !ó  Ü˜B“x’ð ús   ‚% ¥=¼=N)r{   rŽ   r&   r!   rc   r†   )r#   Úregistrationsr   rŸ   Úargss        r%   ÚrebuildÚBaseAdapterRegistry.rebuild"  s}   € ð& ×-Ñ-Ó/ˆØ×-Ñ-Ó/ˆò		1ñ ˜}Ó-ˆÙ˜}Ó-ˆð 	�‰�d—n‘nÔ%ó "ˆDØ�MŠM˜4Ó ñ "ó "ˆDØ�NŠN˜DÓ!ò "r(   c                 ó   •  " S S5      nU$ )Nc                   ó   • \ rS rSr0 rSrg)Ú2BaseAdapterRegistry.get.<locals>.XXXTwistedFakeOutiZ  r;   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚselfImpliedÚ__static_attributes__r;   r(   r%   ÚXXXTwistedFakeOutr§   Z  s   † Ø‹Kr(   r®   r;   )r#   Ú_r®   s      r%   rV   ÚBaseAdapterRegistry.getY  s   € ÷	ñ 	à Ð r(   )r!   r   r   r   r5   r   ©r;   ©r…   r   )%r¨   r©   rª   r«   Ú__doc__r6   rI   r&   r,   Úpropertyr!   r    Úlistr   rA   Ú_leafSequenceTypeÚdictrU   r   r>   rD   r+   rc   rf   ri   Úclassmethodrm   rx   r{   rQ   r†   rŠ   rŽ   r“   r£   rV   r­   r;   r(   r%   r   r   @   s¸   † ñ;ð|2€Jð €Kô-ò^	ñ Ñ@ÙBó€Iò@ð €MØÐØ€LØ€Mò4ò4Lò83ò!òF$ô,
ð ó@ó ð@ò8ò$5ô.ò`ò6Aò.ô"CòJ3"õn!r(   r   c                   ól   ^ • \ rS rSrS rSS jrS rSS jrSS jrSS jr	SU 4S jjr
S	 rS
 rSrU =r$ )Ú
LookupBaseib  c                 ó.   • 0 U l         0 U l        0 U l        g r   ©Ú_cacheÚ_mcacheÚ_scacher/   s    r%   r&   ÚLookupBase.__init__e  s   € ØˆŒØˆŒØˆ�r(   c                 ó    • U R                   R                  5         U R                  R                  5         U R                  R                  5         g r   )r½   Úclearr¾   r¿   )r#   Úignoreds     r%   r+   ÚLookupBase.changedj  s2   € Ø�‰×ÑÔØ�‰×ÑÔØ�‰×ÑÕr(   c                 ó¨   • U R                   R                  U5      nUc  0 nX0R                   U'   U(       a  UR                  U5      nUc  0 nXCU'   UnU$ r   )r½   rV   )r#   rY   r8   ÚcacheÚcs        r%   Ú	_getcacheÚLookupBase._getcacheo  sU   € Ø—‘—‘ Ó)ˆØ‰=ØˆEØ$)�K‰K˜Ñ!ÞØ—	‘	˜$“ˆAØ‰yØ�Ø�d‘ØˆEØˆr(   c                 ó–  • [        U[        5      (       d  [        S5      eU R                  X#5      n[	        U5      n[        U5      S:X  a  UR                  US   [        5      nOUR                  [	        U5      [        5      nU[        L a6  U R                  XU5      n[        U5      S:X  a  XeUS   '   OXe[	        U5      '   Uc  U$ U$ )NrM   rH   r   )	rN   rO   rP   rÈ   rA   rS   rV   Ú_not_in_mappingÚ_uncached_lookup©r#   rX   rY   r8   ÚdefaultrÆ   Úresults          r%   r   ÚLookupBase.lookup|  s³   € Ü˜$¤×$Ñ$ÜÐ3Ó4Ð4Ø—‘˜xÓ.ˆÜ˜“?ˆÜˆx‹=˜AÓØ—Y‘Y˜x¨™{¬OÓ<‰Fà—Y‘Yœu X›´Ó@ˆFà”_Ò$Ø×*Ñ*¨8¸tÓDˆFÜ�8‹} Ó!Ø%+�h˜q‘kÒ"à)/”e˜H“oÑ&à‰>ØˆNàˆr(   c                 óØ   • [        U[        5      (       d  [        S5      eU R                  X#5      nUR	                  U[
        5      nU[
        L a  U R                  U4X#U5      $ Uc  U$ U$ ©NrM   )rN   rO   rP   rÈ   rV   rË   r   rÍ   s          r%   r   ÚLookupBase.lookup1’  se   € Ü˜$¤×$Ñ$ÜÐ3Ó4Ð4Ø—‘˜xÓ.ˆØ—‘˜8¤_Ó5ˆØ”_Ò$Ø—;‘; ˜|¨X¸WÓEÐEà‰>ØˆNàˆr(   c                 ó&   • U R                  X!X45      $ r   )r   )r#   ÚobjectrY   r8   rÎ   s        r%   r   ÚLookupBase.queryAdapterŸ  s   € Ø× Ñ  °4ÓAÐAr(   c                 óF  >• [        U[        5      (       d  [        S5      e[        U5      nU R	                  X5      nUR                  U[        5      nU[        L a  U R                  U4X5      nUb.  [        U[        5      (       a  UR                  nU" U5      nUb  U$ U$ rÒ   )
rN   rO   rP   r   rÈ   rV   rË   r   ÚsuperÚ__self__)
r#   rY   rÕ   r8   rÎ   rX   rÆ   ÚfactoryrÏ   Ú	__class__s
            €r%   r   ÚLookupBase.adapter_hook¢  s“   ø€ Ü˜$¤×$Ñ$ÜÐ3Ó4Ð4Ü˜fÓ%ˆØ—‘˜xÓ.ˆØ—)‘)˜H¤oÓ6ˆØ”oÒ%Ø—k‘k 8 ,°Ó?ˆGàÑÜ˜&¤%×(Ñ(ØŸ™�Ù˜V“_ˆFØÑ!Ø�àˆr(   c                 óà   • U R                   R                  U5      nUc  0 nX0R                   U'   [        U5      nUR                  U[        5      nU[        L a  U R	                  X5      nXCU'   U$ r   )r¾   rV   rA   rË   Ú_uncached_lookupAll©r#   rX   rY   rÆ   rÏ   s        r%   r   ÚLookupBase.lookupAll´  si   € Ø—‘× Ñ  Ó*ˆØ‰=ØˆEØ%*�L‰L˜Ñ"ä˜“?ˆØ—‘˜8¤_Ó5ˆØ”_Ò$Ø×-Ñ-¨hÓAˆFØ$�(‰Oàˆr(   c                 óà   • U R                   R                  U5      nUc  0 nX0R                   U'   [        U5      nUR                  U[        5      nU[        L a  U R	                  X5      nXCU'   U$ r   )r¿   rV   rA   rË   Ú_uncached_subscriptionsrß   s        r%   r   ÚLookupBase.subscriptionsÂ  si   € Ø—‘× Ñ  Ó*ˆØ‰=ØˆEØ%*�L‰L˜Ñ"ä˜“?ˆØ—‘˜8¤_Ó5ˆØ”_Ò$Ø×1Ñ1°(ÓEˆFØ$�(‰Oàˆr(   r¼   r   ©r…   N)r¨   r©   rª   r«   r&   r+   rÈ   r   r   r   r   r   r   r­   Ú__classcell__©rÛ   s   @r%   rº   rº   b  s6   ø† òô
ò
ôô,ôB÷ò$÷ð r(   rº   c                   ó2   • \ rS rSrS rS rS rS rS rSr	g)	ÚVerifyingBaseiÑ  c                 óÊ   • [         R                  X5        U R                  R                  SS  U l        U R                   Vs/ s H  o"R
                  PM     snU l        g s  snf rG   )ÚLookupBaseFallbackr+   Ú	_registryr   Ú
_verify_rorI   Ú_verify_generations)r#   rJ   r[   s      r%   r+   ÚVerifyingBase.changedØ  sH   € Ü×"Ñ" 4Ô<ØŸ.™.×+Ñ+¨A¨BÐ/ˆŒØ;?¿?º?Ó#Kº?°a§M¤M¹?Ñ#KˆÕ ùÒ#Ks   ÁA c                 óš   • U R                    Vs/ s H  oR                  PM     snU R                  :w  a  U R                  S 5        g g s  snf r   )rì   rI   rí   r+   ©r#   r[   s     r%   Ú_verifyÚVerifyingBase._verifyÝ  sG   € ð (,§¢óÚ'6 !—”¡ñà×)Ñ)ó*ð �L‰L˜Õð	*ùò s   �Ac                 óN   • U R                  5         [        R                  XU5      $ r   )rñ   rê   rÈ   )r#   rY   r8   s      r%   rÈ   ÚVerifyingBase._getcacheå  s#   € Ø�‰ŒÜ!×+Ñ+Ø˜Dó
ð 	
r(   c                 óN   • U R                  5         [        R                  XU5      $ r   )rñ   rê   r   ©r#   rX   rY   s      r%   r   ÚVerifyingBase.lookupAllë  s#   € Ø�‰ŒÜ!×+Ñ+Ø˜Hó
ð 	
r(   c                 óN   • U R                  5         [        R                  XU5      $ r   )rñ   rê   r   rö   s      r%   r   ÚVerifyingBase.subscriptionsñ  s#   € Ø�‰ŒÜ!×/Ñ/Ø˜Hó
ð 	
r(   )rí   rì   N)
r¨   r©   rª   r«   r+   rñ   rÈ   r   r   r­   r;   r(   r%   rè   rè   Ñ  s   † òLò
ò
ò
õ
r(   rè   c                   ó‚   ^ • \ rS rSrU 4S jrSU 4S jjrS rS rS rS r	SS jr
SU 4S	 jjrS
 rS rS rS rSrU =r$ )ÚAdapterLookupBaseiø  c                 ó\   >• Xl         0 U l        U R                  5         [        TU ]  5         g r   )rë   Ú	_requiredÚinit_extendorsrØ   r&   )r#   ÚregistryrÛ   s     €r%   r&   ÚAdapterLookupBase.__init__ú  s&   ø€ Ø!ŒØˆŒØ×ÑÔÜ‰ÑÕr(   c                 óÔ   >• [         TU ]  S 5        U R                  R                  5        H   nU" 5       nUc  M  UR	                  U 5        M"     U R                  R                  5         g r   )rØ   r+   rý   Úkeysr“   rÂ   )r#   rÃ   r[   rÛ   s      €r%   r+   ÚAdapterLookupBase.changed   sP   ø€ Ü‰‰˜ÔØ—‘×$Ñ$Ö&ˆAÙ“ˆAØ‹}Ø—‘˜dÖ#ñ 'ð 	�‰×ÑÕr(   c                 ón   • 0 U l         U R                  R                   H  nU R                  U5        M     g r   )Ú
_extendorsrë   r   rW   )r#   Úps     r%   rþ   Ú AdapterLookupBase.init_extendors  s+   € ØˆŒØ—‘×)Ô)ˆAØ×Ñ˜aÖ ò *r(   c                 ó0  • U R                   nUR                   Hp  nUR                  US5      nU Vs/ s H  oQR                  U5      (       d  M  UPM     snU/-   U Vs/ s H  oQR                  U5      (       a  M  UPM     sn-   X#'   Mr     g s  snf s  snf r—   )r  Ú__iro__rV   ÚisOrExtends)r#   rY   r  ro   Ú	extendorsÚes         r%   rW   ÚAdapterLookupBase.add_extendor#  s˜   € Ø—_‘_ˆ
Ø×!Ô!ˆAØ"Ÿ™ q¨"Ó-ˆIñ  )óÚ(˜!×,@Ñ,@À×,C—A™yñð ðññ
  )óÚ(˜!×0DÑ0DÀQ×0G—A™yññ	ð ‹Mò "ùòùòs   ²BÁBÁBÁ<Bc                 ó¤   • U R                   nUR                   H/  nUR                  US5       Vs/ s H  nXA:w  d  M
  UPM     snX#'   M1     g s  snf r—   )r  r	  rV   )r#   rY   r  ro   r  s        r%   r   Ú!AdapterLookupBase.remove_extendor1  sO   € Ø—_‘_ˆ
Ø×!Ô!ˆAØ(2¯©°q¸"Ô(=ó /Ò(= 1Ø !¡÷ Ñ(=ñ /ˆJ‹Mò "ùò/s
   °	A½Ac                 ó†   • U R                   nU H/  nUR                  5       nXB;  d  M  UR                  U 5        SX$'   M1     g rG   )rý   Úweakrefr†   )r#   rX   Ú_refsr[   Úrefs        r%   Ú
_subscribeÚAdapterLookupBase._subscribe7  s9   € Ø—‘ˆÛˆAØ—)‘)“+ˆCØÕØ—‘˜DÔ!Ø�“
ò	 r(   c           	      óR  • [        U5      nS n[        U5      nU R                  R                   He  nUR                  nU[        U5      :¼  a  M   UR
                  R                  R                  U5      nU(       d  MN  Xu   n	[        X‘XƒSU5      nUc  Me    O   U R                  " U6   U$ ©Nr   )
rA   rS   rë   r   r   r5   r  rV   Ú_lookupr  )
r#   rX   rY   r8   rÏ   r\   rÿ   r]   r  r^   s
             r%   rÌ   Ú"AdapterLookupBase._uncached_lookup?  sŸ   € Ü˜“?ˆØˆÜ�H“ˆØŸ™×)Ô)ˆHØ×(Ñ(ˆGØœ˜G›Ó$Ùà ×*Ñ*×5Ñ5×9Ñ9¸(ÓCˆIÞÙà ™ˆJÜ˜Z°9ÀAØ"ó$ˆFàÓ!Ùñ *ð 	�Š˜Ñ"àˆr(   c           	      óö   >• U R                  U Vs/ s H  n[        U5      PM     snX#5      nUc  U$ U" U Vs/ s H&  n[        U[        5      (       a  UR                  OUPM(     sn6 nUc  U$ U$ s  snf s  snf r   )r   r   rN   rØ   rÙ   )	r#   ÚobjectsrY   r8   rÎ   ÚorÚ   rÏ   rÛ   s	           €r%   r   Ú#AdapterLookupBase.queryMultiAdapterV  s�   ø€ Ø—+‘+±gÓ>²g°œz¨!ž}±gÑ>ÀÓOˆØ‰?ØˆNáÙ?Fó
Ú?F¸!œ* Q¬×.Ñ.ˆA�JŠJ°AÒ5¹wñ
ð ˆð ‰>ØˆNàˆùò ?ùò
s
   ‘A1¹-A6c           	      óˆ  • [        U5      n[        U5      n0 n[        U R                  R                  5       H`  nUR
                  nU[        U5      :¼  a  M   UR                  R                  R                  U5      nU(       d  MN  Xc   n[        X�XtSU5        Mb     U R                  " U6   [        UR                  5       5      $ r  )rA   rS   r~   rë   r   r   r5   r  rV   Ú
_lookupAllr  rl   )	r#   rX   rY   r\   rÏ   rÿ   r]   r  r^   s	            r%   rÞ   Ú%AdapterLookupBase._uncached_lookupAllc  s¢   € Ü˜“?ˆÜ�H“ˆØˆÜ  §¡×!2Ñ!2Ö3ˆHØ×(Ñ(ˆGØœ˜G›Ó$ÙØ ×*Ñ*×5Ñ5×9Ñ9¸(ÓCˆIÞÙØ ™ˆJÜ�z¨YÀÀ5ÖIñ 4ð 	�Š˜Ñ"ä�V—\‘\“^Ó$Ð$r(   c                 óT   • U R                  X5       Vs/ s H  o3S   PM	     sn$ s  snf r  )r   )r#   rX   rY   rÇ   s       r%   r   ÚAdapterLookupBase.namesu  s'   € Ø"Ÿn™n¨XÔ@ÓAÒ@˜�!”Ñ@ÑAÐAùÒAs   ”%c           
      ó`  • [        U5      n[        U5      n/ n[        U R                  R                  5       Hc  nUR
                  nU[        U5      :¼  a  M   Uc  U4nO*UR                  R                  R                  U5      nUc  MQ  [        Xc   XSUSU5        Me     U R                  " U6   U$ )Nr…   r   )rA   rS   r~   rë   r   r   r5   r  rV   Ú_subscriptionsr  )r#   rX   rY   r\   rÏ   rÿ   r]   r  s           r%   râ   Ú)AdapterLookupBase._uncached_subscriptionsx  s¨   € Ü˜“?ˆÜ�H“ˆØˆÜ  §¡×!2Ñ!2Ö3ˆHØ×+Ñ+ˆGØœ˜G›Ó$ÙàÑØ%˜L‘	à$×.Ñ.×9Ñ9×=Ñ=¸hÓG�	ØÑ$Ùä˜7™>¨8ÀØ! 1 eö-ñ 4ð 	�Š˜Ñ"àˆr(   c                 óÞ   • U R                  U Vs/ s H  n[        U5      PM     snU5      nUc  SnU H  nU" U6   M
     U$ / nU H  nU" U6 nUc  M  UR                  U5        M      U$ s  snf r—   )r   r   rT   )r#   r  rY   r  r   rÏ   Úsubscriptionr‰   s           r%   r   ÚAdapterLookupBase.subscribers�  s‰   € Ø×*Ñ*Ù$+Ó,¢G˜qŒZ˜Ž]¡GÑ,¨hó
ˆð ÑØˆFÛ -�Ù˜gÓ&ñ !.ð ˆð ˆFÛ -�Ù)¨7Ð3�
ØÓ)Ø—M‘M *Ö-ñ !.ð ˆùò -s   �A*)r  rë   rý   r   r²   rä   )r¨   r©   rª   r«   r&   r+   rþ   rW   r   r  rÌ   r   rÞ   r   râ   r   r­   rå   ræ   s   @r%   rû   rû   ø  sE   ø† õ÷ò<!ò
ò/òô÷.ò%ò$Bò÷.ð r(   rû   c                   ó   • \ rS rSrSrg)ÚAdapterLookupi   r;   N©r¨   r©   rª   r«   r­   r;   r(   r%   r*  r*     ó   † Úr(   r*  c                   óX   ^ • \ rS rSrSr\rS	U 4S jjrS rS r	U 4S jr
U 4S jrSrU =r$ )
r   i¤  zU
A full implementation of ``IAdapterRegistry`` that adds support for
sub-registries.
c                 óX   >• [         R                  " 5       U l        [        TU ]  U5        g r   )r  ÚWeakKeyDictionaryÚ_v_subregistriesrØ   r&   )r#   r$   rÛ   s     €r%   r&   ÚAdapterRegistry.__init__­  s#   ø€ ô !(× 9Ò 9Ó ;ˆÔä‰Ñ˜Õr(   c                 ó"   • SU R                   U'   g rG   ©r0  rð   s     r%   Ú_addSubregistryÚAdapterRegistry._addSubregistry´  s   € Ø#$ˆ×Ñ˜aÒ r(   c                 ó>   • XR                   ;   a  U R                   U	 g g r   r3  rð   s     r%   Ú_removeSubregistryÚ"AdapterRegistry._removeSubregistry·  s!   € Ø×%Ñ%Ó%Ø×%Ñ% aÑ(ð &r(   c                 óà   >• U R                   R                  SS5      nU H  nX1;  d  M
  UR                  U 5        M     U H  nX2;  d  M
  UR                  U 5        M     [        TU ]  U5        g )Nr!   r;   )r*   rV   r7  r4  rØ   r,   )r#   r$   r�   r[   rÛ   s       €r%   r,   ÚAdapterRegistry._setBases»  sd   ø€ Ø�m‰m×Ñ ¨RÓ0ˆÛˆAØ�~Ø×$Ñ$ TÖ*ñ ó ˆAØ�|Ø×!Ñ! $Ö'ñ ô 	‰Ñ˜%Õ r(   c                 óˆ   >• [         TU ]  U5        U R                  R                  5        H  nUR                  U5        M     g r   )rØ   r+   r0  r  )r#   rJ   ÚsubrÛ   s      €r%   r+   ÚAdapterRegistry.changedÆ  s6   ø€ Ü‰‰Ð*Ô+à×(Ñ(×-Ñ-Ö/ˆCØ�K‰KÐ*Ö+ò 0r(   r3  r±   )r¨   r©   rª   r«   r³   r*  r4   r&   r4  r7  r,   r+   r­   rå   ræ   s   @r%   r   r   ¤  s-   ø† ñð
  €K÷ ò%ò)õ	!÷,ó ,r(   c                   ó   • \ rS rSrSrg)ÚVerifyingAdapterLookupiÍ  r;   Nr+  r;   r(   r%   r?  r?  Í  r,  r(   r?  c                   ó   • \ rS rSrSr\rSrg)r   iÑ  z*
The most commonly-used adapter registry.
r;   N)r¨   r©   rª   r«   r³   r?  r4   r­   r;   r(   r%   r   r   Ñ  s   † ñð )ƒKr(   c                 ó   • U c  [         $ U $ r   r   )Úxs    r%   rR   rR   Ú  s   € Ø�yÜÐàˆr(   c           	      ó  • U R                   nXE:  a?  X   R                   H,  nU" U5      nU(       d  M  [        X�X#US-   U5      n	U	c  M*  U	s  $    g U H,  n
U" U
5      nU(       d  M  UR                  U5      n	U	c  M*  U	s  $    g rG   )rV   Ú__sro__r  )r^   ÚspecsrY   r8   ro   ÚlÚcomponents_getÚspecÚcompsr[   Úifaces              r%   r  r  á  s�   € ð
  —^‘^€NØƒuØ‘H×$Ô$ˆDÙ" 4Ó(ˆEßˆuÜ˜E¨(¸!¸a¹%ÀÓC�Ø“=Ø’Hñ %ð ó ˆEÙ" 5Ó)ˆEßˆuØ—I‘I˜d“O�Ø“=Ø’Hñ ð r(   c           	      ó  • U R                   nXE:  aA  [        X   R                  5       H%  nU" U5      nU(       d  M  [        X�X#US-   U5        M'     g [        U5       H%  n	U" U	5      nU(       d  M  UR	                  U5        M'     g rG   )rV   r~   rD  r  Úupdate)
r^   rE  rY   rÏ   ro   rF  rG  rH  rI  rJ  s
             r%   r  r  ù  st   € Ø—^‘^€NØƒuÜ˜U™X×-Ñ-Ö.ˆDÙ" 4Ó(ˆEßˆuÜ˜5¨¸1¸q¹5À!ÖDò /ô
 ˜hÖ'ˆEÙ" 5Ó)ˆEßˆuØ—‘˜eÖ$ò (r(   c           
      óD  • U R                   nXV:  aA  [        X   R                  5       H%  nU" U5      n	U	(       d  M  [        X‘X#XES-   U5        M'     g [        U5       H?  n
U" U
5      n	U	(       d  M  U	R                  U5      n	U	(       d  M.  UR	                  U	5        MA     g rG   )rV   r~   rD  r$  Úextend)r^   rE  rY   r8   rÏ   ro   rF  rG  rH  rI  rJ  s              r%   r$  r$    s‹   € ð  —^‘^€NØƒuÜ˜U™X×-Ñ-Ö.ˆDÙ" 4Ó(ˆEßˆuÜØ (°&¸a¹%Àöò /ô ˜hÖ'ˆEÙ" 5Ó)ˆEßˆuØŸ	™	 $›�ß�5Ø—M‘M %Ö(ò (r(   )r³   r›   r  Úzope.interfacer   r   r   r   Úzope.interface._compatr   r	   Úzope.interface.interfacesr
   Ú__all__r   rÕ   rË   rº   rê   rè   rû   r*  r   r?  r   rR   r  r  r$  r;   r(   r%   Ú<module>rS     s	  ðñã Û å $Ý &Ý %Ý Ý 2Ý .Ý 6ð Øð€÷H\!ñ \!ñ~ “(€ð ÷kð kó ðkð\ ô#
Ð&ó #
ó ð#
÷Leñ eôP	Ð% zô 	ñ ÐÓô%,Ð)ó %,ó ð%,ôP	Ð.°ô 	ñ ÐÓô)Ð2ó )ó ð)òòò0%ó)r(   