a
    lcpA                     @   s   d Z ddlZddlZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
 dZedZejjZejjZG dd deZd	d
 ZdddZdd ZdddZG dd deZeeZdd Zdd Zdd ZdS )zv
Decorator module, see
https://github.com/micheles/decorator/blob/master/docs/documentation.md
for the documentation.
    N)_GeneratorContextManager)getfullargspeciscoroutinefunctionisgeneratorfunctionz5.1.1z\s*def\s*([_\w][_\w\d]*)\s*\(c                   @   sZ   e Zd ZdZe Zd Z Z Z	 Z
 ZZdddZdd Zdd	d
ZedddZdS )FunctionMakerz
    An object with the ability to create functions with a given signature.
    It has attributes name, doc, module, signature, defaults, dict and
    methods update and make.
     Nc                 C   s  || _ |rZ|j| _| jdkr$d| _|j| _|j| _t|rZt	|}t
|di | _dD ]}	t| |	t
||	 qZt| jD ]\}
}t| d|
 | q|t| j}t| j}| jr|d| j  |d| j  n| jr|d | jD ]$}	|d|	  |d|	|	f  q| jr6|d	| j  |d	| j  d
|| _d
|| _ |j | _|rf|| _|d urv|| _|r|| _|r|| _|r|| _|r|| _t| dsJ t| dstd| d S )Nz<lambda>Z_lambda___annotations__)argsvarargsvarkwdefaults
kwonlyargskwonlydefaultszarg%d*z%s=Nonez%s=%sz**, name	signaturez%You are decorating a non function: %s)shortsignature__name__r   __doc__doc
__module__moduleinspect	isroutiner   getattrannotationssetattr	enumerater	   listr
   appendr   r   joinr   __dict__copydictr   hasattr	TypeError)selffuncr   r   r   r   r   ZfuncdictZargspecaiargZallargsZallshortargsr   r   E/var/www/html/django/DPS/env/lib/python3.9/site-packages/decorator.py__init__@   sZ    





zFunctionMaker.__init__c                 K   s   | j |_t| dd|_t| di |_| j|_| jp4d|_t| dd|_	zt
d}W n tyj   d}Y n0 |jdd}t| d||_|j| dS )	zD
        Update the signature of func with the data in self
        r   Nr$   r      ?r   r   )r   r   r   r   r"   r   __defaults__r   __kwdefaults__r   sys	_getframeAttributeError	f_globalsgetr   update)r'   r(   kwframeZcallermoduler   r   r,   r7   t   s    
zFunctionMaker.updateFc                 K   s  |t |  }|pi }t|}|du r2td| |d}t|gdd | jdD  }|D ]}	|	dv r`td|	|f q`|	d	s|d	7 }d
t
| j }
zt||
d}t|| W n0 ty   tdtjd t|tjd  Y n0 || }|r||d< | j|fi | |S )zT
        Make a new function from a given template and update the signature
        Nz not a valid function template
%s   c                 S   s   g | ]}| d qS )z *)strip.0r+   r   r   r,   
<listcomp>       z&FunctionMaker.make.<locals>.<listcomp>,)_func__call_z%s is overridden in
%s
z<decorator-gen-%d>singlezError in generated code:)fileZ
__source__)varsDEFsearchSyntaxErrorgroupsetr   split	NameErrorendswithnext_compile_countcompileexec	Exceptionprintr2   stderrr7   )r'   Z	src_templevaldict	addsourceattrssrcmor   namesnfilenamecoder(   r   r   r,   make   s6    




zFunctionMaker.makeTc                 K   s   t |tr0| dd\}	}
|
dd }d}nd}	d}|}| ||	||||}ddd | D }|d}|rt|rd	| d
d}nd| }|j	|||fi |S )z
        Create a function from the strings name, signature and body.
        evaldict is the evaluation dictionary. If addsource is true an
        attribute __source__ is added to the result. The attributes attrs
        are added, if any.
        (r:   NrC   c                 s   s   | ]}d | V  qdS )z    Nr   )r=   liner   r   r,   	<genexpr>   r?   z'FunctionMaker.create.<locals>.<genexpr>rB   z#async def %(name)s(%(signature)s):
returnzreturn awaitzdef %(name)s(%(signature)s):
)

isinstancestrr;   rL   r!   
splitlinesr6   r   replacer_   )clsobjbodyrV   r   r   r   rW   rX   r   restr   r(   r'   Zibodycallerr   r   r,   create   s     	

zFunctionMaker.create)NNNNNNN)NF)NNNT)r   r   __qualname__r   	itertoolscountrP   r	   r
   r   r   r   r   r-   r7   r_   classmethodrn   r   r   r   r,   r   3   s     
4
$  r   c                 C   s$   |j | i |}|  |j|jfS )zA
    Fix args and kwargs to be consistent with the signature
    )bindapply_defaultsr	   kwargs)r	   ru   sigbar   r   r,   fix   s    rx   r   Fc                    s*  t t r( fdd}n2t rF fdd}n fdd}j|_j|_|_|_j|_zj	|_	W n t
y   Y n0 zj|_W n t
y   Y n0 zj|_W n t
y   Y n0 zj|_W n t
y   Y n0 z|jj W n t
y$   Y n0 |S )af  
    Decorates a function/generator/coroutine using a caller.
    If kwsyntax is True calling the decorated functions with keyword
    syntax will pass the named arguments inside the ``kw`` dictionary,
    even if such argument are positional, similarly to what functools.wraps
    does. By default kwsyntax is False and the the arguments are untouched.
    c                     s4   st | |\} } g|  R i |I d H S Nrx   r	   r8   rm   extrasr(   kwsyntaxrv   r   r,   fun   s    zdecorate.<locals>.func                  ?   s>   st | |\} } g|  R i |D ]
}|V  q.d S ry   rz   )r	   r8   resr|   r   r,   r      s    c                     s.   st | |\} } g|  R i |S ry   rz   r{   r|   r   r,   r      s    )r   r   r   r   r   r   __wrapped____signature__ro   r0   r4   r1   r   r   r"   r7   )r(   rm   r}   r~   r   r   r|   r,   decorate   s@    
r   c                    s    fdd}|S )z
    A version of "decorator" implemented via "exec" and not via the
    Signature object. Use this if you are want to preserve the `.__code__`
    object properties (https://github.com/micheles/decorator/issues/129).
    c                    s   t j| dt | d| | jdS )Nz)return _call_(_func_, %(shortsignature)s))rB   rA   )r   ro   )r   rn   r$   ro   r(   rm   r   r,   dec  s    
zdecoratorx.<locals>.decr   )rm   r   r   r   r,   
decoratorx  s    r   c                    s   |durt | dS t }dd |j D d	 fdd	}|jd|_ j|_ j|_ |_	 j
|_
t dd|_|j j |S )
zG
    decorator(caller) converts a caller function into a decorator
    Nr   c                 S   s   g | ]}|j tu r|qS r   )kindPOSr=   pr   r   r,   r>     r?   zdecorator.<locals>.<listcomp>c                    sX   t |d }|tfdd|d  D   | d u rF fddS t|  S d S )Nr:   c                 3   s(   | ] }|j tur |j|j V  qd S ry   )defaultEMPTYr6   r   r   )r8   r   r,   rc   "  s   
z)decorator.<locals>.dec.<locals>.<genexpr>c                    s   t |  S ry   r   r   )rm   r}   r~   r   r,   <lambda>&  r?   z(decorator.<locals>.dec.<locals>.<lambda>)lentupler   )r(   r	   r8   narm   Z
dec_paramsr~   )r}   r8   r,   r      s    

zdecorator.<locals>.dec)
parametersr1   )N)r   r   r   r   valuesrh   r   r   r   r   ro   r   r1   r"   r7   )rm   Z_funcr~   rv   r   r   r   r,   	decorator  s    
	r   c                   @   s   e Zd Zdd Zdd ZdS )ContextManagerc                 O   s   t | ||| d S ry   )r   r-   )r'   gr)   kr   r   r,   r-   7  s    zContextManager.__init__c                    s    fdd}t ||S )Nc                    sP    j  jg jR i  j | |i |W  d    S 1 sB0    Y  d S ry   )	__class__r(   r	   kwds)fr)   r   r'   r   r,   rm   ;  s     z'ContextManager.__call__.<locals>.callerr   )r'   r(   rm   r   r   r,   __call__:  s    zContextManager.__call__N)r   r   ro   r-   r   r   r   r   r,   r   6  s   r   c                 C   s   t | S ry   )_contextmanagerr   r   r   r,   contextmanagerD  s    r   c                 C   sP   d}t |D ]0\}}t|| r&d} q>t| |r| ||< d}q|rL||  dS )z_
    Append ``a`` to the list of the virtual ancestors, unless it is already
    included.
    TFN)r   
issubclassr    )r)   
vancestorsaddjvar   r   r,   r    K  s    

r    c                     sL   sJ ddd  tjdffdd	  fdd}d	 |_|S )
zr
    Factory of decorators turning a function into a generic function
    dispatching on the given arguments.
    zNo dispatch args passedz(%s,)r    c                    s0   |t | t  r,tdt  t | |f dS )z5Make sure one passes the expected number of argumentszExpected %d arguments, got %d%sN)r   r&   )	argumentsZwrongmsg)dispatch_argsr   r,   checke  s    zdispatch_on.<locals>.checkc                    s   t tj}t |ks&td i fddfdd fdd} fdd	} fd
d}tjd t|d| |d
S )z4Decorator turning a function into a generic functionzUnknown dispatch arguments %sc                     sn    |  dd t tD }D ]<}t| ||D ]*\}}}t||r2|| vr2t|| q2q"dd |D S )zU
            Get a list of sets of virtual ancestors for the given types
            c                 S   s   g | ]}g qS r   r   )r=   _r   r   r,   r>   z  r?   zIdispatch_on.<locals>.gen_func_dec.<locals>.vancestors.<locals>.<listcomp>c                 S   s   g | ]}t |qS r   )rK   )r=   rar   r   r,   r>     r?   )ranger   zipr   mror    )typesZrastypes_ttype_r   )r   r   typemapr   r,   r   u  s    z5dispatch_on.<locals>.gen_func_dec.<locals>.vancestorsc                     s    |  g }t | |  D ]p\}}t|}|dkrDtd||f n4|dkrp|\}td||fi  dd }n| }||dd  q|S )zG
            Get a list of virtual MROs, one for each type
            r:   zAmbiguous dispatch for %s: %sr   Nra   )r   r   RuntimeErrortyper   r    )r   listsr   ZvasZn_vasr   r   )r   r   r   r,   	ancestors  s    
z4dispatch_on.<locals>.gen_func_dec.<locals>.ancestorsc                     s      fdd}|S )zU
            Decorator to register an implementation for the given types
            c                    s&    t | jtjd| j  | < | S )Nz in )r   r	   operatorltr   )r   )r   r   r   r   r,   r     s    z@dispatch_on.<locals>.gen_func_dec.<locals>.register.<locals>.decr   )r   r   )r   r   )r   r,   register  s    z3dispatch_on.<locals>.gen_func_dec.<locals>.registerc                     s<   |  g }t j |   D ]}|tdd |D  q|S )zI
            An utility to introspect the dispatch algorithm
            c                 s   s   | ]}|j V  qd S ry   )r   )r=   r)   r   r   r,   rc     r?   zKdispatch_on.<locals>.gen_func_dec.<locals>.dispatch_info.<locals>.<genexpr>)rp   productr    r   )r   lstZanc)r   r   r   r,   dispatch_info  s
    z8dispatch_on.<locals>.gen_func_dec.<locals>.dispatch_infoc                    s   t dd | D }z| }W n ty0   Y n0 ||i |S tj |  }t| |D ](}|}|d urZ||i |  S qZ|i |S )Nc                 s   s   | ]}t |V  qd S ry   )r   r<   r   r   r,   rc     r?   zGdispatch_on.<locals>.gen_func_dec.<locals>._dispatch.<locals>.<genexpr>)r   KeyErrorrp   r   rO   r6   )r   r	   r8   r   r   combinationsr   )r   r(   r   r   r,   	_dispatch  s    
z4dispatch_on.<locals>.gen_func_dec.<locals>._dispatchz#return _f_(%s, %%(shortsignature)s))Z_f_)r   r   r   r   r   r   r   )rK   r   r	   rM   r   rn   r$   )r(   Zargsetr   r   r   r   r   Zdispatch_str)r   r(   r   r   r,   gen_func_deck  s    
z!dispatch_on.<locals>.gen_func_decdispatch_on)r!   r   ner   )r   r   r   r   r,   r   ]  s    W
r   )r   F)NF)r   rer2   r   r   rp   
contextlibr   r   r   r   __version__rQ   rG   	ParameterPOSITIONAL_OR_KEYWORDr   emptyr   objectr   rx   r   r   r   r   r   r   r    r   r   r   r   r,   <module>   s,   
 	
6
!