
    Xh=                     .   d Z ddlmZ ddlZddlZddlZddlZddlZddlZdZ	ej                  dk\  r
ddlmZ d Zn G d d	e      Zd
 Z ej                  dd      Zd Z ej"                  d      Z G d de      Zd ZddZ	 ddlmZ  G d de      Z eej6                        Z eej<                        Zedk(  rej@                  sd Zee_        n!edk(  rej@                  rnedk(  r
d Zee_         ee      Z!d Z"d Z#y# e$ r	 ddlmZ Y w xY w)zT
Decorator module, see http://pypi.python.org/pypi/decorator
for the documentation.
    )print_functionNz4.0.10   )getfullargspecc                     | j                   S N)__init__clss    O/var/www/html/myenv/lib/python3.12/site-packages/prometheus_client/decorator.pyget_initr   1   s    ||    c                   4    e Zd ZdZd Zd Zej                  Zy)r   z?A quick and dirty replacement for getfullargspec for Python 2.Xc                 |    t        j                  |      \  | _        | _        | _        | _        g | _        d | _        y r   )inspect
getargspecargsvarargsvarkwdefaults
kwonlyargskwonlydefaults)selffs     r   r	   zgetfullargspec.__init__7   s4    ""1% ?DIt|TZ DO"&Dr   c              #   |   K   | j                    | j                   | j                   | j                   y wr   )r   r   r   r   )r   s    r   __iter__zgetfullargspec.__iter__=   s-     ))O,,**--s   :<N)__name__
__module____qualname____doc__r	   r   r   r    r   r   r   r   4   s    I	'	  ''
r   r   c                 .    | j                   j                  S r   )r	   __func__r
   s    r   r   r   F   s    ||$$$r   ArgSpeczargs varargs varkw defaultsc                     t        |       }t        |j                  |j                  |j                  |j
                        S )z$A replacement for inspect.getargspec)r   r$   r   r   r   r   )r   specs     r   r   r   N   s-    !D499dllDJJFFr   z\s*def\s*([_\w][_\w\d]*)\s*\(c                   b    e Zd ZdZ ej
                         Z	 	 ddZd ZddZ	e
	 	 d	d       Zy)
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           	         || _         |r_|j                  | _        | j                  dk(  rd| _        |j                  | _        |j
                  | _        t        j                  |      r t        |      }t        |di       | _        dD ]  }	t        | |	t        ||	              t        | j                        D ]  \  }
}t        | d|
z  |        t        j                   dk  r't        j"                  |dd id	d
 x| _         | _        n?t'        | j                        }t'        | j                        }| j(                  r=|j+                  d| j(                  z          |j+                  d| j(                  z          n| j,                  r|j+                  d       | j,                  D ],  }	|j+                  d|	z         |j+                  |	d|	       . | j.                  r<|j+                  d| j.                  z          |j+                  d| j.                  z          dj1                  |      | _        dj1                  |      | _         |j2                  j5                         | _        |r|| _        ||| _        |r|| _        |r|| _        |r|| _        |r|| _        t;        | d      sJ t;        | d      st=        d|z        y )N<lambda>_lambda___annotations__)r   r   r   r   r   r   zarg%dr   formatvaluec                      y)N r!   )vals    r   <lambda>z(FunctionMaker.__init__.<locals>.<lambda>w   s    r      *z%s=None=z**, name	signaturez%You are decorating a non function: %s)shortsignaturer   r7   r    docr   moduler   
isfunctionr   getattrannotationssetattr	enumerater   sysversion_infoformatargspecr8   listr   appendr   r   join__dict__copydictr   hasattr	TypeError)r   funcr7   r8   r   r:   r;   funcdictargspecaiargallargsallshortargss                 r   r	   zFunctionMaker.__init__b   sq   'DIyyJ&&	||DH//DK!!$'(.#*41BB#G , :AD!WWa%89: (		2 4FAsD'A+s34##d*--9@B(6BBCBHID'$. #499oG#'		?L||sT\\'9:$++C$,,,>?s+!__ >y1}5$++q!,<=> zztdjj'89$++D4::,=>%)YYw%7DN*.))L*AD' MM..0	DI &DN$DMDH DK DItV$$$t[)CdJKK *r   c                    | j                   |_        t        | dd      |_        t        | di       |_        t        | dd      |_        t        | dd      |_        t        | dd      |_        	 t        j                  d      }|j                  j                  d	d
      }t        | d|      |_        |j                  j                  |       y# t        $ r d
}Y ;w xY w)z2Update the signature of func with the data in selfr:   NrI   r   r!   r   r>   r   r   ?r;   )r7   r   r=   r    rG   __defaults____kwdefaults__r,   rA   	_getframe	f_globalsgetAttributeErrorr   update)r   rL   kwframecallermodules        r   r\   zFunctionMaker.update   s    		tUD1fb1#D*b9%d,<dC&t]DA	@MM!$E !??..z3?L!$,?R   	L	s   -C CCc           	         |t        |       z  }|xs i }t        j                  |      }|t        d|z        |j	                  d      }t        |g| j                  j                  d      D cg c]  }|j                  d       c}z         }	|	D ]  }
|
dv st        |
d|       |j                  d      s|dz  }dt        | j                        fz  }	 t        ||d	      }t        ||       ||   }|r||d<    | j$                  |fi | |S c c}w #  t        d
t         j"                         t        |t         j"                          xY w)zBMake a new function from a given template and update the signaturez not a valid function template
%sr2   ,z *)_func__call_z is overridden in

z<decorator-gen-%d>singlezError in generated code:)file
__source__)varsDEFmatchSyntaxErrorgroupsetr9   splitstrip	NameErrorendswithnext_compile_countcompileexecprintrA   stderrr\   )r   	src_templevaldict	addsourceattrssrcmor7   rQ   namesnfilenamecoderL   s                 r   makezFunctionMaker.make   s[   $t*$>rYYs^:ACGHHxx{TF"1177<>#ciio > > ? 	FA((Q DEE	F ||D!4KC
 (40C0C+D*FF	3(3Dx 
 ~"%E,D"E"1> 	,3::>#CJJ's   /D
D 9Ec                    t        |t              r+|j                         j                  dd      \  }	}
|
dd }d}nd}	d}|} | ||	||||      }dj	                  d |j                         D              } |j                  d|z   ||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.
        (r2   Nr3   rd   c              3   &   K   | ]	  }d |z     yw)z    Nr!   ).0lines     r   	<genexpr>z'FunctionMaker.create.<locals>.<genexpr>   s     FD&4-Fs   zdef %(name)s(%(signature)s):
)
isinstancestrro   rn   rF   
splitlinesr   )r   objbodyry   r   r:   r;   rz   r{   r7   restr8   rL   r   ibodys                  r   createzFunctionMaker.create   s     c3**32JD$Sb	IDDID4y(C@		FDOO4EFFtyy9EA!97057 	7r   )NNNNNNN)NF)NNNT)r   r   r   r    	itertoolscountrs   r	   r\   r   classmethodr   r!   r   r   r(   r(   X   sI     %Y__&N7;@D7Lr!" D 26047 7r   r(   c                     t        ||       }t        j                  | d||       }t        | d      r| j                  |_        |S )zE
    decorate(func, caller) decorates a function using a caller.
    )rc   rb   z)return _call_(_func_, %(shortsignature)s)__wrapped__r   )rI   r(   r   rJ   r   )rL   callerry   funs       r   decorater      sO     6$/H


9d  $C t^$,,Jr   c                    |t        ||       S t        j                  |       r8| j                  j	                         }d| j                  d| j                  d}nzt        j
                  |       r+| j                  dk(  rd}n| j                  }| j                  }n:| j                  j                  j	                         }| j                  j                  }t        | t               }t        j                  d|z  d||| j                  | 	      S )
z=decorator(caller) converts a caller function into a decoratorz
decorator(z2) converts functions/generators into factories of z objectsr*   r+   )rc   
_decorate_z%s(func)zreturn _decorate_(func, _call_))r:   r;   r   )r   r   isclassr   lowerr<   r    	__class____call__rI   r(   r   r   )r   _funcr7   r:   ry   s        r   	decoratorr      s    v&&v$$&+1??FOOM			F	#??j(D??Dnn((..0oo%%6h7HT<c&"3"3    r   )_GeneratorContextManager)GeneratorContextManagerc                       e Zd Zd Zy)ContextManagerc                 J    t         j                  |dt        | |      |      S )zContext manager decoratorz.with _self_: return _func_(%(shortsignature)s))_self_rb   r   )r(   r   rI   )r   rL   s     r   r   zContextManager.__call__  s,    ##BT* $ > 	>r   N)r   r   r   r   r!   r   r   r   r     s    >r   r      c                 :    t        j                  |  ||i |      S r   r   r	   r   grO   ks       r   r	   r	     s    '00q!zqzBBr      c                 2    t        j                  | |||      S r   r   r   s       r   r	   r	   '  s    '00q!Q??r   c                     d}t        |      D ])  \  }}t        ||       rd} nt        | |      s#| ||<   d}+ |r|j                  |        yy)z_
    Append ``a`` to the list of the virtual ancestors, unless it is already
    included.
    TFN)r@   
issubclassrE   )rO   
vancestorsaddjvas        r   rE   rE   2  sc    
 C:& 2b!CaJqMC ! r   c                        sJ d       ddj                         z  t        j                  df fd	 fd}dz   |_        |S )zr
    Factory of decorators turning a function into a generic function
    dispatching on the given arguments.
    zNo dispatch args passedz(%s,)r6   r/   c                      |t        |       t                    r#t        dt              t        |       |fz        y)z5Make sure one passes the expected number of argumentszExpected %d arguments, got %d%sN)lenrK   )	argumentswrongmsgdispatch_argss      r   checkzdispatch_on.<locals>.checkL  sF    Y]!34= /YEF G G 5r   c                     t        t               j                        }t        	      |k  st        d
z        i 	fdfdfd}fd} fd}t        j                   d
z  t        |      | | 	
      S )
z4Decorator turning a function into a generic functionzUnknown dispatch arguments %sc                  &    |        t        t                    D cg c]  }g  }}	D ]@  }t        | ||      D ].  \  }}}t        ||      s||j                  vs#t        ||       0 B |D cg c]  }t        |       c}S c c}w c c}w )zU
            Get a list of sets of virtual ancestors for the given types
            )ranger   zipr   __mro__rE   rm   )
types_rastypes_ttype_rar   r   typemaps
          r   r   z5dispatch_on.<locals>.gen_func_dec.<locals>.vancestors\  s     %L$S%789!29C9! *$'vs$; *LAub!!U+QYY0Fub)** '**CG** :
 +s   	B	4Bc                      |        g }t        |  |        D ]l  \  }}t        |      }|dkD  rt        d|d|      |dk(  r!|\  }t        d||fi       j                  dd }n|j                  }|j                  |dd        n |S )zG
            Get a list of virtual MROs, one for each type
            r2   zAmbiguous dispatch for z: r   Nr3   )r   r   RuntimeErrortyper   rE   )	r   listsr   vasn_vasr   mror   r   s	          r   	ancestorsz4dispatch_on.<locals>.gen_func_dec.<locals>.ancestorsh  s     %LEeZ%78 
'3C19&;<cBD DaZCBsQGR088<C))CS"X&
' Lr   c                  (               fd}|S )zU
            Decorator to register an implementation for the given types
            c                      t        |       j                  t        j                  d| j                  z          | <   | S )Nz in )r   r   operatorltr   )r   r   r   r   s    r   decz@dispatch_on.<locals>.gen_func_dec.<locals>.register.<locals>.dec  s5    nQ',,hkk6AJJ;NO!"r   r!   )r   r   r   r   s   ` r   registerz3dispatch_on.<locals>.gen_func_dec.<locals>.register{  s     %L
 Jr   c                       |        g }t        j                   |   D ]#  }|j                  t        d |D                     % |S )zI
            An utility to introspect the dispatch algorithm
            c              3   4   K   | ]  }|j                     y wr   )r   )r   rO   s     r   r   zKdispatch_on.<locals>.gen_func_dec.<locals>.dispatch_info.<locals>.<genexpr>  s      9 9s   )r   productrE   tuple)r   lstancr   r   s      r   dispatch_infoz8dispatch_on.<locals>.gen_func_dec.<locals>.dispatch_info  sL     %LC (()U*;< ;

5 9S 99:;Jr   c                     t        d | D              }	 	|   } ||i |S # t        $ r Y nw xY wt        j                   |  }t	        |       |D ]  }	j                  |      }| ||i |c S   |i |S )Nc              3   2   K   | ]  }t        |        y wr   )r   )r   rQ   s     r   r   zGdispatch_on.<locals>.gen_func_dec.<locals>._dispatch.<locals>.<genexpr>  s     =$s)=s   )r   KeyErrorr   r   rr   rZ   )
r   r   r]   r   r   combinationsr   r   rL   r   s
          r   	_dispatchz4dispatch_on.<locals>.gen_func_dec.<locals>._dispatch  s    =}==E&EN $~"~%   %,,i.?@L& *KK'=d>b>)* $$$s   " 	..z#return _f_(%s, %%(shortsignature)s))_f_)r   defaultr   r   r   r   r   )rm   r   r   rp   r(   r   rI   )rL   argsetr   r   r   r   r   r   r   r   dispatch_strs   `    @@@r   gen_func_decz!dispatch_on.<locals>.gen_func_decR  s     ^D)../=!V+;lJKK
	+	&			%$ ##7,FY(D
i'T	 $ ; 	;r   dispatch_on)rF   r   ner   )r   r   r   r   s   ` @@r   r   r   D  sQ    
 333=TYY}55L'{{ GV;p *L8Lr   r   )$r    
__future__r   collectionsr   r   r   rerA   __version__rB   r   r   object
namedtupler$   r   rt   ri   r(   r   r   
contextlibr   ImportErrorr   r   r	   initr   r   n_argsr   contextmanagerrE   r   r!   r   r   <module>r      s?  < &     	 
t&( ($% !+
 
 ,.G bjj12J7F J7Z
8O3
>- > .778	TYY	Q;t||C 'Nq[T\\q[@ 'N>*
$gi  ONOs   D DD