ó
    öÞ jZ	  ã                  ó¬   • S SK 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  SS	 jr SS\R                  S
.       SS jjjrSS jrg)é    )ÚannotationsN)ÚCallable)ÚStringIO)Ú	FrameTypeé   )Ú_ASYNC_CALLING_STACK)ÚExcInfoc                ó¼   • [        5       n[        R                  " U S   U S   U S   SU5        UR                  5       nUR	                  5         USS S:X  a  USS nU$ )zT
Prettyprint an `exc_info` tuple.

Shamelessly stolen from stdlib's logging module.
r   r   é   NéÿÿÿÿÚ
)r   Ú	tracebackÚprint_exceptionÚgetvalueÚclose)Úexc_infoÚsioÚss      ÚK/var/www/html/gaurav/venv/lib/python3.13/site-packages/structlog/_frames.pyÚ_format_exceptionr      s^   € ô ‹*€Cä×Ò˜h q™k¨8°A©;¸À¹ÀTÈ3ÔOØ�‰‹€AØ‡I�I„KØˆˆ€v�ƒ~ØˆcˆrˆFˆà€Hó    )Ú
stacklevelÚ	_getframec               ó>  • S/[        U =(       d    S5      Q7n[        R                  " U" 5       5      nUR                  R                  S5      =(       d    SnUR	                  U5      (       aX  UR
                  c  SnOHUR
                  nUR                  R                  S5      =(       d    SnUR	                  U5      (       a  MX  UbS  [        U5       HD  nUR
                  c    XE4$ UR
                  nUR                  R                  S5      =(       d    SnMF     XE4$ )a˜  
Remove all intra-structlog calls and return the relevant app frame.

Args:
    additional_ignores:
        Additional names with which the first frame must not start.

    stacklevel:
        After getting out of structlog, skip this many frames.

    _getframe:
        Callable to find current frame. Only for testing to avoid
        monkeypatching of sys._getframe.

Returns:
    tuple of (frame, name)
Ú	structlog© Ú__name__Ú?)Útupler   ÚgetÚ	f_globalsÚ
startswithÚf_backÚrange)Úadditional_ignoresr   r   ÚignoresÚfÚnameÚ_s          r   Ú_find_first_app_frame_and_namer*   $   sï   € ð. Ð=œUÐ#5×#;¸Ó<Ñ=€GÜ× Ò ¡£Ó-€AØ�;‰;�?‰?˜:Ó&×-¨#€Dà
�/‰/˜'×
"Ñ
"Ø�8‰8ÑØˆDØØ�H‰HˆØ�{‰{�‰˜zÓ*×1¨cˆð �/‰/˜'×
"Ó
"ð ÑÜ�zÖ"ˆAØ�x‰xÑØð ˆ7€Nð —‘ˆAØ—;‘;—?‘? :Ó.×5°#ŠDñ	 #ð ˆ7€Nr   c                óÀ   • [        5       nUR                  S5        [        R                  " XS9  UR	                  5       nUS   S:X  a  USS nUR                  5         U$ )z7
Pretty-print the stack of *frame* like logging would.
zStack (most recent call last):
)Úfiler   r   N)r   Úwriter   Úprint_stackr   r   )Úframer   Úsinfos      r   Ú_format_stackr1   P   sV   € ô ‹*€Cà‡I�IÐ0Ô1Ü×Ò˜%Ò*Ø�L‰L‹N€EØˆR�y�DÓØ�c�r�
ˆØ‡I�I„Kà€Lr   )r   r	   ÚreturnÚstr)N)r%   zlist[str] | Noner   z
int | Noner   zCallable[[], FrameType]r2   ztuple[FrameType, str])r/   r   r2   r3   )Ú
__future__r   Úsysr   Úcollections.abcr   Úior   Útypesr   Úcontextvarsr   Útypingr	   r   r   r*   r1   r   r   r   Ú<module>r;      sk   ðõ #ã 
Û å $Ý Ý å -Ý ôð$ ,0ð)ð "Ø),¯©ñ	)Ø(ð)ð ð)ð 'ð	)ð
 ö)õXr   