ó
    Ð]jF  ã                  ó^  • S r SSKJr  SSKrSSKJs  Jr  SSK	r	SSK
Jr  SSKJrJr  SSKrSSKJr  SSKJrJr  SSKJr  SS	KJr  SSKrS
SKJr  S
SKJr  S
SKJrJ r   S
SK!J"r"  / SQr#\" SS9 " S S\5      5       r$ " S S5      r%\ " S S5      5       r&\RN                  SS j5       r(SS jr)g)z{Testing utilities for Logfire. See [the guide](https://logfire.pydantic.dev/docs/reference/advanced/testing/) for examples.é    )ÚannotationsN)Ú	dataclass)ÚAnyÚcast)ÚSimpleLogRecordProcessor)ÚInMemoryMetricReaderÚMetricsData)ÚSimpleSpanProcessor)ÚIdGeneratoré   )ÚMETRICS_PREFERRED_TEMPORALITY)ÚONE_SECOND_IN_NANOSECONDS)ÚTestExporterÚTestLogExporter)ÚSeededRandomIdGenerator)ÚcapfireÚCaptureLogfireÚIncrementalIdGeneratorr   ÚTimeGeneratorr   r   T)Úreprc                  ó>   • \ rS rSrSrSrSrS	S jrS
S jrS
S jr	Sr
g)r   é!   z¥Generate sequentially incrementing span/trace IDs for testing.

Trace IDs start at 1 and increment by 1 each time.
Span IDs start at 1 and increment by 1 each time.
r   c                ó    • SU l         SU l        g)zResets the trace and span ids.r   N)Útrace_id_counterÚspan_id_counter©Úselfs    ÚL/home/mande/repo/quber/.venv/lib/python3.13/site-packages/logfire/testing.pyÚreset_trace_span_idsÚ+IncrementalIdGenerator.reset_trace_span_ids,   s   € à !ˆÔØ ˆÕó    c                óz   • U =R                   S-  sl         U R                   S:”  a  [        S5      eU R                   $ )zGenerates a span id.r   l   ÿÿÿÿ zSpan ID overflow)r   ÚOverflowErrorr   s    r   Úgenerate_span_idÚ'IncrementalIdGenerator.generate_span_id1   s9   € à×Ò Ñ!ÕØ×Ñ )Ó+ÜÐ 2Ó3Ð3Ø×#Ñ#Ð#r!   c                ó†   • U =R                   S-  sl         U R                   SS-  S-
  :”  a  [        S5      eU R                   $ )zGenerates a trace id.r   é   é€   zTrace ID overflow)r   r#   r   s    r   Úgenerate_trace_idÚ(IncrementalIdGenerator.generate_trace_id8   sA   € à×Ò Ñ"ÕØ× Ñ  1 c¡6¨A¡:Ó-ÜÐ 3Ó4Ð4Ø×$Ñ$Ð$r!   )r   r   N)ÚreturnÚNone©r+   Úint)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   r$   r)   Ú__static_attributes__© r!   r   r   r   !   s#   † ñð ÐØ€Oô!ô
$÷%r!   r   c                  ó:   • \ rS rSrSrSS	S jjrS
S jrSS jrSrg)r   éA   z›Generate incrementing timestamps for testing.

Timestamps are in nanoseconds, start at 1_000_000_000, and increment by 1_000_000_000 (1 second) each time.
c                ó   • Xl         g ©N©Úns_time)r   r;   s     r   Ú__init__ÚTimeGenerator.__init__G   s   € Ø�r!   c                óL   • U =R                   [        -  sl         U R                   $ r9   )r;   r   r   s    r   Ú__call__ÚTimeGenerator.__call__J   s   € Ø�ŠÔ1Ñ1�Ø�|‰|Ðr!   c                ó"   • SU R                    S3$ )NzTimeGenerator(ns_time=Ú)r:   r   s    r   Ú__repr__ÚTimeGenerator.__repr__N   s   € Ø'¨¯© ~°QÐ7Ð7r!   r:   N)r   )r;   r.   r-   )r+   Ústr)	r/   r0   r1   r2   r3   r<   r?   rC   r4   r5   r!   r   r   r   A   s   † ñö
ô÷8r!   r   c                  óD   • \ rS rSr% SrS\S'    S\S'    S\S'    S	 rS
rg)r   éR   z€A dataclass that holds a span exporter, log exporter, and metric reader.

This is used as the return type of `capfire` fixture.
r   Úexporterr   Úmetrics_readerr   Úlog_exporterc                ó,   • [        U R                  5      $ )ú4Get the collected metrics as a list of dictionaries.)Úget_collected_metricsrI   r   s    r   rM   Ú$CaptureLogfire.get_collected_metrics`   s   € ä$ T×%8Ñ%8Ó9Ð9r!   r5   N)r/   r0   r1   r2   r3   Ú__annotations__rM   r4   r5   r!   r   r   r   R   s)   ‡ ñð
 ÓØØ(Ó(ØØ!Ó!Øõ:r!   r   c                 ó$  • [        5       n [        [        S9n[        5       n[	        U5      n[
        R                  " SS[
        R                  " [        5       U[        U5      /S9[        U 5      /[
        R                  " U/S9S9  [        XUS9$ )z1A fixture that returns a CaptureLogfire instance.)Úpreferred_temporalityF)Úid_generatorÚns_timestamp_generatorÚlog_record_processors)Úadditional_readers)Úsend_to_logfireÚconsoleÚadvancedÚadditional_span_processorsÚmetrics)rH   rI   rJ   )r   r   r   r   r   ÚlogfireÚ	configureÚAdvancedOptionsr   r   r
   ÚMetricsOptionsr   )rH   rI   Útime_generatorrJ   s       r   r   r   e   s‹   € ô ‹~€HÜ)Ô@]Ñ^€NÜ"“_€NÜ" >Ó2€LÜ×ÒØØÜ×(Ò(Ü/Ó1Ø#1Ü#;¸LÓ#IÐ"Jñ
ô
 %8¸Ó$AÐ#BÜ×&Ò&¸>Ð:JÑKò
ô  8ÐYeÑfÐfr!   c                óâ   • [         R                  " [        [        U R	                  5       5      R                  5       5      nUS   u  nUS    VVs/ s H  o3S     H  oDPM     M     snn$ s  snnf )rL   Úresource_metricsÚscope_metricsrZ   )ÚjsonÚloadsr   r	   Úget_metrics_dataÚto_json)rI   Úexported_metricsÚresource_metricÚscope_metricÚmetrics        r   rM   rM   {   sd   € ä—z’z¤$¤{°N×4SÑ4SÓ4UÓ"V×"^Ñ"^Ó"`ÓaÐØ(Ð);Ñ<Ñ€_Ø'6°Ò'GÔnÒ'G�|ÐclÕVmÈFŠFÑVm‰FÑ'GÒnÐnùÓns   ÁA+)r+   r   )rI   r   r+   zlist[dict[str, Any]])*r3   Ú
__future__r   ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arrc   Údataclassesr   Útypingr   r   ÚpytestÚopentelemetry.sdk._logs.exportr   Ú opentelemetry.sdk.metrics.exportr   r	   Úopentelemetry.sdk.trace.exportr
   Ú$opentelemetry.sdk.trace.id_generatorr   r[   Ú_internal.configr   Ú_internal.constantsr   Ú_internal.exporters.testr   r   Ú_internal.utilsr   Ú__all__r   r   r   Úfixturer   rM   r5   r!   r   Ú<module>r      s£   ðñ Bå "ç  „ ƒÝ !ß ã Ý Cß NÝ >Ý <ã å ;Ý :ß CÝ 4ò€ñ �Ñô%˜[ó %ó ð%÷>8ñ 8ð" ÷:ð :ó ð:ð$ ‡�ógó ðgõ*or!   