
    g                        d dl mZ d dlZd dlmZ d dlmZ d dlmZ	 ddl
mZmZmZ ddlmZmZ dd	lmZ  ed
       G d d             Ze G d dej(                               Zy)    )annotationsN)	dataclass)cast)types   )ATTRIBUTES_MESSAGE_TEMPLATE_KEYATTRIBUTES_SAMPLE_RATE_KEYATTRIBUTES_TAGS_KEY)	StackInfoget_filepath_attribute)uniquify_sequenceT)frozenc                  B    e Zd ZU dZded<   ded<   dZded<   dZded	<   y)
LogfireArgszValues passed to `logfire.instrument` and/or values stored in a logfire instance as basic configuration.

    These determine the arguments passed to the method calls added by the AST transformer.
    ztuple[str, ...]tagszfloat | Nonesample_rateNz
str | Nonemsg_template	span_name)__name__
__module____qualname____doc____annotations__r   r        P/var/www/openai/venv/lib/python3.12/site-packages/logfire/_internal/ast_utils.pyr   r      s)    
 #L*# Iz r   r   c                  p    e Zd ZU dZded<   ded<   ded<   ded<   d Zdd	Zdd
ZddZddZ	ddZ
ddZy)BaseTransformerzXHelper for rewriting ASTs to wrap function bodies in `with {logfire_method_name}(...):`.r   logfire_argsstrlogfire_method_namefilenamemodule_namec                    g | _         y N)qualname_stack)selfs    r   __post_init__zBaseTransformer.__post_init__(   s     *,r   c                    | j                   j                  |j                         t        t        j
                  | j                  |            }| j                   j                          |S r%   )r&   appendnamer   astClassDefgeneric_visitpopr'   nodes     r   visit_ClassDefzBaseTransformer.visit_ClassDef-   sL    ""499-CLL$"4"4T":;!r   c                f   | j                   j                  |j                         dj                  | j                         }| j                   j                  d       | j	                  |       | j                   j                          | j                   j                          | j                  ||      S )N.z<locals>)r&   r*   r+   joinr.   r/   rewrite_functionr'   r1   qualnames      r   visit_FunctionDefz!BaseTransformer.visit_FunctionDef4   s    ""499-88D//0"":.4 !!$$T844r   c                $    | j                  |      S r%   )r9   r0   s     r   visit_AsyncFunctionDefz&BaseTransformer.visit_AsyncFunctionDef?   s    %%d++r   c                   |j                   j                         }g }|rt        |d   t        j                        rnt        |d   j
                  t        j                        rGt        |d   j
                  j
                  t              r |j                  |j                  d             |rot        |      dk(  rct        |d   t        j                        sDt        |d   t        j                        r)t        |d   j
                  t        j                        r|S t        j                  t        j                  | j                  ||            g||j                        }|j                  |       t        j                   t        j"                   t%        |      |j&                  |j(                  ||j*                  |j,                  |j                        |            S )Nr   r   )context_expr)itemsbodytype_comment)r+   argsr?   decorator_listreturnsr@   )r?   copy
isinstancer,   ExprvalueConstantr    r*   r/   lenPassWithwithitemlogfire_method_call_noder@   fix_missing_locationscopy_locationtyper+   rA   rB   rC   )r'   r1   r8   r?   new_bodyspans         r   r6   z BaseTransformer.rewrite_functionB   sn    yy~~#%47CHH-47==#,,747==..4
 OODHHQK( IN47CHH-tAw1jaPSP\P\6] Kxx!%!>!>tX!N
 **
 	((T
!#'#6#6 LL!%!2!2 

 	
r   c                    t               r%   )NotImplementedErrorr7   s      r   rM   z(BaseTransformer.logfire_method_call_nodey   s    !##r   c                V   i t        | j                        ||d}i |}| j                  }|j                  xs d| j                   d| }||t
        <   |j                  xs |}|j                  rt        |j                        |t        <   |j                  }|dvr	||t        <   ||fS )N)zcode.linenozcode.functionzCalling r4   )Nr   )r   r"   r   r   r#   r   r   r   r   r
   r   r	   )	r'   r8   lineno
stack_info
attributesr   r   r   r   s	            r   logfire_method_arg_valuesz)BaseTransformer.logfire_method_arg_values|   s    !
$T]]3!
!%!


 <Jj>
((#00\ht?O?O>PPQRZQ[4\6B
23 **:l	.?@Q@Q.RJ*+"..i'5@J12*$$r   N)r1   zast.ClassDef)r1   &ast.FunctionDef | ast.AsyncFunctionDef)r1   zast.AsyncFunctionDef)r1   rZ   r8   r    returnzast.AST)r1   rZ   r8   r    r[   zast.Call)r8   r    rV   intr[   z0tuple[str, dict[str, otel_types.AttributeValue]])r   r   r   r   r   r(   r2   r9   r;   r6   rM   rY   r   r   r   r   r      s@    bM,
	5,5
n$%r   r   )
__future__r   r,   dataclassesr   typingr   opentelemetry.utilr   
otel_types	constantsr   r	   r
   rW   r   r   utilsr   r   NodeTransformerr   r   r   r   <module>re      sh    " 
 !  2 
 : $ $	! 	! 	! q%c)) q% q%r   