o
    gUS                     @   sD  d Z ddlZejd dkZerefZdddZnefZddlZe	edZ[ddl
mZ ddlmZ dd	lmZmZ d
dlmZ zddlmZ W n	 eyP   Y nw d
dlmZmZmZmZ G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZ e Z!dddefddZ"dd Z#e e#_$dS )zoThis module implements decorators for implementing other decorators
as well as some commonly used decorators.

    N   c                 C   sB   |du rt d}|j}|du r|j}~n|du r|}td dS )zExecute code in a namespace.N   zexec _code_ in _globs_, _locs_)sys	_getframe	f_globalsf_localsexec)_code__globs__locs_frame r   G/var/www/visachat/venv/lib/python3.10/site-packages/wrapt/decorators.pyexec_   s   
r   r   )partial)isclass)LockRLockr   )formatargspec)	signature)FunctionWrapperBoundFunctionWrapperObjectProxyCallableObjectProxyc                       sX   e Zd Z fddZedd Zedd Zedd Zed	d
 Zedd Z	  Z
S )_AdapterFunctionCodec                       t t| | || _d S N)superr   __init___self_adapter_code)selfwrapped_codeadapter_code	__class__r   r   r   7      
z_AdapterFunctionCode.__init__c                 C      | j jS r   )r   co_argcountr    r   r   r   r'   ;      z _AdapterFunctionCode.co_argcountc                 C   r&   r   )r   co_coder(   r   r   r   r*   ?   r)   z_AdapterFunctionCode.co_codec                 C   r&   r   )r   co_flagsr(   r   r   r   r+   C   r)   z_AdapterFunctionCode.co_flagsc                 C   r&   r   )r   co_kwonlyargcountr(   r   r   r   r,   G   r)   z&_AdapterFunctionCode.co_kwonlyargcountc                 C   r&   r   )r   co_varnamesr(   r   r   r   r-   K   r)   z _AdapterFunctionCode.co_varnames)__name__
__module____qualname__r   propertyr'   r*   r+   r,   r-   __classcell__r   r   r#   r   r   5   s    



r   c                       s`   e Zd Z fddZedd Zedd Zedd Zed	d
 Ze	r,eZ
eZ  ZS   ZS )_AdapterFunctionSurrogatec                    r   r   )r   r3   r   _self_adapter)r    wrappedadapterr#   r   r   r   Q   r%   z"_AdapterFunctionSurrogate.__init__c                 C   s   t | jj| jjS r   )r   __wrapped____code__r4   r(   r   r   r   r8   U      z"_AdapterFunctionSurrogate.__code__c                 C   r&   r   )r4   __defaults__r(   r   r   r   r:   Z   r)   z&_AdapterFunctionSurrogate.__defaults__c                 C   r&   r   )r4   __kwdefaults__r(   r   r   r   r;   ^   r)   z(_AdapterFunctionSurrogate.__kwdefaults__c                 C   s   dt  vr	| jjS t| jS Nr   )globalsr4   __signature__r   r(   r   r   r   r>   b   s   

z'_AdapterFunctionSurrogate.__signature__)r.   r/   r0   r   r1   r8   r:   r;   r>   PY2	func_codefunc_defaultsr2   r   r   r#   r   r3   O   s    



r3   c                   @   s0   e Zd Zedd Zedd ZereZdS dS )_BoundAdapterWrapperc                 C   s   t | jj| jjS r   )r3   r7   __func___self_parentr4   r(   r   r   r   rC   o   r9   z_BoundAdapterWrapper.__func__c                 C   s   dt  vr	| jjS t| jjS r<   )r=   r7   r>   r   rD   r4   r(   r   r   r   r>   t   s   
z"_BoundAdapterWrapper.__signature__N)r.   r/   r0   r1   rC   r>   r?   im_funcr   r   r   r   rB   m   s    

rB   c                       s\   e Zd ZeZ fddZedd Zedd Zedd Z	e
r$eZeZed	d
 Z  ZS )AdapterWrapperc                    s8   | d}tt| j|i | t| j|| _|| _d S )Nr6   )popr   rF   r   r3   r7   _self_surrogater4   )r    argskwargsr6   r#   r   r   r      s   

zAdapterWrapper.__init__c                 C   r&   r   )rH   r8   r(   r   r   r   r8      r)   zAdapterWrapper.__code__c                 C   r&   r   )rH   r:   r(   r   r   r   r:      r)   zAdapterWrapper.__defaults__c                 C   r&   r   )rH   r;   r(   r   r   r   r;      r)   zAdapterWrapper.__kwdefaults__c                 C   r&   r   )rH   r>   r(   r   r   r   r>      r)   zAdapterWrapper.__signature__)r.   r/   r0   rB   __bound_function_wrapper__r   r1   r8   r:   r;   r?   r@   rA   r>   r2   r   r   r#   r   rF   ~   s    


rF   c                   @   s   e Zd Zdd ZdS )AdapterFactoryc                 C   s   t  r   )NotImplementedErrorr    r5   r   r   r   __call__   s   zAdapterFactory.__call__N)r.   r/   r0   rO   r   r   r   r   rL      s    rL   c                       s$   e Zd Z fddZdd Z  ZS )DelegatedAdapterFactoryc                    s   t t|   || _d S r   )r   rP   r   factory)r    rQ   r#   r   r   r      s   
z DelegatedAdapterFactory.__init__c                 C   s
   |  |S r   )rQ   rN   r   r   r   rO      s   
z DelegatedAdapterFactory.__call__)r.   r/   r0   r   rO   r2   r   r   r#   r   rP      s    rP   c                    sF   d urdfdd	  fdd} |t dS tt dS )Nc                    s   |rFt |tr|| }t|s>i }i }t |ts,t|dkr(|d }|d d }t| }td||| |d }|r>||_t	| |||dS  | ||dS )N   zdef adapter{}: passr6   )r5   wrapperenabledr6   )r5   rT   rU   )

isinstancerL   callablestring_typeslenr   r   format__annotations__rF   )r5   rT   rU   r6   nsannotations)proxyr   r   _build   s&   


zdecorator.<locals>._buildc                    s   |d u rt r|s fdd}|S |d }}t|tu r(|s&|S d }|d u r7t r4 }n}nt |rBd |}n|t|}|||S )Nc                    s8   }t |tu r|s| S d }di } | ||S )Nr   )typebool)target_wrapped_enabledtarget_wrapper)r_   r6   rU   rJ   r5   r   r   _capture  s   z-decorator.<locals>._wrapper.<locals>._capturer   )r   r`   ra   __get__)r5   instancerI   rJ   re   rb   rc   rd   )r_   r6   rU   rT   )rJ   r5   r   _wrapper   s"   zdecorator.<locals>._wrapper)r6   )rU   r6   r^   NN)	decoratorr   )rT   rU   r6   r^   rh   r   )r_   r6   rU   r^   rT   r   rj      s   . 1rj   c                    sz   t | dr#t | dr#| tfdd}G fdddt}||dS dd	   fd
d}G  fdddt}|| |dS )Nacquirereleasec                    s6     | |i |W  d    S 1 sw   Y  d S r   r   r5   rg   rI   rJ   lockr   r   _synchronized  s   $z#synchronized.<locals>._synchronizedc                       s$   e Zd Z fddZ fddZdS )z'synchronized.<locals>._PartialDecoratorc                    s        S r   )rk   r(   rn   r   r   	__enter__  s   z1synchronized.<locals>._PartialDecorator.__enter__c                    s       d S r   )rl   r    rI   rn   r   r   __exit__  s   z0synchronized.<locals>._PartialDecorator.__exit__Nr.   r/   r0   rq   rs   r   rn   r   r   _PartialDecorator  s    ru   )r5   c                 S   s~   t | dd }|d u r=tj& t | dd }|d u r-t }t| d| W d    |S W d    |S 1 s8w   Y  |S )N_synchronized_lock)varsgetsynchronized_synchronized_meta_lockr   setattr)contextro   r   r   r   rv     s   

z(synchronized.<locals>._synchronized_lockc                    sF    |d ur|n|  | |i |W  d    S 1 sw   Y  d S r   r   rm   rv   r   r   _synchronized_wrapper	  s   $z+synchronized.<locals>._synchronized_wrapperc                       s    e Zd Z fddZdd ZdS )z%synchronized.<locals>._FinalDecoratorc                    s    | j | _| j  | jS r   )r7   
_self_lockrk   r(   r}   r   r   rq     s   
z/synchronized.<locals>._FinalDecorator.__enter__c                 W   s   | j   d S r   )r   rl   rr   r   r   r   rs     s   z.synchronized.<locals>._FinalDecorator.__exit__Nrt   r   r}   r   r   _FinalDecorator  s    r   )r5   rT   )hasattrrj   r   r   )r5   rp   ru   r~   r   r   )rv   ro   r   ry     s   
	 
ry   ri   )%__doc__r   version_infor?   
basestringrX   r   strbuiltinsgetattr	functoolsr   inspectr   	threadingr   r   	argumentsr   r   ImportError	__wrapt__r   r   r   r   r   r3   rB   rF   objectrL   rP   adapter_factoryrj   ry   rz   r   r   r   r   <module>   s@    
		  ]