ó
    Ð]jˆ=  ã                  óÒ  • 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
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rS SKJrJr  S SKrS	S
KJrJr  S	SKJrJrJr  S	SK J!r!  S	SK"J#r#   " S S\5      r$ " S S\5      r% " S S\5      r&\&" 5       r'S!S jr( S"         S#S jjr)\S$S j5       r* " S S\+5      r, " S S\+5      r- " S S\.5      r/S%S jr0S%S jr1 " S S \5      r2g)&é    )ÚannotationsN)ÚIterator)Ú	lru_cache)Ú	Formatter)ÚCodeType)ÚAnyÚLiteral)ÚNotRequiredÚ	TypedDicté   )ÚCallNodeFinderÚget_node_source_text)ÚNOOP_SCRUBBERÚBaseScrubberÚMessageValueCleaner)Úwarn_at_user_stacklevel)Úlog_internal_errorc                  ó*   • \ rS rSr% S\S'   S\S'   Srg)ÚLiteralChunké   zLiteral['lit']ÚtÚstrÚv© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r   ó    ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/logfire/_internal/formatter.pyr   r      s   ‡ ØÓØ
†Fr"   r   c                  ó4   • \ rS rSr% S\S'   S\S'   S\S'   Srg	)
ÚArgChunké   zLiteral['arg']r   r   r   zNotRequired[str]Úspecr   Nr   r   r"   r#   r%   r%      s   ‡ ØÓØ
ƒFØ
Ör"   r%   c                  óv   • \ rS rSrSS.         S
S jjr        SS jrSS.         SS jjrS	rg)ÚChunksFormatteré!   N)Úfstring_framec               ót   • U(       a  U R                  X#U5      nU(       a  U$ U R                  UUUS9u  pgXgU4$ )N)ÚkwargsÚscrubber)Ú_fstring_chunksÚ_vformat_chunks)ÚselfÚformat_stringr-   r.   r+   ÚresultÚchunksÚextra_attrss           r#   r4   ÚChunksFormatter.chunks"   sO   € ö Ø×)Ñ)¨&¸MÓJˆFÞØ�à"×2Ñ2ØØØð 3ð 
Ñˆð  MÐ1Ð1r"   c           	     ó   • UR                   nUR                  nS oSULof(       d¥  [        R                  " SU4SX545      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =pe[        U5      n	U	R                  n
U
c  g U[        R                  R                  R                  :X  al  [!        U
R"                  5      S:¼  a  U
R"                  S   nOvU
R$                   H!  nUR&                  S	:X  d  M  UR(                  n  OG   U	R+                  S
5        g U
R"                  (       a  U
R"                  S   nOU	R+                  S
5        g [-        U[.        R0                  5      (       d  g UR2                  n0 UR4                  EUEn/ nSn0 n[7        USS9nUR8                   GH!  n[-        U[.        R:                  5      (       a'  UR(                  nUR=                  USS.5        UU-  nMJ  [.        R>                  n[-        UU5      nU(       Gd@  SS[        R
                  " 5       ;   d  [        R                  " [,        5      (       a  [        R                  " [,        5      OS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[        [        R                  " U5      5      eS =nn[A        UU	RB                  5      u  nnnUSU-   S-   -  n[E        UXÞ5      nUUU'   [E        UU0 UESU0E5      nURG                  UU5      nUR=                  USS.5        GM$     URI                  URK                  5       5        UUU4$ )N)úis not)z%(py0)s is not %(py3)sÚframe)Úpy0Úpy3zassert %(py5)sÚpy5é   r   Úmsg_templatez:Couldn't identify the `msg_template` argument in the call.r   Ú F©Ú
check_keysÚlit©r   r   zYassert %(py6)s
{%(py6)s = %(py0)s(%(py1)s, %(py4)s
{%(py4)s = %(py2)s.FormattedValue
})
}Ú
isinstanceÚ
node_valueÚast)r:   Úpy1Úpy2Úpy4Úpy6Ú{Ú}ú@fvalueÚarg)&Úf_codeÚf_backÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚFormattingCallNodeFinderÚnodeÚlogfireÚLogfireÚlogÚ__code__ÚlenÚargsÚkeywordsrN   ÚvalueÚwarn_inspect_argumentsrD   rF   Ú	JoinedStrÚ	f_globalsÚf_localsr   ÚvaluesÚConstantÚappendÚFormattedValueÚcompile_formatted_valueÚsourceÚevalÚclean_valueÚupdater5   )r1   r-   r.   r9   Úcalled_codeÚ@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6Únode_finderÚ	call_nodeÚarg_nodeÚkeywordÚglobal_varsÚ
local_varsr3   Únew_templater5   Úvalue_cleanerrE   rb   Ú@py_assert3Ú@py_assert5Ú@py_format7rl   Ú
value_codeÚformatted_codeÚ	formatteds                               r#   r/   ÚChunksFormatter._fstring_chunks=   s&  € ð —l‘lˆØ—‘ˆà Ð ˜DÐ × × × Ò ˆu× × × × × Õ ˆu× × × Ñ ˆu× × Õ ˜D× × × × × × Ñ ä.¨uÓ5ˆØ×$Ñ$ˆ	ØÑØàœ'Ÿ/™/×-Ñ-×6Ñ6Ó6ô �9—>‘>Ó" aÓ'Ø$Ÿ>™>¨!Ñ,‘ð  )×1Ô1�GØ—{‘{ nÕ4Ø#*§=¡=˜Ùñ  2ð
  ×6Ñ6Ð7sÔtØØ�^�^Ø —~‘~ aÑ(‰Hð ×.Ñ.Ð/kÔlØä˜(¤C§M¡M×2Ñ2ð ð —o‘oˆØ1˜Ÿ™Ð1¨&Ð1ˆ
ð 13ˆð
 ˆà&(ˆÜ+¨HÀÑGˆØ"Ÿ/�/ˆJÜ˜*¤c§l¡l×3Ñ3à'×-Ñ-�Ø—‘ E°Ñ6Ô7Ø Ñ%’ô /2×.@Ñ.@ÐA”z *Ð.@ÓAÐA×A×A×A×A×A×AÑA”z×A×A×AÑA”z×A×A×A×A×AÖA *×A×A×AÑA *×A×A×A×A×AÖA¬c×A×A×AÑA¬c×A×AÕAÐ.@×A×AÓAÐA×A×A×A×A×AÓAô 6MÈZÐYd×YkÑYkÓ5lÑ2�˜
 Nð   f¡¨sÑ 2Ñ2�ô ˜Z¨ÓA�Ø&+�˜FÑ#ô ! °Ð>^ÀÐ>^ÈYÐX]Ñ>^Ó_�	Ø)×5Ñ5°f¸iÓH�	Ø—‘ I°EÑ:×;ñ7 *ð: 	×Ñ˜=×4Ñ4Ó6Ô7Ø�{ LÐ0Ð0r"   r=   )Úrecursion_depthc          
     óÆ  • US:  a  [        S5      e/ nSn[        USS9nU R                  U5       GH8  u  p‰p«U(       a  UR                  USS.5        U	c  M'  U	S	:X  a  [        S
5      eU	R	                  S5      (       a=  U(       a  US   S   S:X  a  US   S==   U	-  ss'   OUR                  U	SS.5        U	SS n	 U R                  X–U5      u  pÍUb   U R                  XË5      nU R                  U
=(       d    S	U[        US-
  S9u  nnS	R                  S U 5       5      n
 U R                  XÊ5      nUR!                  U	U5      nUSS.nU
(       a  U
US'   UR                  U5        GM;     XWR#                  5       4$ ! [         a    [        S5      e[         a\  n[        U5      [        U	5      :X  a  [        SU	 S35      Ue X)   n SnANþ! [         a  n[        SU SU S35      UeSnAff = fSnAf[         a  n[        SU	 SU 35      UeSnAff = f! [         a  n[        SU	 SU 35      UeSnAff = f! [         a  n[        SU	 SU 35      UeSnAff = f)z|Copied from `string.Formatter._vformat` https://github.com/python/cpython/blob/v3.11.4/Lib/string.py#L198-L247 then altered.r   z"Max format spec recursion exceededr   Fr@   rB   rC   Nr?   zDEmpty curly brackets `{}` are not allowed. A field name is required.Ú=éÿÿÿÿr   r   z$Numeric field names are not allowed.zThe field {z} is not defined.zThe fields z and z are not defined.zError getting field {z}: zError converting field {r   )r.   r„   c              3  ó*   #   • U  H	  oS    v •  M     g7f©r   Nr   ©Ú.0Úchunks     r#   Ú	<genexpr>Ú2ChunksFormatter._vformat_chunks.<locals>.<genexpr>Û   s   é € Ð%QÒ>P°U¨C¦jÒ>Pùó   ‚zError formatting field {rN   r'   )ÚKnownFormattingErrorr   Úparseri   ÚendswithÚ	get_fieldÚ
IndexErrorÚKeyErrorr   ÚreprÚ	ExceptionÚconvert_fieldr0   r   ÚjoinÚformat_fieldrn   r5   )r1   r2   r-   r.   r„   r3   r`   r|   Úliteral_textÚ
field_nameÚformat_specÚ
conversionÚobjÚ	_arg_usedÚexc1Úexc2ÚexcÚformat_spec_chunksÚ_rb   Úds                        r#   r0   ÚChunksFormatter._vformat_chunks˜   sÏ  € ð ˜QÓÜ&Ð'KÓLÐLØ02ˆàˆÜ+¨HÀÑGˆØAEÇÁÈM×AZÑ=ˆL kæØ—‘ L°uÑ=Ô>ð Ó%ð  Ó#Ü.Ð/uÓvÐvð ×&Ñ& s×+Ñ+Þ &¨¡*¨S¡/°UÓ":Ø˜r™
 3›¨:Ñ5œàŸ™¨J¸UÑ&CÔDØ!+¨C¨R �JðhØ%)§^¡^°JÀfÓ%M‘N�Cð& Ñ)ðoØ"×0Ñ0°ÓA˜ð
 )-×(<Ñ(<Ø×% 2 v¼ÐWfÐijÑWjð )=ð )Ñ%Ð" Að !Ÿg™gÑ%QÑ>PÓ%QÓQ�ðkØ ×-Ñ-¨cÓ?�Eð &×1Ñ1°*¸eÓD�Ø$)°Ñ6�ÞØ +�A�f‘IØ—‘˜a× ñ} B[ð@ ×0Ñ0Ó2Ð2Ð2øôQ "ó WÜ.Ð/UÓVÐVÜó oÜ˜4“y¤D¨Ó$4Ó4Ü2°\À*ÀÐM_Ð3`ÓaÐgkÐkðoð %Ñ0�øÜ#ó oä2°[ÀÀÀeÈDÈ6ÐQbÐ3cÓdÐjnÐnûðoþô !ó hÜ.Ð1GÈ
À|ÐSWÐX[ÐW\Ð/]Ó^ÐdgÐgûðhûô %ó oÜ2Ð5NÈzÈlÐZ^Ð_bÐ^cÐ3dÓeÐknÐnûðoûô !ó kÜ.Ð1JÈ:È,ÐVZÐ[^ÐZ_Ð/`ÓaÐgjÐjûðkúsr   Â=E?ÃHÄ$H?Å?HÆ(G4ÇGÇ
G1ÇG,Ç,G1Ç1G4Ç4HÈHÈHÈ
H<È%H7È7H<È?
I É	IÉI r   )
r2   r   r-   údict[str, Any]r.   r   r+   útypes.FrameType | NoneÚreturnz9tuple[list[LiteralChunk | ArgChunk], dict[str, Any], str])r-   r¨   r.   r   r9   ztypes.FrameTyperª   z@tuple[list[LiteralChunk | ArgChunk], dict[str, Any], str] | None)
r2   r   r-   r¨   r.   r   r„   Úintrª   z4tuple[list[LiteralChunk | ArgChunk], dict[str, Any]])r   r   r   r   r4   r/   r0   r!   r   r"   r#   r)   r)   !   sµ   † ð 15ñ2àð2ð ð2ð
 ð2ð .ð2ð 
Cõ2ð6Y1àðY1ð ðY1ð ð	Y1ð
 
JôY1ðB  !ñO3àðO3ð ðO3ð
 ðO3ð ðO3ð 
>÷O3ð O3r"   r)   c                ó&   • [        U UU5      u  p4nU$ ©N)Úlogfire_format_with_magic)r2   r-   r.   r3   Ú_extra_attrsÚ_new_templates         r#   Úlogfire_formatr±   í   s!   € Ü*CØØØó+Ñ'€F˜-ð
 €Mr"   c                óx  •  [         R                  U UUUS9u  pEnSR                  S U 5       5      XV4$ ! [         a:  n[	        [        U5      =(       d    [        UR                  5      5         S nAOCS nAf[         a  n[        [        U5      5         S nAOS nAf[         a    [        5          Of = fU 0 U 4$ )N)r.   r+   r?   c              3  ó*   #   • U  H	  oS    v •  M     g7fr‰   r   rŠ   s     r#   r�   Ú,logfire_format_with_magic.<locals>.<genexpr>  s   é € Ð6ªv e˜S–zªvùr�   )Úchunks_formatterr4   r™   r�   Úwarn_formattingr   Ú	__cause__ÚFStringAwaitErrorÚwarn_fstring_awaitr—   r   )r2   r-   r.   r+   r4   r5   r{   Úes           r#   r®   r®   ö   s®   € ðÜ,<×,CÑ,CØØØØ'ð	 -Dð -
Ñ)ˆ˜\ð �w‰wÑ6©vÓ6Ó6¸ÐQÐQøÜó 4Üœ˜A›×2¤# a§k¡kÓ"2×3Ñ3ûÜó #Üœ3˜q›6×"Ñ"ûÜó ô 	Öðúð ˜"˜mÐ+Ð+s&   ‚25 µ
B4¿0A4Á4B4ÂBÂB4Â3B4c                ó&  • [        U R                  U5      n[        R                  " U R                  5       H-  n[	        U[        R
                  5      (       d  M$  [        U5      e   [        USS5      n[        R                  " [        R                  " [        R                  " [        R                  " S[        R                  " 5       S9U R                  U R                  S9/S95      n[        R                  " U5        [        USS5      nX$U4$ )zýReturns three things that can be expensive to compute.

1. Source code corresponding to the node value (excluding the format spec).
2. A compiled code object which can be evaluated to calculate the value.
3. Another code object which formats the value.
z	<fvalue1>rm   rM   )ÚidÚctx)rb   rž   r�   )rg   z	<fvalue2>)r   rb   rF   ÚwalkrD   ÚAwaitr¸   ÚcompileÚ
Expressionrd   rj   ÚNameÚLoadrž   r�   Úfix_missing_locations)rZ   Ú	ex_sourcerl   Úsub_noder€   Úexprr�   s          r#   rk   rk     sÕ   € ô " $§*¡*¨iÓ8€Fô —H’H˜TŸZ™ZÖ(ˆÜ�h¤§	¡	×*Ó*Ü# FÓ+Ð+ñ )ô ˜ ¨fÓ5€JÜ�>Š>Ü�Šô ×"Ò"ÜŸ(š( i´S·X²X³ZÑ@Ø#Ÿ™Ø $× 0Ñ 0ñðñ	
ó€Dô$ ×Ò˜dÔ#Ü˜T ;°Ó7€NØ˜~Ð-Ð-r"   c                  ó   • \ rS rSrSrSrg)r�   i=  a"  An error raised when there's something wrong with a format string or the field values.

In other words this should correspond to errors that would be raised when using `str.format`,
and generally indicate a user error, most likely that they weren't trying to pass a template string at all.
r   N©r   r   r   r   Ú__doc__r!   r   r"   r#   r�   r�   =  ó   † ôr"   r�   c                  ó   • \ rS rSrSrSrg)r¸   iE  zÌAn error raised when an await expression is found in an f-string.

This is a specific case that can't be handled by f-string introspection and requires
pre-evaluating the await expression before logging.
r   NrÉ   r   r"   r#   r¸   r¸   E  rË   r"   r¸   c                  ó   • \ rS rSrSrg)ÚFormattingFailedWarningiM  r   N)r   r   r   r   r!   r   r"   r#   rÎ   rÎ   M  s   † Úr"   rÎ   c                ó&   • [        SU  3[        S9  g )NaO  
    Ensure you are either:
      (1) passing an f-string directly, with inspect_arguments enabled and working, or
      (2) passing a literal `str.format`-style template, not a preformatted string.
    See https://logfire.pydantic.dev/docs/guides/onboarding-checklist/add-manual-tracing/#messages-and-span-names.
    The problem was: ©Úcategory©r   rÎ   ©Úmsgs    r#   r¶   r¶   Q  s    € Üð ð
 !$˜uð	&ô )ór"   c                ó&   • [        SU  3[        S9  g )Na  
    Cannot evaluate await expression in f-string. Pre-evaluate the expression before logging.
    For example, change:
      logfire.info(f"{await get_value()}")
    To:
      value = await get_value()
      logfire.info(f"{value}")
    The problematic f-string value was: rÐ   rÒ   rÓ   s    r#   r¹   r¹   ]  s    € Üð3ð 47°%ð	9ô )ó
r"   c                  ó2   • \ rS rSrSrSS jrS	S jrS rSrg)
rY   ik  zRFinds the call node corresponding to a call like `logfire.span` or `logfire.info`.c              #  ó¼   #   • U R                   R                   H<  n[        U[        R                  5      (       a  UR
                   S h  v•N   M8  Uv •  M>     g  N7fr­   )ÚexÚ
statementsrD   rF   ÚWithÚitems)r1   Ú	statements     r#   Úheuristic_main_nodesÚ-FormattingCallNodeFinder.heuristic_main_nodesn  sA   é € ØŸ™×+Ô+ˆIÜ˜)¤S§X¡X×.Ñ.à$Ÿ?™?×*Ò*à”ò ,ñ +ùs   ‚AAÁ
AÁAc                óR   • [        UR                  =(       d    UR                  5      $ r­   )Úboolr`   ra   )r1   rZ   s     r#   Úheuristic_call_node_filterÚ3FormattingCallNodeFinder.heuristic_call_node_filterv  s   € ä�D—I‘I×. §¡Ó/Ð/r"   c                ó   • g)NzgFalling back to normal message formatting which may result in loss of information if using an f-string.r   )r1   s    r#   Úwarn_inspect_arguments_middleÚ6FormattingCallNodeFinder.warn_inspect_arguments_middlez  s   € Øxr"   r   N)rª   zIterator[ast.AST])rZ   zast.Callrª   rà   )	r   r   r   r   rÊ   rÝ   rá   rä   r!   r   r"   r#   rY   rY   k  s   † Ù\ô ô0õyr"   rY   )r2   r   r-   r¨   r.   r   rª   r   r­   )
r2   r   r-   r¨   r.   r   r+   r©   rª   ztuple[str, dict[str, Any], str])rZ   zast.FormattedValuerÅ   zexecuting.Sourcerª   ztuple[str, CodeType, CodeType])rÔ   r   )3Ú
__future__r   ÚbuiltinsrS   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterQ   rF   ÚtypesÚcollections.abcr   Ú	functoolsr   Ústringr   r   Útypingr   r	   Ú	executingÚtyping_extensionsr
   r   r[   Ú	ast_utilsr   r   Ú	scrubbingr   r   r   Ú
stack_infor   Úutilsr   r   r%   r)   rµ   r±   r®   rk   r—   r�   r¸   ÚUserWarningrÎ   r¶   r¹   rY   r   r"   r#   Ú<module>r÷      sú   ðÝ "ç  „ ƒ
Û Ý $Ý Ý Ý ß ã ß 4ã ç ;ß GÑ GÝ /Ý %ô�9ô ô
ˆyô ôF3�iô F3ñR #Ó$Ð ôð -1ð	,Øð,àð,ð ð,ð *ð	,ð
 %õ,ð@ ó#.ó ð#.ôL˜9ô ô˜	ô ô	˜kô 	ô	ôôy˜~õ yr"   