
    q&f.[                        d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ ddlmZ dd	l	m
Z
 dd
lmZ ddlmZ dZ G d de      Z e       Z G d de      ZeZ	 ddlmZ  G d de      ZeZ	 ddlmZ  G d de      Z G d dee      Z ee
       G d de             Z G d dee      Z ee
       G d de             Zd Zd  Z d! Z!d" Z"y# e$ r eZY yw xY w# e$ r eZY rw xY w)#zAdapter management
    )absolute_importN   )implementer)
providedBy	Interface)ro)IAdapterRegistry)_normalize_name)STRING_TYPES c                   p    e Zd ZdZdZddZd Z ed d       Zd Z	d Z
d	 Zefd
ZddZd ZddZd Zy)BaseAdapterRegistry)	lookupqueryMultiAdapterlookup1queryAdapteradapter_hook	lookupAllnamessubscriptionssubscribersr   c                 \    g | _         g | _        i | _        | j                          || _        y N)	_adapters_subscribers	_provided_createLookup	__bases__selfbasess     M/usr/lib/python3/dist-packages/mercurial/thirdparty/zope/interface/adapter.py__init__zBaseAdapterRegistry.__init__*   s5         	     c                 x    || j                   d<   t        j                  |       | _        | j                  |        y Nr   )__dict__r	   changedr    s     r#   	_setBaseszBaseAdapterRegistry._setBasesY   s+    %*k"%%+Tr%   c                      | j                   d   S r'   )r(   r!   s    r#   <lambda>zBaseAdapterRegistry.<lambda>^   s    dmmK&@ r%   c                 $    | j                  |      S r   )r*   r    s     r#   r-   zBaseAdapterRegistry.<lambda>_   s    T^^E-B r%   c                     | j                  |       | _        | j                  D ]%  }t        | j                  |      | j                  |<   ' y r   )LookupClass	_v_lookup
_delegatedgetattrr(   )r!   names     r#   r   z!BaseAdapterRegistry._createLookupb   sB    ))$/OO 	@D")$..$"?DMM$	@r%   c                 d    | xj                   dz  c_         | j                  j                  |       y Nr   )_generationr1   r)   )r!   originally_changeds     r#   r)   zBaseAdapterRegistry.changedg   s&    A12r%   c                    t        |t              st        d      || j                  ||||       y t	        t        t        |            }t        |      }t        |      }| j                  }t        |      |k  r |j                  i        t        |      |k  r ||   }||fz   }|D ]  }	|j                  |	      }
|
i }
|
||	<   |
}  |j                  |      |u ry |||<   | j                  j                  |d      dz   }|| j                  |<   |dk(  r| j                  j                  |       | j                  |        y )Nname is not a stringr   r   )
isinstancer   
ValueError
unregistertuplemap_convert_None_to_Interfacer   lenr   appendgetr   r1   add_extendorr)   )r!   requiredprovidedr4   valueorderbyorder
componentskeykdns               r#   registerzBaseAdapterRegistry.registerk   s>   $-344=OOHhe<7BCt$H..'le#NN2 'le#U^
($ 	Aq!Ay !
1J	 >>$5( 
4NNx+a/#$x 6NN''1Tr%   c                 
   t        t        t        |            }t        |      }t	        |      }| j
                  }t	        |      |k  ry ||   }||fz   }|D ]  }|j                  |      }	|	 y |	} |j                  |      S r   )r>   r?   r@   r   rA   r   rC   )
r!   rE   rF   r4   rH   rI   rJ   rK   rL   rM   s
             r#   
registeredzBaseAdapterRegistry.registered   s    7BCt$H..w<5 U^
($ 	Aq!AyJ		 ~~d##r%   Nc                 `   t        t        t        |            }t        |      }| j                  }|t        |      k\  ry||   }||fz   }g }	|D ],  }
|j                  |
      }| y |	j                  ||
f       |}. |j                  |      }|y |||ury ||= |s1t        |	      D ]  \  }}
||
   }|r n||
=  |r|d   s|d= |r|d   s| j                  |   dz
  }|dk(  r)| j                  |= | j                  j                  |       n|| j                  |<   | j                  |        y )NFr   r   )r>   r?   r@   rA   r   rC   rB   reversedr   r1   remove_extendorr)   )r!   rE   rF   r4   rG   rH   rI   rJ   rK   lookupsrL   rM   oldcomprN   s                  r#   r=   zBaseAdapterRegistry.unregister   s]   7BCH..CL U^
($  	Aq!AyNNJ?+J	 nnT";Cu$4t $G,  aGQ  '"+BK '"+NN8$q(6x(NN**84'(DNN8$Tr%   c                    t        t        t        |            }t        }t	        |      }| j
                  }t	        |      |k  r |j                  i        t	        |      |k  r ||   }||fz   }|D ]  }	|j                  |	      }
|
i }
|
||	<   |
}  |j                  |d      |fz   ||<   |N| j                  j                  |d      dz   }|| j                  |<   |dk(  r| j                  j                  |       | j                  |        y )N r   r   )r>   r?   r@   _BLANKrA   r   rB   rC   r   r1   rD   r)   )r!   rE   rF   rG   r4   rH   rI   rJ   rK   rL   rM   rN   s               r#   	subscribezBaseAdapterRegistry.subscribe   s   7BCH##'le#NN2 'le#U^
($ 	Aq!Ay !
1J	 &>>$3ui?
4""8Q/!3A'(DNN8$Av++H5Tr%   c                    t        t        t        |            }t        |      }| j                  }|t        |      k\  ry ||   }||fz   }g }|D ],  }	|j                  |	      }
|
 y |j                  ||	f       |
}. |j                  t              }|sy |d}nt        |D cg c]	  }||us| c}      }||k(  ry |r
||t        <   n8|t        = t        |      D ]  \  }}	||	   }
|
r n||	=  |r|d   s|d= |r|d   s|T| j                  |   t        |      z   t        |      z
  }|dk(  r(| j                  |= | j                  j                  |       | j                  |        y c c}w )NrZ   rS   r   )r>   r?   r@   rA   r   rC   rB   r[   rT   r   r1   rU   r)   )r!   rE   rF   rG   rH   rI   rJ   rK   rV   rL   rM   rW   newvrX   rN   s                   r#   unsubscribezBaseAdapterRegistry.unsubscribe   s   7BCH##CL U^
($  	Aq!AyNNJ?+J	 nnV$=CC:q1E>:;C#:!$Jv 6"#G,  aGQ  '"+BK '"+ x(3s83c#h>AAvNN8,..x8T= ;s   $	E+.E+c                      G d d      }|S )Nc                       e Zd Zi Zy)2BaseAdapterRegistry.get.<locals>.XXXTwistedFakeOutN)__name__
__module____qualname__selfImpliedrZ   r%   r#   XXXTwistedFakeOutrc   )  s    Kr%   rh   rZ   )r!   _rh   s      r#   rC   zBaseAdapterRegistry.get(  s    	 	  r%   rZ   r   )rd   re   rf   r2   r7   r$   r*   propertyr   r   r)   rO   r[   rQ   r=   r\   r`   rC   rZ   r%   r#   r   r      s^    2J K-^
 @BI@
3!F 39 $&.`68x!r%   r   c                   \    e Zd Zd ZddZd ZedfdZedfdZedfdZ	edfdZ
d	 Zd
 Zy)LookupBaseFallbackc                 .    i | _         i | _        i | _        y r   )_cache_mcache_scacher,   s    r#   r$   zLookupBaseFallback.__init__1  s    r%   Nc                     | j                   j                          | j                  j                          | j                  j                          y r   )ro   clearrp   rq   )r!   ignoreds     r#   r)   zLookupBaseFallback.changed6  s2    r%   c                     | j                   j                  |      }|i }|| j                   |<   |r|j                  |      }|i }|||<   |}|S r   )ro   rC   )r!   rF   r4   cachecs        r#   	_getcachezLookupBaseFallback._getcache;  sY    )=E$)DKK!		$AydEr%   c                    t        |t              st        d      | j                  ||      }t	        |      }t        |      dk(  r|j                  |d   t              }n|j                  t	        |      t              }|t        u r8| j                  |||      }t        |      dk(  r	|||d   <   n||t	        |      <   ||S |S )Nr:   r   r   )	r;   r   r<   rx   r>   rA   rC   _not_in_mapping_uncached_lookupr!   rE   rF   r4   defaultrv   results          r#   r   zLookupBaseFallback.lookupH  s    $-344x.?x=AYYx{O<FYYuX@F_$**8XtDF8}!%+hqk")/eHo&>Nr%   c                     t        |t              st        d      | j                  ||      }|j	                  |t
              }|t
        u r| j                  |f|||      S ||S |S Nr:   )r;   r   r<   rx   rC   rz   r   r|   s          r#   r   zLookupBaseFallback.lookup1^  sf    $-344x.8_5_$;;|XtWEE>Nr%   c                 *    | j                  ||||      S r   )r   )r!   objectrF   r4   r}   s        r#   r   zLookupBaseFallback.queryAdapterk  s      64AAr%   c                     t        |t              st        d      t        |      }| j	                  ||      }|j                  |t              }|t        u r| j                  |f||      }| ||      }||S |S r   )r;   r   r<   r   rx   rC   rz   r   )	r!   rF   r   r4   r}   rE   rv   factoryr~   s	            r#   r   zLookupBaseFallback.adapter_hookn  s}    $-344f%x.))Ho6o%kk8,$?GV_F!r%   c                     | j                   j                  |      }|i }|| j                   |<   t        |      }|j                  |t              }|t        u r| j	                  ||      }|||<   |S r   )rp   rC   r>   rz   _uncached_lookupAllr!   rE   rF   rv   r~   s        r#   r   zLookupBaseFallback.lookupAll~  so      *=E%*DLL"?8_5_$--hAF$E(Or%   c                     | j                   j                  |      }|i }|| j                   |<   t        |      }|j                  |t              }|t        u r| j	                  ||      }|||<   |S r   )rq   rC   r>   rz   _uncached_subscriptionsr   s        r#   r   z LookupBaseFallback.subscriptions  so      *=E%*DLL"?8_5_$11(HEF$E(Or%   r   )rd   re   rf   r$   r)   rx   r[   r   r   r   r   r   r   rZ   r%   r#   rm   rm   /  sL    

 /5d , 06t  39$ B 39$  r%   rm   )
LookupBasec                   *    e Zd Zd Zd Zd Zd Zd Zy)VerifyingBaseFallbackc                     t         j                  | |       | j                  j                  dd  | _        | j                  D cg c]  }|j
                   c}| _        y c c}w r6   )rm   r)   	_registryr	   
_verify_ror7   _verify_generations)r!   r8   rs      r#   r)   zVerifyingBaseFallback.changed  sI    ""4);<..++AB/;???#KaAMM#K #Ks   Ac                     | j                   D cg c]  }|j                   c}| j                  k7  r| j                  d        y y c c}w r   )r   r7   r   r)   r!   r   s     r#   _verifyzVerifyingBaseFallback._verify  s:    $(OO4qQ]]4''(LL(4s   Ac                 P    | j                          t        j                  | ||      S r   )r   rm   rx   )r!   rF   r4   s      r#   rx   zVerifyingBaseFallback._getcache  s     !++D(DAAr%   c                 P    | j                          t        j                  | ||      S r   )r   rm   r   r!   rE   rF   s      r#   r   zVerifyingBaseFallback.lookupAll  s     !++D(HEEr%   c                 P    | j                          t        j                  | ||      S r   )r   rm   r   r   s      r#   r   z#VerifyingBaseFallback.subscriptions  s     !//hIIr%   N)rd   re   rf   r)   r   rx   r   r   rZ   r%   r#   r   r     s    L

BFJr%   r   )VerifyingBasec                   p     e Zd Z fdZd fd	Zd Zd Zd Zd Ze	fdZ
e	dfd	Zd
 Zd Zd Zd Z xZS )AdapterLookupBasec                 f    || _         i | _        | j                          t        t        |           y r   )r   	_requiredinit_extendorssuperr   r$   )r!   registry	__class__s     r#   r$   zAdapterLookupBase.__init__  s+    !/1r%   Nc                     t         t        |   d        | j                  j	                         D ]  } |       }||j                  |         | j                  j                          y r   )r   r   r)   r   keysr`   rs   )r!   rt   r   r   s      r#   r)   zAdapterLookupBase.changed  sY    .t4$$& 	$AA}d#	$ 	r%   c                 j    i | _         | j                  j                  D ]  }| j                  |        y r   )
_extendorsr   r   rD   )r!   ps     r#   r   z AdapterLookupBase.init_extendors  s0    )) 	!Aa 	!r%   c                    | j                   }|j                  D ]`  }|j                  |d      }|D cg c]  }|j                  |      s| c}|gz   |D cg c]  }|j                  |      r| c}z   ||<   b y c c}w c c}w NrZ   )r   __iro__rC   isOrExtends)r!   rF   r   i	extendorses         r#   rD   zAdapterLookupBase.add_extendor  s    __
!! 	A"q"-I%Aq)=)=a)@A
 &EqX-A-A!-DE	F qM	 B Fs   A=	A=B.Bc                     | j                   }|j                  D ]*  }|j                  |d      D cg c]	  }||k7  r| c}||<   , y c c}w r   )r   r   rC   )r!   rF   r   r   r   s        r#   rU   z!AdapterLookupBase.remove_extendor  sR    __
!! 	/A(2q"(= /1 !X  /JqM	//s   Ac                     | j                   }|D ]-  }|j                         }||vs|j                  |        d||<   / y r6   )r   weakrefr\   )r!   rE   _refsr   refs        r#   
_subscribezAdapterLookupBase._subscribe  sB     	A))+C%D!c
		r%   c           	      B   t        |      }d }t        |      }| j                  j                  D ]^  }|j                  }|t        |      k\  r|j
                  j                  j                  |      }|sF||   }	t        |	|||d|      }|^ n  | j                  |  |S Nr   )
r>   rA   r   r	   r   r1   r   rC   _lookupr   )
r!   rE   rF   r4   r~   rH   r   rI   r   rJ   s
             r#   r{   z"AdapterLookupBase._uncached_lookup  s    ?H)) 	H((GG$ **5599(CI JZ9dA"$F!	 	"r%   c                 b    | j                  t        t        |      ||      }||S  || }||S |S r   )r   r?   r   )r!   objectsrF   r4   r}   r   r~   s          r#   r   z#AdapterLookupBase.queryMultiAdapter%  s>    ++c*g6$G?N'">Nr%   c           	      z   t        |      }t        |      }i }t        | j                  j                        D ]Z  }|j
                  }|t        |      k\  r|j                  j                  j                  |      }|sF||   }t        ||||d|       \  | j                  |  t        |j                               S r   )r>   rA   rT   r   r	   r   r1   r   rC   
_lookupAllr   items)	r!   rE   rF   rH   r~   r   rI   r   rJ   s	            r#   r   z%AdapterLookupBase._uncached_lookupAll0  s    ?H !2!23 	JH((GG$ **5599(CI Jz8Y5I	J 	"V\\^$$r%   c                 R    | j                  ||      D cg c]  }|d   	 c}S c c}w r   )r   )r!   rE   rF   rw   s       r#   r   zAdapterLookupBase.namesB  s%    "nnXx@A!AAAs   $c           
      ^   t        |      }t        |      }g }t        | j                  j                        D ]c  }|j
                  }|t        |      k\  r||f}n(|j                  j                  j                  |      }|Lt        ||   ||t        |d|       e  | j                  |  |S r   )r>   rA   rT   r   r	   r   r1   r   rC   _subscriptionsr[   r   )r!   rE   rF   rH   r~   r   rI   r   s           r#   r   z)AdapterLookupBase._uncached_subscriptionsE  s    ?H !2!23 	-H++GG$%L	$..99==hG	$75>8Y!1e-	- 	"r%   c                     | j                  t        t        |      |      }|d}|D ]  } ||  	 |S g }|D ]  } || }||j                  |        |S r   )r   r?   r   rB   )r!   r   rF   r   r~   subscription
subscribers          r#   r   zAdapterLookupBase.subscribers\  s}    **3z7+CXNF - 'g&'  F - .)73
)MM*-. r%   r   )rd   re   rf   r$   r)   r   rD   rU   r   r[   r{   r   r   r   r   r   __classcell__r   s   @r#   r   r     sL    2>!

/ 9? . 9? 	%$B.r%   r   c                       e Zd Zy)AdapterLookupNrd   re   rf   rZ   r%   r#   r   r   j      r%   r   c                   D     e Zd ZeZd fd	Zd Zd Z fdZ fdZ	 xZ
S )AdapterRegistryc                 ^    t        j                         | _        t        t        |   |       y r   )r   WeakKeyDictionary_v_subregistriesr   r   r$   )r!   r"   r   s     r#   r$   zAdapterRegistry.__init__r  s%     !( 9 9 ;ot-e4r%   c                 "    d| j                   |<   y r6   r   r   s     r#   _addSubregistryzAdapterRegistry._addSubregistryy  s    #$a r%   c                 <    || j                   v r| j                   |= y y r   r   r   s     r#   _removeSubregistryz"AdapterRegistry._removeSubregistry|  s#    %%%%%a( &r%   c                     | j                   j                  dd      }|D ]  }||vs|j                  |         |D ]  }||vs|j                  |         t        t
        |   |       y )Nr   rZ   )r(   rC   r   r   r   r   r*   )r!   r"   rW   r   r   s       r#   r*   zAdapterRegistry._setBases  st    mmR0 	+A~$$T*	+  	(A|!!$'	( 	ot.u5r%   c                     t         t        |   |       | j                  j	                         D ]  }|j                  |        y r   )r   r   r)   r   r   )r!   r8   subr   s      r#   r)   zAdapterRegistry.changed  s>    ot,-?@((--/ 	,CKK*+	,r%   rj   )rd   re   rf   r   r0   r$   r   r   r*   r)   r   r   s   @r#   r   r   m  s(      K5%)	6, ,r%   r   c                       e Zd Zy)VerifyingAdapterLookupNr   rZ   r%   r#   r   r     r   r%   r   c                       e Zd ZeZy)VerifyingAdapterRegistryN)rd   re   rf   r   r0   rZ   r%   r#   r   r     s	     )Kr%   r   c                     | t         S | S r   r   )xs    r#   r@   r@     s    yr%   c           	          ||k  rB||   j                   D ]/  }| j                  |      }|st        |||||dz   |      }|-|c S  y |D ]-  }	| j                  |	      }|s|j                  |      }|+|c S  y r6   )__sro__rC   r   )
rJ   specsrF   r4   r   lspeccompsr   ifaces
             r#   r   r     s    1u!H$$ 	DNN4(EE5(D!A#qA=H	   	ENN5)EIIdO=H	 r%   c           	         ||k  rEt        ||   j                        D ])  }| j                  |      }|st        |||||dz   |       + y t        |      D ]'  }| j                  |      }|s|j	                  |       ) y r6   )rT   r   rC   r   update)	rJ   r   rF   r~   r   r   r   r   r   s	            r#   r   r     s    1uU1X--. 	CDNN4(E5%61Q3B	C
 h' 	%ENN5)Ee$	%r%   c           
      ,   ||k  rFt        ||   j                        D ]*  }| j                  |      }|st        ||||||dz   |       , y t        |      D ];  }	| j                  |	      }|s|j                  |      }|s+|j	                  |       = y r6   )rT   r   rC   r   extend)
rJ   r   rF   r4   r~   r   r   r   r   r   s
             r#   r   r     s    1uU1X--. 	MDNN4(EueXtVQqS!L	M
 h' 	)ENN5)E		$MM%(	)r%   )#__doc__
__future__r   r   r   r   r   r   r	   
interfacesr
   _compatr   r   r[   r   r   rz   rm   LookupBasePy_zope_interface_coptimizationsr   ImportErrorr   VerifyingBasePyr   r   r   r   r   r   r@   r   r   r   rZ   r%   r#   <module>r      s1   &      ( $ !	L!& L!^ (j jX "$:
J. J8 (*=
a aF	%z 	 !,) !, !,H	. 	 )2 ) )$
%)  $#J$H  *)M*s$   C -C CCC&%C&