U
    fN                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
ejdkrldd Zn6zd dlmZ W n ek
r   dd ZY n
X dd ZG dd	 d	ZG d
d dZdS )    N)      c                 C   s
   t | tS N
isinstanceExceptionGroupexc r
   =/tmp/pip-unpacked-wheel-r6mt_jo5/loguru/_better_exceptions.pyis_exception_group   s    r   )r   c                 C   s   dS )NFr
   r   r
   r
   r   r      s    c                 C   s
   t | tS r   r   r   r
   r
   r   r      s    c                   @   s   e Zd Zddddddddddd
ZeeeZd	d
dhZdddddddddh	Z	e
jhZdZejdkree
je
je
jh e
jZdddZdd Zedd Z
dS )SyntaxHighlighterz[30m[1m{}[0mz[35m[1m{}[0m
[1m{}[0m[36m{}[0mz[34m[1m{}[0m[36m[1m{}[0mz{})
commentkeywordbuiltinstringnumberoperatorpunctuationconstant
identifierotherTrueFalseNone()[]{}:,;N)r      c                 C   s   |p| j | _d S r   )_default_style_style)selfstyler
   r
   r   __init__8   s    zSyntaxHighlighter.__init__c                 C   s  | j }d\}}d}| |D ]P}|\}}\}	}
\}}}|| jkrZ||d|d 7 }|tjkr|| jkrx|d }n0t|r|d }n|| jkr|d }n|d }nn|tj	kr|| j
kr|d	 }n|d
 }nF|tjkr|d }n2|| jkr|d }n|tjkr|d }n|d }|	|kr8||d  }|	d }}|tjkrj||||
 7 }||||
| 7 }|}q|||d  7 }|S )N)r   r    r"   r#   r   r   r   r   r   r   r   r   r   r   r   )r)   tokenize_fstring_middlecountNAME
_constantsr   	iskeyword	_builtinsOP_punctationNUMBER_stringsCOMMENTENCODINGformat)r*   sourcer+   rowcolumnoutputtokentype_r   Z	start_rowZstart_column_Z
end_columnlinecolorr
   r
   r   	highlight;   sF    



















zSyntaxHighlighter.highlightc                 c   sH   |  d} t| } zt| jE d H  W n tjk
rB   Y d S X d S )Nzutf-8)encodeioBytesIOr.   readline
TokenError)r<   r
   r
   r   r.   m   s    

zSyntaxHighlighter.tokenize)N)__name__
__module____qualname__r(   setdirbuiltinsr4   r2   r6   r.   STRINGr8   r/   sysversion_infoupdateZFSTRING_STARTZFSTRING_MIDDLEZFSTRING_ENDr,   rE   staticmethodr
   r
   r
   r   r       s.   


2r   c                   @   s   e Zd Zddddddddddd	d
Zd/ddZedd ZeddddZdd Zdd Z	dddddZ
d d! Zd"d# Zd$d% Zd&d' Zdddd(d)d*d+Zdd,d-d.ZdS )0ExceptionFormatterz[33m[1m{}[0mr   z[32m{}[0mz[32m[1m{}[0mz[33m{}[0mz[35m{}[0mz[31m[1m{}[0mr   r   )introductioncausecontextdirnamebasenamerC   functionexception_typeexception_valuearrowsvalueFTN   asciir-   c
           
      C   sp   || _ || _|p| j| _|| _t|| _|| _|| _|| _	|	| _
|  | _| dd| _| dd| _d| _d S )Nu   │|u   └z->z <Loguru catch point here>)	_colorize	_diagnose_default_theme_theme
_backtracer   _syntax_highlighter_max_length	_encoding_hidden_frames_filename_prefix_get_lib_dirs	_lib_dirs	_get_char
_pipe_char	_cap_char_catch_point_identifier)
r*   colorizeZ	backtraceZdiagnoseZthemer+   
max_lengthencodingZhidden_frames_filenameprefixr
   r
   r   r,      s    

zExceptionFormatter.__init__c                     s4   t  } ddddg  fdd| D }dd |D S )	Nstdlib
platstdlibplatlibpurelibc                    s"   h | ]} D ]}t ||qqS r
   )	sysconfigget_path).0schemenamenamesr
   r   	<setcomp>   s       z3ExceptionFormatter._get_lib_dirs.<locals>.<setcomp>c                 S   s,   g | ]$}|t jkrtj| tj qS r
   )rR   pathosabspathlowersep)r~   r   r
   r
   r   
<listcomp>   s     
 z4ExceptionFormatter._get_lib_dirs.<locals>.<listcomp>)r|   get_scheme_names)schemespathsr
   r   r   rn      s    z ExceptionFormatter._get_lib_dirsz| rw   c                c   sD   |dkr| V  d S |  dD ]"}d| | | }| d V  qd S )Nr   T  
)
splitlinesrstrip)textr0   rw   rC   Zindentedr
   r
   r   _indent   s    zExceptionFormatter._indentc              	   C   s6   z| | j W n ttfk
r,   | Y S X |S d S r   )rF   rk   UnicodeEncodeErrorLookupError)r*   chardefaultr
   r
   r   rp      s
    
zExceptionFormatter._get_charc                    s8   t j|   dsdS t fdd| jD  S )Nz.pyFc                 3   s   | ]}  |V  qd S r   )
startswith)r~   dfilepathr
   r   	<genexpr>   s     z3ExceptionFormatter._is_file_mine.<locals>.<genexpr>)r   r   r   r   endswithanyro   )r*   filer
   r   r   _is_file_mine   s    
z ExceptionFormatter._is_file_minelimitfrom_decoratorc                   s  g d  }}|d ks"|d k	r*|dkr*||fS  fdd}dd }g }	||j rf|	||j |j|j f |op j }
 jr||s|
r|j j}|r||r|	d|||j|f |
rq|j}q|	r|
s|	d \\}}}}}| j7 }||||f|f|	d< |j}|r.||j r&|	||j |j|j f |j}q|d k	rF|	| d  }	|	D ]\\}}}}}|}|r؈ j	ot 
|}g }|r| j| n
||  jrΈ ||} t||}|t|7 }d|}|||||f qJ||fS )Nr   c                    s   | j j jkS r   )f_codeco_filenamerl   )framer*   r
   r   is_valid   s    z4ExceptionFormatter._extract_frames.<locals>.is_validc                 S   s,   | j j}| j j}t|| }||||fS r   )r   r   co_name	linecachegetlinestrip)r   linenofilenamer\   r<   r
   r
   r   get_info   s    z4ExceptionFormatter._extract_frames.<locals>.get_infoz
    )tb_frameappend	tb_linenorh   f_backinsertf_linenors   tb_nextrd   r   ri   rE   re   _get_relevant_values_format_relevant_valueslistjoin)r*   tbis_firstr   r   framesfinal_sourcer   r   ZinfosZget_parent_onlyr   r   r   r\   r<   rt   linesrelevant_valuesvaluesr
   r   r   _extract_frames   sV    





z"ExceptionFormatter._extract_framesc              
   c   sr  d }d }d}d}d}| j |D ]:}|^}	}
\}}}|d k	r^|	tjksT|
dksT|rZ|V  d }|	tjkrt|
s|s|j|jfD ]@}z||
 }W n tk
r   Y qY qX d}|| 	|f} qqn@|r\zt
||
}W n tk
r   d}Y nX || 	|fV  q |	tjkr,|
dkr,d}d}q |	tjkrP|
dkrPd}d}d}q d}d}d}q |d k	rn|V  d S )NFT=.r&   )ri   r.   r5   r1   r   r3   f_locals	f_globalsKeyError_format_valueinspectgetattr_staticAttributeError)r*   r<   r   r`   pendingZis_attributeZis_valid_valueZis_assignmentr@   rA   r   rB   col	variablesr
   r
   r   r      sN    


z'ExceptionFormatter._get_relevant_valuesc                 c   s   t tt|D ]}|| \}}dd |d | D }d}d}|D ]"}	|d|	|  | j 7 }|	d }qB|d||  7 }|d}
t|
D ]d\}}|dkr|| j d }n|dt| jd   }|r| jd |}| jd	 |}|| V  qqd S )
Nc                 S   s   g | ]\}}|qS r
   r
   )r~   ZpcolrB   r
   r
   r   r   4  s     z>ExceptionFormatter._format_relevant_values.<locals>.<listcomp>r-   r       r   r_   r`   )	reversedrangelenrq   split	enumeraterr   rg   r;   )r*   r   rt   ir   r`   Z	pipe_colsZpre_lineindexZpcZvalue_linesnZ
value_liner_   r
   r
   r   r   1  s$    

z*ExceptionFormatter._format_relevant_valuesc                 C   sb   zt |}W n" tk
r.   dt|j }Y nX | j}|d k	r^t||kr^|d |d  d }|S )Nz<unprintable %s object>r   ...)repr	ExceptiontyperK   rj   r   )r*   vru   r
   r
   r   r   K  s    z ExceptionFormatter._format_valuec                c   sL  |}d}|D ]8}t ||}|r@|ddd\}}}	| |}
|	d k	rPd}nd}| jr|	r|	| jr|	d t| j  }	d|dd   }| jr|
rt	j
|\}}|r|t	j7 }| jd	 |}| jd
 |}|| }| jd |}| jd |	}	| jr|
s|rd| }||||	}||| d   }|
}|V  qd S )NzI^  File "(?P<file>.*?)", line (?P<line>[^,]+)(?:, in (?P<function>.*))?\nr   rC   r\   z  File "{}", line {}, in {}
z  File "{}", line {}
>r   rZ   r[   r   )rematchgroupr   rh   r   rs   r   rd   r   r   r   r   rg   r;   re   end)r*   frames_lineshas_introductionZprepend_with_new_lineregexr   r   r   rC   r\   Zis_minepatternrZ   r[   locationr
   r
   r   _format_locationsV  s8    



z$ExceptionFormatter._format_locationsr   )seenr   r   group_nestingc                c   s  t |||  }}}	|d kr"t }|t| |r`|jd k	rt|j|kr| j|j|jj||dE d H  d}
| jr| jd 	|
}
| j
r| d|
 d |E d H  n| d|
 d |E d H  n|jd k	r`t|j|kr`|js`| j|j|jj||dE d H  d}| jr"| jd 	|}| j
rF| d| d |E d H  n| d| d |E d H  t|}|r|d	kr| j|||d
||dE d H  d S z
tj}W n tk
r   d }Y nX | j|	|||d\}}t||}t|D ]\}}|ds qq|| d d }| jrvd|krf|dd
\}}| jd 	|}| jd 	|}|d | }n| jd 	|}| j
r|rt|trt|s|r| jr| j|}|d| 7 }d| }|d ||< |r| jV  t|}|rT|rd}nd}| jr| jd 	|}|d
kr>| j|d |ddE d H  n| |d |E d H  t|| }| jsz| j sz| j
r| j!||d}| d"||E d H  |rt|j#d
dD ]\}}dd|dkrdn| $dd  }| j|||d
krd!nd"dE d H  |dkr<d#t%|j#d  }| ||d
 E d H   qnN|d$krlt|rld%}| ||d
 E d H  n| j||j||d
 dE d H  qt|r|d$kr| jd&|d
 d!dE d H  d S )'N)r   r   zDThe above exception was the direct cause of the following exception:rX   z

z


r   zCDuring handling of the above exception, another exception occurred:rY   r   r   )r   r   r   r   r   r   r   r$   r]   r^   z: z2Exception Group Traceback (most recent call last):z"Traceback (most recent call last):rW   z+ r   )r   r-   )start+z %s    r   #   -z+-r   zand %d more exceptions

   z... (max_group_depth is 10)
z#-----------------------------------)&r   rN   addid	__cause___format_exception__traceback__rd   rg   r;   re   r   __context____suppress_context__r   rR   tracebacklimitr   r   	tracebackformat_exception_onlyr   r   r   
issubclassAssertionErrorstrri   rE   rm   boolformat_listrh   r   r   
exceptionscenterr   )r*   r`   r   r   r   r   r   exc_type	exc_valueexc_tracebackrX   rY   Z
is_groupedZtraceback_limitr   r   Zexception_onlyZerror_message_indexparterror_messager]   r^   r   rW   r   r   r	   Zrulermessager
   r
   r   r   ~  s    

   



"$
z$ExceptionFormatter._format_exception)r   c                c   s   | j ||d|dE d H  d S )NT)r   r   )r   )r*   rA   r`   r   r   r
   r
   r   format_exception  s    z#ExceptionFormatter.format_exception)	FFTNNra   rb   Nr-   )rK   rL   rM   rf   r,   rU   rn   r   rp   r   r   r   r   r   r   r   r	  r
   r
   r
   r   rV   y   sP            

@1)    rV   )rP   r   rG   r   r   r   r   rR   r|   r.   r   rS   r   Zexceptiongroupr   ImportErrorr   rV   r
   r
   r
   r   <module>   s&   

Y