ó
    Ð]jR  ã                  óþ  • S r SSKJ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Jr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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*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4  SSK5J6r6  SSK7J8r8  \S   r9\1S   r:\1S   r;\1S   r<\=\>\?\?4      r@\	 " S S5      5       rA " S S\5      rB " S S\B5      rC " S  S!\B5      rDS%S" jrE\	 " S# S$\5      5       rFg)&z¨Console exporter for OpenTelemetry.

Inspired by https://opentelemetry-python.readthedocs.io/en/latest/_modules/opentelemetry/sdk/trace/export.html#ConsoleSpanExporter
é    )ÚannotationsN)ÚMappingÚSequence)Ú	dataclass)Údatetime©Úindent)ÚAnyÚLiteralÚTextIOÚcast)Ú	LogRecord)ÚReadableLogRecord)ÚLogRecordExporterÚLogRecordExportResult)ÚEventÚReadableSpan)ÚSpanExporterÚSpanExportResult)ÚColumns)ÚConsoleÚGroup)ÚSyntax)ÚTexté   )ÚATTRIBUTES_JSON_SCHEMA_KEYÚATTRIBUTES_LOG_LEVEL_NUM_KEYÚATTRIBUTES_MESSAGE_KEYÚ'ATTRIBUTES_PENDING_SPAN_REAL_PARENT_KEYÚATTRIBUTES_SPAN_TYPE_KEYÚATTRIBUTES_TAGS_KEYÚDISABLE_CONSOLE_KEYÚLEVEL_NUMBERSÚNUMBER_TO_LEVELÚONE_SECOND_IN_NANOSECONDSÚ	LevelName)Újson_args_value_formatter)Útruncate_string)ÚautoÚalwaysÚneverÚinfoÚwarnÚerrorc                  óŽ   • \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   S
\S'   S\S'   S\S'   \SS j5       r\SS j5       rSrg)ÚRecordé4   úMapping[str, object]Ú
attributesÚintÚ	timestampÚstrÚmessagezSequence[Event]Úeventsú
int | NoneÚspan_idÚparent_span_idÚkindÚlevelc                óÀ  • UR                   =(       d    0 nU " UUR                  =(       d    SUR                  [        5      =(       d    UR                  UR
                  UR                  =(       a    UR                  R                  UR                  =(       a    UR                  R                  UR                  [        S5      UR                  [        [        5      S9$ )Nr   Úspan©r3   r5   r7   r8   r:   r;   r<   r=   )r3   Ú
start_timeÚgetr   Únamer8   Úcontextr:   Úparentr    r   Ú_INFO_LEVEL)Úclsr?   r3   s      Ú`/home/mande/repo/quber/.venv/lib/python3.13/site-packages/logfire/_internal/exporters/console.pyÚ	from_spanÚRecord.from_span?   s“   € à—_‘_×*¨ˆ
ÙØ!Ø—o‘o×*¨Ø—N‘NÔ#9Ó:×G¸d¿i¹iØ—;‘;Ø—L‘L×9 T§\¡\×%9Ñ%9ØŸ;™;×>¨4¯;©;×+>Ñ+>Ø—‘Ô 8¸&ÓAØ—.‘.Ô!=¼{ÓKñ	
ð 		
ó    c                óþ  • UR                   =(       d    0 nUR                  [        5      nU(       dÝ  / n[        USS 5      =(       d    UR                  S5      =n(       a  UR	                  [        U5      5        UR                  =n(       a#  UR	                  [        [        U5      SS95        ONUR                  5        VVs0 s H  u  pxUS:w  d  M  Xx_M     n	nnUR	                  [        [        U	5      SS95        SR                  U5      nU " UUR                  =(       d    UR                  =(       d    SU/ S UR                  SUR                  (       a  UR                  R                  S9$ [        S9$ s  snnf )	NÚ
event_namez
event.nameéd   )Ú
max_lengthú: r   Úlogr@   )r3   rB   r   ÚgetattrÚappendr6   Úbodyr(   ÚitemsÚjoinr5   Úobserved_timestampr:   Úseverity_numberÚvaluerF   )
rG   rQ   r3   r7   ÚpartsrM   rT   ÚkÚvÚother_attributess
             rH   Úfrom_logÚRecord.from_logM   s?  € à—^‘^×) rˆ
Ø!—~‘~Ô&<Ó=ˆÞð  "ˆEÜ% c¨<¸Ó>×^À*Ç.Á.ÐQ]ÓB^Ð_ˆzÕ_Ø—‘œS ›_Ô-Ø—x‘xÐˆtÕØ—‘œ_¬S°«YÀ3ÑGÕHà5?×5EÑ5EÔ5GÔ#]Ò5G©T¨QÈ1ÐP\ÑK\£D A¢DÑ5GÐ Ñ#]Ø—‘œ_¬SÐ1AÓ-BÈsÑSÔTØ—i‘i Ó&ˆGÙØ!Ø—m‘m×B s×'=Ñ'=×BÀØØØØŸ;™;ØØ/2×/B×/B�#×%Ñ%×+Ñ+ñ	
ð 		
ô ITñ	
ð 		
ùó $^s   ÃE9ÃE9© N)r?   r   Úreturnr0   )rQ   r   ra   r0   )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__ÚclassmethodrI   r^   Ú__static_attributes__r`   rK   rH   r0   r0   4   sT   ‡ à$Ó$ØƒNØƒLØÓØÓØÓØ
ƒIØƒJàó
ó ð
ð ó
ó ó
rK   r0   c                  ó¸   • \ rS rSrSr      S             SS jjrSS jrSS jrSSS jjrSS jr	SS	 jr
SS
 jrSS jrSS jrSS jrSSS jjrSrg)ÚSimpleConsoleSpanExporteréi   z¤The ConsoleSpanExporter prints spans to the console.

This simple version does not indent spans based on their parent(s), instead spans are printed as a
flat list.
Nc           	     óV  • Xl         US:X  a  S nOUS:H  n[        [        R                  R	                  S5      (       a  SOSU R                   USSSS9U l        U R
                  R                  (       d  S U l        X0l        X@l        U(       a  SOS	U l	        XPl
        [        U   U l        g )
Nr)   r*   ÚPYTEST_VERSIONÚstandardFT)Úcolor_systemÚfileÚforce_terminalÚ	highlightÚmarkupÚ	soft_wrapé   r   )Ú_outputr   ÚosÚenvironrB   Ú_consoleÚis_terminalÚ_include_timestampÚ_include_tagsÚ_timestamp_indentÚ_verboser#   Ú_min_log_level_num)ÚselfÚoutputÚcolorsÚinclude_timestampÚinclude_tagsÚverboseÚmin_log_levelrq   s           rH   Ú__init__Ú"SimpleConsoleSpanExporter.__init__p   s—   € ð ŒØ�VÓØ!‰Nà# xÑ/ˆNÜÜ')§z¡z§~¡~Ð6F×'GÑ'G™ÈVØ—‘Ø)ØØØñ
ˆŒð �}‰}×(×(à ˆDŒMà"3ÔØ)Ôæ'8¡¸aˆÔØŒÜ"/°Ñ">ˆÕrK   c                ó|   • U H'  nU R                  [        R                  U5      5        M)     [        R                  $ )z Export the spans to the console.)Úexport_recordr0   rI   r   ÚSUCCESS)r€   Úspansr?   s      rH   ÚexportÚ SimpleConsoleSpanExporter.export‘   s3   € ãˆDØ×Ñœv×/Ñ/°Ó5Ö6ñ ô  ×'Ñ'Ð'rK   c                ó&   • U R                  U5        g)zÐPrint a summary of the span, this method can be overridden to customize how spans are displayed.

In this simple case we just print the span if its type is not "span" - e.g. the message at the end of a span.
N)Ú_print_span©r€   r?   s     rH   rŠ   Ú'SimpleConsoleSpanExporter.export_record˜   s   € ð
 	×Ñ˜ÕrK   c                ó–  • U R                  X5      u  p4UR                  S:X  d$  UR                  R                  [        5      (       a  gUR
                  U R                  :  a  gU R                  US-  -   S-  nU R                  X5      nU(       a	  US/U-   -  nU R                  (       a-  U R                  R                  [        R                  " U6 5        O*[        SR                  S U 5       5      U R                  S9  U R                  X5        [!        S	 UR"                  =(       d    /  5       S5      nU R%                  Xu5        g)
zMBuild up a summary of the span, including formatting for rich, then print it.r?   Nr   Ú )Ú
Ú r–   c              3  ó*   #   • U  H	  u  pUv •  M     g 7f©Nr`   )Ú.0ÚtextÚ_styles      rH   Ú	<genexpr>Ú8SimpleConsoleSpanExporter._print_span.<locals>.<genexpr>±   s   é € Ð9²5¡< 4�$²5ùs   ‚©rp   c              3  óH   #   • U  H  oR                   S :X  d  M  Uv •  M     g7f)Ú	exceptionN)rC   )r™   Úevents     rH   rœ   r�   ·   s   é € Ð\Ò-> EÇ*Á*ÐP[ÑB[Ÿ%™%Ò->ùs   ‚"™	")Ú_span_text_partsr<   r3   rB   r"   r=   r   r}   Ú_details_partsry   Úprintr   ÚassemblerV   rv   Ú_print_argumentsÚnextr8   Ú_print_exc_info)r€   r?   r	   Ú_msgrZ   Ú
indent_strÚdetails_partsÚ	exc_events           rH   r�   Ú%SimpleConsoleSpanExporter._print_spanŸ   s  € à×+Ñ+¨DÓ9‰ˆð �9‰9˜Ó $§/¡/×"5Ñ"5Ô6I×"JÑ"JØØ�:‰:˜×/Ñ/Ó/Øà×,Ñ,¨v¸©zÑ9¸SÑ@ˆ
Ø×+Ñ+¨DÓ=ˆÞØ�j�\ MÑ1Ñ1ˆEà�=�=Ø�M‰M×Ñ¤§¢¨uÐ 5Õ6ä�"—'‘'Ñ9±5Ó9Ó9ÀÇÁÒMð 	×Ñ˜dÔ/äÑ\¨T¯[©[×->¸BÐ->Ó\Ð^bÓcˆ	Ø×Ñ˜YÕ3rK   c                ó   • / nU R                   (       a6  [        R                  " UR                  [        -  5      nUS SS nX5S4S/-  nU(       a
  X2S-  S4/-  nUR
                  nUR                  nU[        :¼  a  X6S4/-  nOU[        :¼  a  X6S	4/-  nOX6S4/-  nU R                  (       aN  UR                  R                  [        5      =n(       a(  S
R                  [        SU5      5      n	USSU	 S3S4/-  nXc4$ )a  Return the formatted message or span name and parts containing basic span information.

The following information is included:
* timestamp
* message (maybe indented)
* tags (if `self._include_tags` is True)

The log level may be indicated by the color of the message.
z%H:%M:%S.%fNéýÿÿÿÚgreen)r”   r–   z  r–   ÚredÚyellowÚ,z	list[str]Ú[Ú]Úcyan)r{   r   Úfromtimestampr5   r%   r7   r=   Ú_ERROR_LEVELÚ_WARN_LEVELr|   r3   rB   r!   rV   r   )
r€   r?   r	   rZ   ÚtsÚts_strÚmsgr=   ÚtagsÚtags_strs
             rH   r¢   Ú*SimpleConsoleSpanExporter._span_text_partsº   s  € ð ˆØ×"×"Ü×'Ò'¨¯©Ô9RÑ(RÓSˆBà˜;Ð'¨¨"Ð-ˆFØ˜wÐ'¨Ð3Ñ3ˆEæØ ‘} bÐ)Ð*Ñ*ˆEà�l‰lˆØ—
‘
ˆØ”LÓ à˜E�l�^Ñ#‰EØ”kÓ!à˜H�oÐ&Ñ&‰Eà˜B�i�[Ñ ˆEà××Ø—‘×*Ñ*Ô+>Ó?Ð?ˆtÕ?ØŸ8™8¤D¨°dÓ$;Ó<�Ø˜)¨¨(¨°1 o°vÐ%>Ð?Ñ?�àˆzÐrK   c                ó  • U R                   (       a  UR                  (       d  / $ UR                  R                  S5      nUS;   a  SO
[        U5      nU(       a)  UR                  R                  S5      nUS;  a  USU 3-  nUR                  R                  [        5      n[
        R                  " U5      nU(       d  U(       aB  US4S/nU(       a  UR                  SU 3S	45        U(       a  UR                  SU 3S45        U$ / $ )
zžReturn parts containing details for the span if `self._verbose` is True.

The following details are returned:
* filename and line number
* the log level name
zcode.filepath)NÚnullNzcode.linenoÚ:r–   )u   â”‚Úbluer”   r¶   )r~   r3   rB   r6   r   r$   rS   )	r€   r?   rª   Úfile_location_rawÚfile_locationÚlinenoÚlog_level_numÚ	log_levelrZ   s	            rH   r£   Ú(SimpleConsoleSpanExporter._details_partsà   sæ   € ð �}�} D§O§OØˆIà ŸO™O×/Ñ/°Ó@ÐØ 1°^Ó C™ÌÐM^ÓI_ˆÞØ—_‘_×(Ñ(¨Ó7ˆFØ˜^Ó+Ø 1 V H Ñ-�à!Ÿ_™_×0Ñ0Ô1MÓNˆÜ#×'Ò'¨Ó6ˆ	æžIØ!+¨RÐ 0°/ÐBˆEÞØ—‘  - Ð1°6Ð:Ô;ÞØ—‘  ) ˜o¨rÐ2Ô3ØˆLàˆIrK   c           	     ó‚  • U R                   (       a  UR                  (       d  g0 n[        S[        R                  " UR                  R                  [        S5      5      5      nUR                  S0 5      R                  5        H`  u  pVUR                  R                  U5      nU(       a,  [        U[        5      (       a   [        R                  " U5      n[        XvS9nXsU'   Mb     U(       d  gU R                  (       a  U R                  X25        gU R                  X25        g! [        R                   a    Sn Nff = f)zQPretty-print formatted logfire arguments for the span if `self._verbose` is True.Núdict[str, Any]z{}Ú
properties)Úschema)r~   r3   r   ÚjsonÚloadsrB   r   rU   Ú
isinstancer6   ÚJSONDecodeErrorr'   ry   Ú_print_arguments_richÚ_print_arguments_plain)r€   r?   rª   Ú	argumentsÚjson_schemaÚkeyrÍ   rY   s           rH   r¦   Ú*SimpleConsoleSpanExporter._print_argumentsþ   sñ   € à�}�} D§O§OØà$&ˆ	ÜÐ+¬T¯ZªZ¸¿¹×8KÑ8KÔLfÐhlÓ8mÓ-nÓoˆØ&Ÿ?™?¨<¸Ó<×BÑBÖD‰KˆCØ—O‘O×'Ñ'¨Ó,ˆEÞœ* U¬C×0Ñ0ð"Ü ŸJšJ uÓ-�Eô .¨eÑCˆEØ"�c‹Nñ Eö Øà�=�=Ø×&Ñ& yÕ=à×'Ñ'¨	Õ>øô ×+Ñ+ó "Ø!’Fð"ús   ÃD%Ä%D>Ä=D>c           
     ól  • U R                   c   e/ nUR                  5        Hn  u  pE[        U S3SS9n[        USSS9n[        SUR	                  S	5      S
-   -  SS SS9nUR                  [        / U/[        U5      -  QUPUPUP7SS95        Mp     U R                   R                  [        U6 5        g)zSPrint logfire arguments in color using rich, particularly with syntax highlighting.NÚ=rÃ   )ÚstyleÚpythonÚdefault©Úbackground_coloru   â”‚ 
r•   é   éÿÿÿÿ)r   r   )Úpadding)
ry   rU   r   r   ÚcountrS   r   Úboolr¤   r   )	r€   rÔ   rª   Úchunksr[   Ú
value_coderÖ   rY   Úbarriers	            rH   rÒ   Ú/SimpleConsoleSpanExporter._print_arguments_rich  sÛ   € à�}‰}Ñ(Ð(Ð(à "ˆØ&Ÿ_™_Ö.‰MˆAÜ˜!˜˜A�w fÑ-ˆCÜ˜: xÀ)ÑLˆEÜ˜H¨
×(8Ñ(8¸Ó(>ÀÑ(BÑCÀSÀbÐIÐQWÑXˆGØ�M‰MÜðà$˜¬¨ZÓ(8Ñ8ðð  ðð ð	ð
 ñð #ñ	öñ	 /ð" 	�‰×ÑœE 6˜NÕ+rK   c                ó  • / nUR                  5        HN  u  pEUR                  5       nX2 SU SUS    3/-  nU SS[        U5      -   S3nUSS  H  nX7 U 3/-  nM     MP     [        SR	                  U5      U R
                  S9  g)	zJPrint logfire arguments without color using the built-in `print` function.õ   â”‚ rÙ   r   r”   rß   Nr•   rž   )rU   Ú
splitlinesÚlenr¤   rV   rv   )	r€   rÔ   rª   Úoutr[   rå   Úvalue_linesÚprefixÚlines	            rH   rÓ   Ú0SimpleConsoleSpanExporter._print_arguments_plain/  sŸ   € àˆØ&Ÿ_™_Ö.‰MˆAØ$×/Ñ/Ó1ˆKØ�l $ q c¨¨;°q©>Ð*:Ð;Ð<Ñ<ˆCØ"�| 4¨¬c°!«f© ~°QÐ7ˆFØ# A B›�Ø˜( 4 &Ð)Ð*Ñ*’ó (ñ	 /ô 	ˆd�i‰i˜‹n 4§<¡<Ó0rK   c                ó”  • Ub  UR                   (       d  g[        [        UR                   R                  S5      5      n[        [        UR                   R                  S5      5      n[        [        UR                   R                  S5      5      nU R                  (       ag  [        US-   SSS9n[        U S	3SS
S9n[        U5      n[        XRS-   5      n[        USSS9nU R                  R                  [        XcU5      U5        gU SU S	U 3/nU[        XRS-   5      /-  n[        SR                  U5      U R                  S9  g)z=Print exception information if an exception event is present.Nzexception.typezexception.messagezexception.stacktraceré   rÃ   r–   )rÚ   ÚendrP   zbold red)rò   rÚ   rÛ   rÜ   rÝ   r•   rž   )r3   r   r6   rB   ry   r   Úindent_textr   r¤   r   rV   rv   )	r€   r¬   rª   Úexc_typeÚexc_msgÚexc_tbræ   Úindented_coderì   s	            rH   r¨   Ú)SimpleConsoleSpanExporter._print_exc_info:  s"  € àÑ I×$8×$8Øäœ˜Y×1Ñ1×5Ñ5Ð6FÓGÓHˆÜ”s˜I×0Ñ0×4Ñ4Ð5HÓIÓJˆÜ”c˜9×/Ñ/×3Ñ3Ð4JÓKÓLˆà�=�=Ü˜:¨Ñ.°fÀ"ÑEˆGÜ˜x˜j¨˜O°¸:ÑFˆHÜ˜7“mˆGÜ'¨¸VÑ0CÓDˆMÜ˜M¨8ÀiÑPˆFØ�M‰M×Ñ¤ g¸Ó AÀ6ÕJà �\  h Z¨r°'°Ð;Ð<ˆCØ”K °VÑ(;Ó<Ð=Ñ=ˆCÜ�$—)‘)˜C“. t§|¡|Ó4rK   c                ó   • g)z6Force flush all spans, does nothing for this exporter.Tr`   )r€   Útimeout_milliss     rH   Úforce_flushÚ%SimpleConsoleSpanExporter.force_flushO  s   € àrK   )ry   r|   r{   r   rv   r}   r~   ©Nr)   TTFr,   ©r�   zTextIO | Noner‚   ÚConsoleColorsValuesrƒ   rã   r„   rã   r…   rã   r†   r&   ra   ÚNone)rŒ   zSequence[ReadableSpan]ra   r   ©r?   r0   ra   r   )r   )r?   r0   r	   r4   ©r?   r0   r	   r4   ra   ztuple[str, TextParts])r?   r0   rª   r6   ra   Ú	TextParts)r?   r0   rª   r6   )rÔ   rË   rª   r6   ra   r   )r¬   zEvent | Nonerª   r6   ra   r   )rú   r4   ra   rã   )rb   rc   rd   re   Ú__doc__r‡   r�   rŠ   r�   r¢   r£   r¦   rÒ   rÓ   r¨   rû   rh   r`   rK   rH   rj   rj   i   s�   † ñð !%Ø&,Ø"&Ø!ØØ#)ð?àð?ð $ð?ð  ð	?ð
 ð?ð ð?ð !ð?ð 
õ?ôB(ôö4ô6$ôLô<?ô2,ô0	1ô5÷*ñ rK   rj   c                  ód   ^ • \ rS rSrSr      S             SU 4S jjjrSS jrSrU =r$ )	ÚIndentedConsoleSpanExporteriT  a  The ConsoleSpanExporter exports spans to the console, indented.

Spans are intended based simply on how many parents they have. This will work well when spans don't overlap,
but will be hard to understand when multiple spans are in progress at the same time.
c                ó6   >• [         TU ]  XX4XV5        0 U l        g r˜   )Úsuperr‡   Ú_indent_level©r€   r�   r‚   rƒ   r„   r…   r†   Ú	__class__s          €rH   r‡   Ú$IndentedConsoleSpanExporter.__init__[  s   ø€ ô 	‰Ñ˜Ð):È'Ôaà-/ˆÕrK   c                óÐ  • UR                   S:X  a4  UR                  b&  U R                  R                  UR                  S5        gUR                  nUR                   S:X  aP  [        UR                  5      nU(       a  U R                  R                  US5      OSnUb  US-   U R                  U'   O%U(       a  U R                  R                  US5      OSnU R                  X5        g)zXGet the span indent based on `self._indent_level`, then print the span with that indent.r?   NÚpending_spanr   rß   )	r<   r:   r	  Úpopr;   Ú_pending_span_parentr3   rB   r�   )r€   r?   Úblock_span_idÚ	parent_idr	   s        rH   rŠ   Ú)IndentedConsoleSpanExporter.export_recordh  sÂ   € à�9‰9˜Óà�|‰|Ñ'Ø×"Ñ"×&Ñ& t§|¡|°TÔ:Øà×+Ñ+ˆØ�9‰9˜Ó&Ü,¨T¯_©_Ó=ˆIÞ=F�T×'Ñ'×+Ñ+¨I°qÔ9ÈAˆFð Ñ(Ø4:¸Q±J�×"Ñ" =Ñ1øö BO�T×'Ñ'×+Ñ+¨M¸1Ô=ÐTUˆFà×Ñ˜Õ&rK   )r	  rý   rþ   r  )	rb   rc   rd   re   r  r‡   rŠ   rh   Ú__classcell__©r  s   @rH   r  r  T  st   ø† ñð !%Ø&,Ø"&Ø!ØØ#)ð0àð0ð $ð0ð  ð	0ð
 ð0ð ð0ð !ð0ð 
÷0ð 0÷'ò 'rK   r  c                  ó~   ^ • \ rS rSrSr      S             S	U 4S jjjrS
S jrSU 4S jjrSS jrSr	U =r
$ )ÚShowParentsConsoleSpanExporteri  a£  The ConsoleSpanExporter exports spans to the console, indented with parents displayed where necessary.

Spans are intended based on how many parents they have, where multiple concurrent spans overlap and therefore
the previously displayed span is not the parent or sibling of a span, parents are printed (with "dim" color)
so it's easy (or as easy as possible in a terminal) to understand how nested spans are related.
c                óD   >• [         TU ]  XX4XV5        0 U l        / U l        g r˜   )r  r‡   Ú_span_historyÚ_span_stackr
  s          €rH   r‡   Ú'ShowParentsConsoleSpanExporter.__init__‡  s*   ø€ ô 	‰Ñ˜Ð):È'Ôað ?AˆÔà&(ˆÕrK   c                ó>  • UR                   S:X  a|  UR                  bn  U R                  R                  UR                  S5        U R                  (       a7  U R                  S   UR                  :X  a  U R                  R                  5         gU R                  U5        g)zbPrint any parent spans which aren't in the current stack of displayed spans, then print this span.r?   Nrà   )r<   r:   r  r  r  r�   r‘   s     rH   rŠ   Ú,ShowParentsConsoleSpanExporter.export_record—  st   € à�9‰9˜Óà�|‰|Ñ'Ø×"Ñ"×&Ñ& t§|¡|°TÔ:Ø×#×#¨×(8Ñ(8¸Ñ(<ÀÇÁÓ(LØ×$Ñ$×(Ñ(Ô*Øà×Ñ˜ÕrK   c                óÔ  >• / nUR                   nUR                  S:X  a�  [        UR                  5      nX0R	                  U5      -  n[        U R                  5      n[        TU ]!  X5      u  pgX7-  nUb5  X&U=(       d    S4U R                  U'   U R                  R                  U5        Xc4$ X0R	                  U5      -  n[        TU ]!  U[        U R                  5      S9u  pgX7-  nXc4$ )zjParts for any parent spans which aren't in the current stack of displayed spans, then parts for this span.r  r   r   )r;   r<   r  r3   Ú_parent_stack_text_partsrë   r  r  r¢   r  rS   )	r€   r?   r	   rZ   r  r  r¼   Ú
span_partsr  s	           €rH   r¢   Ú/ShowParentsConsoleSpanExporter._span_text_parts£  sì   ø€ àˆØ×+Ñ+ˆØ�9‰9˜Ó&Ü,¨T¯_©_Ó=ˆIØ×2Ñ2°9Ó=Ñ=ˆEä˜×)Ñ)Ó*ˆFÜ#™gÑ6°tÓD‰OˆCØÑˆEàÑ(Ø5;À)Ç.ÈqÐ4Q�×"Ñ" =Ñ1Ø× Ñ ×'Ñ'¨Ô6ð ˆzÐð ×2Ñ2°=ÓAÑAˆEÜ#™gÑ6°tÄCÈ×HXÑHXÓDYÐ6ÐZ‰OˆCØÑˆEØˆzÐrK   c                ó,  • / nSnU(       aI   U R                   U   u  pEn U R                  R                  U5      nU R                  SUS-    U l        Sn U(       a  U R                  R                  5         / n[        U5       HL  u  pInU R                  US-  -   n
USU
-   U	 S3S4/-  nU(       d  M1  U R                  R	                  U5        MN     U$ ! [         a    UR	                  XEU45        Un Of = f! [
         a     M²  f = fU(       a  GM	  NÁ)	zÂParts for "intermediate" parent spans - e.g., spans which are not parents of the currently displayed span.

Also build up `self._span_stack` to correctly represent the path to the current span.
TNrß   Fr   r”   r•   Údim)	r  r  ÚindexÚ
ValueErrorrS   ÚKeyErrorÚclearÚreversedr}   )r€   r  ÚparentsÚclear_stackr	   rï   Úgrand_parent_idÚstack_indexrZ   r¼   Útotal_indents              rH   r  Ú7ShowParentsConsoleSpanExporter._parent_stack_text_parts¹  s4  € ð /1ˆØˆæðØ04×0BÑ0BÀ9Ñ0MÑ-�˜oðØ"&×"2Ñ"2×"8Ñ"8¸Ó"C�Kð
 (,×'7Ñ'7Ð8I¸+È¹/Ð'J�DÔ$Ø"'�KØö Ø×Ñ×"Ñ"Ô$àˆô '/¨wÖ&7Ñ"ˆF˜Ø×1Ñ1°F¸Q±JÑ>ˆLØ˜# Ñ,Ð-¨c¨U°"Ð5°uÐ=Ð>Ñ>ˆEßˆyØ× Ñ ×'Ñ'¨	Ö2ñ	 '8ð
 ˆøô) "ó 0Ø—N‘N F°)Ð#<Ô=Ø /’Ið0ûô ó Úðú÷ Šis"   �C:  C ÃC7Ã6C7Ã:
DÄD)r  r  rý   rþ   r  r  )r  r9   ra   r  )rb   rc   rd   re   r  r‡   rŠ   r¢   r  rh   r  r  s   @rH   r  r    s~   ø† ñð !%Ø&,Ø"&Ø!ØØ#)ð)àð)ð $ð)ð  ð	)ð
 ð)ð ð)ð !ð)ð 
÷)ð )ô 
÷÷,%ò %rK   r  c                óT   • U R                  [        5      =n(       a  [        US5      $ g)a]  Pending span marks the start of a span.

Since they're nested within another span we haven't seen yet,
we have to do a trick of getting the 'logfire.pending_parent_id' attribute to get the parent indent.

Note that returning `0` is equivalent to returning `None` since top level spans get
`ATTRIBUTES_PENDING_SPAN_REAL_PARENT_KEY` encoded from `0`.
é   N)rB   r   r4   )r3   Úparent_id_strs     rH   r  r  á  s,   € ð #Ÿ™Ô'NÓOÐO€}ÕOÜ�= "Ó%Ð%ð PrK   c                  ó0   • \ rS rSr% S\S'   SS jrS rSrg)	ÚConsoleLogExporteriî  rj   Úspan_exporterc                ó¤   • U H;  nU R                   R                  [        R                  UR                  5      5        M=     [
        R                  $ r˜   )r4  rŠ   r0   r^   Ú
log_recordr   r‹   )r€   ÚbatchÚlog_datas      rH   r�   ÚConsoleLogExporter.exportò  s=   € ÛˆHØ×Ñ×,Ñ,¬V¯_©_¸X×=PÑ=PÓ-QÖRñ ô %×,Ñ,Ð,rK   c                ó8   • U R                   R                  5         g r˜   )r4  Úshutdown)r€   s    rH   r;  ÚConsoleLogExporter.shutdownø  s   € Ø×Ñ×#Ñ#Õ%rK   r`   N)r7  zSequence[ReadableLogRecord]ra   r   )rb   rc   rd   re   rf   r�   r;  rh   r`   rK   rH   r3  r3  î  s   ‡ à,Ó,ô-õ&rK   r3  )r3   r2   ra   r9   )Gr  Ú
__future__r   rÎ   rw   Úcollections.abcr   r   Údataclassesr   r   Útextwrapr	   ró   Útypingr
   r   r   r   Úopentelemetry._logsr   Úopentelemetry.sdk._logsr   Úopentelemetry.sdk._logs.exportr   r   Úopentelemetry.sdk.tracer   r   Úopentelemetry.sdk.trace.exportr   r   Úrich.columnsr   Úrich.consoler   r   Úrich.syntaxr   Ú	rich.textr   Ú	constantsr   r   r   r   r    r!   r"   r#   r$   r%   r&   Újson_formatterr'   Úutilsr(   rÿ   rF   r¹   r¸   ÚlistÚtupler6   r  r0   rj   r  r  r  r3  r`   rK   rH   Ú<module>rP     s  ðñõ
 #ã Û 	ß -Ý !Ý Ý *ß -Ó -å )Ý 5ß Sß 7ß IÝ  ß 'Ý Ý ÷÷ ÷ ñ õ 7Ý #àÐ7Ñ8Ð Ø˜FÑ#€Ø˜FÑ#€Ø˜WÑ%€ð ��s˜C�x‘Ñ!€	ð ÷1
ð 1
ó ð1
ôhh ô hôV('Ð";ô ('ôV_Ð%>ô _ôD
&ð ô
&Ð*ó 
&ó ñ
&rK   