
    .hx                        d dl mZ d dl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
 dd	lmZ dd
lmZmZmZmZ ddlmZmZmZ  G d de
          Z G d d          Z e            ZdS )    )annotationsN)Any   )logger   )util)TracingProcessor)Scope)NoOpSpanSpanSpanImpl	TSpanData)	NoOpTraceTrace	TraceImplc                  V    e Zd ZdZd ZddZddZddZddZddZ	ddZ
ddZd ZdS ) SynchronousMultiTracingProcessorzV
    Forwards all calls to a list of TracingProcessors, in order of registration.
    c                D    d| _         t          j                    | _        d S )N )_processors	threadingLock_lockselfs    Q/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/agents/tracing/setup.py__init__z)SynchronousMultiTracingProcessor.__init__   s    9;^%%


    tracing_processorr	   c                h    | j         5  | xj        |fz  c_        ddd           dS # 1 swxY w Y   dS zj
        Add a processor to the list of processors. Each processor will receive all traces/spans.
        N)r   r   )r   r   s     r   add_tracing_processorz6SynchronousMultiTracingProcessor.add_tracing_processor   s     Z 	5 	5!2 44	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   '++
processorslist[TracingProcessor]c                n    | j         5  t          |          | _        ddd           dS # 1 swxY w Y   dS z_
        Set the list of processors. This will replace the current list of processors.
        N)r   tupler   r   r#   s     r   set_processorsz/SynchronousMultiTracingProcessor.set_processors    s     Z 	1 	1$Z00D	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   *..tracer   returnNonec                D    | j         D ]}|                    |           dS )z1
        Called when a trace is started.
        N)r   on_trace_startr   r*   	processors      r   r.   z/SynchronousMultiTracingProcessor.on_trace_start'   s7     ) 	, 	,I$$U++++	, 	,r   c                D    | j         D ]}|                    |           dS )z2
        Called when a trace is finished.
        N)r   on_trace_endr/   s      r   r2   z-SynchronousMultiTracingProcessor.on_trace_end.   s7     ) 	* 	*I""5))))	* 	*r   span	Span[Any]c                D    | j         D ]}|                    |           dS )z0
        Called when a span is started.
        N)r   on_span_startr   r3   r0   s      r   r6   z.SynchronousMultiTracingProcessor.on_span_start5   s7     ) 	* 	*I##D))))	* 	*r   c                D    | j         D ]}|                    |           dS )z1
        Called when a span is finished.
        N)r   on_span_endr7   s      r   r9   z,SynchronousMultiTracingProcessor.on_span_end<   s7     ) 	( 	(I!!$''''	( 	(r   c                p    | j         D ]-}t          j        d|            |                                 .dS )z4
        Called when the application stops.
        zShutting down trace processor N)r   r   debugshutdownr   r0   s     r   r<   z)SynchronousMultiTracingProcessor.shutdownC   sN     ) 	! 	!ILE)EEFFF    	! 	!r   c                B    | j         D ]}|                                 dS )z>
        Force the processors to flush their buffers.
        N)r   force_flushr=   s     r   r?   z,SynchronousMultiTracingProcessor.force_flushK   s5     ) 	$ 	$I!!####	$ 	$r   N)r   r	   r#   r$   )r*   r   r+   r,   )r3   r4   r+   r,   r+   r,   )__name__
__module____qualname____doc__r   r"   r)   r.   r2   r6   r9   r<   r?   r   r   r   r   r      s         & & &
5 5 5 51 1 1 1, , , ,* * * ** * * *( ( ( (! ! ! !$ $ $ $ $r   r   c                  f    e Zd Zd Zd$dZd%dZd&d
Zd'dZd(dZ	 	 	 	 d)d*dZ		 	 	 d+d,d"Z
d-d#ZdS ).TraceProviderc                    t                      | _        t          j                            dd                                          dv | _        d S )NOPENAI_AGENTS_DISABLE_TRACINGfalse)true1)r   _multi_processorosenvirongetlower	_disabledr   s    r   r   zTraceProvider.__init__T   sC     @ B B(GQQWWYY ^
 
r   r0   r	   c                :    | j                             |           dS r!   )rM   r"   r=   s     r   register_processorz TraceProvider.register_processor[   s!     	33I>>>>>r   r#   r$   c                :    | j                             |           dS r&   )rM   r)   r(   s     r   r)   zTraceProvider.set_processorsa   s!     	,,Z88888r   r+   Trace | Nonec                (    t          j                    S )z=
        Returns the currently active trace, if any.
        )r
   get_current_tracer   s    r   rX   zTraceProvider.get_current_traceg   s     &(((r   Span[Any] | Nonec                (    t          j                    S )z<
        Returns the currently active span, if any.
        )r
   get_current_spanr   s    r   r[   zTraceProvider.get_current_spanm   s     %'''r   disabledboolr,   c                    || _         dS )z2
        Set whether tracing is disabled.
        N)rR   )r   r\   s     r   set_disabledzTraceProvider.set_disableds   s     "r   NFnamestrtrace_id
str | Nonegroup_idmetadatadict[str, Any] | Noner   c                    | j         s|r%t          j        d|            t                      S |pt	          j                    }t          j        d| d|            t          ||||| j                  S )z%
        Create a new trace.
        z(Tracing is disabled. Not creating trace zCreating trace 	 with id )r`   rb   rd   re   r0   )rR   r   r;   r   r   gen_trace_idr   rM   )r   r`   rb   rd   re   r\   s         r   create_tracezTraceProvider.create_tracey   s     > 	X 	LJDJJKKK;;2t022@t@@h@@AAA+
 
 
 	
r   	span_datar   span_idparentTrace | Span[Any] | NoneSpan[TSpanData]c                   | j         s|r&t          j        d|            t          |          S |st	          j                    }t	          j                    }|#t          j        d           t          |          S t          |t                    st          |t                    r*t          j        d| d| d           t          |          S |r|j
        nd}|j        }nt          |t                    rFt          |t                    r't          j        d| d           t          |          S |j        }d}n_t          |t                    rJt          |t                    r't          j        d| d           t          |          S |j
        }|j        }t          j        d| d|            t          |||| j        |	          S )
z$
        Create a new span.
        z'Tracing is disabled. Not creating span NzSNo active trace. Make sure to start a trace with `trace()` firstReturning NoOpSpan.zParent z or z is no-op, returning NoOpSpanzCreating span rh   )rb   rl   	parent_idr0   rk   )rR   r   r;   r   r
   r[   rX   error
isinstancer   rl   rb   r   r   r   rM   )	r   rk   rl   rm   r\   current_spancurrent_tracerq   rb   s	            r   create_spanzTraceProvider.create_span   s    > 	'X 	'LN9NNOOOI&&& 	' 133L!355M$*    	***M955 +LRZ9[9[ +\l\\\\\    	***0<F,,$I$-HH&& 	'&),, +LvLLLMMM	***HII%% 	'&(++ +LvLLLMMM	***IHCiCC'CCDDD+
 
 
 	
r   c                    | j         rd S 	 t          j        d           | j                                         d S # t
          $ r"}t          j        d|            Y d }~d S d }~ww xY w)NzShutting down trace providerz$Error shutting down trace provider: )rR   r   r;   rM   r<   	Exceptionrr   )r   es     r   r<   zTraceProvider.shutdown   s    > 	F	EL7888!**,,,,, 	E 	E 	ELCCCDDDDDDDDD	Es   -: 
A&A!!A&)r0   r	   r@   )r+   rV   )r+   rY   )r\   r]   r+   r,   )NNNF)r`   ra   rb   rc   rd   rc   re   rf   r\   r]   r+   r   )NNF)
rk   r   rl   rc   rm   rn   r\   r]   r+   ro   rA   )rB   rC   rD   r   rT   r)   rX   r[   r_   rj   rv   r<   r   r   r   rG   rG   S   s        
 
 
? ? ? ?9 9 9 9) ) ) )( ( ( (" " " "  $#*.
 
 
 
 
< #+/5
 5
 5
 5
 5
nE E E E E Er   rG   )
__future__r   rN   r   typingr   r    r   processor_interfacer	   scoper
   spansr   r   r   r   tracesr   r   r   r   rG   GLOBAL_TRACE_PROVIDERr   r   r   <module>r      sI   " " " " " " 				                       1 1 1 1 1 1       6 6 6 6 6 6 6 6 6 6 6 6 / / / / / / / / / /A$ A$ A$ A$ A$'7 A$ A$ A$H@E @E @E @E @E @E @E @EF &   r   