o
    i                      @  s&  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mZ d dlm	Z	m
Z
mZ d dl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d Z#e
dd Z$e%e#ddZ&e%e$ddZ'dZ(d1d$d%Z)d2d+d,Z*d3d/d0Z+dS )4    )annotationsN)IterableSequence)AbstractContextManagerasynccontextmanagercontextmanager)TYPE_CHECKINGAnyCallableTypeVar)types)LiteralString	ParamSpec   )ATTRIBUTES_MESSAGE_TEMPLATE_KEYATTRIBUTES_TAGS_KEY)get_filepath_attribute)	safe_repruniquify_sequence)LogfirePRc                   c  s    d V  d S N r   r   r   b/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/logfire/_internal/instrument.py_cm      
r   c                   C s   d V  d S r   r   r   r   r   r   _acm   r   r   __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.logfirer   tagsSequence[str]msg_templateLiteralString | None	span_name
str | Noneextract_argsbool | Iterable[str]record_returnboolallow_generatorreturn*Callable[[Callable[P, R]], Callable[P, R]]c              	     s,   ddl m d fdd}|S )	Nr   )set_user_attributes_on_raw_spanfuncCallable[P, R]r+   c                   s   t  dd ttfv rtjddd t 	}t| t r6s-tjt	dd d fd	d
}n1t
 rMsDtjt	dd d fdd
}nt r]d fdd
}n
d fdd
}t |}|S )Nr   zg@logfire.instrument should be underneath @contextlib.[async]contextmanager so that it is applied first.   
stacklevel	func_argsP.argsfunc_kwargsP.kwargsc                  ?  sJ    | i |  | i |E d H  W d    d S 1 sw   Y  d S r   r   )r3   r5   r.   	open_spanr   r   wrapperF   s   "z.instrument.<locals>.decorator.<locals>.wrapperc                   sZ   | i |  | i |2 z	3 d H W }|V  q6 W d    d S 1 s&w   Y  d S r   r   )r3   r5   xr7   r   r   r9   M   s   "r+   r   c                    s`   | i |} | i |I d H }r|j d|i |W  d    S 1 s)w   Y  d S Nr+   _spanr3   r5   spanresultr.   r8   r(   r-   r   r   r9   [   s   $c                    sX   | i |} | i |}r|j d|i |W  d    S 1 s%w   Y  d S r;   r<   r>   rA   r   r   r9   g   s   $r3   r4   r5   r6   )r3   r4   r5   r6   r+   r   )getattrCONTEXTMANAGER_HELPER_CODEASYNCCONTEXTMANAGER_HELPER_CODEwarningswarnget_attributesget_open_spaninspectisgeneratorfunctionGENERATOR_WARNING_MESSAGEisasyncgenfunctioniscoroutinefunction	functoolswraps)r.   
attributesr9   r*   r&   r   r"   r(   r-   r$   r    r7   r   	decorator8   s(   


zinstrument.<locals>.decorator)r.   r/   r+   r/   )mainr-   )r   r    r"   r$   r&   r(   r*   rS   r   rR   r   
instrument-   s   	9rU   rQ   $dict[str, otel_types.AttributeValue]r.   r/   (Callable[P, AbstractContextManager[Any]]c                   s   |p t  d fdd}|du r't|jr%d fd
d}|S |rlt|t|tr6|g}tt|ttj r_fddD t	j
ddt dd rld fdd}|S )N_r4   __r6   c                    s     S r   )
_fast_span)rX   rY   )rQ   final_span_namer   r   r   r8   ~   s   z get_open_span.<locals>.open_spanTr3   r5   c                    s,   j | i |}|  |j} |S r   bindapply_defaults	arguments_instrument_span_with_args)r3   r5   bound	args_dict)rQ   r[   r   sigr   r   r8      s   c                   s   g | ]}| vr|qS r   r   ).0arg)missingr   r   
<listcomp>   s    z!get_open_span.<locals>.<listcomp>z'Ignoring missing arguments to extract: z,    r1   c                    s>   j | i |}|  |j  fddD   S )Nc                   s   i | ]}| | qS r   r   )rd   krb   r   r   
<dictcomp>   s    z4get_open_span.<locals>.open_span.<locals>.<dictcomp>r\   )r3   r5   ra   )rQ   extract_args_finalr[   r   rc   rj   r   r8      s   )rX   r4   rY   r6   rB   )r   rJ   	signature
parameters
isinstancestrr   listsetrF   rG   joinsorted)r   rQ   r$   r&   r.   r8   r   )rQ   rl   r[   r   rf   rc   r   rI   t   s,   


rI   r	   Sequence[str] | Nonec                 C  s  t | } t | st| dr| j} t | } t| dt| dt| }|sBzdt | j d| }W n t	yA   d| }Y nw d|t
|i}tt	 | jj|d< W d    n1 s^w   Y  tt	 |tt |  W d    n1 s}w   Y  |rt||t< |S )N__call____qualname____name__zCalling .zcode.functionzcode.lineno)rJ   unwrap
isfunctionhasattrrv   rC   r   	getmodulerx   	Exceptionr   
contextlibsuppressr   co_firstlinenoupdater   getsourcefiler   r   )r.   r"   r    	func_namerQ   r   r   r   rH      s.   

rH   )r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r)   r+   r,   )r   r   rQ   rV   r$   r%   r&   r'   r.   r/   r+   rW   )r.   r	   r"   r%   r    ru   r+   rV   ),
__future__r   r   rO   rJ   rF   collections.abcr   r   r   r   r   typingr   r	   r
   r   opentelemetry.utilr   
otel_typestyping_extensionsr   r   	constantsr   r   
stack_infor   utilsr   r   rT   r   r   r   r   r   rC   rD   rE   rL   rU   rI   rH   r   r   r   r   <module>   s8    



G;