
    q&f,Z                     >   d 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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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  G d de      Zd Z  G d de      Z! ee       G d de             Z"d  Z#d! Z$d" Z%d# Z& ee       G d$ d%e             Z' ee       G d& d'e             Z( ee       G d( d)e(             Z) ee       G d* d+e(             Z*y,# e$ r d ZY w xY w)-zBasic components support
    )absolute_import)defaultdict   )notifyc                       y N )argkws     N/usr/lib/python3/dist-packages/mercurial/thirdparty/zope/interface/registry.pyr   r      s           )ISpecification)ComponentLookupError)IAdapterRegistration)IComponents)IHandlerRegistration) ISubscriptionAdapterRegistration)IUtilityRegistration)
Registered)Unregistered)	Interface)implementedBy)implementer)implementer_only)
providedBy)AdapterRegistry)CLASS_TYPES)STRING_TYPESc                   $    e Zd Zd Zd Zd Zd Zy)_UnhashableComponentCounterc                 T    |j                         D cg c]  }| c}| _        y c c}w r   )items_data)self	otherdictitems      r   __init__z$_UnhashableComponentCounter.__init__1   s    '0'89td9
9s   	%c                 >    | j                   D ]  \  }}||k(  s|c S  yNr   )r$   )r%   key	componentcounts       r   __getitem__z'_UnhashableComponentCounter.__getitem__5   s,     $

 	IuC	 r   c                     t        | j                        D ]   \  }}|d   |k(  s||f| j                  |<    y  | j                  j                  ||f       y r*   )	enumerater$   append)r%   r,   r-   idatas        r   __setitem__z'_UnhashableComponentCounter.__setitem__;   sX     , 	GAtAw)# )5 0

1	 	

9e,-r   c                     t        | j                        D ]  \  }}|d   |k(  s| j                  |=  y  t        |      r*   )r0   r$   KeyError)r%   r,   r2   r3   s       r   __delitem__z'_UnhashableComponentCounter.__delitem__B   sE     , 	GAtAw)#JJqM	 y!!r   N)__name__
__module____qualname__r(   r.   r4   r7   r	   r   r   r!   r!   .   s    :."r   r!   c                       t        t              S r   )r   intr	   r   r   _defaultdict_intr=   I   s    sr   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	_UtilityRegistrationsc                 h    t        t              | _        || _        || _        | j                          y r   )r   r=   _cache
_utilities_utility_registrations%_UtilityRegistrations__populate_cache)r%   	utilitiesutility_registrationss      r   r(   z_UtilityRegistrations.__init__N   s*    !"23#&;#r   c                     t        | j                  j                               D ]  \  \  }}}|d   }| j                  ||       ! y r*   )iterrC   r#   $_UtilityRegistrations__cache_utility)r%   p_r3   r,   s        r   __populate_cachez&_UtilityRegistrations.__populate_cacheV   sF    "4#>#>#D#D#FG 	/NVaTQI  I.	/r   c                     	 | j                   |   |xx   dz  cc<   y # t        $ r7 t        | j                   |         x}| j                   |<   ||xx   dz  cc<   Y y w xY w)Nr   )rA   	TypeErrorr!   )r%   providedr,   provs       r   __cache_utilityz%_UtilityRegistrations.__cache_utility[   sb    	!KK!),1, 	! ,Gt{{S[G\+]]D4;;x(Oq O		!s    =AAc                 b    | j                   |   }||   }|dz  }|dk(  r||= |dkD  S |||<   |dkD  S )Nr   r   )rA   )r%   rO   r,   r-   s       r   __uncache_utilityz'_UtilityRegistrations.__uncache_utilityd   sV    ;;x( #
A:# qy #(HYqyr   c                 L    	 | j                   |   |   dkD  S # t        $ r Y yw xY w)Nr   F)rA   rN   )r%   rO   r,   s      r   _is_utility_subscribedz,_UtilityRegistrations._is_utility_subscribeds   s2    	;;x(3a77 		s    	##c                     | j                  ||      }|||f| j                  ||f<   | j                  j                  d|||       |s| j                  j	                  d||       | j                  ||       y Nr	   )rU   rC   rB   register	subscriberI   )r%   rO   namer,   infofactory
subscribeds          r   registerUtilityz%_UtilityRegistrations.registerUtilityz   sq    009E
8A48P##Xt$45  XtY?OO%%b(I>Xy1r   c                     | j                   ||f= | j                  j                  d||       | j                  ||      }|s| j                  j	                  d||       y y rW   )rC   rB   
unregister&_UtilityRegistrations__uncache_utilityunsubscribe)r%   rO   rZ   r,   r]   s        r   unregisterUtilityz'_UtilityRegistrations.unregisterUtility   s[    ''4(89""2x6++Hi@
OO''Hi@ r   N)
r8   r9   r:   r(   rD   rI   ra   rU   r^   rc   r	   r   r   r?   r?   L   s&     /
!	2Ar   r?   c                   8    e Zd ZdZd#dZd Z fdZd Zd Ze	d        Z
d Zd	 Z e	d
 d       Z	 	 d$dZ	 	 d%dZd Zd&dZd'dZd Zd Z	 	 d(dZ	 	 d)dZd Zd&dZd'dZ	 	 d&dZd'dZd Z	 	 	 d(dZd Z	 	 d)dZd Z 	 	 	 d*dZ!d  Z"d+d!Z#d" Z$ xZ%S ),
ComponentsNc                     t        |t              sJ || _        | j                          | j	                          t        |      | _        d | _        y r   )
isinstancer   r8   _init_registries_init_registrationstuple	__bases___v_utility_registrations_cache)r%   rZ   basess      r   r(   zComponents.__init__   sF     $---  "u.2+r   c                 P    d| j                   j                  d| j                  dS )N< >)	__class__r8   r%   s    r   __repr__zComponents.__repr__   s     NN33T]]CCr   c                     t         t        |          }|d   j                         D ci c]  \  }}|j	                  d      s|| }}}t        |      }||d<   t        |      S c c}}w )Nr   _v_)superre   
__reduce__r#   
startswithlistrj   )r%   	reductionkvfiltered_staterr   s        r   rx   zComponents.__reduce__   su    
 *d68	 ,5Q<+=+=+? 641a!"e!4 Q$ 6 6O	%	!Y	6s   A&c                 @    t               | _        t               | _        y r   )r   adaptersrE   rs   s    r   rh   zComponents._init_registries   s     ()(*r   c                 <    i | _         i | _        g | _        g | _        y r   )rC   _adapter_registrations_subscription_registrations_handler_registrationsrs   s    r   ri   zComponents._init_registrations   s"    &(#&(#+-(&(#r   c                     | j                   }|0|j                  | j                  us|j                  | j                  ur't	        | j                  | j                        x}| _         |S r   )rl   rB   rE   rC   r?   )r%   caches     r   _utility_registrations_cachez'Components._utility_registrations_cache   se     33Mt~~5++43N3NN:O++;- -ED7 r   c                 :    | j                   j                  dd      S )Nrk   r	   )__dict__getrs   s    r   	_getBaseszComponents._getBases   s    }}  b11r   c                    t        |D cg c]  }|j                   c}      | j                  _        t        |D cg c]  }|j                   c}      | j                  _        t        |      | j                  d<   y c c}w c c}w )Nrk   )rj   r   rk   rE   r   )r%   rm   bases      r   	_setBaseszComponents._setBases   sn    "'&+)-"DMM)- #.#(',*.#DNN*. $/ %*5\k"	)-*.s
   A>Bc                 "    | j                         S r   )r   rs   s    r   <lambda>zComponents.<lambda>   s    T^^% r   c                 $    | j                  |      S r   )r   )r%   rm   s     r   r   zComponents.<lambda>   s    DNN51 r   c                 r   |r|rt        d       |       }|t        |      }|dk(  rt        |      }| j                  j	                  ||f      }|!|d d ||fk(  ry | j                  |d   ||       | j                  j                  |||||       |r#t        t        t        | |||||                   y y )N$Can't specify factory and component. r   r   )rN   _getUtilityProvided_getNamerC   r   rc   r   r^   r   r   UtilityRegistration)r%   r,   rO   rZ   r[   eventr\   regs           r   r^   zComponents.registerUtility   s     FGG	I*95H3;I&D))--x.>??2Aw9d++""3q68T:))99dItW	6 :#D(D)T$+-  r   c           
      H   |r|rt        d       |       }||t        d      t        |      }| j                  j                  ||f      }|
|	||d   k7  ry||d   }| j                  j                  |||       t        t        t        | |||g|dd                y)Nr   z3Must specify one of component, factory and providedr   Fr   T)	rN   r   rC   r   r   rc   r   r   r   )r%   r,   rO   rZ   r\   olds         r   rc   zComponents.unregisterUtility   s     FGG	I  !+ , ,*95H))--x.>?Ki3'3q61AI 	));;dI	' 	|hiJ#ab'J 	 r   c              #      K   t        | j                  j                               D ]  \  \  }}}t        | ||g|   y wr   )rH   rC   r#   r   )r%   rO   rZ   r3   s       r   registeredUtilitieszComponents.registeredUtilities  sK     t2288:;	C ht%dHdBTBB	Cs   A Ac                 >    | j                   j                  d|||      S rW   )rE   lookup)r%   rO   rZ   defaults       r   queryUtilityzComponents.queryUtility  s    ~~$$R4AAr   c                 \    | j                   j                  d||      }|t        ||      |S rW   )rE   r   r   )r%   rO   rZ   utilitys       r   
getUtilityzComponents.getUtility  s1    ..''Hd;?&x66r   c              #   `   K   | j                   j                  d|      D ]  \  }}||f  y wrW   )rE   	lookupAll)r%   	interfacerZ   r   s       r   getUtilitiesForzComponents.getUtilitiesFor$  s4     !^^55b)D 	 MD'-	 s   ,.c                 :    | j                   j                  d|      S rW   )rE   subscriptions)r%   r   s     r   getAllUtilitiesRegisteredForz'Components.getAllUtilitiesRegisteredFor(  s    ~~++B	::r   c                    |t        |      }t        ||      }|dk(  rt        |      }||f| j                  |||f<   | j                  j                  ||||       |r#t        t        t        | |||||                   y y Nr   )	_getAdapterProvided_getAdapterRequiredr   r   r   rX   r   r   AdapterRegistrationr%   r\   requiredrO   rZ   r[   r   s          r   registerAdapterzComponents.registerAdapter+  s    *73H&w93;G$D(/ 	##Xx$> 	&x4A:#D(Hd$+T3  r   c           
      `   ||t        d      t        |      }||t        d      t        ||      }| j                  j	                  |||f      }|
|	||d   k7  ry| j                  |||f= | j
                  j                  |||       t        t        t        | |||g|              y)N(Must specify one of factory and provided(Must specify one of factory and requiredr   FT)
rN   r   r   r   r   r   r`   r   r   r   )r%   r\   r   rO   rZ   r   s         r   unregisterAdapterzComponents.unregisterAdapter=  s      JKK*73H7?FGG&w9))--x4.HIKg1%Q/''8T(BC  8T:|h$ &!$& 	
 r   c           	   #      K   t        | j                  j                               D ]  \  \  }}}\  }}t        | |||||         y wr   )rH   r   r#   r   )r%   r   rO   rZ   r,   r[   s         r   registeredAdapterszComponents.registeredAdaptersX  sV     t2288:;	7 'h$):)T%dHh&/7 7	7s   AAc                 >    | j                   j                  ||||      S r   )r   queryAdapter)r%   objectr   rZ   r   s        r   r   zComponents.queryAdapter^  s    }}))&)T7KKr   c                 ^    | j                   j                  |||      }|t        |||      |S r   )r   r   r   )r%   r   r   rZ   adapters        r   
getAdapterzComponents.getAdaptera  s3    --,,VYE?&vy$??r   c                 >    | j                   j                  ||||      S r   )r   queryMultiAdapter)r%   objectsr   rZ   r   s        r   r   zComponents.queryMultiAdapterg  s"    }}..Yg/ 	/r   c                 ^    | j                   j                  |||      }|t        |||      |S r   )r   r   r   )r%   r   r   rZ   r   s        r   getMultiAdapterzComponents.getMultiAdapterl  s3    --11'9dK?&w	4@@r   c              #      K   | j                   j                  t        t        t        |            |      D ]  \  }} || }|||f  y wr   )r   r   rz   mapr   )r%   r   rO   rZ   r\   r   s         r   getAdapterszComponents.getAdaptersr  sV     !]]44Z)* 	$MD' w'G"Gm#	$s   AA	Ac                    |rt        d      |t        |      }t        ||      }| j                  j	                  |||||f       | j
                  j                  |||       |r#t        t        t        | |||||                   y y )N'Named subscribers are not yet supported)
rN   r   r   r   r1   r   rY   r   r   SubscriptionRegistrationr   s          r   registerSubscriptionAdapterz&Components.registerSubscriptionAdapterz  s     EFF*73H&w9((//xw5	 	(G<:(x4)0$8  r   c              #   J   K   | j                   D ]  }t        | g|   y wr   )r   r   r%   r3   s     r   registeredSubscriptionAdaptersz)Components.registeredSubscriptionAdapters  s+     44 	8D*47$77	8   !#c                 t   |rt        d      ||t        d      t        |      }||t        d      t        ||      }|7| j                  D 	cg c]  \  }}}}}	||k(  r||k(  s|||||	f }
}}}}}	n;| j                  D 	cg c]  \  }}}}}	||k(  r
||k(  r||k(  s|||||	f  }
}}}}}	t	        |
      t	        | j                        k(  ry|
| j                  d d  | j
                  j                  |||       t        t        t        | ||||d                   yc c}	}}}}w c c}	}}}}w )Nr   r   r   Fr   T)
rN   r   r   r   lenr   rb   r   r   r   )r%   r\   r   rO   rZ   rrJ   nfr2   news              r   unregisterSubscriptionAdapterz(Components.unregisterSubscriptionAdapter  sn    EFF JKK*73H7?FGG&w9? 66 &1aA=Q(] q!Q? C  66 &1aA=Q(]qG| q!Q? C  s8s4;;<< /2((+!!(Hg>|$T8Xt%,b2 	
 1s   D(#D1c                 :    | j                   j                  ||      S r   r   subscribers)r%   r   rO   s      r   r   zComponents.subscribers  s    }}(((;;r   c                     |rt        d      t        ||      }| j                  j                  ||||f       | j                  j                  |d |       |r"t        t        t        | ||||                   y y )Nz$Named handlers are not yet supported)	rN   r   r   r1   r   rY   r   r   HandlerRegistration)r%   r\   r   rZ   r[   r   s         r   registerHandlerzComponents.registerHandler  s~     BCC&w9##**tWd+	 	$8:#D(D'4H  r   c              #   J   K   | j                   D ]  }t        | g|   y wr   )r   r   r   s     r   registeredHandlerszComponents.registeredHandlers  s+     // 	3D%d2T22	3r   c                    |rt        d      ||t        d      t        ||      }|.| j                  D cg c]  \  }}}}||k7  r||||f }}}}}n2| j                  D cg c]  \  }}}}||k(  r||k(  s||||f }}}}}t        |      t        | j                        k(  ry|| j                  d d  | j                  j                  |d |       t        t        t        | |||d                   yc c}}}}w c c}}}}w )Nr   r   Fr   T)	rN   r   r   r   r   rb   r   r   r   )	r%   r\   r   rZ   r   r   r   r2   r   s	            r   unregisterHandlerzComponents.unregisterHandler  s0   EFF7?FGG&w9? 11 #1a8m q!Q< C  11 #1a=Q'\ q!Q< C  s8s46677),##A&!!(D':|hgrB 	 -s   C;
*D
c                 <    | j                   j                  |d        y r   r   )r%   r   s     r   handlezComponents.handle  s    !!'40r   )r   r	   )NNr   r   TN)NNr   N)r   N)r   )NNr   r   T)NNNr   )Nr   r   T)NNr   )&r8   r9   r:   rl   r(   rt   rx   rh   ri   propertyr   r   r   rk   r^   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)rr   s   @r   re   re      s    &*"3D +) 
 
22 %1
I
 CF6:: EH"&>C
B ; @D26$ )-=@67L :="&/
$ FJ36*.(8 59=@(T< +/'*""3 D1r   re   c                 :    	 | j                   S # t        $ r Y yw xY wr   )__component_name__AttributeError)r,   s    r   r   r     s%    +++ s    	c                 f    t        t        |             }t        |      dk(  r|d   S t        d      )Nr   r   zWThe utility doesn't provide a single interface and no provided interface was specified.)rz   r   r   rN   )r,   rO   s     r   r   r      s9    Jy)*H
8}{
	34 4r   c                 f    t        t        |             }t        |      dk(  r|d   S t        d      )Nr   r   zaThe adapter factory doesn't implement a single interface and no provided interface was specified.)rz   r   r   rN   )r\   rO   s     r   r   r     s9    M'*+H
8}{
	34 4r   c                 f   |	 | j                   }n t        j                  |      rt        d      g }|D ]X  }|t
        }n<t        j                  |      s't        |t              rt        |      }nt        d      |j                  |       Z t        |      S # t        $ r t        d      w xY w)NzoThe adapter factory doesn't have a __component_adapts__ attribute and no required specifications were specifiedzLthe required argument should be a list of interfaces, not a single interfacez8Required specification must be a specification or class.)__component_adapts__r   rN   r   r   r   rg   r   r   r1   rj   )r\   r   resultr   s       r   r   r     s    	33H 
	"	"8	, = > 	> F 
9A**1-![)!!$ !: " " 	a
 =+  	J 	s   B B0c                   D    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zy)r   Nc                 ^    ||||||f\  | _         | _        | _        | _        | _        | _        y r   )registryrO   rZ   r,   r[   r\   )r%   r   rO   rZ   r,   docr\   s          r   r(   zUtilityRegistration.__init__/  s2     xy#w>	ty$.$)	r   c                 "   | j                   j                  d| j                  dt        | j                  dd       d| j
                  dt        | j                  dt        | j                              d| j                  d| j                  dS )N(, r8   ))
rr   r8   r   getattrrO   rZ   r,   reprr\   r[   rs   s    r   rt   zUtilityRegistration.__repr__4  s\    ''z48$))
D4HIdii 	r   c                     t        |       S r   idrs   s    r   __hash__zUtilityRegistration.__hash__=      $xr   c                 0    t        |       t        |      k(  S r   r   r%   others     r   __eq__zUtilityRegistration.__eq__@      DzT%[((r   c                 0    t        |       t        |      k7  S r   r   r   s     r   __ne__zUtilityRegistration.__ne__C  r  r   c                 0    t        |       t        |      k  S r   r   r   s     r   __lt__zUtilityRegistration.__lt__F      DzDK''r   c                 0    t        |       t        |      k  S r   r   r   s     r   __le__zUtilityRegistration.__le__I  r  r   c                 0    t        |       t        |      kD  S r   r   r   s     r   __gt__zUtilityRegistration.__gt__L  r  r   c                 0    t        |       t        |      k\  S r   r   r   s     r   __ge__zUtilityRegistration.__ge__O  r  r   r   r8   r9   r:   r(   rt   r   r   r  r  r  r
  r  r	   r   r   r   r   ,  s/    ?
))()()r   r   c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)r   c                 ^    ||||||f\  | _         | _        | _        | _        | _        | _        y r   )r   r   rO   rZ   r\   r[   )r%   r   r   rO   rZ   r,   r   s          r   r(   zAdapterRegistration.__init__U  s2     x4C?	t}di	tyr   c                    | j                   j                  d| j                  dddj                  | j                  D cg c]  }|j                   c}      z   dz   dt        | j                  dd       d| j                  dt        | j                  dt        | j                              d| j                  dS c c}w Nr   r   []r8   r   )rr   r8   r   joinr   r   rO   rZ   r\   r   r[   r%   r   s     r   rt   zAdapterRegistration.__repr__Z  s    NN##MM$))?AQZZ?@@3FDMM:t4diiDLL*d4<<.@A499 	 @s   B>c                     t        |       S r   r   rs   s    r   r   zAdapterRegistration.__hash__c  r   r   c                 0    t        |       t        |      k(  S r   r   r   s     r   r   zAdapterRegistration.__eq__f  r  r   c                 0    t        |       t        |      k7  S r   r   r   s     r   r  zAdapterRegistration.__ne__i  r  r   c                 0    t        |       t        |      k  S r   r   r   s     r   r  zAdapterRegistration.__lt__l  r  r   c                 0    t        |       t        |      k  S r   r   r   s     r   r  zAdapterRegistration.__le__o  r  r   c                 0    t        |       t        |      kD  S r   r   r   s     r   r
  zAdapterRegistration.__gt__r  r  r   c                 0    t        |       t        |      k\  S r   r   r   s     r   r  zAdapterRegistration.__ge__u  r  r   Nr  r	   r   r   r   r   R  s0    @
))()()r   r   c                       e Zd Zy)r   N)r8   r9   r:   r	   r   r   r   r   x  s    r   r   c                   ,    e Zd Zd Zed        ZdZd Zy)r   c                 P    |||||f\  | _         | _        | _        | _        | _        y r   )r   r   rZ   handlerr[   )r%   r   r   rZ   r   r   s         r   r(   zHandlerRegistration.__init__  s)    xw3	ty$,	r   c                     | j                   S r   )r   rs   s    r   r\   zHandlerRegistration.factory  s    ||r   Nc                 V   | j                   j                  d| j                  dddj                  | j                  D cg c]  }|j                   c}      z   dz   d| j
                  dt        | j                  dt        | j                              d| j                  dS c c}w r  )
rr   r8   r   r  r   rZ   r   r\   r   r[   r  s     r   rt   zHandlerRegistration.__repr__  su    NN##MM$))?AQZZ?@@3FIIDLL*d4<<.@A499 	 @s   B&)r8   r9   r:   r(   r   r\   rO   rt   r	   r   r   r   r   }  s'    4   Hr   r   N)+__doc__
__future__r   collectionsr   r   r   ImportError
interfacesr   r   r   r   r   r   r   r   r   r   r   declarationsr   r   r   r   r   r   _compatr   r   r   r!   r=   r?   re   r   r   r   r   r   r   r   r   r	   r   r   <module>r*     sF   ' #! ' , , # , 8 , " $   ' % * $ $   !"& "6@AF @AF [g1 g1 g1T448 !"#)& #) ##)J !"#)& #) ##)J 23	2 	 4	 &'-  (O  ! !s   D DD