o
    0׾g/                     @   s   d dl Z d dlZd dlmZ dZdZe dZG dd deZ	G dd	 d	e
ZG d
d de
ZG dd dZG dd dZG dd dZd dlZd dlmZ dd Zdd Zdd Zdd Zdd Zdd ZdZd d! Zd"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                   @   s   e Zd ZdZdd ZdS )	_AttrDict c                 C   s$   z| | W S  t y   t|d w N)KeyErrorAttributeError)selfnamer   r   W/var/www/html/backend_erp/backend_erp_env/lib/python3.10/site-packages/gevent/_tblib.py__getattr__)   s
   

z_AttrDict.__getattr__N)__name__
__module____qualname__	__slots__r   r   r   r   r   r   &   s    r   c                   @      e Zd ZdS )__traceback_makerNr   r   r   r   r   r   r   r   1       r   c                   @   r   )r   Nr   r   r   r   r   r   5   r   r   c                   @   s   e Zd ZdZdZdd ZdS )r   zw
    Class that replicates just enough of the builtin Code object to enable serialization and traceback rendering.
    Nc                 C   s>   |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   coder   r   r   __init__@   s   
zCode.__init__)r   r   r   __doc__co_coder#   r   r   r   r   r   9   s    r   c                   @   s    e Zd ZdZdd Zdd ZdS )r   zx
    Class that replicates just enough of the builtin Frame object to enable serialization and traceback rendering.
    c                 C   s4   i | _ dd |j D | _t|j| _|j| _d S )Nc                 S   s   i | ]\}}|d v r||qS )__file__r   r   ).0kvr   r   r   
<dictcomp>S   s    z"Frame.__init__.<locals>.<dictcomp>)f_locals	f_globalsitemsr   f_codef_lineno)r   framer   r   r   r#   Q   s   zFrame.__init__c                 C   s   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   r   r   r   clearW   s    zFrame.clearN)r   r   r   r$   r#   r2   r   r   r   r   r   L   s    r   c                   @   sN   e Zd ZdZdZdd Zdd ZeZdd ZeZ	e
d	d
 Ze
dddZdS )r   z5
    Class that wraps builtin Traceback objects.
    Nc                 C   st   t |j| _t|j| _|j}| }t| }|d ur8t|}t |j|_t|j|_||_|}|j}|d usd S d S r	   )r   tb_frameint	tb_linenotb_nexttypeobject__new__)r   tbprev_tracebackcls	tracebackr   r   r   r#   g   s   
zTraceback.__init__c                 C   s  | }d}d}|r~|j j}td|jd  d |j jjd}t|dr.|jd|j|jddd	}ntd|j	|j
|j|j|j|j|j|j|j|j|j|jdd}zt|t|j ji  W n  tyx   t d
 j}|du rl|}|durs||_|}~Y nw |j}|sz|W ~~S ~~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   )r3   r/   compiler5   r   hasattrrA   r   r   r   r   r   r    r%   	co_constsco_namesr   r!   	co_lnotabr@   dictr-   	Exceptionsysexc_infor6   )r   currenttop_tbr:   r/   r"   next_tbr   r   r   as_tracebackx   sX    
	&zTraceback.as_tracebackc                 C   sR   | j du r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   r-   r/   r0   r3   r5   r6   )	r6   to_dictr3   r/   r   r   r-   r0   r5   )r   r6   r"   r1   r   r   r   as_dict   s   

zTraceback.as_dictc                 C   sx   |d r|  |d }nd}t|d d d |d d d d}t|d d ||d d	 d
}t||d |d}| |S )zj
        Creates an instance from a dictionary with the same structure as ``.as_dict()`` returns.
        r6   Nr3   r/   r   r   rR   r-   r0   rS   r5   rT   )	from_dictr   )r<   dctr6   r"   r1   r:   r   r   r   rW      s$   

zTraceback.from_dictTc           	   
   C   s   g }|}|  D ](}| }|r|dkrd}qt|}|r&||  q|dr,q|r0 nq|rYd}t|D ]}t|t|t|d ddt|t	|d d	|d
}q9| |S t
d| )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   ?r&   r5   rS   )r3   r6   z Could not find any frames in %r.)
splitlinesrstripFRAME_REmatchappend	groupdict
startswithreversedr   r4   r   )	r<   stringstrictframesheaderlineframe_matchpreviousr1   r   r   r   from_string   sD   


	zTraceback.from_string)T)r   r   r   r$   r6   r#   rQ   to_tracebackrV   rU   classmethodrW   ri   r   r   r   r   r   `   s    3
r   )TracebackTypec                 C   s$   t t}| |_||_||_| S r	   )r8   r9   r   r3   r5   r6   rQ   )r3   r5   r6   retr   r   r   unpickle_traceback  s
   
rn   c                 C   s"   t t| j| j| jot| jffS r	   )rn   r   r3   r5   r6   r   )r:   r   r   r   pickle_traceback%  s   "ro   c                 C   s   | | }||_ ||_|S r	   )	__cause____traceback__)funcargscauser:   instr   r   r   unpickle_exception)  s   rv   c                 C   sb   |  d}t|trtdt|tsJ t|dksJ t|d d | j| jf f|dd   S )N   z&str __reduce__ output is not supportedrD   )	__reduce_ex__
isinstancestr	TypeErrortuplelenrv   rp   rq   )objrvr   r   r   pickle_exception0  s   

(r   c                 c   s6    | g}|r|  }|V  |t| 7 }|sd S d S r	   )poplist__subclasses__)r<   to_visitthisr   r   r   _get_subclassesA  s   r   c                  G   s   dd l }|tt tjjdk r(t| dkr&| d }t|t	r&t
|tr&|S d S | s9ttD ]}||t q.d S | D ]=}t|trV|d urU|t	|t |j}|d usFq;t|t	rqt
|trq||t t| dkrp|  S q;tdt	| d S )Nr   rw   r?   z9Expected subclasses or instances of BaseException, got %s)copyregpicklerl   ro   rL   version_infomajorr}   ry   r7   
issubclassBaseExceptionr   r   rp   r{   )exc_classes_or_instancesr   excexception_clsr   r   r   installJ  s4   
r   Fc                 C   s0   ddl m} | d u r|d S t| } ||  S )Nr   )dumps)r   r   r   rU   )r:   r   r   r   r   dump_tracebackj  s
   r   c                 C   s2   ddl m} || }|d u rd S t|}| S )Nr   )loads)r   r   r   rW   rQ   )sr   rV   r:   r   r   r   load_tracebackr  s   
r   )rerL   typesr   __version____all__rE   r\   rJ   r   rK   r   r   r   r   r   rl   rn   ro   rv   r   r   r   
_installedr   r   r   r   r   r   <module>   s0   
 2	