
    g                       d dl m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	 d dl
mZmZmZmZmZmZ d dlmZ d dlmZmZ dd	lmZmZ dd
lmZ ddlmZmZ erddlm Z   ed      Z! ed      Z"e	d        Z#ed        Z$ e%e#dd      Z& e%e$dd      Z'dZ(	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ)	 	 	 	 	 	 	 	 	 	 	 	 ddZ*	 	 	 	 	 	 	 	 ddZ+y)    )annotationsN)Sequence)asynccontextmanagercontextmanager)TYPE_CHECKINGAnyCallableContextManagerIterableTypeVar)types)LiteralString	ParamSpec   )ATTRIBUTES_MESSAGE_TEMPLATE_KEYATTRIBUTES_TAGS_KEY)get_filepath_attribute)	safe_repruniquify_sequence)LogfirePRc               #     K   d  y wN r       Q/var/www/openai/venv/lib/python3.12/site-packages/logfire/_internal/instrument.py_cmr      s	     	s   c                   K   d  y wr   r   r   r   r   _acmr       s	     	s   	__code__z@logfire.instrument should only be used on generators if they are used as context managers. See https://logfire.pydantic.dev/docs/guides/advanced/generators/#using-logfireinstrument for more information.c                (     d fd}|S )Nc                
    t         dd       t        t        fv rt        j                  dd       t         	      }t        |       t        j                         r%st        j                  t        d       d	 fd}n^t        j                         r%st        j                  t        d       d	 fd}n$t        j                         rd
 fd}nd
 fd} t        j                         |      }|S )Nr!   zg@logfire.instrument should be underneath @contextlib.[async]contextmanager so that it is applied first.   
stacklevelc               ?  l   K    | i |5   | i |E d {    d d d        y 7 # 1 sw Y   y xY wwr   r   	func_argsfunc_kwargsfunc	open_spans     r   wrapperz.instrument.<locals>.decorator.<locals>.wrapperC   s;     	9[9#Y>+>>> :9> :9s    	4(&(	4(14c                ~   K    | i |5   | i |2 3 d {   }| 7 
6 	 d d d        y # 1 sw Y   y xY wwr   r   )r)   r*   xr+   r,   s      r   r-   z.instrument.<locals>.decorator.<locals>.wrapperJ   sC     	9[9 $(#Bk#B  a #B :99s,   	=	1&$&1&1	=:=c                 l   K    | i |5   | i | d {   cd d d        S 7 # 1 sw Y   y xY wwr   r   r(   s     r   r-   z.instrument.<locals>.decorator.<locals>.wrapperX   s8     	9[9!%y!@K!@@ :9@ :9s    	4(&(
4(14c                 P     | i |5   | i |cd d d        S # 1 sw Y   y xY wr   r   r(   s     r   r-   z.instrument.<locals>.decorator.<locals>.wrapper]   s)    	9[9:k: :99s   %r)   P.argsr*   P.kwargs)r)   r3   r*   r4   returnr   )getattrCONTEXTMANAGER_HELPER_CODEASYNCCONTEXTMANAGER_HELPER_CODEwarningswarnget_attributesget_open_spaninspectisgeneratorfunctionGENERATOR_WARNING_MESSAGEisasyncgenfunctioniscoroutinefunction	functoolswraps)
r+   
attributesr-   r,   allow_generatorextract_argslogfiremsg_template	span_nametagss
   `  @r   	decoratorzinstrument.<locals>.decorator5   s    4T*/IKj.kkMMy
 $D,=
!':y,PTU	&&t,"7AF? ''-"7AF
  ((.A
; ()//$'0r   )r+   Callable[P, R]r5   rL   r   )rG   rJ   rH   rI   rF   rE   rK   s   `````` r   
instrumentrM   -   s    - -^ r   c                   	
 |xs	 t            	d		 fd}|du r,t        j                  |      

j                  r	d
	 
fd}|S |rt        j                  |      
t	        |t
              r|g}t        t        |            t              t        
j                        z
  }|rGD cg c]	  }||vs| c}t        j                  ddj                  t        |             d       r
d
	 
fd}|S c c}w )Nc                 (    j                        S r   )
_fast_span)___rD   final_span_namerG   s     r   r,   z get_open_span.<locals>.open_spanq   s    !!/:>>r   Tc                 b     j                   | i |j                  }j                  |      S r   bind	arguments_instrument_span_with_args)r)   r*   	args_dictrD   rS   rG   sigs      r   r,   z get_open_span.<locals>.open_spanx   s8    $CHHi?;?II	99#Z r   z'Ignoring missing arguments to extract: z,    r%   c                      j                   | i |j                  }D ci c]  }|||   
 }}j                  |      S c c}w r   rU   )	r)   r*   rY   krD   extract_args_finalrS   rG   rZ   s	       r   r,   z get_open_span.<locals>.open_span   s_    $CHHi?;?II	 7II6HQ	!_6H	I99#Z  Js   A)rQ   r3   rR   r4   r2   )r   r=   	signature
parameters
isinstancestrr   listsetr9   r:   joinsorted)rG   rD   rI   rF   r+   r,   missingargr^   rS   rZ   s   ``      @@@r   r<   r<   g   s     %S
3R(SO? t%>>  %lC((>L.tL/AB()C,??1C!Z1C#sRYGY#1C!ZMM9$))F7O:T9UV
   % "[s   0	D:Dc                   t        j                  |       } t        j                  |       s-t        | d      r!| j                  } t        j                  |       } t        | dt        | dt        |                   }|s&	 dt        j                  |       j                   d| }d|t        |i}t        j                  t              5  | j                  j                  |d<   d d d        t        j                  t              5  |j                  t!        t        j"                  |                    d d d        |rt%        |      |t&        <   |S # t        $ r d| }Y w xY w# 1 sw Y   xY w# 1 sw Y   ?xY w)N__call____qualname____name__zCalling .zcode.functionzcode.lineno)r=   unwrap
isfunctionhasattrrj   r6   r   	getmodulerl   	Exceptionr   
contextlibsuppressr!   co_firstlinenoupdater   getsourcefiler   r   )r+   rH   rJ   	func_namerD   s        r   r;   r;      s>    >>$Dd#j(A}}~~d#ngdJ	RV.XYI	2%g&7&7&=&F&F%GqTL 	'8J 
		Y	'$(MM$@$@
=! 
(			Y	'01F1Ft1LMN 
( *;D*A
&'  	2%i[1L	2 
(	'	'	's*   <%E E?.E+EEE(+E4)rG   r   rJ   zSequence[str]rH   zLiteralString | NonerI   
str | NonerF   bool | Iterable[str]rE   boolr5   z*Callable[[Callable[P, R]], Callable[P, R]])rG   r   rD   $dict[str, otel_types.AttributeValue]rI   ry   rF   rz   r+   rL   r5   z Callable[P, ContextManager[Any]])r+   r   rH   ry   rJ   zSequence[str] | Noner5   r|   ),
__future__r   rs   rB   r=   r9   collections.abcr   r   r   typingr   r   r	   r
   r   r   opentelemetry.utilr   
otel_typestyping_extensionsr   r   	constantsr   r   
stack_infor   utilsr   r   mainr   r   r   r   r    r6   r7   r8   r?   rM   r<   r;   r   r   r   <module>r      sG   "     $ : R R 2 6 K . / cNCL 
 
 
 
 %S*d; ")$
D"A v 77
7 '7 	7
 '7 7 07t4444 4 '	4
 4 &4n
'/C)r   