
    fi#              
          d dl Z d dlZd dlmZmZmZ d dlmZ d dlZd dlm	Z	m
Z
mZmZ d dlmZ d dlmZmZmZmZmZmZ d dlmZ erd dlmZmZ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  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& d dl'm(Z(m)Z)  e"d          Z* e%d          Z+d dlm,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3  G d de(d          Z4 G d de4d          Z5 e(d d!e6i          Z7d"Z8d#Z9 G d$ d%e6e          Z:e:j;        gZ<e:j=        e:j=        e:j=        e:j>        e:j;        e:j=        e:j>        e:j>        e:j>        d&	Z?d' Z@ G d( d)          ZA G d* d+          ZB G d, d-eB          ZC G d. d/eB          ZDer#e!	 d5dddejE        d0d1            ZFe!d2             ZF	 d5dddejE        d0d3ZFd d4lGmHZHmIZImJZJmKZKmLZLmMZM dS )6    N)datetime	timedeltatimezone)Enum)INSTRUMENTER
SPANSTATUSSPANDATASPANTEMPLATE)get_profiler_id)capture_internal_exceptionsget_current_thread_metais_valid_sample_rateloggernanosecond_timeshould_be_treated_as_error)TYPE_CHECKING)CallableMappingMutableMapping)Any)Dict)Iterator)List)Optional)overload)	ParamSpec)Tuple)Union)TypeVar)Set)	TypedDictUnpackPR)ContinuousProfile)Profile)EventMeasurementUnitSamplingContextMeasurementValuec                       e Zd ZU eed<   	 eed<   	 eed<   	 eed<   	 eed<   	 eed<   	 eed<   	 ed         ed	<   	 eed
<   	 ed         ed<   	 eeee	f                  ed<   	 ded<   	 eed<   	 eed<   dS )
SpanKwargstrace_idspan_idparent_span_idsame_process_as_parentsampledopdescriptionzsentry_sdk.HubhubstatusTransactioncontaining_transactionstart_timestampzsentry_sdk.ScopescopeoriginnameN)
__name__
__module____qualname__str__annotations__boolr   r   r   float     b/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/sentry_sdk/tracing.pyr,   r,   1   s         	
 T< $$$$J	
 	
  	Y&''''sr ( 77778!%%"89999	
 "!!!X	 			``rD   r,   F)totalc                   2    e Zd ZU eed<   	 eed<   	 ded<   dS )TransactionKwargssourceparent_sampledBaggagebaggageN)r<   r=   r>   r?   r@   rA   rC   rD   rE   rH   rH   l   s=         	 PPrD   rH   ProfileContextprofiler_idrL   zsentry-tracec                   ,    e Zd ZdZdZdZdZdZdZd Z	dS )	TransactionSource	componentcustomroutetaskurlviewc                     | j         S N)valueselfs    rE   __str__zTransactionSource.__str__   s
    zrD   N)
r<   r=   r>   	COMPONENTCUSTOMROUTETASKURLVIEWr\   rC   rD   rE   rP   rP      sA        IFED
CD    rD   rP   )	endpointfunction_namehandler_namemethod_and_path_patternpath
route_nameroute_patternuri_templaterU   c                    | dk     rt           j        S d| cxk    rdk     r{n nx| dk    rt           j        S | dk    rt           j        S | dk    rt           j        S | dk    rt           j        S | dk    rt           j        S | dk    rt           j        S t           j        S d| cxk    rd	k     rEn nB| d
k    rt           j	        S | dk    rt           j
        S | dk    rt           j        S t           j        S t           j        S )z
    Returns the Sentry status corresponding to the given HTTP status code.

    See: https://develop.sentry.dev/sdk/event-payloads/contexts/#trace-context
    i  i  i  i  i  i  i  i  iX  i  i  i  )r   OKPERMISSION_DENIED	NOT_FOUNDRESOURCE_EXHAUSTEDFAILED_PRECONDITIONUNAUTHENTICATEDALREADY_EXISTSINVALID_ARGUMENTDEADLINE_EXCEEDEDUNIMPLEMENTEDUNAVAILABLEINTERNAL_ERRORUNKNOWN_ERROR)http_status_codes    rE   get_span_status_from_http_coderz      s,    #}	 	&	&	&	&3	&	&	&	&	&s""//$$''$$00$$11$$--$$,,..	 	&	&	&	&3	&	&	&	&	&s""//$$++$$)),,##rD   c                   "    e Zd ZdZdZd Zd ZdS )_SpanRecorderz5Limits the number of spans recorded in a transaction.maxlenspansdropped_spansc                 6    |dz
  | _         g | _        d| _        d S )N   r   r}   r[   r~   s     rE   __init__z_SpanRecorder.__init__   s$     qj
rD   c                     t          | j                  | j        k    rd |_        | xj        dz  c_        d S | j                            |           d S )Nr   )lenr   r~   _span_recorderr   append)r[   spans     rE   addz_SpanRecorder.add   sU    tz??T[(("&D!#Jd#####rD   N)r<   r=   r>   __doc__	__slots__r   r   rC   rD   rE   r|   r|      s=        ??4I	 	 	$ $ $ $ $rD   r|   c                      e Zd ZdZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 d(dZd Zed             Zej	        d	             Zed
             Z
e
j	        d             Z
d Zd Zd Zed             Zej        fdZed             Zeddd            Zd Zed             Zd Zd Zd Zd Zd Zd Zd Zd)dZd Zd  Z d! Z!d" Z"d*d#Z#d$ Z$d% Z%d& Z&d' Z'dS )+Spanak  A span holds timing information of a block of code.
    Spans can have multiple child spans thus forming a span tree.

    :param trace_id: The trace ID of the root span. If this new span is to be the root span,
        omit this parameter, and a new trace ID will be generated.
    :param span_id: The span ID of this span. If omitted, a new span ID will be generated.
    :param parent_span_id: The span ID of the parent span, if applicable.
    :param same_process_as_parent: Whether this span is in the same process as the parent span.
    :param sampled: Whether the span should be sampled. Overrides the default sampling decision
        for this span when provided.
    :param op: The span's operation. A list of recommended values is available here:
        https://develop.sentry.dev/sdk/performance/span-operations/
    :param description: A description of what operation is being performed within the span.

        .. deprecated:: 2.15.0
            Please use the `name` parameter, instead.
    :param name: A string describing what operation is being performed within the span.
    :param hub: The hub to use for this span.

        .. deprecated:: 2.0.0
            Please use the `scope` parameter, instead.
    :param status: The span's status. Possible values are listed at
        https://develop.sentry.dev/sdk/event-payloads/span/
    :param containing_transaction: The transaction that this span belongs to.
    :param start_timestamp: The timestamp when the span started. If omitted, the current time
        will be used.
    :param scope: The scope to use for this span. If not provided, we use the current scope.
    )	_trace_id_span_idr/   r0   r1   r2   r3   _measurementsr8   _start_timestamp_monotonic_nsr5   	timestamp_tags_datar   r4   _context_manager_state_containing_transactionr9   r:   r;   _flags_flags_capacityNTmanualc                    || _         || _        || _        || _        || _        || _        |p|| _        |	| _        || _        || _	        || _
        i | _        i | _        i | _        |
| _        i | _        d| _        |/t#          j        dt&          d           | j	        p|j	        | _	        |t)          j        t,          j                  }n4t1          |t2                    rt)          j        |t,          j                  }|| _        	 t9                      | _        n# t<          $ r Y nw xY wd | _        d | _         | !                                 | "                    tG                                 d S )N
   z>The `hub` parameter is deprecated. Please use `scope` instead.   
stacklevel)$r   r   r/   r0   r1   r2   r3   r5   r4   r9   r:   r   r   r   r   r   r   warningswarnDeprecationWarningr   nowr   utc
isinstancerB   fromtimestampr8   r   r   AttributeErrorr   r   update_active_threadset_profiler_idr   )r[   r-   r.   r/   r0   r1   r2   r3   r4   r5   r7   r8   r9   r:   r;   s                  rE   r   zSpan.__init__  s   $ ",&<#.;


'=$!?MP"    0syDJ"&l8<88OO// 	T&4_hlSSO.	 2A1B1BD.. 	 	 	D	 "!!###_../////s   D 
D)(D)c                 @    | j         t          |          | _         d S d S rX   )r   r|   r   s     rE   init_span_recorderzSpan.init_span_recordera  s)    &"/"7"7D '&rD   c                 X    | j         st          j                    j        | _         | j         S rX   )r   uuiduuid4hexrZ   s    rE   r-   zSpan.trace_idf  s&     ~ 	.!Z\\-DN~rD   c                     || _         d S rX   )r   r[   rY   s     rE   r-   zSpan.trace_idn  s     rD   c                 h    | j         s%t          j                    j        dd          | _         | j         S )N   )r   r   r   r   rZ   s    rE   r.   zSpan.span_ids  s/     } 	2 JLL,RSS1DM}rD   c                     || _         d S rX   )r   r   s     rE   r.   zSpan.span_id{  s     rD   c                     d| j         j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d	S )
N<z(op=z, description:, trace_id=
, span_id=, parent_span_id=
, sampled=	, origin=)>)		__class__r<   r2   r3   r-   r.   r/   r1   r:   rZ   s    rE   __repr__zSpan.__repr__  sc     
 '''   ###
	
rD   c                 h    | j         pt          j                    }|j        }| |_        ||f| _        | S rX   )r9   
sentry_sdkget_current_scoper   r   )r[   r9   old_spans      rE   	__enter__zSpan.__enter__  s7    
<j:<<:
',h&7#rD   c                 0   |Dt          ||          r4| j        t          j        k    r|                     t          j                   t                      5  | j        \  }}| `|                     |           ||_	        d d d            d S # 1 swxY w Y   d S rX   )
r   r5   r   ERROR
set_statusrw   r   r   finishr   )r[   tyrY   tbr9   r   s         rE   __exit__zSpan.__exit__  s    !;B!F!F{j...
 9:::(** 	" 	""9OE8+KK!EJ		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   )BBBc                     | j         S )zThe ``Transaction`` that this span belongs to.
        The ``Transaction`` is the root of the span tree,
        so one could also think of this ``Transaction`` as the "root span".)r   rZ   s    rE   r7   zSpan.containing_transaction  s     ++rD   c                    |                     d          t          j        dt          d           t	          j                    j        d         }||k    rt                      S |                    d| j	                   t          d	| j        | j        | j        d|}| j        o| j        j        }|r|                    |           |S )
a  
        Start a sub-span from the current span or transaction.

        Takes the same arguments as the initializer of :py:class:`Span`. The
        trace id, sampling decision, transaction pointer, and span recorder are
        inherited from the current span/transaction.

        The instrumenter parameter is deprecated for user code, and it will
        be removed in the next major version. Going forward, it should only
        be used by the SDK itself.
        r3   NzEThe `description` parameter is deprecated. Please use `name` instead.r   r   instrumenterr1   )r-   r/   r7   rC   )getr   r   r   r   
get_clientoptionsNoOpSpan
setdefaultr1   r   r-   r.   r7   r   r   )r[   r   kwargsconfiguration_instrumenterchildspan_recorders         rE   start_childzSpan.start_child  s     ::m$$0MW"    &0%:%<%<%D^%T"555::)T\222 
]<#'#>
 
 	
 
 'VD,G,V 	  	%e$$$rD   c                 z    | t           u rt          j        d           t          j        t          |          fi |S )a(  
        Create a Transaction with the given params, then add in data pulled from
        the ``sentry-trace`` and ``baggage`` headers from the environ (if any)
        before returning the Transaction.

        This is different from :py:meth:`~sentry_sdk.tracing.Span.continue_from_headers`
        in that it assumes header names in the form ``HTTP_HEADER_NAME`` -
        such as you would get from a WSGI/ASGI environ -
        rather than the form ``header-name``.

        :param environ: The ASGI/WSGI environ to pull information from.
        zXDeprecated: use Transaction.continue_from_environ instead of Span.continue_from_environ.)r   r   warningr6   continue_from_headersEnvironHeaders)clsenvironr   s      rE   continue_from_environzSpan.continue_from_environ  sI    & $;;N9   01H1HSSFSSSrD   _sample_randc                   | t           u rt          j        d           t          j        |                    t                    |          }|                    t          |i           t          |                    t                              }|)|                    |           |
                                 t          di |}d|_        |S )a  
        Create a transaction with the given params (including any data pulled from
        the ``sentry-trace`` and ``baggage`` headers).

        :param headers: The dictionary with the HTTP headers to pull information from.
        :param _sample_rand: If provided, we override the sample_rand value from the
            incoming headers with this value. (internal use only)
        zXDeprecated: use Transaction.continue_from_headers instead of Span.continue_from_headers.r   NFrC   )r   r   r   rK   from_incoming_headerr   BAGGAGE_HEADER_NAMEupdateextract_sentrytrace_dataSENTRY_TRACE_HEADER_NAMEfreezer6   r0   )r   headersr   r   rL   sentrytrace_kwargstransactions          rE   r   zSpan.continue_from_headers  s    $ $;;N9   .KK+,,<
 
 
 	*G45555KK011
 
 )MM,---
 NN!++F++-2*rD   c              #      K   | j         sdS t          |                                 fV  | j                                                                         }|rt
          |fV  dS dS )z
        Creates a generator which returns the span's ``sentry-trace`` and ``baggage`` headers.
        If the span's containing transaction doesn't yet have a ``baggage`` value,
        this will cause one to be generated and stored.
        N)r7   r   to_traceparentget_baggage	serializer   )r[   rL   s     rE   iter_headerszSpan.iter_headers$  s       * 	
 F&(;(;(=(=====-99;;EEGG 	/%w......	/ 	/rD   c                 \    t          j        d           |sdS  | j        t          |ifi |S )a  
        DEPRECATED: Use :py:meth:`sentry_sdk.tracing.Span.continue_from_headers`.

        Create a ``Transaction`` with the given params, then add in data pulled from
        the given ``sentry-trace`` header value before returning the ``Transaction``.
        zwDeprecated: Use Transaction.continue_from_headers(headers, **kwargs) instead of from_traceparent(traceparent, **kwargs)N)r   r   r   r   )r   traceparentr   s      rE   from_traceparentzSpan.from_traceparent8  sY     	A	
 	
 	

  	4(s(%{3
 
7=
 
 	
rD   c                 p    | j         du rd}n| j         du rd}nd }| j        d| j        }||d|z  }|S )NT1F0-)r1   r-   r.   )r[   r1   r   s      rE   r   zSpan.to_traceparentQ  s`    <4GG\U""GGG!%=KGG--KrD   c                 F    | j         r| j                                         S dS )zReturns the :py:class:`~sentry_sdk.tracing_utils.Baggage`
        associated with this ``Span``, if any. (Taken from the root of the span tree.)
        N)r7   r   rZ   s    rE   
to_baggagezSpan.to_baggage`  s)    
 & 	=.::<<<trD   c                     || j         |<   d S rX   )r   r[   keyrY   s      rE   set_tagzSpan.set_tagi      
3rD   c                     || j         |<   d S rX   )r   r   s      rE   set_datazSpan.set_datam  r   rD   c                 :    | j                             |           d S rX   )r   r   r[   datas     rE   update_datazSpan.update_dataq  s    
$rD   c                 X    t          | j                  | j        k     r|| j        |<   d S d S rX   )r   r   r   )r[   flagresults      rE   set_flagzSpan.set_flagu  s4    t{d222 &DK 32rD   c                     || _         d S rX   r5   r   s     rE   r   zSpan.set_statusz  s    rD    c                 X    t          j        dt          d           ||d| j        |<   dS z
        .. deprecated:: 2.28.0
            This function is deprecated and will be removed in the next major release.
        zq`set_measurement()` is deprecated and will be removed in the next major version. Please use `set_data()` instead.r   r   )rY   unitNr   r   r   r   r[   r;   rY   r  s       rE   set_measurementzSpan.set_measurement~  C     		
 	
 	
 	

 .3D#A#A4   rD   c                     |Q|                      t          j        t          |                     |$|                      t          j        |           d S d S d S rX   )r   r	   	THREAD_IDr?   THREAD_NAMEr[   	thread_idthread_names      rE   
set_threadzSpan.set_thread  sZ      MM(,c)nn===&h2K@@@@@	 !  '&rD   c                 N    |"|                      t          j        |           d S d S rX   )r   r	   PROFILER_IDr[   rN   s     rE   r   zSpan.set_profiler_id  s-    "MM(.<<<<< #"rD   c                     |                      dt          |                     |                     t          j        |           |                     t          |                     d S )Nzhttp.status_code)r   r?   r   r	   HTTP_STATUS_CODEr   rz   r[   http_statuss     rE   set_http_statuszSpan.set_http_status  s_    K 0 0	
 	
 	
 	h/===6{CCDDDDDrD   c                     | j         dk    S )Nokr	  rZ   s    rE   
is_successzSpan.is_success  s    {d""rD   c                    | j         dS 	 |r<t          |t                    rt          j        |t
          j                  }|| _         n6t                      | j        z
  }| j	        t          |dz            z   | _         n3# t          $ r& t          j        t
          j                  | _         Y nw xY w|pt          j                    }t          ||            dS )aD  
        Sets the end timestamp of the span.

        Additionally it also creates a breadcrumb from the span,
        if the span represents a database or HTTP request.

        :param scope: The scope to use for this transaction.
            If not provided, the current scope will be used.
        :param end_timestamp: Optional timestamp that should
            be used as timestamp instead of the current time.

        :return: Always ``None``. The type is ``Optional[str]`` to match
            the return value of :py:meth:`sentry_sdk.tracing.Transaction.finish`.
        Ni  )microseconds)r   r   rB   r   r   r   r   r   r   r8   r   r   r   r   r   "maybe_create_breadcrumbs_from_span)r[   r9   end_timestampelapseds       rE   r   zSpan.finish  s      >%4	8 mU33 X$,$:=(,$W$WM!.)++d.PP!%!5	!(49 9 9 "  	8 	8 	8%\(,77DNNN	8 7577*5$777ts   A4B   -B0/B0c           
      ~   | j         | j        | j        | j        | j        | j        | j        | j        | j        d	}| j	        r| j	        | j
        d<   t          | j                  dk    r
| j        |d<   | j
        }|r||d<   i }|                    | j                   |                    | j                   |r||d<   |S )z5Returns a JSON-compatible representation of the span.)	r-   r.   r/   r0   r2   r3   r8   r   r:   r5   r   measurementstagsr  )r-   r.   r/   r0   r2   r3   r8   r   r:   r5   r   r   r   r   r   r   )r[   rvr+  r  s       rE   to_jsonzSpan.to_json  s    
 |"1&*&A'+#3k

 

 ; 	/#';DJx t!""Q&&!%!3B~z 	BvJDK   DJ 	BvJ	rD   c                    | j         | j        | j        | j        | j        | j        d}| j        r
| j        |d<   | j        r.| j                                        	                                |d<   i }| j
                            t          j                  }|||d<   | j
                            t          j                  }|||d<   |r||d<   |S )N)r-   r.   r/   r2   r3   r:   r5   dynamic_sampling_contextz	thread.idzthread.namer  )r-   r.   r/   r2   r3   r:   r5   r7   r   r/  r   r   r	   r  r  )r[   r,  r  r  r  s        rE   get_trace_contextzSpan.get_trace_context  s     |"1'+k
 
 ; 	';BxL& 	+7799RRTT )* JNN8#566	  )DjnnX%9::""-D 	BvJ	rD   c                 Z    | j                             t          j                  }|d S d|iS )NrN   )r   r   r	   r  r  s     rE   get_profile_contextzSpan.get_profile_context  s4    jnnX%9::4 ;
 	
rD   c                 T    t                      \  }}|                     ||           d S rX   )r   r  r  s      rE   r   zSpan.update_active_thread  s,    !8!:!:	;	;/////rD   )NNNTNNNNNNNNr   Nr
  NN)(r<   r=   r>   r   r   r   r   propertyr-   setterr.   r   r   r   r7   r   SENTRYr   classmethodr   r   r   r   r   r   r   r   r  r  r   r  r  r   r   r#  r   r-  r0  r2  r   rC   rD   rE   r   r      s        :I8 ##?0 ?0 ?0 ?0F8 8 8
   X _  _   X ^  ^
 
 
   
" 
" 
" 	, 	, X	, (4': ( ( ( (T T T [T2 
 	- - - - [-^/ / /( 
 
 [
0                   ' ' '
  B B B BA A A= = =
E E E# # #$ $ $ $L     D  B
 
 
0 0 0 0 0rD   r   c                        e Zd ZdZdZdddej        f fd	Zd Zd Z	 fdZ
 fd	Zed
             Zd Zd Z	 	 ddd fdZddZd Z fdZ fdZ fdZd Zd Z xZS )r6   ai  The Transaction is the root element that holds all the spans
    for Sentry performance instrumentation.

    :param name: Identifier of the transaction.
        Will show up in the Sentry UI.
    :param parent_sampled: Whether the parent transaction was sampled.
        If True this transaction will be kept, if False it will be discarded.
    :param baggage: The W3C baggage header value.
        (see https://www.w3.org/TR/baggage/)
    :param source: A string describing the source of the transaction name.
        This will be used to determine the transaction's type.
        See https://develop.sentry.dev/sdk/event-payloads/transaction/#transaction-annotations
        for more information. Default "custom".
    :param kwargs: Additional arguments to be passed to the Span constructor.
        See :py:class:`sentry_sdk.tracing.Span` for available arguments.
    )
r;   rI   rJ   sample_rater   	_contexts_profile_continuous_profile_baggager   r
  Nc                 D    t                      j        di | || _        || _        d | _        || _        i | _        i | _        d | _        d | _	        || _
        | j
        d n| j
                                        }|	|| _        d S t          | j                  | _        d S NrC   )superr   r;   rI   r;  rJ   r   r<  r=  r>  r?  r   _generate_sample_randr-   )r[   r;   rJ   rL   rI   r   baggage_sample_randr   s          rE   r   zTransaction.__init__?  s     	""6"""	,#'  M)DDt}/I/I/K/K 	 * 3D 5dm D DDrD   c                     d| j         j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d	| j	        d
S )Nr   z(name=z, op=r   r   r   r   z	, source=r   r   )
r   r<   r;   r2   r-   r.   r/   r1   rI   r:   rZ   s    rE   r   zTransaction.__repr__\  si     
 '''			###	
rD   c                 &    | j         dup| j        du S )zReturns whether the transaction might have been started.

        If this returns False, we know that the transaction was not started
        with sentry_sdk.start_transaction, and therefore the transaction will
        be discarded.
        NF)r   r1   rZ   s    rE   _possibly_startedzTransaction._possibly_startedm  s     "$.G$,%2GGrD   c                     |                                  st          j        d           t                                                       | j        | j                                         | S )NzTransaction was entered without being started with sentry_sdk.start_transaction.The transaction will not be sent to Sentry. To fix, start the transaction bypassing it to sentry_sdk.start_transaction.)rG  r   debugrB  r   r=  )r[   r   s    rE   r   zTransaction.__enter__y  si    %%'' 	L>   	=$M##%%%rD   c                     | j         | j                             |||           | j        | j                                         t	                                          |||           d S rX   )r=  r   r>  stoprB  )r[   r   rY   r   r   s       rE   r   zTransaction.__exit__  se    =$M""2ub111#/$))+++UB'''''rD   c                     | S )znThe root element of the span tree.
        In the case of a transaction it is the transaction itself.
        rC   rZ   s    rE   r7   z"Transaction.containing_transaction  s	     rD   c                     |}|t          j        dt          d           |}t          |t          j                  r#t          j        dt          d           |j        S |S )z
        Logic to get the scope from the arguments passed to finish. This
        function exists for backwards compatibility with the old finish.

        TODO: Remove this function in the next major version.
        NzMThe `hub` parameter is deprecated. Please use the `scope` parameter, instead.   r   zDPassing a Hub to finish is deprecated. Please pass a Scope, instead.)r   r   r   r   r   Hubr9   )r[   	scope_arghub_argscope_or_hubs       rE   _get_scope_from_finish_argsz'Transaction._get_scope_from_finish_args  s     !M_"    #LlJN33 	&MV"     %%rD   c                 b    d                     | j        rd| j        z   dz   nd| j                  S )Nz{op}transaction <{name}>r   z> r
  )r2   r;   )formatr2   r;   rZ   s    rE   _get_log_representationz#Transaction._get_log_representation  s=    )00(,7dg$$Rty 1 
 
 	
rD   r4   c          	      h   | j         dS |                     ||          }|p| j        pt          j                    }t          j                    }|                                sdS | j        | j        du rt          j
        d           nt          j
        d           |j        rht          |j                  rT|j        r|j        j        dk    rd}nd}|j                            |d	           |j                            |d
	           dS | j        st          j        d           d| _        t'                                          ||           | j                            t.          j                  }|||j        d         v rt          j
        d                    |                                 | j        t.          j                 |j        d                              |j        rU|j                            dd	           t7          | j        j                  dz   }|j                            dd
|           d| _        | j        s| j        t          j        d           dS d | j        j        D             }t7          | j        j                  t7          |          z
  }	|	| j        j        z   }
d| _        i }|                    | j                   |                    d|                                  i           | !                                }||                    d|i           d| j        d| j"        i|| j#        | j         | j$        |d}|
dk    r|
|d<   | j%        *| j%        &                                r| j%        |d<   d| _%        | j'        |d<   |(                    |          S )au  Finishes the transaction and sends it to Sentry.
        All finished spans in the transaction will also be sent to Sentry.

        :param scope: The Scope to use for this transaction.
            If not provided, the current Scope will be used.
        :param end_timestamp: Optional timestamp that should
            be used as timestamp instead of the current time.
        :param hub: The hub to use for this transaction.
            This argument is DEPRECATED. Please use the `scope`
            parameter, instead.

        :return: The event ID if the transaction was sent to Sentry,
            otherwise None.
        NFz.Discarding transaction because sampled = FalsezSDiscarding transaction because it was not started with sentry_sdk.start_transactionr   backpressurer;  r   )data_categoryr   zCTransaction has no name, falling back to `<unlabeled transaction>`.z<unlabeled transaction>trace_ignore_status_codesz[Tracing] Discarding {transaction_description} because the HTTP status code {status_code} is matched by trace_ignore_status_codes: {trace_ignore_status_codes})transaction_descriptionstatus_coder[  event_processorr   )rZ  quantityz1Discarding transaction without sampling decision.c                 D    g | ]}|j         	|                                S rX   )r   r-  ).0r   s     rE   
<listcomp>z&Transaction.finish.<locals>.<listcomp>-  s2     
 
 
~) LLNN)))rD   traceprofilerI   )typer   transaction_infocontextsr+  r   r8   r   _dropped_spansr*  ))r   rS  r9   r   r   r   	is_activer   r1   r   rI  	transporthas_tracing_enabledr   monitordownsample_factorrecord_lost_eventr;   r   rB  r   r   r   r	   r  rU  rV  r   r   r   r   r<  r0  r2  rI   r   r8   r=  validr   capture_event)r[   r9   r'  r4   clientreasonr]  	num_spansfinished_spanslen_diffr   rg  profile_contexteventr   s                 rE   r   zTransaction.finish  s   , >%4 00<<EEz'C'E'E&((!! 	4&|u$$MNNNNi    	Q$7$G$G 	Q> +fn&F&J&J+FF*F 2262WWW  2262PPP4y 	2NU   2DIum,,,jnnX%>??#v~.IJJJL q  x  x,0,H,H,J,J $
8+D E.4n3/ x       22%] 3      3 9::Q>	 22%Vi 3    !DL| 	 |#RSSS4
 
+1
 
 
 t*011C4G4GG 4#6#DD #'''$"8"8":":;<<<2244&OOY8999 "9!)4; 7 J#3#	
 	
 1&3E"#=$)<)<)>)>$#}E) DM $ 2n""5)))rD   c                 X    t          j        dt          d           ||d| j        |<   dS r  r  r  s       rE   r  zTransaction.set_measurementY  r  rD   c                     || j         |<   dS )a  Sets a context. Transactions can have multiple contexts
        and they should follow the format described in the "Contexts Interface"
        documentation.

        :param key: The name of the context.
        :param value: The information about the context.
        N)r<  r   s      rE   set_contextzTransaction.set_contextg  s     $srD   c                 z    t                                          |           |                     dd|i           dS )zySets the status of the Transaction according to the given HTTP status.

        :param http_status: The HTTP status code.responser]  N)rB  r   rz  )r[   r  r   s     rE   r   zTransaction.set_http_statusr  s>    
 	,,,m[%ABBBBBrD   c                     t                                                      }| j        |d<   | j        |d<   | j        |d<   |S )z<Returns a JSON-compatible representation of the transaction.r;   rI   r1   )rB  r-  r;   rI   r1   )r[   r,  r   s     rE   r-  zTransaction.to_jsonz  s>     WW__Y6
{89	rD   c                 j    t                                                      }| j        r
| j        |d<   |S )Nr  )rB  r0  r   )r[   trace_contextr   s     rE   r0  zTransaction.get_trace_context  s4    1133: 	/$(JM&!rD   c                 h    | j         r| j         j        rt          j        |           | _         | j         S )zReturns the :py:class:`~sentry_sdk.tracing_utils.Baggage`
        associated with the Transaction.

        The first time a new baggage with Sentry items is made,
        it will be frozen.)r?  mutablerK   populate_from_transactionrZ   s    rE   r   zTransaction.get_baggage  s6     } 	D 5 	D#=dCCDM}rD   c           
      &   t          j                    }|                                 }t          |j                  s	d| _        dS | j        t          | j                  | _        dS t          |j        	                    d                    r |j        d         |          n|d         |d         n|j        d         }t          |d          s1t          j        d                    |	                     d| _        dS t          |          | _        |j        r| xj        d
|j        j        z  z  c_        | j        s[t          j        d                    |t          |j        	                    d                    rdnd                     d| _        dS | j        | j        k     | _        | j        r*t          j        d                    |	                     dS t          j        d                    || j                             dS )aO  
        Sets the transaction's sampling decision, according to the following
        precedence rules:

        1. If a sampling decision is passed to `start_transaction`
        (`start_transaction(name: "my transaction", sampled: True)`), that
        decision will be used, regardless of anything else

        2. If `traces_sampler` is defined, its decision will be used. It can
        choose to keep or ignore any parent sampling decision, or use the
        sampling context data to make its own decision or to choose a sample
        rate for the transaction.

        3. If `traces_sampler` is not defined, but there's a parent sampling
        decision, the parent sampling decision will be used.

        4. If `traces_sampler` is not defined and there's no parent sampling
        decision, `traces_sample_rate` will be used.
        FNtraces_samplerrJ   traces_sample_rateTracing)rI   zN[Tracing] Discarding {transaction_description} because of invalid sample rate.)r\  r   z?[Tracing] Discarding {transaction_description} because {reason}z"traces_sampler returned 0 or Falseztraces_sample_rate is set to 0)r\  rr  z,[Tracing] Starting {transaction_description}z}[Tracing] Discarding {transaction_description} because it's not included in the random sample (sampling rate = {sample_rate}))r\  r;  )r   r   rV  rk  r   r1   rB   r;  callabler   r   r   r   rU  rl  rm  rI  r   )r[   sampling_contextrq  r\  r;  s        rE   _set_initial_sampling_decisionz*Transaction._set_initial_sampling_decision  su   * &(("&">">"@"@ #6>22 	 DLF <#$T\22DF **+;<<==,FN+,-=>>>
 $$45A !!122^$89 	 $K	BBB 	N`gg,C h    
 !DLF --> 	D6>#C CC  	LQXX,C $FN$6$67G$H$HII><<= Y  	 	 	 !DLF (4+;;< 	L>EE,C F       L P  W  W,C $ 0 W      rD   r5  r4  )r<   r=   r>   r   r   rP   r^   r   r   rG  r   r   r6  r7   rS  rV  r   r  rz  r   r-  r0  r   r  __classcell__)r   s   @rE   r6   r6     s        "I   'E E E E E E:
 
 
"
H 
H 
H     ( ( ( ( ( 	 	 X	  B
 
 
 Q*
 Q* Q* Q* Q* Q* Q* Q*fB B B B	$ 	$ 	$C C C C C	 	 	 	 	    
 
 
b b b b b b brD   r6   c                       e Zd Zd Zed             Zej        fdZd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Z	 	 ddddZddZd Zd Zd ZdS )r   c                      d| j         j        z  S )Nz<%s>)r   r<   rZ   s    rE   r   zNoOpSpan.__repr__   s    ///rD   c                     d S rX   rC   rZ   s    rE   r7   zNoOpSpan.containing_transaction  s	     trD   c                     t                      S rX   )r   )r[   r   r   s      rE   r   zNoOpSpan.start_child	  s    zzrD   c                     dS )Nr
  rC   rZ   s    rE   r   zNoOpSpan.to_traceparent  s    rrD   c                     d S rX   rC   rZ   s    rE   r   zNoOpSpan.to_baggage      trD   c                     d S rX   rC   rZ   s    rE   r   zNoOpSpan.get_baggage  r  rD   c                      t          d          S rA  )iterrZ   s    rE   r   zNoOpSpan.iter_headers  s    BxxrD   c                     d S rX   rC   r   s      rE   r   zNoOpSpan.set_tag      rD   c                     d S rX   rC   r   s      rE   r   zNoOpSpan.set_data!  r  rD   c                     d S rX   rC   r  s     rE   r  zNoOpSpan.update_data%  r  rD   c                     d S rX   rC   r   s     rE   r   zNoOpSpan.set_status)  r  rD   c                     d S rX   rC   r  s     rE   r   zNoOpSpan.set_http_status-  r  rD   c                     dS )NTrC   rZ   s    rE   r#  zNoOpSpan.is_success1  r  rD   c                     i S rX   rC   rZ   s    rE   r-  zNoOpSpan.to_json5      	rD   c                     i S rX   rC   rZ   s    rE   r0  zNoOpSpan.get_trace_context9  r  rD   c                     i S rX   rC   rZ   s    rE   r2  zNoOpSpan.get_profile_context=  r  rD   NrW  c                    dS )z_
        The `hub` parameter is deprecated. Please use the `scope` parameter, instead.
        NrC   )r[   r9   r'  r4   s       rE   r   zNoOpSpan.finishA  s	     	rD   r
  c                     d S rX   rC   r  s       rE   r  zNoOpSpan.set_measurementN  r  rD   c                     d S rX   rC   r   s      rE   rz  zNoOpSpan.set_contextR  r  rD   c                     d S rX   rC   r   s     rE   r   zNoOpSpan.init_span_recorderV  r  rD   c                     d S rX   rC   )r[   r  s     rE   r  z'NoOpSpan._set_initial_sampling_decisionZ  r  rD   r5  r4  )r<   r=   r>   r   r6  r7   r   r8  r   r   r   r   r   r   r   r  r   r   r#  r-  r0  r2  r   r  rz  r   r  rC   rD   rE   r   r     s       0 0 0   X (4':                               
                rD   r   r2   r;   
attributestemplatec                    d S rX   rC   )funcr2   r;   r  r  s        rE   rc  rc  a  s	     	rD   c                     d S rX   rC   )r  s    rE   rc  rc  i  s	     	rD   c                J    ddl m}  |||||          }| r ||           S |S )a
  
    Decorator to start a child span around a function call.

    This decorator automatically creates a new span when the decorated function
    is called, and finishes the span when the function returns or raises an exception.

    :param func: The function to trace. When used as a decorator without parentheses,
        this is the function being decorated. When used with parameters (e.g.,
        ``@trace(op="custom")``, this should be None.
    :type func: Callable or None

    :param op: The operation name for the span. This is a high-level description
        of what the span represents (e.g., "http.client", "db.query").
        You can use predefined constants from :py:class:`sentry_sdk.consts.OP`
        or provide your own string. If not provided, a default operation will
        be assigned based on the template.
    :type op: str or None

    :param name: The human-readable name/description for the span. If not provided,
        defaults to the function name. This provides more specific details about
        what the span represents (e.g., "GET /api/users", "process_user_data").
    :type name: str or None

    :param attributes: A dictionary of key-value pairs to add as attributes to the span.
        Attribute values must be strings, integers, floats, or booleans. These
        attributes provide additional context about the span's execution.
    :type attributes: dict[str, Any] or None

    :param template: The type of span to create. This determines what kind of
        span instrumentation and data collection will be applied. Use predefined
        constants from :py:class:`sentry_sdk.consts.SPANTEMPLATE`.
        The default is `SPANTEMPLATE.DEFAULT` which is the right choice for most
        use cases.
    :type template: :py:class:`sentry_sdk.consts.SPANTEMPLATE`

    :returns: When used as ``@trace``, returns the decorated function. When used as
        ``@trace(...)`` with parameters, returns a decorator function.
    :rtype: Callable or decorator function

    Example::

        import sentry_sdk
        from sentry_sdk.consts import OP, SPANTEMPLATE

        # Simple usage with default values
        @sentry_sdk.trace
        def process_data():
            # Function implementation
            pass

        # With custom parameters
        @sentry_sdk.trace(
            op=OP.DB_QUERY,
            name="Get user data",
            attributes={"postgres": True}
        )
        def make_db_query(sql):
            # Function implementation
            pass

        # With a custom template
        @sentry_sdk.trace(template=SPANTEMPLATE.AI_TOOL)
        def calculate_interest_rate(amount, rate, years):
            # Function implementation
            pass
    r   )create_span_decoratorr  )sentry_sdk.tracing_utilsr  )r  r2   r;   r  r  r  	decorators          rE   rc  rc  p  sX    L ?>>>>>%%	  I  yrD   )rK   r   r   rC  rk  r&  rX   )Nr   r   r   r   r   enumr   r   sentry_sdk.constsr   r   r	   r
   'sentry_sdk.profiler.continuous_profilerr   sentry_sdk.utilsr   r   r   r   r   r   typingr   collections.abcr   r   r   r   r   r   r   r   r   r   r   r   r   r    typing_extensionsr!   r"   r#   r$   r%   (sentry_sdk.profiler.transaction_profilerr&   sentry_sdk._typesr'   r(   r)   r*   r,   rH   r?   rM   r   r   rP   ra   LOW_QUALITY_TRANSACTION_SOURCESr]   r_   SOURCE_FOR_STYLErz   r|   r   r6   r   DEFAULTrc  r  rK   r   r   rC  rk  r&  rC   rD   rE   <module>r     sM     2 2 2 2 2 2 2 2 2 2           N N N N N N N N N N N N C C C C C C                !            jAAAAAAAAAA      33333333	#AAIIIIII@@@@@@           9a 9a 9a 9a 9aYe 9a 9a 9a 9avQ Q Q Q QJe Q Q Q Q Y3	
 N   ) 

 
 
 
 
T 
 
 
 # 
 "+&0%/06!#-&,%+"
 
 $$ $$ $$N$ $ $ $ $ $ $ $2v0 v0 v0 v0 v0 v0 v0 v0r] ] ] ] ]$ ] ] ]@] ] ] ] ]t ] ] ]@  DTLDX    X   X 
R@TR R R R Rn                 rD   