o
    iH                     @  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 d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ dZdddZejdddddZG dd deZdS )    )annotationsN)Iterator)AbstractContextManagercontextmanager)Any)Logfire)CallNodeFinderget_node_source_text)ATTRIBUTES_MESSAGE_KEY)MessageValueCleaner)handle_internal_errorszlogfire.print_argslogfire_instancer   returnAbstractContextManager[None]c                   sX   t jjddjjjj ddd fdd}|t _tfdd}| S )zInstruments the built-in `print` function to send logs to **Logfire**.

    See Logfire.instrument_print for full documentation.
    print)custom_scope_suffixN)separgsr   r   
str | Nonekwargsr   Nonec                   s  |d| i| |sdS | du rd} t b tdd d}d}r<t }|s,J d|j}|s5J dt|}|j}|du rNt|i} fdd	|D }n|sRJ || \}}| 	||t
< |   d
d| W d   dS 1 szw   Y  dS )z6The wrapper function that will replace builtins.print.r   N T)
check_keyszCould not get current framezCould not get caller framec                   s   g | ]
}  tt|qS  )clean_valueFALLBACK_ATTRIBUTE_KEYstr.0argvalue_cleanerr   j/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/logfire/_internal/integrations/print.py
<listcomp>@       zAinstrument_print.<locals>._instrumented_print.<locals>.<listcomp>infor   )r   r   inspectcurrentframef_backPrintCallNodeFindernoder   get_magic_attributesjoinr
   updateextra_attrslog)r   r   r   	call_nodenode_finderframe
attributesmessage_partsinspect_argsr   original_printscrubberr    r"   _instrumented_print#   s2   "z-instrument_print.<locals>._instrumented_printc                   3  s    z	d V  W  t _d S  t _w N)builtinsr   r   )r7   r   r"   uninstrument_contextL   s   z.instrument_print.<locals>.uninstrument_context)r   r   r   r   r   r   r   r   )r;   r   with_settingsconfigr8   inspect_argumentsr   )r   r9   r<   r   r5   r"   instrument_print   s   '	r@   i   )maxsizer*   ast.exprc                 C  s&   zt |  W dS  ty   Y dS w )NTF)astliteral_eval	Exception)r*   r   r   r"   _is_literalY   s   
rF   c                   @  s2   e Zd ZdddZddd	Zd
d ZdddZdS )r)   r   Iterator[ast.AST]c                 c  s    | j jE d H  d S r:   )ex
statementsselfr   r   r"   heuristic_main_nodesc   s   z(PrintCallNodeFinder.heuristic_main_nodesr*   ast.Callboolc                 C  s
   t |jS r:   )rN   r   )rK   r*   r   r   r"   heuristic_call_node_filterf   s   
z.PrintCallNodeFinder.heuristic_call_node_filterc                 C  s   dt  dS )NzUsing `z8` as the fallback attribute key for all print arguments.)r   rJ   r   r   r"   warn_inspect_arguments_middlej   s   z1PrintCallNodeFinder.warn_inspect_arguments_middler   tuple[Any, ...]r!   r    tuple[dict[str, Any], list[str]]c                   s   j sJ i tj j t| fdd}     | }s,|fS      | }|  t dkrUt d tjsKJ t d j	j
nt< fddD }|| | }|fS )zInspects argument expression AST nodes.

        Returns:
            - An attributes dict mapping non-literal argument expressions sources to their runtime values.
            - A list of strings to construct the log message.
        c                    s   g }  rBt  d tjsB  } }t|r#| t| nt|j	}||< | 
|t|  rBt  d tjr| S )z=Helper to process non-starred args from the end of the lists.)
isinstancerC   StarredpoprF   appendtruncater   r	   sourcer   )r4   r*   valuenode_source)ast_argsr3   runtime_argsrK   r!   r   r"   _process_end{   s   
z>PrintCallNodeFinder.get_magic_attributes.<locals>._process_end   r   c                   s   g | ]
}  t|qS r   )r   r   r   )
middle_keyr!   r   r"   r#      r$   z<PrintCallNodeFinder.get_magic_attributes.<locals>.<listcomp>)r*   listr   reverselenrT   rC   rU   r	   rZ   rY   r   )rK   r   r!   r^   message_parts_startmessage_parts_endmessage_parts_middlefull_message_partsr   )r\   r3   r`   r]   rK   r!   r"   r+   m   s,   
	z(PrintCallNodeFinder.get_magic_attributesN)r   rG   )r*   rM   r   rN   )r   rQ   r!   r   r   rR   )__name__
__module____qualname__rL   rO   rP   r+   r   r   r   r"   r)   b   s
    

r)   )r   r   r   r   )r*   rB   )
__future__r   rC   r;   	functoolsr&   collections.abcr   
contextlibr   r   typingr   logfirer   logfire._internal.ast_utilsr   r	   logfire._internal.constantsr
   logfire._internal.scrubbingr   logfire._internal.utilsr   r   r@   	lru_cacherF   r)   r   r   r   r"   <module>   s$    

@