B
    l3X                 @   s  d dl Z d dlZd dlmZ d dlmZ yd dlmZ W n ek
rP   dZY nX yddlm	Z	 W n ek
rz   dZ	Y nX e	seseddZ
d	Zejd  d
k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eZG dd deZG dd deZdS )    N)CodeType)TracebackType)tproxy   )tb_set_nextz(Cannot use tblib. Runtime not supported.z1.3.2)	Traceback   zO^\s*File "(?P<co_filename>.+)", line (?P<tb_lineno>\d+)(, in (?P<co_name>.+))?$c               @   s   e Zd ZdZejZdS )	_AttrDict N)__name__
__module____qualname__	__slots__dict__getitem____getattr__r
   r
   r
   -lib/python3.7/site-packages/tblib/__init__.pyr	      s   r	   c               @   s   e Zd ZdS )__traceback_makerN)r   r   r   r
   r
   r
   r   r      s   r   c               @   s   e Zd ZdS )TracebackParseErrorN)r   r   r   r
   r
   r
   r   r   #   s   r   c               @   s   e Zd Zdd ZdS )Codec             C   s   |j | _ |j| _d S )N)co_filenameco_name)selfcoder
   r
   r   __init__(   s    zCode.__init__N)r   r   r   r   r
   r
   r
   r   r   '   s   r   c               @   s   e Zd Zdd Zdd ZdS )Framec             C   s*   t dd |j D | _t|j| _d S )Nc             S   s    g | ]\}}|d kr||fqS ))__file__r   r
   ).0kvr
   r
   r   
<listcomp>0   s   z"Frame.__init__.<locals>.<listcomp>)r   	f_globalsitemsr   f_code)r   framer
   r
   r   r   .   s    zFrame.__init__c             C   s   d S )Nr
   )r   r
   r
   r   clear6   s    zFrame.clearN)r   r   r   r   r%   r
   r
   r
   r   r   -   s   r   c               @   sJ   e Zd ZdZdd Zdd Zdd Zdd	 Zed
d Z	edddZ
dS )r   Nc             C   sn   t |j| _t|j| _|j}| }t| }x>|d k	rht|}t |j|_t|j|_||_|}|j}q,W d S )N)r   tb_frameint	tb_linenotb_nexttypeobject__new__)r   tbZprev_tracebackcls	tracebackr
   r
   r   r   B   s    

zTraceback.__init__c             C   sN  t rt t| jS tstd| }d }d }x|r<|jj}td|jd  d |jjj	d}t
rtd|j|j|j|j|j|j|j|j|j	|j|j|jdd}n@td|j|j|j|j|j|j|j|j	 |j |j|jdd}yt||jji  W nB   t d j}|d kr|}|d k	r(t|| |}~Y nX |j}q,W z|S ~~X d S )	NzUnsupported Python interpreter!
r   zraise __traceback_makerexecr   r
      )r   r   _Traceback__tproxy_handlerr   RuntimeErrorr&   r#   compiler(   r   PY3r   co_kwonlyargcount
co_nlocalsco_stacksizeco_flagsco_code	co_constsco_namesco_varnamesr   co_firstlineno	co_lnotabencoder1   r!   sysexc_infor)   )r   ZcurrentZtop_tbr-   r#   r   Znext_tbr
   r
   r   as_tracebackS   sL    
 



zTraceback.as_tracebackc             O   sH   |dkr4|d dkr$| j o"| j  S t| |d S nt| |||S d S )N)__getattribute__r   r   r)   )r)   rD   getattr)r   Z	operationargskwargsr
   r
   r   Z__tproxy_handler   s
    zTraceback.__tproxy_handlerc             C   sL   | j dkrd}n
| j  }| jjj| jjjd}| jj|d}|| j|dS )z4Convert a Traceback into a dictionary representationN)r   r   )r!   r#   )r&   r(   r)   )r)   to_dictr&   r#   r   r   r!   r(   )r   r)   r   r$   r
   r
   r   rI      s    

zTraceback.to_dictc             C   sn   |d r|  |d }nd }t|d d d |d d d d}t|d d |d}t||d	 |d
}| |S )Nr)   r&   r#   r   r   )r   r   r!   )r!   r#   r(   )r&   r(   r)   )	from_dictr	   )r.   Zdctr)   r   r$   r-   r
   r
   r   rJ      s    
zTraceback.from_dictTc       	   	   C   s   g }|}xZ|  D ]N}| }|r0|dkrd}qt|}|rN||  q|drZq|rP qW |rd }x8t|D ],}t|t|t|d ddt|d|d}qvW | |S t	d	| d S )
Nz"Traceback (most recent call last):Fz  r   ?)r   r   )r!   r#   )r&   r)   z Could not find any frames in %r.)

splitlinesrstripFRAME_REmatchappend	groupdict
startswithreversedr	   r   )	r.   stringstrictZframesheaderlineZframe_matchZpreviousr$   r
   r
   r   from_string   s:    


zTraceback.from_string)T)r   r   r   r)   r   rD   r3   rI   classmethodrJ   rX   r
   r
   r
   r   r   >   s   1	r   )rerB   typesr   r   Z__pypy__r   ImportErrorZcpythonr   __version____all__version_infor6   r5   rN   r   r	   	Exceptionr   r   r+   r   r   r   r
   r
   r
   r   <module>   s.   


