
    Nge                     8   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g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
    )defaultdict)notifyc                       y N )argkws     R/var/www/djangounited/venv/lib/python3.12/site-packages/zope/interface/registry.pyr   r              )ISpecification)ComponentLookupError)IAdapterRegistration)IComponents)IHandlerRegistration) ISubscriptionAdapterRegistration)IUtilityRegistration)
Registered)Unregistered)	Interface)implementedBy)implementer)implementer_only)
providedBy)AdapterRegistry)CLASS_TYPES)STRING_TYPES
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__4   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__8   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+   r1   r2   s       r
   __delitem__z'_UnhashableComponentCounter.__delitem__E   sE     , 	GAtAw)#JJqM	 y!!r   N)__name__
__module____qualname__r'   r-   r3   r6   r   r   r
   r    r    1   s    :."r   r    c                       t        t              S r   )r   intr   r   r
   _defaultdict_intr<   L   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__Q   s*    !"23#&;#r   c                     t        | j                  j                               D ]  \  \  }}}|d   }| j                  ||       ! y r)   )iterrB   r"   $_UtilityRegistrations__cache_utility)r$   p_r2   r+   s        r
   __populate_cachez&_UtilityRegistrations.__populate_cacheY   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 )NrM   r   )r@   )r$   rO   r+   r,   s       r
   __uncache_utilityz'_UtilityRegistrations.__uncache_utilityg   sV    ;;x( #
A:# qy #(HYqyr   c                 L    	 | j                   |   |   dkD  S # t        $ r Y yw xY w)Nr   F)r@   rN   )r$   rO   r+   s      r
   _is_utility_subscribedz,_UtilityRegistrations._is_utility_subscribedv   s2    	;;x(3a77 		s    	##c                     | j                  ||      }|||f| j                  ||f<   | j                  j                  d|||       |s| j                  j	                  d||       | j                  ||       y Nr   )rU   rB   rA   register	subscriberH   )r$   rO   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 rW   )rB   rA   
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)
r7   r8   r9   r'   rC   rH   ra   rU   r^   rc   r   r   r
   r>   r>   O   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   )
isinstancer   r7   _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__r7   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 )N   _v_)superr   
__reduce__r"   
startswithlistri   )r$   	reductionkvfiltered_staterq   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   adaptersrD   rr   s    r
   rg   zComponents._init_registries   s     ()(*r   c                 <    i | _         i | _        g | _        g | _        y r   )rB   _adapter_registrations_subscription_registrations_handler_registrationsrr   s    r
   rh   zComponents._init_registrations   s"    &(#&(#+-(&(#r   c                     | j                   }|0|j                  | j                  us|j                  | j                  ur't	        | j                  | j                        x}| _         |S r   )rk   rA   rD   rB   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 )Nrj   r   )__dict__getrr   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 )Nrj   )ri   r   rj   rD   r   )r$   rl   bases      r
   	_setBaseszComponents._setBases   sn    "'&+)-"DMM)- #.#(',*.#DNN*. $/ %*5\k"	)-*.s
   A>Bc                 "    | j                         S r   )r   rr   s    r
   <lambda>zComponents.<lambda>   s    T^^% r   c                 $    | j                  |      S r   )r   )r$   rl   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. ru   r   )rN   _getUtilityProvided_getNamerB   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   FrM   T)	rN   r   rB   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   )rG   rB   r"   r   )r$   rO   rZ   r2   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   )rD   lookup)r$   rO   rZ   defaults       r
   queryUtilityzComponents.queryUtility  s    ~~$$R4AAr   c                 \    | j                   j                  d||      }|t        ||      |S rW   )rD   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   )rD   	lookupAll)r$   	interfacerZ   r   s       r
   getUtilitiesForzComponents.getUtilitiesFor'  s4     !^^55b)D 	 MD'-	 s   ,.c                 :    | j                   j                  d|      S rW   )rD   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   )rG   r   r"   r   )r$   r   rO   rZ   r+   r[   s         r
   registeredAdapterszComponents.registeredAdapters[  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.queryAdaptera  s    }}))&)T7KKr   c                 ^    | j                   j                  |||      }|t        |||      |S r   )r   r   r   )r$   r   r   rZ   adapters        r
   
getAdapterzComponents.getAdapterd  s3    --,,VYE?&vy$??r   c                 >    | j                   j                  ||||      S r   )r   queryMultiAdapter)r$   objectsr   rZ   r   s        r
   r   zComponents.queryMultiAdapterj  s"    }}..Yg/ 	/r   c                 ^    | j                   j                  |||      }|t        |||      |S r   )r   r   r   )r$   r   r   rZ   r   s        r
   getMultiAdapterzComponents.getMultiAdaptero  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.getAdaptersu  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   r0   r   rY   r   r   SubscriptionRegistrationr   s          r
   registerSubscriptionAdapterz&Components.registerSubscriptionAdapter}  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$   r2   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   rrI   nfr1   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   r0   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   r1   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   )rJ   s    r
   r   zAComponents.rebuildUtilityRegistryFromLocalCache.<locals>.<lambda>  r   r   c                       y r   r   )argss    r
   r   zAComponents.rebuildUtilityRegistryFromLocalCache.<locals>.<lambda>$  r   r   r   rM   )needed_registereddid_not_registerneeded_subscribeddid_not_subscribe)
dictrB   rD   r   r   rX   rY   r"   
registeredr]   )r$   rebuildregsutilsr   r   r   r   rX   rY   rO   rZ   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)'r7   r8   r9   rk   r'   rs   rx   rg   rh   propertyr   r   r   rj   r^   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)rq   s   @r
   r   r      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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      )NrM   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   E  s9    Jy)*H
8}{
	34 4r   c                 f    t        t        |             }t        |      dk(  r|d   S t        d      )NrM   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   M  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   rN   r   r   r   rf   r   r   typer0   ri   )r\   r   resultr   s       r
   r   r   U  s    	33H 
	"	"8	, = > 	> F 
9A**1-![)!!$ !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   )registryrO   rZ   r+   r[   r\   )r$   r  rO   rZ   r+   docr\   s          r
   r'   zUtilityRegistration.__init__t  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(, r7   ))
rq   r7   r  getattrrO   rZ   r+   reprr\   r[   rr   s    r
   rs   zUtilityRegistration.__repr__y  s\    ''z48$))
D4HIdii 	r   c                     t        |       S r   idrr   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   r7   r8   r9   r'   rs   r  r  r  r  r  r  r  r   r   r
   r   r   q  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__  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  []r7   r  )rq   r7   r  joinr   r  rO   rZ   r\   r	  r[   r$   r   s     r
   rs   zAdapterRegistration.__repr__  s    NN##MM$))?AQZZ?@@3FDMM:t4diiDLL*d4<<.@A499 	 @s   B>c                     t        |       S r   r  rr   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)r7   r8   r9   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   rZ   handlerr[   )r$   r  r   rZ   r3  r  s         r
   r'   zHandlerRegistration.__init__  s)    xw3	ty$,	r   c                     | j                   S r   )r3  rr   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$  )
rq   r7   r  r'  r   rZ   r  r\   r	  r[   r(  s     r
   rs   zHandlerRegistration.__repr__  su    NN##MM$))?AQZZ?@@3FIIDLL*d4<<.@A499 	 @s   B&)r7   r8   r9   r'   r   r\   rO   rs   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   zope.interface._compatr   r   __all__r   r    r<   r>   r   r   r   r   r   r   r   r   r   r   r   r
   <module>r@     sM   #!! 5 : : 1 : F : 0 2 . 5 3 8 2 2 . / 	"& "6@AF @AF [j
 j
 j
X448 !"#)& #) ##)J !"#)& #) ##)J 23	2 	 4	 &'-  (_  ! !s   D DD