
    ph                         S SK r S SKrSrSr\ R                  " S5      r " S S\5      r " S S\5      r	 " S	 S
\5      r
 " S S5      r " S S5      r " S S5      rS rg)    Nz3.2.0)CodeFrame	TracebackTracebackParseErrorzO^\s*File "(?P<co_filename>.+)", line (?P<tb_lineno>\d+)(, in (?P<co_name>.+))?$c                       \ rS rSrSrS rSrg)	_AttrDict
    c                 @     X   $ ! [          a    [        U5      S ef = fN)KeyErrorAttributeError)selfnames     H/home/james-whalen/.local/lib/python3.13/site-packages/tblib/__init__.py__getattr___AttrDict.__getattr__   s+    	1: 	1 &D0	1s    N)__name__
__module____qualname____firstlineno__	__slots__r   __static_attributes__r
       r   r   r   
   s    I1r   r   c                       \ rS rSrSrg)__traceback_maker   r
   Nr   r   r   r   r   r
   r   r   r   r          r   r   c                       \ rS rSrSrg)r      r
   Nr   r
   r   r   r   r      r   r   r   c                   "    \ rS rSrSrSrS rSrg)r      zo
Class that replicates just enough of the builtin Code object to enable serialization and traceback rendering.
Nc                     UR                   U l         UR                  U l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        g )Nr   r
   @   )	co_filenameco_nameco_argcountco_kwonlyargcountco_varnames
co_nlocalsco_stacksizeco_flagsco_firstlineno)r   codes     r   __init__Code.__init__$   sQ    ++||!"r   )	r(   r&   r.   r-   r)   r'   r+   r,   r*   )r   r   r   r   __doc__co_coder0   r   r
   r   r   r   r      s     G	 r   r   c                   ,    \ rS rSrSrSS.S jrS rSrg)r   0   a   
Class that replicates just enough of the builtin Frame object to enable serialization and traceback rendering.

Args:

    get_locals (callable): A function that take a frame argument and returns a dict.

        See :class:`Traceback` class for example.
N
get_localsc                   Uc  0 OU" U5      U l         UR                  R                  5        VVs0 s H  u  p4US;   d  M  X4_M     snnU l        [        UR                  5      U l        UR
                  U l        g s  snnf )N__file__r   )f_locals	f_globalsitemsr   f_codef_lineno)r   framer7   kvs        r   r0   Frame.__init__;   si    (0j6G+0??+@+@+Bd+B41aKcFc$!$+Bd5<<( es   A; A;c                     g)z
For compatibility with PyPy 3.5;
clear() was added to frame in Python 3.4
and is called by traceback.clear_frames(), which
in turn is called by unittest.TestCase.assertRaises
Nr
   )r   s    r   clearFrame.clearA   s    r   )r>   r<   r?   r;   )r   r   r   r   r2   r0   rE   r   r
   r   r   r   r   0   s     -1 'r   r   c                   b    \ rS rSrSrSrSS.S jrS r\rS r	\	r
\S 5       r\SS	 j5       rS
rg)r   J   a  
Class that wraps builtin Traceback objects.

Args:
    get_locals (callable): A function that take a frame argument and returns a dict.

        Ideally you will only return exactly what you need, and only with simple types that can be json serializable.

        Example:

        .. code:: python

            def get_locals(frame):
                if frame.f_locals.get("__tracebackhide__"):
                    return {"__tracebackhide__": True}
                else:
                    return {}
Nr6   c                f   [        UR                  US9U l        [        UR                  5      U l        UR                  nU n[        U 5      nUbb  [        R                  U5      n[        UR                  US9Ul        [        UR                  5      Ul        XSl        UnUR                  nUb  Ma  g g )Nr6   )r   tb_frameint	tb_linenotb_nexttypeobject__new__)r   tbr7   prev_tracebackcls	tracebacks         r   r0   Traceback.__init__`   s    bkkjAR\\* ZZ4jns+I!&r{{z!JI"%bll"3I%."&NB nr   c           	         U nSnSn[        SSS5      nU(       a  UR                  R                  nUR                  UR                  SUR
                  UR                  SSS9n [        U[        UR                  R                  5      [        UR                  R                  5      5        UR                  nU(       a  M   UAA$ ! [         a6    [        R                  " 5       S   R                  nUc  UnUb  Xsl        UnA NYf = f! AAf = f)	z]
Convert to a builtin Traceback object that is usable for raising or rendering a stacktrace.
Nzraise __traceback_makerz<string>execr   r
   )r.   r(   r&   r'   co_freevarsco_cellvars   )compilerJ   r>   replacerL   r&   r'   rW   dictr<   r;   	Exceptionsysexc_inforM   )r   currenttop_tbrQ   stubr>   r/   next_tbs           r   as_tracebackTraceback.as_tracebackp   s    %

 %%,,F<<&00"..   D	T4 0 0 : :;T'BRBRB[B[=\] ooG/ g0	  ,,.+33>$F>!(J s   $AC D =DDDc                 ~   U R                   c  SnOU R                   R                  5       nU R                  R                  R                  U R                  R                  R
                  S.nU R                  R                  U R                  R                  UU R                  R                  S.nUU R                  US.$ )z
Converts to a dictionary representation. You can serialize the result to JSON as it only has
builtin objects like dicts, lists, ints or strings.
Nr&   r'   r<   r;   r>   r?   rJ   rL   rM   )
rM   as_dictrJ   r>   r&   r'   r<   r;   r?   rL   )r   rM   r/   r@   s       r   rk   Traceback.as_dict   s    
 <<Gll**,G  ==//;;}}++33

 00....	
 
 	
r   c                    US   (       a  U R                  US   5      nOSn[        US   S   S   US   S   S   S9n[        US   S   US   R                  S	0 5      UUS   S
   S9n[        UUS   US9nU " U[        S9$ )zZ
Creates an instance from a dictionary with the same structure as ``.as_dict()`` returns.
rM   NrJ   r>   r&   r'   rh   r<   r;   r?   ri   rL   rj   r6   )	from_dictr   getget_all_locals)rS   dctrM   r/   r@   rQ   s         r   rn   Traceback.from_dict   s    
 y>mmC	N3GGJ1-@
OH-i8
 *ok2_((R8_Z0	
 +&

 2.11r   c                    / nUnUR                  5        H  nUR                  5       nU(       a
  US:X  a  SnM$  [        R                  U5      nU(       a!  UR	                  UR                  5       5        Ma  UR                  S5      (       a  My  U(       d  M    O   U(       aR  Sn[        U5       H9  n[        U[        U[        US   SS90 [        U5      [        US   5      S	9US
9nM;     U " U5      $ [        SU< S35      e)z
Creates an instance by parsing a stacktrace. Strict means that parsing stops when lines are not indented by at least two spaces
anymore.
z"Traceback (most recent call last):Fz  Nr&   ?r9   rL   ri   )rJ   rM   zCould not find any frames in .)
splitlinesrstripFRAME_REmatchappend	groupdict
startswithreversedr   rK   r   )	rS   stringstrictframesheaderlineframe_matchpreviousr@   s	            r   from_stringTraceback.from_string   s    %%'D;;=D??"F"...Kk3356&& ( H!&)$&"+%*=%9%(# "$(/!$U;%7!8	 % * x= %(EfZq&QRRr   )rJ   rL   )T)r   r   r   r   r2   rM   r0   re   to_tracebackrk   to_dictclassmethodrn   r   r   r
   r   r   r   r   J   sW    & G)-  (T  L
4 G2 24 )S )Sr   r   c                 ,    [        U R                  5      $ r   )r]   r;   )r@   s    r   rp   rp      s    r   )rer_   __version____all__r[   rx   r]   r   r^   r   r   r   r   r   rp   r
   r   r   <module>r      sp    	 

=::hi1 1		 		) 	   & 4sS sSl r   