
    ed                        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gZ G d d      Zd Z G d d      Z ee
       G d d             Zd Zd Zd Z d Z! ee       G d d              Z" ee	       G d! d"             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
    )defaultdict)notifyc                       y N )argkws     9/usr/lib/python3/dist-packages/zope/interface/registry.pyr   r              )ISpecification)ComponentLookupError)IAdapterRegistration)IComponents)IHandlerRegistration) ISubscriptionAdapterRegistration)IUtilityRegistration)
Registered)Unregistered)	Interface)implementedBy)implementer)implementer_only)
providedBy)AdapterRegistry
Componentsc                   $    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__2   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__6   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'   )r-   r!   KeyError)r"   r)   r/   r0   s       r
   __delitem__z'_UnhashableComponentCounter.__delitem__C   sE     , 	GAtAw)#JJqM	 y!!r   N)__name__
__module____qualname__r%   r+   r1   r4   r   r   r
   r   r   /   s    :."r   r   c                       t        t              S r   )r   intr   r   r
   _defaultdict_intr:   J   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__O   s*    !"23#&;#r   c                     t        | j                  j                               D ]  \  \  }}}|d   }| j                  ||       ! y r'   )iterr@   r    $_UtilityRegistrations__cache_utility)r"   p_r0   r)   s        r
   __populate_cachez&_UtilityRegistrations.__populate_cacheW   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)N   )r>   	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 )NrK   r   )r>   )r"   rM   r)   r*   s       r
   __uncache_utilityz'_UtilityRegistrations.__uncache_utilitye   sV    ;;x( #
A:# qy #(HYqyr   c                 L    	 | j                   |   |   dkD  S # t        $ r Y yw xY w)Nr   F)r>   rL   )r"   rM   r)   s      r
   _is_utility_subscribedz,_UtilityRegistrations._is_utility_subscribedt   s2    	;;x(3a77 		s    	##c                     | j                  ||      }|||f| j                  ||f<   | j                  j                  d|||       |s| j                  j	                  d||       | j                  ||       y Nr   )rS   r@   r?   register	subscriberF   )r"   rM   namer)   infofactory
subscribeds          r
   registerUtilityz%_UtilityRegistrations.registerUtility{   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 rU   )r@   r?   
unregister&_UtilityRegistrations__uncache_utilityunsubscribe)r"   rM   rX   r)   r[   s        r
   unregisterUtilityz'_UtilityRegistrations.unregisterUtility   s[    ''4(89""2x6++Hi@
OO''Hi@ r   N)
r5   r6   r7   r%   rA   rF   r_   rS   r\   ra   r   r   r
   r<   r<   M   s&     /
!	2Ar   r<   c                   @    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$d-d#Z% xZ&S ).r   Nc                     t        |t              sJ || _        | j                          | j	                          t        |      | _        d | _        y r   )
isinstancestrr5   _init_registries_init_registrationstuple	__bases___v_utility_registrations_cache)r"   rX   basess      r
   r%   zComponents.__init__   sF     $$$$  "u.2+r   c                 b    dj                  | j                  j                  | j                        S )Nz<{} {}>)format	__class__r5   r"   s    r
   __repr__zComponents.__repr__   s#     7 7GGr   c                     t         |          }|d   j                         D ci c]  \  }}|j                  d      s|| }}}t	        |      }||d<   t        |      S c c}}w )N   _v_)super
__reduce__r    
startswithlistrh   )r"   	reductionkvfiltered_statern   s        r
   ru   zComponents.__reduce__   ss    
 G&(	 ,5Q<+=+=+? 641a!"e!4 Q$ 6 6O	%	!Y	6s   A"c                 @    t               | _        t               | _        y r   )r   adaptersrB   ro   s    r
   rf   zComponents._init_registries   s     ()(*r   c                 <    i | _         i | _        g | _        g | _        y r   )r@   _adapter_registrations_subscription_registrations_handler_registrationsro   s    r
   rg   zComponents._init_registrations   s"    &(#&(#+-(&(#r   c                     | j                   }|0|j                  | j                  us|j                  | j                  ur't	        | j                  | j                        x}| _         |S r   )rj   r?   rB   r@   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 )Nri   r   )__dict__getro   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 )Nri   )rh   r}   ri   rB   r   )r"   rk   bases      r
   	_setBaseszComponents._setBases   sn    "'&+)-"DMM)- #.#(',*.#DNN*. $/ %*5\k"	)-*.s
   A>Bc                 "    | j                         S r   )r   ro   s    r
   <lambda>zComponents.<lambda>   s    T^^% r   c                 $    | j                  |      S r   )r   )r"   rk   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. rr   r   )rL   _getUtilityProvided_getNamer@   r   ra   r   r\   r   r   UtilityRegistration)r"   r)   rM   rX   rY   eventrZ   regs           r
   r\   zComponents.registerUtility   s     FGG	I*95H2: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   FrK   T)	rL   r   r@   r   r   ra   r   r   r   )r"   r)   rM   rX   rZ   olds         r
   ra   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   )rE   r@   r    r   )r"   rM   rX   r0   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 rU   )rB   lookup)r"   rM   rX   defaults       r
   queryUtilityzComponents.queryUtility  s    ~~$$R4AAr   c                 \    | j                   j                  d||      }|t        ||      |S rU   )rB   r   r   )r"   rM   rX   utilitys       r
   
getUtilityzComponents.getUtility  s1    ..''Hd;?&x66r   c              #   X   K   | j                   j                  d|      E d {    y 7 wrU   )rB   	lookupAllr"   	interfaces     r
   getUtilitiesForzComponents.getUtilitiesFor%  s      >>++B	:::s    *(*c                 :    | j                   j                  d|      S rU   )rB   subscriptionsr   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}   rV   r   r   AdapterRegistrationr"   rZ   requiredrM   rX   rY   r   s          r
   registerAdapterzComponents.registerAdapter+  s    *73H&w92: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)
rL   r   r   r   r   r}   r^   r   r   r   )r"   rZ   r   rM   rX   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   )rE   r   r    r   )r"   r   rM   rX   r)   rY   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   rX   r   s        r
   r   zComponents.queryAdapter^  s    }}))&)T7KKr   c                 ^    | j                   j                  |||      }|t        |||      |S r   )r}   r   r   )r"   r   r   rX   adapters        r
   
getAdapterzComponents.getAdaptera  s3    --,,VYE?&vy$??r   c                 >    | j                   j                  ||||      S r   )r}   queryMultiAdapter)r"   objectsr   rX   r   s        r
   r   zComponents.queryMultiAdapterg  s"    }}..Yg/ 	/r   c                 ^    | j                   j                  |||      }|t        |||      |S r   )r}   r   r   )r"   r   r   rX   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   rw   mapr   )r"   r   rM   rX   rZ   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)
rL   r   r   r   r.   r}   rW   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"   r0   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)
rL   r   r   r   lenr}   r`   r   r   r   )r"   rZ   r   rM   rX   rrG   nfr/   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   rM   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)	rL   r   r   r.   r}   rW   r   r   HandlerRegistration)r"   rZ   r   rX   rY   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)	rL   r   r   r   r}   r`   r   r   r   )	r"   rZ   r   rX   r   r   r   r/   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   c                 0   t        | j                        }| j                  }d}d}d}d}d|j                  vsJ d |_        |r|j
                  }|j                  }	nd x}}		 |j                         D ]`  \  \  }
}\  }}}|j                  d|
|      |k7  r |d|
||       |dz  }n|dz  }|j                  d|
|      |dz  } |	d|
|       \|dz  }b 	 |`|r|s|r|j	                  |       	 ||||dS # |`|r|s|r|j	                  |       w w w xY w)a  
        Emergency maintenance method to rebuild the ``.utilities``
        registry from the local copy maintained in this object, or
        detect the need to do so.

        Most users will never need to call this, but it can be helpful
        in the event of suspected corruption.

        By default, this method only checks for corruption. To make it
        actually rebuild the registry, pass `True` for *rebuild*.

        :param bool rebuild: If set to `True` (not the default),
           this method will actually register and subscribe utilities
           in the registry as needed to synchronize with the local cache.

        :return: A dictionary that's meant as diagnostic data. The keys
           and values may change over time. When called with a false *rebuild*,
           the keys ``"needed_registered"`` and ``"needed_subscribed"`` will be
           non-zero if any corruption was detected, but that will not be corrected.

        .. versionadded:: 5.3.0
        r   changedc                      y r   r   )rH   s    r
   r   zAComponents.rebuildUtilityRegistryFromLocalCache.<locals>.<lambda>  r   r   c                       y r   r   )argss    r
   r   zAComponents.rebuildUtilityRegistryFromLocalCache.<locals>.<lambda>!  r   r   r   rK   )needed_registereddid_not_registerneeded_subscribeddid_not_subscribe)
dictr@   rB   r   r   rV   rW   r    
registeredr[   )r"   rebuildregsutilsr   r   r   r   rV   rW   rM   rX   value_info_factorys                  r
   $rebuildUtilityRegistryFromLocalCachez/Components.rebuildUtilityRegistryFromLocalCache  sf   . D//0
 ...&~~HI#55Hy	%>Bjjl +: 4":5%##B$75@R47%*%$)$##B%8@%*%b(E2%*%+ -1Be$ "3 0!2!2	
 	
	 -1Be$ 2Cws   #A3C8 8D)r   r   )NNr   r   TN)NNr   N)r   N)r   )NNr   r   T)NNNr   )Nr   r   T)NNr   )F)'r5   r6   r7   rj   r%   rp   ru   rf   rg   propertyr   r   r   ri   r\   ra   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)rn   s   @r
   r   r      s!    &*"3H +) 
 
22 %1
I
 CE59: EG"&>C
B;; @D04$ )-=?67L :<"&/
$ FJ24*.(8 59=?(T< +/&(""3 D1A
r   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      )NrK   r   zWThe utility doesn't provide a single interface and no provided interface was specified.)rw   r   r   rL   )r)   rM   s     r
   r   r   B  s9    Jy)*H
8}{
	34 4r   c                 f    t        t        |             }t        |      dk(  r|d   S t        d      )NrK   r   zaThe adapter factory doesn't implement a single interface and no provided interface was specified.)rw   r   r   rL   )rZ   rM   s     r
   r   r   J  s9    M'*+H
8}{
	34 4r   c                 ~   |	 | j                   }n t        j                  |      rt        d      g }|D ]d  }|t
        }nHt        j                  |      s3t        |t              rt        |      }nt        dt        |      z        |j                  |       f 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 interfacez?Required specification must be a specification or class, not %r)__component_adapts__r   rL   r   r   r   rd   typer   r.   rh   )rZ   r   resultr   s       r
   r   r   R  s    	33H 
	"	"8	, = > 	> F 
9A**1-!T"!!$ !ACG7!K " " 	a
 =+  	J 	s   B' 'B<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   )registryrM   rX   r)   rY   rZ   )r"   r   rM   rX   r)   docrZ   s          r
   r%   zUtilityRegistration.__init__q  s2     xy#w>	ty$.$)	r   c                 "   dj                  | j                  j                  | j                  t	        | j
                  dd       | j                  t	        | j                  dt        | j                              | j                  | j                        S )Nz"{}({!r}, {}, {!r}, {}, {!r}, {!r})r5   )rm   rn   r5   r   getattrrM   rX   r)   reprrZ   rY   ro   s    r
   rp   zUtilityRegistration.__repr__v  se    3::''z48$))
D4HIdii 	r   c                     t        |       S r   idro   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__  r  r   c                 0    t        |       t        |      k  S r   r  r  s     r
   __lt__zUtilityRegistration.__lt__      DzDK''r   c                 0    t        |       t        |      k  S r   r  r  s     r
   __le__zUtilityRegistration.__le__  r  r   c                 0    t        |       t        |      kD  S r   r  r  s     r
   __gt__zUtilityRegistration.__gt__  r  r   c                 0    t        |       t        |      k\  S r   r  r  s     r
   __ge__zUtilityRegistration.__ge__  r  r   r   r5   r6   r7   r%   rp   r  r  r  r  r  r  r  r   r   r
   r   r   n  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   rM   rX   rZ   rY   )r"   r   r   rM   rX   r)   r  s          r
   r%   zAdapterRegistration.__init__  s2     x4C?	t}di	tyr   c                    dj                  | j                  j                  | j                  ddj	                  | j
                  D cg c]  }|j                   c}      z   dz   t        | j                  dd       | j                  t        | j                  dt        | j                              | j                        S c c}w )Nz {}({!r}, {}, {}, {!r}, {}, {!r})[, ]r5   )rm   rn   r5   r   joinr   r  rM   rX   rZ   r  rY   r"   r   s     r
   rp   zAdapterRegistration.__repr__  s    188NN##MM$))?AQZZ?@@3FDMM:t4diiDLL*d4<<.@A499 	 @s   B>c                     t        |       S r   r  ro   s    r
   r  zAdapterRegistration.__hash__  r	  r   c                 0    t        |       t        |      k(  S r   r  r  s     r
   r  zAdapterRegistration.__eq__  r  r   c                 0    t        |       t        |      k7  S r   r  r  s     r
   r  zAdapterRegistration.__ne__  r  r   c                 0    t        |       t        |      k  S r   r  r  s     r
   r  zAdapterRegistration.__lt__  r  r   c                 0    t        |       t        |      k  S r   r  r  s     r
   r  zAdapterRegistration.__le__  r  r   c                 0    t        |       t        |      kD  S r   r  r  s     r
   r  zAdapterRegistration.__gt__  r  r   c                 0    t        |       t        |      k\  S r   r  r  s     r
   r  zAdapterRegistration.__ge__  r  r   Nr  r   r   r
   r   r     s0    @
))()()r   r   c                       e Zd Zy)r   N)r5   r6   r7   r   r   r
   r   r     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   rX   handlerrY   )r"   r   r   rX   r.  r  s         r
   r%   zHandlerRegistration.__init__  s)    xw3	ty$,	r   c                     | j                   S r   )r.  ro   s    r
   rZ   zHandlerRegistration.factory  s    ||r   Nc                 Z   dj                  | j                  j                  | j                  ddj	                  | j
                  D cg c]  }|j                   c}      z   dz   | j                  t        | j                  dt        | j                              | j                        S c c}w )Nz{}({!r}, {}, {!r}, {}, {!r})r  r   r!  r5   )rm   rn   r5   r   r"  r   rX   r  rZ   r  rY   r#  s     r
   rp   zHandlerRegistration.__repr__  s~    -44NN##MM$))?AQZZ?@@3FIIDLL*d4<<.@A499 	 @s   B()r5   r6   r7   r%   r   rZ   rM   rp   r   r   r
   r   r     s'    4   Hr   r   N)&__doc__collectionsr   
zope.eventr   ImportErrorzope.interface.interfacesr   r   r   r   r   r   r   r   r   zope.interface.interfacer   zope.interface.declarationsr   r   r   r   zope.interface.adapterr   __all__r   r:   r<   r   r   r   r   r   r   r   r   r   r   r   r
   <module>r:     s=   #!! 5 : : 1 : F : 0 2 . 5 3 8 2 2 	" "6@A @AF [i
 i
 i
V448 !"#) #) ##)J !"#) #) ##)J 23	2 	 4	 &'-  (Y  ! !s   C< <DD