§
    xÅj&  ã                   óD  — d Z ddlZddlmZmZ ddlmZmZmZm	Z	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 dd	lmZ dd
lmZ  G d„ de¦  «        Z G d„ de¦  «        Zdeddfd„Zd d„Zd!d„Zd!d„Zd!d„Z ddde!fd„Z"d"d„Z# G d„ d¦  «        Z$ G d„ de¦  «        Z%dS )#ae  
This integration ingests tracing data from native extensions written in Rust.

Using it requires additional setup on the Rust side to accept a
`RustTracingLayer` Python object and register it with the `tracing-subscriber`
using an adapter from the `pyo3-python-tracing-subscriber` crate. For example:
```rust
#[pyfunction]
pub fn initialize_tracing(py_impl: Bound<'_, PyAny>) {
    tracing_subscriber::registry()
        .with(pyo3_python_tracing_subscriber::PythonCallbackLayerBridge::new(py_impl))
        .init();
}
```

Usage in Python would then look like:
```
sentry_sdk.init(
    dsn=sentry_dsn,
    integrations=[
        RustTracingIntegration(
            "demo_rust_extension",
            demo_rust_extension.initialize_tracing,
            event_type_mapping=event_type_mapping,
        )
    ],
)
```

Each native extension requires its own integration.
é    N)ÚEnumÚauto)ÚAnyÚCallableÚDictÚOptionalÚUnion)ÚIntegration)Úshould_send_default_pii)ÚStreamedSpan)ÚSpan)Úhas_span_streaming_enabled)ÚSENSITIVE_DATA_SUBSTITUTEc                   ó"   — e Zd ZdZdZdZdZdZdS )ÚRustTracingLevelÚTRACEÚDEBUGÚINFOÚWARNÚERRORN)Ú__name__Ú
__module__Ú__qualname__ÚTraceÚDebugÚInfoÚWarnÚError© ó    úUC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/rust_tracing.pyr   r   .   s'   € € € € € Ø€EØ€EØ€DØ€DØ€E€E€Er    r   c                   ó^   — e Zd Z e¦   «         Z e¦   «         Z e¦   «         Z e¦   «         ZdS )ÚEventTypeMappingN)r   r   r   r   ÚIgnoreÚExcÚ
BreadcrumbÚEventr   r    r!   r#   r#   6   s:   € € € € € ØˆT‰VŒV€FØ
ˆ$‰&Œ&€CØ�‘”€JØˆD‰FŒF€E€E€Er    r#   ÚlevelÚreturnzsentry_sdk._types.LogLevelStrc                 óÈ   — t          | ¦  «        } | t           j        t           j        fv rdS | t           j        k    rdS | t           j        k    rdS | t           j        k    rdS dS )NÚdebugÚinfoÚwarningÚerror)r   r   r   r   r   r   )r(   s    r!   Útracing_level_to_sentry_levelr/   =   so   € Ý˜UÑ#Ô#€EØÕ!Ô'Õ)9Ô)?Ð@Ð@Ð@ØˆwØ	Õ"Ô'Ò	'Ð	'ØˆvØ	Õ"Ô'Ò	'Ð	'ØˆyØ	Õ"Ô(Ò	(Ð	(Øˆwð ˆvr    ÚeventúDict[str, Any]c                 ó(  — |                       di ¦  «        }i }i }dD ]}||v r||         ||<   Œt          |¦  «        dk    r||d<   i }|                      dg ¦  «        D ]}|                       |¦  «        ||<   Œt          |¦  «        dk    r||d<   |S )NÚmetadata)Úmodule_pathÚfileÚliner   Úrust_tracing_locationÚfieldsÚrust_tracing_fields)ÚgetÚlen)r0   r3   ÚcontextsÚlocationÚfieldr8   s         r!   Úextract_contextsr?   L   s»   € Ø�yŠy˜ RÑ(Ô(€HØ€Hà€HØ0ð .ð .ˆØ�HÐÐØ& uœoˆH�U‰OøÝ
ˆ8�}„}�qÒÐØ,4ˆÐ(Ñ)à€FØ—’˜h¨Ñ+Ô+ð )ð )ˆØŸ	š	 %Ñ(Ô(ˆˆu‰ˆÝ
ˆ6�{„{�Q‚€Ø*0ˆÐ&Ñ'à€Or    c                 ó  — |                       di ¦  «        }|                      d¦  «        }t          |                      d¦  «        ¦  «        }|                       d¦  «        }t          | ¦  «        }||||dœ}t          j        |¦  «         d S )Nr3   Útargetr(   Úmessage)Úloggerr(   rB   r<   )r:   r/   r?   Ú
sentry_sdkÚcapture_event)r0   r3   rC   r(   rB   r<   Úsentry_events          r!   Úprocess_eventrG   `   s�   € Ø�yŠy˜ RÑ(Ô(€Hà�\Š\˜(Ñ#Ô#€FÝ)¨(¯,ª,°wÑ*?Ô*?Ñ@Ô@€EØ',§y¢y°Ñ';Ô';€GÝ Ñ&Ô&€Hð ØØØð	/ð /€Lõ Ô˜\Ñ*Ô*Ð*Ð*Ð*r    c                 ó$   — t          | ¦  «         d S ©N)rG   )r0   s    r!   Úprocess_exceptionrJ   r   s   € Ý�%ÑÔÐÐÐr    c                 óÈ   — t          |                      di ¦  «                             d¦  «        ¦  «        }|                      d¦  «        }t          j        ||¬¦  «         d S )Nr3   r(   rB   )r(   rB   )r/   r:   rD   Úadd_breadcrumb)r0   r(   rB   s      r!   Úprocess_breadcrumbrM   v   sX   € Ý)¨%¯)ª)°JÀÑ*CÔ*C×*GÒ*GÈÑ*PÔ*PÑQÔQ€EØ�iŠi˜	Ñ"Ô"€GåÔ E°7Ð;Ñ;Ô;Ð;Ð;Ð;r    r3   c                 óŒ   — t          |                      d¦  «        ¦  «        t           j        t           j        t           j        fv S ©Nr(   )r   r:   r   r   r   )r3   s    r!   Údefault_span_filterrP   }   s:   € Ý˜HŸLšL¨Ñ1Ô1Ñ2Ô2ÝÔÝÔÝÔð7ð ð r    c                 ó.  — t          |                      d¦  «        ¦  «        }|t           j        k    rt          j        S |t           j        t           j        fv rt          j        S |t           j        t           j	        fv rt          j
        S t          j
        S rO   )r   r:   r   r#   r%   r   r   r&   r   r   r$   )r3   r(   s     r!   Údefault_event_type_mappingrR   …   s~   € Ý˜XŸ\š\¨'Ñ2Ô2Ñ3Ô3€EØÕ Ô&Ò&Ð&ÝÔ#Ð#Ø	Õ#Ô(Õ*:Ô*?Ð@Ð	@Ð	@ÝÔ*Ð*Ø	Õ#Ô)Õ+;Ô+AÐBÐ	BÐ	BÝÔ&Ð&åÔ&Ð&r    c            	       óŽ   — e Zd Zeedfdeddddddfd	„Zd
efd„Zdeddd
dfd„Z	deded
dfd„Z
deddd
dfd„Zdededdd
dfd„ZdS )ÚRustTracingLayerNÚoriginÚevent_type_mappingúBCallable[
            [Dict[str, Any]], EventTypeMapping
        ]Úspan_filterú Callable[[Dict[str, Any]], bool]Úinclude_tracing_fieldsúOptional[bool]c                 ó>   — || _         || _        || _        || _        d S rI   )rU   rV   rX   rZ   )ÚselfrU   rV   rX   rZ   s        r!   Ú__init__zRustTracingLayer.__init__’   s)   € ð ˆŒØ"4ˆÔØ&ˆÔØ&<ˆÔ#Ð#Ð#r    r)   c                 ó:   — | j         €t          ¦   «         n| j         S )a9  
        By default, the values of tracing fields are not included in case they
        contain PII. A user may override that by passing `True` for the
        `include_tracing_fields` keyword argument of this integration or by
        setting `send_default_pii` to `True` in their Sentry client options.
        )rZ   r   )r]   s    r!   Ú_include_tracing_fieldsz(RustTracingLayer._include_tracing_fields    s&   € ð Ô*Ð2õ $Ñ%Ô%Ð%àÔ,ð	
r    r0   Úsentry_spanÚ
SentrySpanc                 ón  — t          j        |¦  «        }|                     di ¦  «        }|                      |¦  «        }|t          j        k    rd S |t          j        k    rt          |¦  «         d S |t          j        k    rt          |¦  «         d S |t          j
        k    rt          |¦  «         d S d S )Nr3   )ÚjsonÚloadsr:   rV   r#   r$   r%   rJ   r&   rM   r'   rG   )r]   r0   ra   Údeserialized_eventr3   Ú
event_types         r!   Úon_eventzRustTracingLayer.on_event­   sÂ   € Ý!œZ¨Ñ.Ô.ÐØ%×)Ò)¨*°bÑ9Ô9ˆà×,Ò,¨XÑ6Ô6ˆ
ØÕ)Ô0Ò0Ð0ØˆFØÕ+Ô/Ò/Ð/ÝÐ0Ñ1Ô1Ð1Ð1Ð1ØÕ+Ô6Ò6Ð6ÝÐ1Ñ2Ô2Ð2Ð2Ð2ØÕ+Ô1Ò1Ð1ÝÐ,Ñ-Ô-Ð-Ð-Ð-ð 2Ð1r    ÚattrsÚspan_idz)Optional[Union[SentrySpan, StreamedSpan]]c                 óJ  — t          j        |¦  «        }|                     di ¦  «        }|                      |¦  «        sd S |                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|�|}n|�
|�|› d|› �}n|�|}nd}t	          t          j        ¦   «         j        ¦  «        }|r¿t
          j         	                    ¦   «         €d S t
          j         
                    |d| j        dœ¬	¦  «        }	|                     d
g ¦  «        }
|
D ][}|                      ¦   «         r*|	                     ||                     |¦  «        ¦  «         Œ@|	                     |t          ¦  «         Œ\|	S t          j
        d|| j        ¬¦  «        }	|                     d
g ¦  «        }
|
D ][}|                      ¦   «         r*|	                     ||                     |¦  «        ¦  «         Œ@|	                     |t          ¦  «         Œ\|	                     ¦   «          |	S )Nr3   r4   ÚnamerB   z::z	<unknown>Úfunction)z	sentry.opzsentry.origin)rl   Ú
attributesr8   )Úoprl   rU   )rd   re   r:   rX   r   rD   Ú
get_clientÚoptionsÚtracesÚget_current_spanÚ
start_spanrU   r`   Úset_attributer   Úset_dataÚ	__enter__)r]   ri   rj   r3   r4   rl   rB   Úsentry_span_nameÚspan_streamingra   r8   r>   s               r!   Úon_new_spanzRustTracingLayer.on_new_span»   s[  € õ ”
˜5Ñ!Ô!ˆØ—9’9˜Z¨Ñ,Ô,ˆà×Ò Ñ)Ô)ð 	Ø�4à—l’l =Ñ1Ô1ˆØ�|Š|˜FÑ#Ô#ˆØ—)’)˜IÑ&Ô&ˆàÐØ&ÐÐØÐ$¨Ð)9Ø"-Ð7Ð7°Ð7Ð7ÐÐØÐØ#ÐÐà*Ðå3µJÔ4IÑ4KÔ4KÔ4SÑTÔTˆØð 	ÝÔ ×1Ò1Ñ3Ô3Ð;Ø�tå$Ô+×6Ò6Ø%à!+Ø%)¤[ðð ð 7ñ ô ˆKð —\’\ (¨BÑ/Ô/ˆFØð Pð P�Ø×/Ò/Ñ1Ô1ð PØ×-Ò-¨e°U·Y²Y¸uÑ5EÔ5EÑFÔFÐFÐFà×-Ò-¨eÕ5NÑOÔOÐOÐOàÐå Ô+ØØ!Ø”;ð
ñ 
ô 
ˆð
 —’˜h¨Ñ+Ô+ˆØð 	Gð 	GˆEØ×+Ò+Ñ-Ô-ð GØ×$Ò$ U¨E¯IªI°eÑ,<Ô,<Ñ=Ô=Ð=Ð=à×$Ò$ UÕ,EÑFÔFÐFÐFà×ÒÑÔÐØÐr    c                 ó<   — |€d S |                      d d d ¦  «         d S rI   )Ú__exit__)r]   rj   ra   s      r!   Úon_closezRustTracingLayer.on_closeõ   s+   € ØÐØˆFà×Ò˜T 4¨Ñ.Ô.Ð.Ð.Ð.r    ÚvalueszUnion[SentrySpan, StreamedSpan]c                 ó  — |€d S t          |t          ¦  «        r|j        n|j        }t	          j        |¦  «        }|                     ¦   «         D ]7\  }}|                      ¦   «         r |||¦  «         Œ& ||t          ¦  «         Œ8d S rI   )	Ú
isinstancer   ru   rv   rd   re   Úitemsr`   r   )r]   rj   r~   ra   Úset_on_spanÚdeserialized_valuesÚkeyÚvalues           r!   Ú	on_recordzRustTracingLayer.on_recordû   s°   € ð ÐØˆFõ ˜+¥|Ñ4Ô4ð&ˆKÔ%Ð%àÔ%ð 	õ #œj¨Ñ0Ô0ÐØ-×3Ò3Ñ5Ô5ð 	<ð 	<‰JˆC�Ø×+Ò+Ñ-Ô-ð <Ø�˜C Ñ'Ô'Ð'Ð'à�˜CÕ!:Ñ;Ô;Ð;Ð;ð		<ð 	<r    )r   r   r   rR   rP   Ústrr^   Úboolr`   rh   rz   r}   r†   r   r    r!   rT   rT   ‘   s,  € € € € € ð *Ø:MØ37ð=ð =àð=ðð=ð 8ð=ð !1ð=ð =ð =ð =ð
¨ð 
ð 
ð 
ð 
ð.˜cð .°ð .Àð .ð .ð .ð .ð8Øð8Ø#&ð8à	4ð8ð 8ð 8ð 8ðt/ ð /°,ð /À4ð /ð /ð /ð /ð<Øð<Ø$'ð<Ø6Wð<à	ð<ð <ð <ð <ð <ð <r    rT   c                   óN   — e Zd ZdZeedfdedddddd	d
df
d„Zedd„¦   «         Z	dS )ÚRustTracingIntegrationa¼  
    Ingests tracing data from a Rust native extension's `tracing` instrumentation.

    If a project uses more than one Rust native extension, each one will need
    its own instance of `RustTracingIntegration` with an initializer function
    specific to that extension.

    Since all of the setup for this integration requires instance-specific state
    which is not available in `setup_once()`, setup instead happens in `__init__()`.
    NÚ
identifierÚinitializerz"Callable[[RustTracingLayer], None]rV   rW   rX   rY   rZ   r[   c                 ól   — || _         d|› �}t          ||||¦  «        | _         || j        ¦  «         d S )Nzauto.function.rust_tracing.)r‹   rT   Útracing_layer)r]   r‹   rŒ   rV   rX   rZ   rU   s          r!   r^   zRustTracingIntegration.__init__  sP   € ð %ˆŒØ;¨zÐ;Ð;ˆÝ-ØÐ&¨Ð5Kñ
ô 
ˆÔð 	ˆ�DÔ&Ñ'Ô'Ð'Ð'Ð'r    r)   c                  ó   — d S rI   r   r   r    r!   Ú
setup_oncez!RustTracingIntegration.setup_once-  s   € àˆr    )r)   N)
r   r   r   Ú__doc__rR   rP   r‡   r^   Ústaticmethodr�   r   r    r!   rŠ   rŠ     s’   € € € € € ð	ð 	ð" *Ø:MØ37ð(ð (àð(ð :ð(ðð	(ð 8ð(ð !1ð(ð (ð (ð (ð$ ðð ð ñ „\ðð ð r    rŠ   )r0   r1   r)   r1   )r0   r1   r)   N)r3   r1   r)   r#   )&r‘   rd   Úenumr   r   Útypingr   r   r   r   r	   rD   Úsentry_sdk.integrationsr
   Úsentry_sdk.scoper   Úsentry_sdk.tracesr   Úsentry_sdk.tracingr   rb   Úsentry_sdk.tracing_utilsr   Úsentry_sdk.utilsr   r   r#   r‡   r/   r?   rG   rJ   rM   rˆ   rP   rR   rT   rŠ   r   r    r!   ú<module>r›      s8  ððð ð@ €€€Ø Ð Ð Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø *Ð *Ð *Ð *Ð *Ð *Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð �tñ ô ð ðð ð ð ð �tñ ô ð ð¨ð Ð1Pð ð ð ð ðð ð ð ð(+ð +ð +ð +ð$ð ð ð ð<ð <ð <ð <ðÐ"2ð °tð ð ð ð ð	'ð 	'ð 	'ð 	'ð{<ð {<ð {<ð {<ð {<ñ {<ô {<ð {<ð| ð  ð  ð  ð  ˜[ñ  ô  ð  ð  ð  r    