ó
2(Vc           @   s½  d  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 e d ƒ Z	 d	 e
 f d
 „  ƒ  YZ e
 ƒ  Z d e
 f d „  ƒ  YZ e Z y d d l m Z Wn e k
 rÖ e Z n Xd e f d „  ƒ  YZ e Z y d d l m Z Wn e k
 r e Z n Xd e
 f d „  ƒ  YZ d e e f d „  ƒ  YZ d e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d S(   s   Adapter management
iÿÿÿÿN(   t
   providedBy(   t	   Interface(   t   ro(   t   _u(   t   _normalize_namet    t   BaseAdapterRegistryc        	   B   s   e  Z d Z d	 Z d d
 „ Z d „  Z e d „  d „  ƒ Z d „  Z d „  Z	 d „  Z
 e d „ Z d d „ Z d „  Z d d „ Z d „  Z RS(   t   lookupt   queryMultiAdaptert   lookup1t   queryAdaptert   adapter_hookt	   lookupAllt   namest   subscriptionst   subscribersi    c         C   s2   g  |  _  g  |  _ i  |  _ |  j ƒ  | |  _ d  S(   N(   t	   _adapterst   _subscriberst	   _providedt   _createLookupt	   __bases__(   t   selft   bases(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt   __init__%   s
    			
c         C   s0   | |  j  d <t j |  ƒ |  _ |  j |  ƒ d  S(   NR   (   t   __dict__R   t   changed(   R   R   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt	   _setBasesT   s    c         C   s   |  j  d S(   NR   (   R   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt   <lambda>Y   s    c         C   s   |  j  | ƒ S(   N(   R   (   R   R   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   Z   s    c         C   sC   |  j  |  ƒ |  _ x* |  j D] } t |  j | ƒ |  j | <q Wd  S(   N(   t   LookupClasst	   _v_lookupt
   _delegatedt   getattrR   (   R   t   name(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   ]   s    c         C   s#   |  j  d 7_  |  j j | ƒ d  S(   Ni   (   t   _generationR   R   (   R   t   originally_changed(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   b   s    c         C   sW  | d  k r& |  j | | | | ƒ d  St t t | ƒ ƒ } t | ƒ } t | ƒ } |  j } x# t | ƒ | k r | j i  ƒ q_ W| | } | | f } xB | D]: }	 | j	 |	 ƒ }
 |
 d  k rÔ i  }
 |
 | |	 <n  |
 } q  W| j	 | ƒ | k r÷ d  S| | | <|  j
 j	 | d ƒ d } | |  j
 | <| d k rF|  j j | ƒ n  |  j |  ƒ d  S(   Ni    i   (   t   Nonet
   unregistert   tuplet   mapt   _convert_None_to_InterfaceR   t   lenR   t   appendt   getR   R   t   add_extendorR   (   R   t   requiredt   providedR    t   valuet   ordert   byordert
   componentst   keyt   kt   dt   n(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt   registerf   s2    	


c   
      C   s¦   t  t t | ƒ ƒ } t | ƒ } t | ƒ } |  j } t | ƒ | k rL d  S| | } | | f } x3 | D]+ } | j | ƒ }	 |	 d  k r d  S|	 } qj W| j | ƒ S(   N(   R%   R&   R'   R   R(   R   R#   R*   (
   R   R,   R-   R    R/   R0   R1   R2   R3   R4   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt
   registered‡   s    	

c         C   s   t  t t | ƒ ƒ } t | ƒ } |  j } | t | ƒ k r@ t S| | } | | f } g  }	 xF | D]> }
 | j |
 ƒ } | d  k r‰ d  S|	 j | |
 f ƒ | } qd W| j | ƒ } | d  k rÅ d  S| d  k	 rá | | k	 rá d  S| | =| sHx5 t	 |	 ƒ D]' \ } }
 | |
 } | rPqû | |
 =qû Wx | rD| d rD| d =q)Wn  |  j
 | d } | d k r‚|  j
 | =|  j j | ƒ n | |  j
 | <|  j |  ƒ d  S(   Niÿÿÿÿi   i    (   R%   R&   R'   R(   R   t   FalseR*   R#   R)   t   reversedR   R   t   remove_extendorR   (   R   R,   R-   R    R.   R/   R0   R1   R2   t   lookupsR3   R4   t   oldt   compR5   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR$   š   sD    	



c         C   s4  t  t t | ƒ ƒ } t } t | ƒ } |  j } x# t | ƒ | k rU | j i  ƒ q3 W| | } | | f } xB | D]: }	 | j |	 ƒ }
 |
 d  k r¨ i  }
 |
 | |	 <n  |
 } qt W| j | d ƒ | f | | <| d  k	 r#|  j	 j | d ƒ d } | |  j	 | <| d k r#|  j
 j | ƒ q#n  |  j |  ƒ d  S(   Ni    i   (    (   R%   R&   R'   t   _BLANKR(   R   R)   R*   R#   R   R   R+   R   (   R   R,   R-   R.   R    R/   R0   R1   R2   R3   R4   R5   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt	   subscribeÊ   s*    	

c         C   sê  t  t t | ƒ ƒ } t | ƒ } |  j } | t | ƒ k r@ d  S| | } | | f } g  } xF | D]> }	 | j |	 ƒ }
 |
 d  k r‰ d  S| j | |	 f ƒ |
 } qd W| j t ƒ } | s¿ d  S| d  k rÔ d } n+ t  g  | D] } | | k	 rÞ | ^ qÞ ƒ } | | k rd  S| r"| | t <n^ | t =x5 t	 | ƒ D]' \ } }	 | |	 }
 |
 rVPq6| |	 =q6Wx | r| d r| d =qdW| d  k	 rÙ|  j
 | t | ƒ t | ƒ } | d k rÙ|  j
 | =|  j j | ƒ qÙn  |  j |  ƒ d  S(   Niÿÿÿÿi    (    (   R%   R&   R'   R(   R   R*   R#   R)   R>   R9   R   R   R:   R   (   R   R,   R-   R.   R/   R0   R1   R2   R;   R3   R4   R<   t   newt   vR=   R5   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt   unsubscribeå   sL    	

	+
!
c         C   s   d d d „  ƒ  Y} | S(   Nt   XXXTwistedFakeOutc           B   s   e  Z i  Z RS(    (   t   __name__t
   __module__t   selfImplied(    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRC   "  s   (    (    (   R   t   _RC   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR*   !  s    (	   s   lookups   queryMultiAdapters   lookup1s   queryAdapters   adapter_hooks	   lookupAlls   namess   subscriptionss   subscribers(    N(   RD   RE   R   R!   R   R   t   propertyR   R   R   R6   R>   R7   R#   R$   R?   RB   R*   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR      s      /					!0	<t   LookupBaseFallbackc           B   st   e  Z d  „  Z d	 d „ Z d „  Z e d	 d „ Z e d	 d „ Z e d	 d „ Z	 e d	 d „ Z
 d „  Z d „  Z RS(
   c         C   s   i  |  _  i  |  _ i  |  _ d  S(   N(   t   _cachet   _mcachet   _scache(   R   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   *  s    		c         C   s+   |  j  j ƒ  |  j j ƒ  |  j j ƒ  d  S(   N(   RJ   t   clearRK   RL   (   R   t   ignored(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   /  s    c         C   su   |  j  j | ƒ } | d  k r4 i  } | |  j  | <n  | rq | j | ƒ } | d  k rh i  } | | | <n  | } n  | S(   N(   RJ   R*   R#   (   R   R-   R    t   cachet   c(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt	   _getcache4  s    	c         C   sÌ   |  j  | | ƒ } t | ƒ } t | ƒ d k rI | j | d t ƒ } n | j t | ƒ t ƒ } | t k r¸ |  j | | | ƒ } t | ƒ d k r¥ | | | d <q¸ | | t | ƒ <n  | d  k rÈ | S| S(   Ni   i    (   RQ   R%   R(   R*   t   _not_in_mappingt   _uncached_lookupR#   (   R   R,   R-   R    t   defaultRO   t   result(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   A  s    c         C   s]   |  j  | | ƒ } | j | t ƒ } | t k rI |  j | f | | | ƒ S| d  k rY | S| S(   N(   RQ   R*   RR   R   R#   (   R   R,   R-   R    RT   RO   RU   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR	   U  s    c         C   s   |  j  | | | | ƒ S(   N(   R   (   R   t   objectR-   R    RT   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR
   `  s    c   	      C   s†   t  | ƒ } |  j | | ƒ } | j | t ƒ } | t k rW |  j | f | | ƒ } n  | d  k	 r‚ | | ƒ } | d  k	 r‚ | Sn  | S(   N(   R    RQ   R*   RR   R   R#   (	   R   R-   RV   R    RT   R,   RO   t   factoryRU   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   c  s    c         C   s   |  j  j | ƒ } | d  k r4 i  } | |  j  | <n  t | ƒ } | j | t ƒ } | t k r} |  j | | ƒ } | | | <n  | S(   N(   RK   R*   R#   R%   RR   t   _uncached_lookupAll(   R   R,   R-   RO   RU   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   q  s    c         C   s   |  j  j | ƒ } | d  k r4 i  } | |  j  | <n  t | ƒ } | j | t ƒ } | t k r} |  j | | ƒ } | | | <n  | S(   N(   RL   R*   R#   R%   RR   t   _uncached_subscriptions(   R   R,   R-   RO   RU   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   €  s    N(   RD   RE   R   R#   R   RQ   R>   R   R	   R
   R   R   R   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRI   (  s   			(   t
   LookupBaset   VerifyingBaseFallbackc           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sI   t  j |  | ƒ |  j j d |  _ g  |  j D] } | j ^ q- |  _ d  S(   Ni   (   RI   R   t	   _registryR   t
   _verify_roR!   t   _verify_generations(   R   R"   t   r(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   œ  s    c         C   s<   g  |  j  D] } | j ^ q
 |  j k r8 |  j d  ƒ n  d  S(   N(   R]   R!   R^   R   R#   (   R   R_   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt   _verify¡  s    c         C   s   |  j  ƒ  t j |  | | ƒ S(   N(   R`   RI   RQ   (   R   R-   R    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRQ   ¦  s    
c         C   s   |  j  ƒ  t j |  | | ƒ S(   N(   R`   RI   R   (   R   R,   R-   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   ª  s    
c         C   s   |  j  ƒ  t j |  | | ƒ S(   N(   R`   RI   R   (   R   R,   R-   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   ®  s    
(   RD   RE   R   R`   RQ   R   R   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR[   –  s
   				(   t   VerifyingBaset   AdapterLookupBasec           B   s€   e  Z d  „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z e	 d „ Z
 e	 d d „ Z d „  Z d	 „  Z d
 „  Z d „  Z RS(   c         C   s3   | |  _  i  |  _ |  j ƒ  t t |  ƒ j ƒ  d  S(   N(   R\   t	   _requiredt   init_extendorst   superRb   R   (   R   t   registry(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   ¼  s    		
c         C   sf   t  t |  ƒ j d  ƒ x< |  j j ƒ  D]+ } | ƒ  } | d  k	 r& | j |  ƒ q& q& W|  j j ƒ  d  S(   N(   Re   Rb   R   R#   Rc   t   keysRB   RM   (   R   RN   R_   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   Â  s    	c         C   s1   i  |  _  x! |  j j D] } |  j | ƒ q Wd  S(   N(   t
   _extendorsR\   R   R+   (   R   t   p(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRd   á  s    	c         C   sŒ   |  j  } x| | j D]q } | j | d ƒ } g  | D] } | j | ƒ r2 | ^ q2 | g g  | D] } | j | ƒ s^ | ^ q^ | | <q Wd  S(   N(    (   Rh   t   __iro__R*   t   isOrExtends(   R   R-   Rh   t   it	   extendorst   e(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR+   æ  s
    	,c         C   sV   |  j  } xF | j D]; } g  | j | d ƒ D] } | | k r, | ^ q, | | <q Wd  S(   N(    (   Rh   Rj   R*   (   R   R-   Rh   Rl   Rn   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR:   ò  s    	c         G   sP   |  j  } x@ | D]8 } | j ƒ  } | | k r | j |  ƒ d | | <q q Wd  S(   Ni   (   Rc   t   weakrefR?   (   R   R,   t   _refsR_   t   ref(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt
   _subscribeù  s    	c   
      C   s½   t  | ƒ } d  } t | ƒ } x‹ |  j j D]} } | j } | t | ƒ k rR q+ n  | j j j | ƒ } | ss q+ n  | | }	 t	 |	 | | | d | ƒ } | d  k	 r+ Pq+ q+ W|  j
 | Œ  | S(   Ni    (   R%   R#   R(   R\   R   R   R   Rh   R*   t   _lookupRr   (
   R   R,   R-   R    RU   R/   Rf   R0   Rm   R1   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRS     s"    	
	c         C   sN   |  j  t t | ƒ | | ƒ } | d  k r. | S| | Œ  } | d  k rJ | S| S(   N(   R   R&   R    R#   (   R   t   objectsR-   R    RT   RW   RU   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR     s    c   	      C   s½   t  | ƒ } t | ƒ } i  } x t |  j j ƒ D]k } | j } | t | ƒ k rX q1 n  | j j j | ƒ } | sy q1 n  | | } t	 | | | | d | ƒ q1 W|  j
 | Œ  t  | j ƒ  ƒ S(   Ni    (   R%   R(   R9   R\   R   R   R   Rh   R*   t
   _lookupAllRr   t   items(	   R   R,   R-   R/   RU   Rf   R0   Rm   R1   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRX   #  s    	
c         C   s'   g  |  j  | | ƒ D] } | d ^ q S(   Ni    (   R   (   R   R,   R-   RP   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   5  s    c      	   C   sÌ   t  | ƒ } t | ƒ } g  } xš t |  j j ƒ D]† } | j } | t | ƒ k rX q1 n  | d  k rp | f } n' | j j j	 | ƒ } | d  k r— q1 n  t
 | | | | t | d | ƒ q1 W|  j | Œ  | S(   Ni    (   R%   R(   R9   R\   R   R   R#   R   Rh   R*   t   _subscriptionsR>   Rr   (   R   R,   R-   R/   RU   Rf   R0   Rm   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRY   8  s     	c         C   sŽ   |  j  t t | ƒ | ƒ } | d  k rK d } xZ | D] } | | Œ  q4 Wn? g  } x6 | D]. } | | Œ  } | d  k	 rX | j | ƒ qX qX W| S(   N(    (   R   R&   R    R#   R)   (   R   Rt   R-   R   RU   t   subscriptiont
   subscriber(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   O  s    N(   RD   RE   R   R#   R   Rd   R+   R:   Rr   R>   RS   R   RX   R   RY   R   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRb   º  s   								t   AdapterLookupc           B   s   e  Z RS(    (   RD   RE   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRz   ]  s   t   AdapterRegistryc           B   s>   e  Z e Z d d  „ Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s)   t  j ƒ  |  _ t t |  ƒ j | ƒ d  S(   N(   Ro   t   WeakKeyDictionaryt   _v_subregistriesRe   R{   R   (   R   R   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   d  s    c         C   s   d |  j  | <d  S(   Ni   (   R}   (   R   R_   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt   _addSubregistryk  s    c         C   s    | |  j  k r |  j  | =n  d  S(   N(   R}   (   R   R_   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt   _removeSubregistryn  s    c         C   s‰   |  j  j d d ƒ } x* | D]" } | | k r | j |  ƒ q q Wx* | D]" } | | k rI | j |  ƒ qI qI Wt t |  ƒ j | ƒ d  S(   NR   (    (   R   R*   R   R~   Re   R{   R   (   R   R   R<   R_   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   r  s    c         C   sA   t  t |  ƒ j | ƒ x$ |  j j ƒ  D] } | j | ƒ q& Wd  S(   N(   Re   R{   R   R}   Rg   (   R   R"   t   sub(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   }  s    (    (	   RD   RE   Rz   R   R   R~   R   R   R   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR{   `  s   			t   VerifyingAdapterLookupc           B   s   e  Z RS(    (   RD   RE   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   „  s   t   VerifyingAdapterRegistryc           B   s   e  Z e Z RS(    (   RD   RE   R   R   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR‚   ‡  s   c         C   s   |  d  k r t S|  Sd  S(   N(   R#   R   (   t   x(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR'   ‹  s    c   
      C   sº   | | k  rn x§ | | j  D]M } |  j | ƒ } | r t | | | | | d | ƒ } | d  k	 rg | Sq q WnH xE | D]= }	 |  j |	 ƒ } | ru | j | ƒ } | d  k	 r² | Squ qu Wd  S(   Ni   (   t   __sro__R*   Rs   R#   (
   R1   t   specsR-   R    Rl   t   lt   spect   compsR_   t   iface(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRs   ‘  s    c   	      C   s¢   | | k  rb x t  | | j ƒ D]; } |  j | ƒ } | r  t | | | | | d | ƒ q  q  Wn< x9 t  | ƒ D]+ } |  j | ƒ } | ro | j | ƒ qo qo Wd  S(   Ni   (   R9   R„   R*   Ru   t   update(	   R1   R…   R-   RU   Rl   R†   R‡   Rˆ   R‰   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRu   £  s    'c   
   	   C   s½   | | k  re xª t  | | j ƒ D]> } |  j | ƒ } | r  t | | | | | | d | ƒ q  q  WnT xQ t  | ƒ D]C }	 |  j |	 ƒ } | rr | j | ƒ } | rµ | j | ƒ qµ qr qr Wd  S(   Ni   (   R9   R„   R*   Rw   t   extend(
   R1   R…   R-   R    RU   Rl   R†   R‡   Rˆ   R‰   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRw   ¯  s    *(   t   __doc__Ro   t   zope.interfaceR    R   R   t   zope.interface._compatR   R   R>   RV   R   RR   RI   t   LookupBasePyt   _zope_interface_coptimizationsRZ   t   ImportErrorR[   t   VerifyingBasePyRa   Rb   Rz   R{   R   R‚   R'   Rs   Ru   Rw   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt   <module>   s>   ÿ 	f

£$			