
    i
2                     J   d dl Z d dlZd dlmZ dZdZ e j        d          Z G d de          Z	 G d d	e
          Z G d
 de
          Z G d d          Z G d d          Z G d d          Zd dlZd dlmZ d Zd Zd Zd Zd Zd ZdZej        dk    Zd Zd ZdS )    N)CodeTypez2.0.0)	TracebackTracebackParseErrorFrameCodezO^\s*File "(?P<co_filename>.+)", line (?P<tb_lineno>\d+)(, in (?P<co_name>.+))?$c                       e Zd ZdZd ZdS )	_AttrDict c                 P    	 | |         S # t           $ r t          |          d w xY wN)KeyErrorAttributeError)selfnames     8/usr/local/lib/python3.11/dist-packages/gevent/_tblib.py__getattr__z_AttrDict.__getattr__)   s<    	1: 	1 	1 	1 &&D0	1s   
 %N)__name__
__module____qualname__	__slots__r   r
       r   r	   r	   &   s(        I1 1 1 1 1r   r	   c                       e Zd ZdS )__traceback_makerNr   r   r   r
   r   r   r   r   1           Dr   r   c                       e Zd ZdS )r   Nr   r
   r   r   r   r   5   r   r   r   c                       e Zd ZdZdZd ZdS )r   zw
    Class that replicates just enough of the builtin Code object to enable serialization and traceback rendering.
    Nc                     |j         | _         |j        | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d S )Nr   r
   @   )	co_filenameco_nameco_argcountco_kwonlyargcountco_varnames
co_nlocalsco_stacksizeco_flagsco_firstlineno)r   codes     r   __init__zCode.__init__@   sR    +|!"r   )r   r   r   __doc__co_coder*   r
   r   r   r   r   9   s4          G	  	  	  	  	 r   r   c                       e Zd ZdZd Zd ZdS )r   zx
    Class that replicates just enough of the builtin Frame object to enable serialization and traceback rendering.
    c                     i | _         d |j                                        D             | _        t          |j                  | _        |j        | _        d S )Nc                 "    i | ]\  }}|d v 	||S )__file__r   r
   ).0kvs      r   
<dictcomp>z"Frame.__init__.<locals>.<dictcomp>S   s)    ddd41aaKcFcFc!QFcFcFcr   )f_locals	f_globalsitemsr   f_codef_lineno)r   frames     r   r*   zFrame.__init__Q   sJ    dd5?+@+@+B+Bddd5<((r   c                     dS )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   clearzFrame.clearW   s      r   N)r   r   r   r+   r*   r=   r
   r   r   r   r   L   s<         ' ' '    r   r   c                   ^    e Zd ZdZdZd Zd ZeZd ZeZ	e
d             Ze
d	d            ZdS )
r   z5
    Class that wraps builtin Traceback objects.
    Nc                 ^   t          |j                  | _        t          |j                  | _        |j        }| }t          |           }|`t                              |          }t          |j                  |_        t          |j                  |_        ||_        |}|j        }|^d S d S r   )r   tb_frameint	tb_linenotb_nexttypeobject__new__)r   tbprev_tracebackcls	tracebacks        r   r*   zTraceback.__init__g   s    bk**R\** Z4jjns++I!&r{!3!3I"%bl"3"3I%.N"&NB nnnnnr   c                    | }d}d}|r:|j         j        }t          d|j        dz
  z  dz   |j         j        j        d          }t          |d          r%|                    d|j        |j        dd	          }nYt          d|j	        |j
        |j        |j        |j        |j        |j        |j        |j        |j        |j        |j        dd          }	 t'          |t)          |j         j                  i            n># t,          $ r1 t/          j                    d
         j        }||}|||_        |}~Y nw xY w|j        }|:	 |~~S # ~~w xY w)zm
        Convert to a builtin Traceback object that is usable for raising or rendering a stacktrace.
        N
   zraise __traceback_makerexecreplacer   r
   )r"   r    r!   co_freevarsco_cellvars   )r@   r9   compilerB   r    hasattrrO   r!   r   r#   r%   r&   r'   r,   	co_constsco_namesr$   r(   	co_lnotabrN   dictr7   	Exceptionsysexc_inforC   )r   currenttop_tbrG   r9   r)   next_tbs          r   as_tracebackzTraceback.as_tracebackx   s     %	&%,F47#4q#89<UUW^WgWnWz  }C  D  DDtY'' ||v?Q[a[iwy  HJ|  K  K*O%MLNM$&N'N &	T4 0 :;;R@@@@   ,..+3>$F>!(BJGG oGK  %	&L	 FFFFs   (C< <8D76D7E	 	Ec                     | j         d}n| j                                         }| j        j        j        | j        j        j        d}| j        j        || j        j        d}|| j        |d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!   r7   r9   r:   r@   rB   rC   )	rC   to_dictr@   r9   r    r!   r7   r:   rB   )r   rC   r)   r;   s       r   as_dictzTraceback.as_dict   s    
 <GGl**,,G  =/;}+3
 

 0.
 
 
 
 	
r   c                 R   |d         r|                      |d                   }nd}t          |d         d         d         |d         d         d                   }t          |d         d         ||d         d	         
          }t          ||d         |          } | |          S )zj
        Creates an instance from a dictionary with the same structure as ``.as_dict()`` returns.
        rC   Nr@   r9   r    r!   ra   r7   r:   rb   rB   rc   )	from_dictr	   )rI   dctrC   r)   r;   rG   s         r   rg   zTraceback.from_dict   s    
 y> 	mmC	N33GGGJ1-@
OH-i8
 
 
 *ok2_Z0
 
 

 +&
 
 

 s2wwr   Tc                 H   g }|}|                                 D ]}|                                }|r	|dk    rd}!t                              |          }|r(|                    |                                           e|                    d          r{|r n|rwd}t          |          D ]Z}t          |t          |t          |d         d          t          |          t          |d                   	          |
          }[ | |          S t          d|z            )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    ?r0   rB   rb   )r@   rC   z Could not find any frames in %r.)
splitlinesrstripFRAME_REmatchappend	groupdict
startswithreversedr	   rA   r   )	rI   stringstrictframesheaderlineframe_matchpreviousr;   s	            r   from_stringzTraceback.from_string   sm    %%'' 	 	D;;==D ???"F"....K k33556666&&    	SH!&))  $&"+%*=%9%(# # #  )//!$U;%7!8!8   %   3x== %&H6&QRRRr   )T)r   r   r   r+   rC   r*   r_   to_tracebackre   rd   classmethodrg   rz   r
   r   r   r   r   `   s          G  "1 1 1f  L
 
 
2 G  [2 (S (S (S [(S (S (Sr   r   )TracebackTypec                     t                               t                    }| |_        ||_        ||_        |                                S r   )rE   rF   r   r@   rB   rC   r_   )r@   rB   rC   rets       r   unpickle_tracebackr     s:    
..
#
#CCLCMCKr   c                 z    t           t          | j                  | j        | j        ot          | j                  ffS r   )r   r   r@   rB   rC   r   )rG   s    r   pickle_tracebackr   %  s4    bk 2 2BL"*BfQZ[][eQfQfgggr   c                 ,     | | }||_         ||_        |S r   )	__cause____traceback__)funcargscauserG   insts        r   unpickle_exceptionr   )  s!    4;DDNDKr   c                 "   |                      d          }t          |t                    rt          d          t          |t                    sJ t          |          dk    sJ t          |d d         | j        | j        fz   f|dd          z   S )N   z&str __reduce__ output is not supportedrR   )	__reduce_ex__
isinstancestr	TypeErrortuplelenr   r   r   )objrvs     r   pickle_exceptionr   0  s     
		1		B"c B@AAAb%     r77a<<<<2A2#-9J)K KLrRSRTRTvUUr   c              #      K   | g}|r@|                                 }|V  |t          |                                          z  }|>d S d S r   )poplist__subclasses__)rI   to_visitthiss      r   _get_subclassesr   A  sg      uH
 0||~~


D,,..///  0 0 0 0 0r   c                     dd l }|                    t          t                     t          j        j        dk     rIt          |           dk    r4| d         }t          |t                    rt          |t                    r|S d S | s4t          t                    D ]}|                    |t                     d S | D ]}t          |t                    r4|1|                    t          |          t                     |j        }|1Kt          |t                    rHt          |t                    r3|                    |t                     t          |           dk    r|c S t          dt          |          z            d S )Nr   r   rM   z9Expected subclasses or instances of BaseException, got %s)copyregpickler}   r   rZ   version_infomajorr   r   rD   
issubclassBaseExceptionr   r   r   r   )exc_classes_or_instancesr   excexception_clss       r   installr   J  s   NNNNN="2333
!!'((A--*1-C#t$$ C)G)G 
# ,];; 	< 	<MNN=*:;;;;' g gc=)) 
	g/tCyy*:;;;m / T"" 	gz#}'E'E 	gNN3 0111+,,11


 2 W[_`c[d[defffg gr   F)r      r   alpha   c                     ddl m} | t          r |d           S t          |           }  ||                                           S )Nr   )dumps)r   r   _broken_tblib_pickler   rd   )rG   r   s     r   dump_tracebackr   q  sO    	z)zuT{{	2B5r   c                     ddl m}  ||           }|d S t                              |          }|                                S )Nr   )loads)r   r   r   rg   r_   )sr   re   rG   s       r   load_tracebackr   y  sN    eAhhGt			W	%	%B??r   )rerZ   typesr   __version____all__rS   rm   rX   r	   rY   r   r   r   r   r   r}   r   r   r   r   r   r   
_installedr   r   r   r   r
   r   r   <module>r      s  8 
			 



      
=2:hii1 1 1 1 1 1 1 1	 	 	 	 		 	 	 		 	 	 	 	) 	 	 	               &       (kS kS kS kS kS kS kS kSb 


        h h h  V V V"0 0 0g g g> 
 '+AA       r   