ó
    Ð]já%  ã                  ón  • S SK Jr  S SKrS SKJs  Jr  S SKrS SK	r	S SK
r
S SKrS SKrS SKJrJr  S SKJr  S SKJ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Jr  S SKJr  S SKJ r J!r!  S SK"J#r#J$r$  SSK%J&r&J'r'   " S S\#5      r( S             SS jjr)            SS jr* " S S\5      r+g)é    )ÚannotationsN)ÚMappingÚSequence)Úpartial)ÚJSONDecodeError)ÚPath)ÚAnyÚcast)Útrace)ÚReadableLogRecord)ÚLogRecordExportResult)ÚInMemoryLogRecordExporter)ÚEventÚReadableSpan)ÚSpanExporterÚSpanExportResulté   )Ú$ATTRIBUTES_EXCEPTION_FINGERPRINT_KEYÚATTRIBUTES_SPAN_TYPE_KEYc                  ót   • \ rS rSrSrSrS
S jrSS jrS
S jr       S               SS jjr	Sr
g	)ÚTestExporteré   zKA SpanExporter that stores exported spans in a list for asserting in tests.Fc                ó   • / U l         g ©N©Úexported_spans©Úselfs    Ú]/home/mande/repo/quber/.venv/lib/python3.13/site-packages/logfire/_internal/exporters/test.pyÚ__init__ÚTestExporter.__init__   s
   € Ø24ˆÕó    c                óX   • U R                   R                  U5        [        R                  $ )z"Exports a batch of telemetry data.)r   Úextendr   ÚSUCCESS)r   Úspanss     r   ÚexportÚTestExporter.export!   s"   € à×Ñ×"Ñ" 5Ô)Ü×'Ñ'Ð'r"   c                ó   • / U l         g)zClears the collected spans.Nr   r   s    r   ÚclearÚTestExporter.clear&   s
   € à ˆÕr"   c                óf  ^^^^^^^• [        [        UUUUS9mSS jmSUU4S jjmSU4S jjmSU4S jjmSUUUUUU4S jjnU R                   V	s/ s H
  o˜" U	5      PM     n
n	U
 V	s/ s H6  n	USL d,  U	R                  S	0 5      R                  [        S5      S
:w  d  M4  U	PM8     sn	$ s  sn	f s  sn	f )a  The exported spans as a list of dicts.

Args:
    fixed_line_number: The line number to use for all spans.
    strip_filepaths: Whether to strip the filepaths from the exported spans.
    include_resources: Whether to include the resource attributes in the exported spans.
    include_instrumentation_scope: Whether to include the instrumentation scope in the exported spans.
    parse_json_attributes: Whether to parse strings containing JSON arrays/objects.

Returns:
    A list of dicts representing the exported spans.
©Úfixed_line_numberÚstrip_filepathsÚstrip_function_qualnameÚparse_json_attributesc                óJ   • U R                   U R                  U R                  S.$ )N©Útrace_idÚspan_idÚ	is_remoter3   )Úcontexts    r   Úbuild_contextÚ:TestExporter.exported_spans_as_dict.<locals>.build_contextH   s    € Ø '× 0Ñ 0¸W¿_¹_Ð[b×[lÑ[lÑmÐmr"   c                ó€   >• U R                   =(       d    [        R                  nT" U5      T" U R                  5      S.$ )N)r7   Ú
attributes)r7   r   ÚINVALID_SPAN_CONTEXTr;   )Úlinkr7   Ú_build_attributesr8   s     €€r   Ú
build_linkÚ7TestExporter.exported_spans_as_dict.<locals>.build_linkK   s4   ø€ Ø—l‘l×@¤e×&@Ñ&@ˆGÙ,¨WÓ5ÑEVÐW[×WfÑWfÓEgÑhÐhr"   c           
     ó  >• U R                   U R                  S.nU R                  (       aÝ  T" U R                  5      =US'   nU(       dp  SSS[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS0-  n[        [
        R                  " U5      5      eSU;   aI  [        S [        [        [        U R                  S   5      R                  S5      5       5       5      nXBS'   U$ )N)ÚnameÚ	timestampr;   zassert %(py0)sÚpy0zexception.stacktracec              3  óp   #   • U  H,  nUR                  5       (       d  M  UR                  5       v •  M.     g 7fr   )Ústrip)Ú.0Úlines     r   Ú	<genexpr>ÚKTestExporter.exported_spans_as_dict.<locals>.build_event.<locals>.<genexpr>U   s*   é € ð %â$m˜DØŸ:™:Ÿ<ó %˜Ÿ
™
Ÿ˜Ú$mùs   ‚6Ÿ6Ú
)rB   rC   r;   Ú@py_builtinsÚlocalsÚ
@pytest_arÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚnextÚreversedr
   ÚstrÚsplit)ÚeventÚresr;   Ú@py_format1Ú	last_liner>   s        €r   Úbuild_eventÚ8TestExporter.exported_spans_as_dict.<locals>.build_eventO   sÃ   ø€ Ø+0¯:©:ÀEÇOÁOÑ"TˆCØ××Ù1BÀ5×CSÑCSÓ1TÐT��LÑ! JÞ!×!×!×!×!×!Ò!�z×!×!×!Ñ!�z×!×!×!×!×!Ð!Ø)¨ZÓ7Ü $ñ %ä$,¬T´#°u×7GÑ7GÐH^Ñ7_Ó-`×-fÑ-fÐgkÓ-lÔ$mó%ó !�Ið
 :CÐ5Ñ6àˆJr"   Úspanc                ól   >• T(       a+  SU R                   =(       a    U R                   R                  0$ 0 $ )NÚinstrumentation_scope)r_   rB   )r]   Úinclude_instrumentation_scopes    €r   Úbuild_instrumentation_scopeÚHTestExporter.exported_spans_as_dict.<locals>.build_instrumentation_scope^   s.   ø€ Þ,Ø/°×1KÑ1K×1oÐPT×PjÑPj×PoÑPoÐpÐpà�	r"   c                óh  >• U R                   =(       d    [        R                  nU R                  T" U5      U R                  (       a  T" U R                  5      OS U R
                  U R                  S.T	" U 5      EST" U R                  5      0EnU R                  (       a&  U R                   Vs/ s H  nT
" U5      PM     snUS'   U R                  (       a&  U R                   Vs/ s H  nT" U5      PM     snUS'   T(       a#  T" U R                  R                  5      nSU0US'   U$ s  snf s  snf )N)rB   r7   ÚparentÚ
start_timeÚend_timer;   ÚlinksÚeventsÚresource)r7   r   r<   rB   rd   re   rf   r;   rg   rh   ri   )r]   r7   rX   r=   rW   Úresource_attributesr>   r8   r[   ra   r?   Úinclude_resourcess         €€€€€€r   Ú
build_spanÚ7TestExporter.exported_spans_as_dict.<locals>.build_spand   sÿ   ø€ Ø—l‘l×@¤e×&@Ñ&@ˆGàŸ	™	Ù(¨Ó1Ø8<¿¿™-¨¯©Ô4ÈØ"Ÿo™oØ ŸM™Mñ#ñ .¨dÓ3ð#ð Ñ/°·±Ó@ñ#ˆCð �z�zØ=A¿ZºZÓHºZ°T¡
¨4Ö 0¹ZÑH��G‘Ø�{�{ØAEÇÂÓ MÂ¸¡¨UÖ!3ÁÑ M��H‘Þ Ù&7¸¿¹×8PÑ8PÓ&QÐ#à Ð"5ð#��J‘ð ˆJùò  Iùâ Ms   Â/D*Ã&D/Tr;   Úpending_span)r7   ztrace.SpanContextÚreturnúdict[str, Any])r=   z
trace.Linkro   rp   )rW   r   ro   rp   )r]   r   ro   rp   )r   Úbuild_attributesr   Úgetr   )r   r.   r/   rk   r`   Ú_include_pending_spansÚ_strip_function_qualnamer1   rl   r]   r&   r>   r8   r[   ra   r?   s      ``      @@@@@r   Úexported_spans_as_dictÚ#TestExporter.exported_spans_as_dict*   s¿   þ€ ô, $ÜØ/Ø+Ø$<Ø"7ñ
Ðô	n÷	ið 	i÷	÷	÷	ô 	ð, /3×.AÒ.AÓBÒ.A d�˜DÖ!Ñ.AˆÐBñ ó
â�Ø%¨Ò-Ø—‘˜ rÓ*×.Ñ.Ô/GÈÓPÐTbÑb÷ Ùñ
ð 	
ùò Cùò
s   ÁB)Á)3B.Â B.r   N©ro   ÚNone)r&   zSequence[ReadableSpan]ro   r   )é{   TFFFTF)r.   ú
int | Noner/   Úboolrk   r{   r`   r{   rs   r{   rt   r{   r1   r{   ro   úlist[dict[str, Any]])Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__test__r    r'   r*   ru   Ú__static_attributes__© r"   r   r   r      s”   † ÙUð €Hô5ô(ô
!ð ),Ø $Ø"'Ø.3Ø',Ø)-Ø&+ðV
à%ðV
ð ðV
ð  ð	V
ð
 (,ðV
ð !%ðV
ð #'ðV
ð  $ðV
ð 
÷V
ð V
r"   r   c                óŒ  • U S:X  a  U(       a   [        U5      R                  $ U S:X  a  Ub  U$ U S:X  a/  [        R                  S:¼  a  U(       a  UR                  S5      S   $ U S:X  Ga4  [        R                  of" 5       oqU:H  oˆ(       Gd  [        R                  " SU4S	X45      S
[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS
S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=pggU S:X  a  [         R"                  " SU5      (       a  gU(       aX  [%        U[&        5      (       aC  UR)                  S5      (       d  UR)                  S5      (       a   [*        R,                  " U5      $ U$ ! [         a    Us $ f = f! [.         a     U$ f = f)Nzcode.filepathzcode.linenozcode.function)é   é   Ú.éÿÿÿÿzprocess.pid)ú==)zE%(py0)s == %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s.getpid
}()
}ÚvalueÚos)rD   Úpy2Úpy4Úpy6zassert %(py8)sÚpy8iÒ  zservice.instance.idz^[0-9a-f]{32}$Ú 00000000000000000000000000000000Ú{Ú[)r   rB   Ú
ValueErrorÚsysÚversion_inforV   rŒ   ÚgetpidrN   Ú_call_reprcomparerL   rM   rO   rP   rQ   rR   ÚreÚmatchÚ
isinstancerU   Ú
startswithÚjsonÚloadsr   )rB   r‹   r/   r.   r0   r1   Ú@py_assert3Ú@py_assert5Ú@py_assert1Ú@py_format7Ú@py_format9s              r   Úprocess_attributer¤   ƒ   sœ  € ð ˆÓ¦?ð	Ü˜“;×#Ñ#Ð#ð ˆ}ÓÐ!2Ñ!>Ø Ð ØˆÓÜ×Ñ˜wÓ&Ö+BØ—;‘;˜sÓ# BÑ'Ð'Øˆ}ÔÜŸ	™	Ð#˜	›Ð#˜Ñ#×#×#×#Ó#ˆu×#×#×#×#×#Õ#ˆu×#×#×#Ñ#ˆu×#×#×#×#×#Ö#œ×#×#×#Ñ#œ×#×#Õ#˜	×#×#Ó#˜×#×#×#×#×#×#Ó#ØØÐ$Ó$Ü�8Š8Ð% u×-Ñ-ØÞ¤¨E´3×!7Ñ!7¸U×=MÑ=MÈc×=RÑ=RÐV[×VfÑVfÐgj×VkÑVkð	Ü—:’:˜eÓ$Ð$ð €Løô% ó 	ØŠLð	ûô  ó 	ØØ€Lð	ús#   �H# ÈH5 È#H2È1H2È5
IÉIc                ó¶   • U c  g U R                  5        VVs0 s H  u  pVU[        XVXX45      _M     n nn[        U ;   a	  SU [        '   SU ;   a  SU S'   U $ s  snnf )NÚ@0000000000000000000000000000000000000000000000000000000000000000ztelemetry.sdk.versionz0.0.0)Úitemsr¤   r   )r;   r/   r.   r0   r1   ÚkÚvs          r   rq   rq   £   s}   € ð ÑØð ×$Ñ$Ô&ôâ&‰DˆAð 	
Ô˜Q ?ÐG^ÓvÒvÙ&ð ñ ô ,¨zÓ9Ø;Cˆ
Ô7Ñ8Ø *Ó,Ø.5ˆ
Ð*Ñ+ØÐùós   ˜Ac                  ó‚   ^ • \ rS rSrSrSrS	U 4S jjrS
U 4S jjr      S             SS jjrSS jr	Sr
U =r$ )ÚTestLogExporteré·   zIA LogExporter that stores exported logs in a list for asserting in tests.Fc                ó.   >• [         TU ]  5         Xl        g r   )Úsuperr    Úns_timestamp_generator)r   r¯   Ú	__class__s     €r   r    ÚTestLogExporter.__init__½   s   ø€ Ü‰ÑÔØ&<Õ#r"   c                ó°   >• U HA  nU R                  5       UR                  l        U R                  5       UR                  l        MC     [        TU ]  U5      $ r   )r¯   Ú
log_recordrC   Úobserved_timestampr®   r'   )r   ÚbatchÚlogr°   s      €r   r'   ÚTestLogExporter.exportÁ   sH   ø€ ÛˆCØ'+×'BÑ'BÓ'DˆC�N‰NÔ$Ø04×0KÑ0KÓ0MˆC�N‰NÖ-ñ ô ‰w‰~˜eÓ$Ð$r"   c                ó”   ^^^	• [        [        UUUUS9m	SU	UU4S jjnU R                  5        Vs/ s H
  o‡" U5      PM     sn$ s  snf )Nr-   c           
     óà  >• U R                   nUR                  UR                  b  UR                  R                  OS UR                  T" UR
                  5      UR                  UR                  UR                  UR                  UR                  S.	nT(       a#  T" U R                  R
                  5      nSU0US'   T(       a*  U R                  (       a  U R                  R                  US'   U$ )N)	ÚbodyÚseverity_numberÚseverity_textr;   rC   r´   r4   r5   Útrace_flagsr;   ri   r_   )r³   rº   r»   r‹   r¼   r;   rC   r´   r4   r5   r½   ri   r_   rB   )Úlog_datar³   rX   rj   r>   r`   rk   s       €€€r   Ú	build_logÚ9TestLogExporter.exported_logs_as_dicts.<locals>.build_logØ   sÓ   ø€ Ø!×,Ñ,ˆJà"Ÿ™ØGQ×GaÑGaÑGm :×#=Ñ#=×#CÒ#CÐswØ!+×!9Ñ!9Ù/°
×0EÑ0EÓFØ'×1Ñ1Ø&0×&CÑ&CØ&×/Ñ/Ø%×-Ñ-Ø)×5Ñ5ñ
ˆCö !Ù&7¸×8IÑ8I×8TÑ8TÓ&UÐ#à Ð"5ð#��J‘ö -°×1O×1OØ/7×/MÑ/M×/RÑ/R�Ð+Ñ,àˆJr"   )r¾   r   ro   rp   )r   rq   Úget_finished_logs)
r   r.   r/   rk   r`   rt   r1   r¿   r¶   r>   s
      ``    @r   Úexported_logs_as_dictsÚ&TestLogExporter.exported_logs_as_dictsÇ   sR   ú€ ô $ÜØ/Ø+Ø$<Ø"7ñ
Ð÷	ñ 	ð2 +/×*@Ñ*@Ô*BÓCÒ*B 3�	˜#–Ñ*BÑCÐCùÒCs   ±Ac                ó$   • U R                  5         g r   )r*   r   s    r   ÚshutdownÚTestLogExporter.shutdownó   s   € Ø�
‰
�r"   )r¯   )r¯   ztyping.Callable[[], int]ro   rx   )rµ   z"typing.Sequence[ReadableLogRecord]ro   r   )ry   TFFTF)r.   rz   r/   r{   rk   r{   r`   r{   rt   r{   r1   r{   ro   r|   rw   )r}   r~   r   r€   r�   r‚   r    r'   rÂ   rÅ   rƒ   Ú__classcell__)r°   s   @r   r«   r«   ·   s‡   ø† ÙSð €H÷=÷%ð ),Ø $Ø"'Ø.3Ø)-Ø&+ð*Dà%ð*Dð ð*Dð  ð	*Dð
 (,ð*Dð #'ð*Dð  $ð*Dð 
õ*D÷Xò r"   r«   )F)rB   rU   r‹   r	   r/   r{   r.   rz   r0   r{   r1   r{   ro   r	   )r;   zMapping[str, Any] | Noner/   r{   r.   rz   r0   r{   r1   r{   ro   zdict[str, Any] | None),Ú
__future__r   ÚbuiltinsrL   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterN   r�   rŒ   r™   r•   ÚtypingÚcollections.abcr   r   Ú	functoolsr   r   Úpathlibr   r	   r
   Úopentelemetryr   Úopentelemetry.sdk._logsr   Ú(opentelemetry.sdk._logs._internal.exportr   Úopentelemetry.sdk._logs.exportr   Úopentelemetry.sdk.tracer   r   Úopentelemetry.sdk.trace.exportr   r   Ú	constantsr   r   r   r¤   rq   r«   r„   r"   r   Ú<module>rØ      så   ðÝ "ç  „ ƒÛ 	Û 	Û 
Û ß -Ý Ý  Ý ß å Ý 5Ý JÝ Dß 7ß Iç Vôh
�<ô h
ðb #(ðØ
ðàðð ðð "ð	ð
 "ðð  ðð 	õð@Ø(ðàðð "ðð "ð	ð
  ðð ôô(=Ð/õ =r"   