ó
ÔËÞKc           @   sj  d  Z  d d l Z d d l m Z m Z m Z e Z d e f d „  ƒ  YZ e ƒ  Z	 d e f d „  ƒ  YZ
 e
 Z d e
 f d	 „  ƒ  YZ e Z y d d l Z Wn e k
 r® n Xd d
 l m Z m Z d 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 „  Z d S(   sJ   Adapter management

$Id: adapter.py 110699 2010-04-09 08:16:17Z regebro $
iÿÿÿÿN(   t
   providedByt	   Interfacet   rot   BaseAdapterRegistryc        	   B   s   e  Z d Z d	 Z d d
 „ Z d „  Z e d „  d „  ƒ Z d „  Z d „  Z	 d „  Z
 d 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	   _setBasesQ   s    c         C   s   |  j  d S(   NR   (   R   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt   <lambda>V   s    c         C   s   |  j  | ƒ S(   N(   R   (   R   R   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   W   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   Z   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   _   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_Interfacet   _normalize_namet   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   registerc   s2    	


u    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-   R.   R/   R0   R1   R2   (    (    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  }	 g  }	 xF | D]> }
 | j |
 ƒ } | d  k r d  S|	 j | |
 f ƒ | } qj W| j | ƒ } | d  k rË d  S| d  k	 rç | | k	 rç d  S| | =| sNx5 t	 |	 ƒ D]' \ } }
 | |
 } | r!Pq| |
 =qWx | rJ| d rJ| 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-   R.   R/   R0   t   lookupsR1   R2   t   oldt   compR3   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR!   —   sF    	



c         C   s4  t  t t | ƒ ƒ } d } 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(   Nu    i    i   (    (   R"   R#   R$   R&   R   R'   R(   R    R   R   R)   R   (   R   R*   R+   R,   R   R-   R.   R/   R0   R1   R2   R3   (    (    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  } g  } xF | D]> }	 | j |	 ƒ }
 |
 d  k r d  S| j | |	 f ƒ |
 } qj W| j d ƒ } | sÅ d  S| d  k rÚ d } n+ t  g  | D] } | | k	 rä | ^ qä ƒ } | | k rd  S| r(| | d <nm d | k r>| d =n  x5 t | ƒ D]' \ } }	 | |	 }
 |
 rkPqK| |	 =qKWx | r”| d r”| d =qyW| d  k	 rî|  j	 | t | ƒ t | ƒ } | d k rî|  j	 | =|  j
 j | ƒ qîn  |  j |  ƒ d  S(   Nu    iÿÿÿÿi    (    (   R"   R#   R$   R&   R   R(   R    R'   R7   R   R   R8   R   (   R   R*   R+   R,   R-   R.   R/   R0   R9   R1   R2   R:   t   newt   vR;   R3   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt   unsubscribeä   sP    	

	+

!
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.pyR@   #  s   (    (    (   R   t   _R@   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR(   "  s    (	   s   lookups   queryMultiAdapters   lookup1s   queryAdapters   adapter_hooks	   lookupAlls   namess   subscriptionss   subscribers(    N(   RA   RB   R   R   R   R   t   propertyR   R   R   R4   R5   R    R!   R<   R?   R(   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR      s      /					!2	>t   LookupBasePyc           B   st   e  Z d  „  Z d
 d „ Z d „  Z d d
 d „ Z d d
 d „ Z d d
 d „ Z d 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(   RG   t   clearRH   RI   (   R   t   ignored(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   0  s    c         C   su   |  j  j | ƒ } | d  k r4 i  } | |  j  | <n  | rq | j | ƒ } | d  k rh i  } | | | <n  | } n  | S(   N(   RG   R(   R    (   R   R+   R   t   cachet   c(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt	   _getcache5  s    	u    c         C   sÀ   |  j  | | ƒ } t | ƒ d k r= | 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    (   RN   R&   R(   t   _not_in_mappingR"   t   _uncached_lookupR    (   R   R*   R+   R   t   defaultRL   t   result(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   B  s    c         C   s]   |  j  | | ƒ } | j | t ƒ } | t k rI |  j | f | | | ƒ S| d  k rY | S| S(   N(   RN   R(   RO   R   R    (   R   R*   R+   R   RQ   RL   RR   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   U  s    c         C   s   |  j  | | | | ƒ S(   N(   R   (   R   t   objectR+   R   RQ   (    (    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    RN   R(   RO   R   R    (	   R   R+   RS   R   RQ   R*   RL   t   factoryRR   (    (    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(   RH   R(   R    R"   RO   t   _uncached_lookupAll(   R   R*   R+   RL   RR   (    (    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(   RI   R(   R    R"   RO   t   _uncached_subscriptions(   R   R*   R+   RL   RR   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   €  s    N(   RA   RB   R   R    R   RN   R   R   R   R   R	   R   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRF   )  s   			t   VerifyingBasePyc           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   (   RF   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(   RY   R   RZ   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\   RF   RN   (   R   R+   R   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRN   œ  s    
c         C   s   |  j  ƒ  t j |  | | ƒ S(   N(   R\   RF   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\   RF   R   (   R   R*   R+   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   ¤  s    
(   RA   RB   R   R\   RN   R	   R   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRW     s
   				(   t
   LookupBaset   VerifyingBaset   AdapterLookupBasec           B   s€   e  Z d  „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d d „ Z	 d d d „ Z
 d	 „  Z d
 „  Z d „  Z d „  Z RS(   c         C   s3   | |  _  i  |  _ |  j ƒ  t t |  ƒ j ƒ  d  S(   N(   RX   t	   _requiredt   init_extendorst   superR_   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(   Rb   R_   R   R    R`   t   keysR?   RJ   (   R   RK   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
   _extendorsRX   R   R)   (   R   t   p(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRa   Ù  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(    (   Re   t   __iro__R(   t   isOrExtends(   R   R+   Re   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(    (   Re   Rg   R(   (   R   R+   Re   Ri   Rk   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR8   ê  s    	c         G   sP   |  j  } x@ | D]8 } | j ƒ  } | | k r | j |  ƒ d | | <q q Wd  S(   Ni   (   R`   t   weakrefR<   (   R   R*   t   _refsR[   t   ref(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt
   _subscribeñ  s    	u    c   
      C   s±   d  } t | ƒ } x‹ |  j j D]} } | j } | t | ƒ k rF q n  | j j j | ƒ } | sg q n  | | }	 t |	 | | | d | ƒ } | d  k	 r Pq q W|  j	 | Œ  | S(   Ni    (
   R    R&   RX   R   R   R   Re   R(   t   _lookupRo   (
   R   R*   R+   R   RR   R-   Rc   R.   Rj   R/   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRP   ù  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   RQ   RT   RR   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR     s    c   	      C   s±   t  | ƒ } i  } x t |  j j ƒ D]k } | j } | t  | ƒ k rL q% n  | j j j | ƒ } | sm q% n  | | } t | | | | d | ƒ q% W|  j	 | Œ  t
 | j ƒ  ƒ S(   Ni    (   R&   R7   RX   R   R   R   Re   R(   t
   _lookupAllRo   R"   t	   iteritems(	   R   R*   R+   R-   RR   Rc   R.   Rj   R/   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRU     s    	
c         C   s'   g  |  j  | | ƒ D] } | d ^ q S(   Ni    (   R	   (   R   R*   R+   RM   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR
   +  s    c      	   C   sÀ   t  | ƒ } g  } xš t |  j j ƒ D]† } | j } | t  | ƒ k rL q% n  | d  k rd | f } n' | j j j | ƒ } | d  k r‹ q% n  t	 | | | | d | d | ƒ q% W|  j
 | Œ  | S(   Nu    i    (   R&   R7   RX   R   R   R    R   Re   R(   t   _subscriptionsRo   (   R   R*   R+   R-   RR   Rc   R.   Rj   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRV   .  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   Rq   R+   R   RR   t   subscriptiont
   subscriber(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   D  s    N(   RA   RB   R   R    R   Ra   R)   R8   Ro   RP   R   RU   R
   RV   R   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR_   ²  s   								t   AdapterLookupc           B   s   e  Z RS(    (   RA   RB   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRw   R  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(   Rl   t   WeakKeyDictionaryt   _v_subregistriesRb   Rx   R   (   R   R   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   Y  s    c         C   s   d |  j  | <d  S(   Ni   (   Rz   (   R   R[   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt   _addSubregistry`  s    c         C   s    | |  j  k r |  j  | =n  d  S(   N(   Rz   (   R   R[   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt   _removeSubregistryc  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{   Rb   Rx   R   (   R   R   R:   R[   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   g  s    c         C   sA   t  t |  ƒ j | ƒ x$ |  j j ƒ  D] } | j | ƒ q& Wd  S(   N(   Rb   Rx   R   Rz   Rd   (   R   R   t   sub(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR   r  s    (    (	   RA   RB   Rw   R   R   R{   R|   R   R   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRx   U  s   			t   VerifyingAdapterLookupc           B   s   e  Z RS(    (   RA   RB   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyR~   y  s   t   VerifyingAdapterRegistryc           B   s   e  Z e Z RS(    (   RA   RB   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)   t  |  t ƒ r t |  ƒ St d ƒ ‚ d  S(   Ns(   name must be a regular or unicode string(   t
   isinstancet
   basestringt   unicodet	   TypeError(   R   (    (    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(   Rp   R    (
   R/   t   specsR+   R   Ri   t   lt   spect   compsR[   t   iface(    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRp   Œ  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   (   R7   R…   R(   Rr   t   update(	   R/   R†   R+   RR   Ri   R‡   Rˆ   R‰   RŠ   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRr   ž  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   (   R7   R…   R(   Rt   t   extend(
   R/   R†   R+   R   RR   Ri   R‡   Rˆ   R‰   RŠ   (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyRt   ª  s    *(   t   __doc__Rl   t   zope.interfaceR    R   R   RS   t   _markerR   RO   RF   R]   RW   R^   t   _zope_interface_coptimizationst   ImportErrorR_   Rw   Rx   R~   R   R$   R%   Rp   Rr   Rt   (    (    (    s:   /usr/lib/python2.7/dist-packages/zope/interface/adapter.pyt   <module>   s2   ÿ 	e $				