U
    ÈZj|[  ã                   @   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 ddl	m
Z
 dd	l	mZ d
ZG dd„ deƒZeƒ ZG dd„ deƒZeZzddlmZ W n ek
r¶   eZY nX G dd„ deƒZeZzddlmZ W n ek
rô   eZY nX G dd„ deƒZG dd„ deeƒZeeƒG dd„ deƒƒZG dd„ deeƒZeeƒG dd„ deƒƒZdd„ Zdd „ Zd!d"„ Zd#d$„ Z dS )%zAdapter management
é    N)Úimplementer)Ú
providedBy©Ú	Interface)Úro)ÚIAdapterRegistry)Ú_normalize_name)ÚSTRING_TYPESÚ c                   @   s€   e Zd ZdZdZddd„Zdd„ Zedd	„ d
d	„ ƒZdd„ Z	dd„ Z
dd„ Zefdd„Zddd„Zdd„ Zddd„Zdd„ ZdS )ÚBaseAdapterRegistry)	ÚlookupÚqueryMultiAdapterÚlookup1ÚqueryAdapterÚadapter_hookÚ	lookupAllÚnamesÚsubscriptionsÚsubscribersr   © c                 C   s$   g | _ g | _i | _|  ¡  || _d S ©N)Ú	_adaptersÚ_subscribersÚ	_providedÚ_createLookupÚ	__bases__©ÚselfÚbasesr   r   úY/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/zope/interface/adapter.pyÚ__init__(   s
    zBaseAdapterRegistry.__init__c                 C   s$   || j d< t | ¡| _|  | ¡ d S ©Nr   )Ú__dict__r   Úchangedr   r   r   r   Ú	_setBasesW   s    
zBaseAdapterRegistry._setBasesc                 C   s
   | j d S r!   )r"   ©r   r   r   r   Ú<lambda>\   ó    zBaseAdapterRegistry.<lambda>c                 C   s
   |   |¡S r   )r$   r   r   r   r   r&   ]   r'   c                 C   s.   |   | ¡| _| jD ]}t| j|ƒ| j|< qd S r   )ÚLookupClassÚ	_v_lookupÚ
_delegatedÚgetattrr"   )r   Únamer   r   r   r   `   s    
z!BaseAdapterRegistry._createLookupc                 C   s   |  j d7  _ | j |¡ d S ©Né   )Ú_generationr)   r#   ©r   Úoriginally_changedr   r   r   r#   e   s    zBaseAdapterRegistry.changedc                 C   s   t |tƒstdƒ‚|d kr.|  ||||¡ d S ttt|ƒƒ}t|ƒ}t|ƒ}| j	}t|ƒ|krj| 
i ¡ qR|| }||f }|D ]&}	| |	¡}
|
d kr¢i }
|
||	< |
}q€| |¡|krºd S |||< | j |d¡d }|| j|< |dkrò| j |¡ |  | ¡ d S )Núname is not a stringr   r.   )Ú
isinstancer	   Ú
ValueErrorÚ
unregisterÚtupleÚmapÚ_convert_None_to_Interfacer   Úlenr   ÚappendÚgetr   r)   Úadd_extendorr#   )r   ÚrequiredÚprovidedr,   ÚvalueÚorderÚbyorderÚ
componentsÚkeyÚkÚdÚnr   r   r   Úregisteri   s6    



zBaseAdapterRegistry.registerc           
      C   sv   t tt|ƒƒ}t|ƒ}t|ƒ}| j}t|ƒ|kr4d S || }||f }|D ] }| |¡}	|	d krf d S |	}qJ| |¡S r   )r6   r7   r8   r   r9   r   r;   )
r   r=   r>   r,   r@   rA   rB   rC   rD   rE   r   r   r   Ú
registeredŒ   s    

zBaseAdapterRegistry.registeredNc                 C   s.  t tt|ƒƒ}t|ƒ}| j}|t|ƒkr,dS || }||f }g }	|D ].}
| |
¡}|d krb d S |	 ||
f¡ |}qF| |¡}|d krŒd S |d k	r ||k	r d S ||= |sèt|	ƒD ] \}}
||
 }|rÌ qÔq²||
= q²|rè|d sè|d= qÔ| j| d }|dk�r| j|= | j	 
|¡ n
|| j|< |  | ¡ d S )NFéÿÿÿÿr.   r   )r6   r7   r8   r9   r   r;   r:   Úreversedr   r)   Úremove_extendorr#   )r   r=   r>   r,   r?   r@   rA   rB   rC   ÚlookupsrD   rE   ÚoldÚcomprF   r   r   r   r5   Ÿ   sD    




zBaseAdapterRegistry.unregisterc                 C   sÒ   t tt|ƒƒ}t}t|ƒ}| j}t|ƒ|kr8| i ¡ q || }||f }|D ]&}	| |	¡}
|
d krpi }
|
||	< |
}qN| |d¡|f ||< |d k	rÄ| j |d¡d }|| j|< |dkrÄ| j	 
|¡ |  | ¡ d S )Nr   r   r.   )r6   r7   r8   Ú_BLANKr9   r   r:   r;   r   r)   r<   r#   )r   r=   r>   r?   r,   r@   rA   rB   rC   rD   rE   rF   r   r   r   Ú	subscribeÏ   s*    


zBaseAdapterRegistry.subscribec                    s^  t tt|ƒƒ}t|ƒ}| j}|t|ƒkr,d S || }||f }g }|D ].}	| |	¡}
|
d krb d S | ||	f¡ |
}qF| t¡}|sˆd S ˆ d kr–d}nt ‡ fdd„|D ƒƒ}||kr¸d S |rÆ||t< nH|t= t|ƒD ] \}}	||	 }
|
rî qöqÔ||	= qÔ|�r|d �s|d= qö|d k	�rP| j	| t|ƒ t|ƒ }|dk�rP| j	|= | j
 |¡ |  | ¡ d S )Nr   c                    s   g | ]}|ˆ kr|‘qS r   r   )Ú.0Úv©r?   r   r   Ú
<listcomp>  s      z3BaseAdapterRegistry.unsubscribe.<locals>.<listcomp>rI   r   )r6   r7   r8   r9   r   r;   r:   rO   rJ   r   r)   rK   r#   )r   r=   r>   r?   r@   rA   rB   rC   rL   rD   rE   rM   ÚnewrN   rF   r   rS   r   Úunsubscribeê   sL    





zBaseAdapterRegistry.unsubscribec                 C   s   G dd„ dƒ}|S )Nc                   @   s   e Zd Zi ZdS )z2BaseAdapterRegistry.get.<locals>.XXXTwistedFakeOutN)Ú__name__Ú
__module__Ú__qualname__ZselfImpliedr   r   r   r   ÚXXXTwistedFakeOut'  s   rZ   r   )r   Ú_rZ   r   r   r   r;   &  s    zBaseAdapterRegistry.get)r   )N)N)rW   rX   rY   r*   r/   r    r$   Úpropertyr   r   r#   rG   rO   rH   r5   rP   rV   r;   r   r   r   r   r      s   
/ÿ#
0
<r   c                   @   sn   e Zd Zdd„ Zddd„Zdd„ Zedfdd	„Zedfd
d„Zedfdd„Z	edfdd„Z
dd„ Zdd„ ZdS )ÚLookupBaseFallbackc                 C   s   i | _ i | _i | _d S r   )Ú_cacheÚ_mcacheÚ_scacher%   r   r   r   r    /  s    zLookupBaseFallback.__init__Nc                 C   s"   | j  ¡  | j ¡  | j ¡  d S r   )r^   Úclearr_   r`   )r   Úignoredr   r   r   r#   4  s    

zLookupBaseFallback.changedc                 C   sL   | j  |¡}|d kr"i }|| j |< |rH| |¡}|d krDi }|||< |}|S r   )r^   r;   )r   r>   r,   ÚcacheÚcr   r   r   Ú	_getcache9  s    

zLookupBaseFallback._getcachec                 C   s    t |tƒstdƒ‚|  ||¡}t|ƒ}t|ƒdkrD| |d t¡}n| t|ƒt¡}|tkr�|  |||¡}t|ƒdkr„|||d < n||t|ƒ< |d krœ|S |S )Nr2   r.   r   )	r3   r	   r4   re   r6   r9   r;   Ú_not_in_mappingÚ_uncached_lookup©r   r=   r>   r,   Údefaultrc   Úresultr   r   r   r   F  s    
zLookupBaseFallback.lookupc                 C   sT   t |tƒstdƒ‚|  ||¡}| |t¡}|tkrD|  |f|||¡S |d krP|S |S ©Nr2   )r3   r	   r4   re   r;   rf   r   rh   r   r   r   r   \  s    
zLookupBaseFallback.lookup1c                 C   s   |   ||||¡S r   )r   )r   Úobjectr>   r,   ri   r   r   r   r   i  s    zLookupBaseFallback.queryAdapterc           	      C   sj   t |tƒstdƒ‚t|ƒ}|  ||¡}| |t¡}|tkrJ|  |f||¡}|d k	rf||ƒ}|d k	rf|S |S rk   )r3   r	   r4   r   re   r;   rf   r   )	r   r>   rl   r,   ri   r=   rc   Úfactoryrj   r   r   r   r   l  s    
zLookupBaseFallback.adapter_hookc                 C   sV   | j  |¡}|d kr"i }|| j |< t|ƒ}| |t¡}|tkrR|  ||¡}|||< |S r   )r_   r;   r6   rf   Ú_uncached_lookupAll©r   r=   r>   rc   rj   r   r   r   r   |  s    
zLookupBaseFallback.lookupAllc                 C   sV   | j  |¡}|d kr"i }|| j |< t|ƒ}| |t¡}|tkrR|  ||¡}|||< |S r   )r`   r;   r6   rf   Ú_uncached_subscriptionsro   r   r   r   r   ‹  s    
z LookupBaseFallback.subscriptions)N)rW   rX   rY   r    r#   re   rO   r   r   r   r   r   r   r   r   r   r   r]   -  s   
r]   )Ú
LookupBasec                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚVerifyingBaseFallbackc                 C   s4   t  | |¡ | jjdd … | _dd„ | jD ƒ| _d S )Nr.   c                 S   s   g | ]
}|j ‘qS r   ©r/   ©rQ   Úrr   r   r   rT   ª  s     z1VerifyingBaseFallback.changed.<locals>.<listcomp>)r]   r#   Ú	_registryr   Ú
_verify_roÚ_verify_generationsr0   r   r   r   r#   §  s    zVerifyingBaseFallback.changedc                 C   s$   dd„ | j D ƒ| jkr |  d ¡ d S )Nc                 S   s   g | ]
}|j ‘qS r   rs   rt   r   r   r   rT   ­  s     z1VerifyingBaseFallback._verify.<locals>.<listcomp>)rw   rx   r#   r%   r   r   r   Ú_verify¬  s    ÿzVerifyingBaseFallback._verifyc                 C   s   |   ¡  t | ||¡S r   )ry   r]   re   )r   r>   r,   r   r   r   re   ±  s    zVerifyingBaseFallback._getcachec                 C   s   |   ¡  t | ||¡S r   )ry   r]   r   ©r   r=   r>   r   r   r   r   µ  s    zVerifyingBaseFallback.lookupAllc                 C   s   |   ¡  t | ||¡S r   )ry   r]   r   rz   r   r   r   r   ¹  s    z#VerifyingBaseFallback.subscriptionsN)rW   rX   rY   r#   ry   re   r   r   r   r   r   r   rr   ¡  s
   rr   )ÚVerifyingBasec                       s„   e Zd Z‡ fdd„Zd‡ fdd„	Zdd„ Zdd	„ Zd
d„ Zdd„ Ze	fdd„Z
e	dfdd„Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚAdapterLookupBasec                    s&   || _ i | _|  ¡  tt| ƒ ¡  d S r   )rv   Ú	_requiredÚinit_extendorsÚsuperr|   r    )r   Úregistry©Ú	__class__r   r   r    Ç  s    zAdapterLookupBase.__init__Nc                    sF   t t| ƒ d ¡ | j ¡ D ]}|ƒ }|d k	r| | ¡ q| j ¡  d S r   )r   r|   r#   r}   ÚkeysrV   ra   )r   rb   ru   r�   r   r   r#   Í  s    zAdapterLookupBase.changedc                 C   s"   i | _ | jjD ]}|  |¡ qd S r   )Ú
_extendorsrv   r   r<   )r   Úpr   r   r   r~   ì  s    z AdapterLookupBase.init_extendorsc                    sP   | j }ˆ jD ]>}| |d¡}‡ fdd„|D ƒˆ g ‡ fdd„|D ƒ ||< qd S )Nr   c                    s   g | ]}ˆ   |¡r|‘qS r   ©ZisOrExtends©rQ   Úe©r>   r   r   rT   ö  s     
 z2AdapterLookupBase.add_extendor.<locals>.<listcomp>c                    s   g | ]}ˆ   |¡s|‘qS r   r†   r‡   r‰   r   r   rT   ú  s     
 ©r„   Z__iro__r;   )r   r>   r„   ÚiÚ	extendorsr   r‰   r   r<   ñ  s    
þüÿzAdapterLookupBase.add_extendorc                    s4   | j }ˆ jD ]"}‡ fdd„| |d¡D ƒ||< qd S )Nc                    s   g | ]}|ˆ kr|‘qS r   r   r‡   r‰   r   r   rT      s    ÿz5AdapterLookupBase.remove_extendor.<locals>.<listcomp>r   rŠ   )r   r>   r„   r‹   r   r‰   r   rK   ý  s    
z!AdapterLookupBase.remove_extendorc                 G   s6   | j }|D ]&}| ¡ }||kr
| | ¡ d||< q
d S r-   )r}   ÚweakrefrP   )r   r=   Z_refsru   Úrefr   r   r   Ú
_subscribe  s    
zAdapterLookupBase._subscribec           
      C   s~   t |ƒ}d }t|ƒ}| jjD ]R}|j}|t|ƒkr4q|jj |¡}|sHq|| }	t|	|||d|ƒ}|d k	r qpq| j	|Ž  |S ©Nr   )
r6   r9   rv   r   r   r)   r„   r;   Ú_lookupr�   )
r   r=   r>   r,   rj   r@   r€   rA   rŒ   rB   r   r   r   rg     s$    ÿ
z"AdapterLookupBase._uncached_lookupc                 C   s8   |   tt|ƒ||¡}|d kr |S ||Ž }|d kr4|S |S r   )r   r7   r   )r   Úobjectsr>   r,   ri   rm   rj   r   r   r   r   #  s    z#AdapterLookupBase.queryMultiAdapterc           	      C   s~   t |ƒ}t|ƒ}i }t| jjƒD ]F}|j}|t|ƒkr8q |jj |¡}|sLq || }t	||||d|ƒ q | j
|Ž  t | ¡ ƒS r�   )r6   r9   rJ   rv   r   r   r)   r„   r;   Ú
_lookupAllr�   Úitems)	r   r=   r>   r@   rj   r€   rA   rŒ   rB   r   r   r   rn   .  s    
z%AdapterLookupBase._uncached_lookupAllc                 C   s   dd„ |   ||¡D ƒS )Nc                 S   s   g | ]}|d  ‘qS )r   r   )rQ   rd   r   r   r   rT   A  s     z+AdapterLookupBase.names.<locals>.<listcomp>)r   rz   r   r   r   r   @  s    zAdapterLookupBase.namesc              	   C   sˆ   t |ƒ}t|ƒ}g }t| jjƒD ]X}|j}|t|ƒkr8q |d krH|f}n|jj |¡}|d kr`q t	|| ||t
|d|ƒ q | j|Ž  |S r�   )r6   r9   rJ   rv   r   r   r)   r„   r;   Ú_subscriptionsrO   r�   )r   r=   r>   r@   rj   r€   rA   rŒ   r   r   r   rp   C  s&      ÿ
z)AdapterLookupBase._uncached_subscriptionsc                 C   s^   |   tt|ƒ|¡}|d kr2d}|D ]}||Ž  q"n(g }|D ]}||Ž }|d k	r:| |¡ q:|S )Nr   )r   r7   r   r:   )r   r’   r>   r   rj   ZsubscriptionÚ
subscriberr   r   r   r   Z  s    zAdapterLookupBase.subscribers)N)rW   rX   rY   r    r#   r~   r<   rK   r�   rO   rg   r   rn   r   rp   r   Ú__classcell__r   r   r�   r   r|   Å  s   r|   c                   @   s   e Zd ZdS )ÚAdapterLookupN©rW   rX   rY   r   r   r   r   r˜   h  s   r˜   c                       sJ   e Zd ZeZd‡ fdd„	Zdd„ Zdd„ Z‡ fdd	„Z‡ fd
d„Z	‡  Z
S )ÚAdapterRegistryr   c                    s   t  ¡ | _tt| ƒ |¡ d S r   )r�   ÚWeakKeyDictionaryÚ_v_subregistriesr   rš   r    r   r�   r   r   r    p  s    
zAdapterRegistry.__init__c                 C   s   d| j |< d S r-   ©rœ   ©r   ru   r   r   r   Ú_addSubregistryw  s    zAdapterRegistry._addSubregistryc                 C   s   || j kr| j |= d S r   r�   rž   r   r   r   Ú_removeSubregistryz  s    
z"AdapterRegistry._removeSubregistryc                    sZ   | j  dd¡}|D ]}||kr| | ¡ q|D ]}||kr.| | ¡ q.tt| ƒ |¡ d S )Nr   r   )r"   r;   r    rŸ   r   rš   r$   )r   r   rM   ru   r�   r   r   r$   ~  s    zAdapterRegistry._setBasesc                    s.   t t| ƒ |¡ | j ¡ D ]}| |¡ qd S r   )r   rš   r#   rœ   rƒ   )r   r1   Úsubr�   r   r   r#   ‰  s    zAdapterRegistry.changed)r   )rW   rX   rY   r˜   r(   r    rŸ   r    r$   r#   r—   r   r   r�   r   rš   k  s   rš   c                   @   s   e Zd ZdS )ÚVerifyingAdapterLookupNr™   r   r   r   r   r¢   �  s   r¢   c                   @   s   e Zd ZeZdS )ÚVerifyingAdapterRegistryN)rW   rX   rY   r¢   r(   r   r   r   r   r£   “  s   r£   c                 C   s   | d krt S | S d S r   r   )Úxr   r   r   r8   ˜  s    r8   c           
      C   s„   ||k rN|| j D ]8}|  |¡}|rt|||||d |ƒ}|d k	r|  S qn2|D ],}	|  |	¡}|rR| |¡}|d k	rR|  S qRd S r-   )Ú__sro__r;   r‘   )
rB   Úspecsr>   r,   r‹   ÚlÚspecÚcompsru   Úifacer   r   r   r‘   ž  s    



r‘   c           	      C   sl   ||k rBt || jƒD ](}|  |¡}|rt|||||d |ƒ qn&t |ƒD ]}|  |¡}|rJ| |¡ qJd S r-   )rJ   r¥   r;   r“   Úupdate)	rB   r¦   r>   rj   r‹   r§   r¨   r©   rª   r   r   r   r“   °  s    

r“   c           
   	   C   s|   ||k rDt || jƒD ]*}|  |¡}|rt||||||d |ƒ qn4t |ƒD ]*}	|  |	¡}|rL| |¡}|rL| |¡ qLd S r-   )rJ   r¥   r;   r•   Úextend)
rB   r¦   r>   r,   rj   r‹   r§   r¨   r©   rª   r   r   r   r•   ¼  s    


r•   )!Ú__doc__r�   Zzope.interfacer   r   r   r   Zzope.interface.interfacesr   Zzope.interface._compatr   r	   rO   rl   r   rf   r]   ZLookupBasePyZ-zope.interface._zope_interface_coptimizationsrq   ÚImportErrorrr   ZVerifyingBasePyr{   r|   r˜   rš   r¢   r£   r8   r‘   r“   r•   r   r   r   r   Ú<module>   sJ     l

 $$