o
    4ѹgT                     @   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r6dd Znzd dlmZ W n eyK   dd ZY nw dd ZG dd	 d	ZG d
d dZdS )    N)      c                 C   
   t | tS N
isinstanceExceptionGroupexc r   ]/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/site-packages/loguru/_better_exceptions.pyis_exception_group      
r   )r   c                 C   s   dS )NFr   r	   r   r   r   r      s   c                 C   r   r   r   r	   r   r   r   r      r   c                   @   s   e Zd Zeddddddddddd
 ZeeeZeh d	Z	eh d
Z
ejdkr<eejejejejhZejZneejhZd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>   FalseTrueNone>	   []:(;{},))r      Nc                 C   s   |pt | j| _d S r   )dict_default_style_style)selfstyler   r   r   __init__=   s   zSyntaxHighlighter.__init__c                 C   s|  | j }d\}}d}| |D ]}|\}}\}	}
\}}}|| jkr,||d|d 7 }|tjkrT|| jv r;|d }nOt|rE|d }nE|| jv rO|d }n;|d }n6|tj	krh|| j
v rc|d	 }n'|d
 }n"|tjkrr|d }n|| jv r||d }n|tjkr|d }n|d }|	|kr||d  }|	d}}|tjkr||||
 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_punctuation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   sF    |  d} t| } zt| jE d H  W d S  tjy"   Y d S w )Nzutf-8)encodeioBytesIOr1   readline
TokenError)r?   r   r   r   r1   r   s   

zSyntaxHighlighter.tokenizer   )__name__
__module____qualname__	frozensetitemsr+   dirbuiltinsr7   r5   r9   sysversion_infor1   STRINGZFSTRING_STARTZFSTRING_MIDDLEZFSTRING_ENDr;   r2   r/   rH   staticmethodr   r   r   r   r       s:    

2r   c                   @   s   e Zd Zeddddddddddd	d
 Z									d1d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- Zdd.d/d0ZdS )2ExceptionFormatterz[33m[1m{}[0mr   z[32m{}[0mz[32m[1m{}[0mz[33m{}[0mz[35m{}[0mz[31m[1m{}[0mr   r   )introductioncausecontextdirnamebasenamerF   functionexception_typeexception_valuearrowsvalueFTN   asciir0   c
           
      C   st   || _ || _|pt| j| _|| _t|| _|| _|| _	|| _
|	| _|  | _| dd| _| dd| _d| _d S )Nu   │|u   └z->z <Loguru catch point here>)	_colorize	_diagnoser*   _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                     s0   t  } g d  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v rtj| tj qS r   )rU   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   rq      s   z ExceptionFormatter._get_lib_dirsz| rz   c                c   sF    |dkr
| V  d S |  dD ]}d| | | }| d V  qd S )Nr   T  
)
splitlinesrstrip)textr3   rz   rF   Zindentedr   r   r   _indent   s   zExceptionFormatter._indentc              	   C   s.   z	| | j W |S  ttfy   | Y S w r   )rI   rn   UnicodeEncodeErrorLookupError)r-   chardefaultr   r   r   rs      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anyrr   )r-   filer   r   r   _is_file_mine   s   
z ExceptionFormatter._is_file_minelimitfrom_decoratorc                   s  g d }}|d u s|d ur|dkr||fS  fdd}dd }g }	||j r3|	||j |j|j f |o8 j }
 jr>|s@|
r{|j j}|r^||rY|	d|||j|f |
rYq^|j}|sF|	r{|
s{|	d \\}}}}}| j7 }||||f|f|	d< |j}|r||j r|	||j |j|j f |j}|s|d ur|	| d  }	|	D ]L\\}}}}}|}|r j	o 
|}g }|r| j| n||  jr ||} t||}|t|7 }d|}|||||f q||fS )Nr   c                    s   | j j jkS r   )f_codeco_filenamero   )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_linenork   f_backinsertf_linenorv   tb_nextrg   r   rl   rH   rh   _get_relevant_values_format_relevant_valueslistjoin)r-   tbis_firstr   r   framesfinal_sourcer   r   infosZget_parent_onlyr   r   r   r_   r?   rw   linesrelevant_valuesvaluesr   r   r   _extract_frames   sZ   





z"ExceptionFormatter._extract_framesc              
   c   sZ   d }d }d}d}d}| j |D ]}|^}	}
\}}}|d ur/|	tjks*|
dks*|r-|V  d }|	tjkr}t|
s}|s^|j|jfD ]_}z||
 }W n	 tyR   Y qAw d}|| 	|f} q|r|zt
||
}W n tys   d}Y qw || 	|fV  q|	tjkr|
dkrd}d}q|	tjkr|
dkrd}d}d}qd}d}d}q|d ur|V  d S d S )NFT=.r$   )rl   r1   r8   r4   r   r6   f_locals	f_globalsKeyError_format_valueinspectgetattr_staticAttributeError)r-   r?   r   rc   pendingZis_attributeZis_valid_valueZis_assignmentrC   rD   r   rE   col	variablesr   r   r   r     sZ   
z'ExceptionFormatter._get_relevant_valuesc                 c   s    t tt|D ]o}|| \}}dd |d | D }d}d}|D ]}	|d|	|  | j 7 }|	d }q"|d||  7 }|d}
t|
D ]2\}}|dkrU|| j d }n|dt| jd   }|rr| jd |}| jd	 |}|| V  qEq	d S )
Nc                 S   s   g | ]\}}|qS r   r   )r   ZpcolrE   r   r   r   r   ;  s    z>ExceptionFormatter._format_relevant_values.<locals>.<listcomp>r0   r       r   rb   rc   )	reversedrangelenrt   split	enumerateru   rj   r>   )r-   r   rw   ir   rc   Z	pipe_colsZpre_lineindexZpcZvalue_linesnZ
value_linerb   r   r   r   r   8  s*   

z*ExceptionFormatter._format_relevant_valuesc                 C   s`   zt |}W n ty   dt|j }Y nw | j}|d ur.t||kr.|d |d  d }|S )Nz<unprintable %s object>r   ...)repr	ExceptiontyperN   rm   r   )r-   vrx   r   r   r   r   R  s   z ExceptionFormatter._format_valuec                c   sD   |}d}|D ]}t ||}|r|ddd\}}}	| |}
|	d ur'd}nd}| jrF|	rF|	| jrF|	d t| j  }	d|dd   }| jr~|
r~t	j
|\}}|rZ|t	j7 }| jd	 |}| jd
 |}|| }| jd |}| jd |	}	| jr|
s|rd| }||||	}||| d   }|
}|V  qd S )NzI^  File "(?P<file>.*?)", line (?P<line>[^,]+)(?:, in (?P<function>.*))?\nr   rF   r_   z  File "{}", line {}, in {}
z  File "{}", line {}
>r   r]   r^   r   )rematchgroupr   rk   r   rv   r   rg   r   r   r   r   rj   r>   rh   end)r-   frames_lineshas_introductionZprepend_with_new_lineregexr   r   r   rF   r_   Zis_minepatternr]   r^   locationr   r   r   _format_locations]  s<   


z$ExceptionFormatter._format_locationsr   )seenr   r   group_nestingc                c   s   t |||}}}	|d u rt }|t| |r|jd urbt|j|vrb| j|j|jj||dE d H  d}
| jrC| jd 	|
}
| j
rT| d|
 d |E d H  nW| d|
 d |E d H  nI|jd urt|j|vr|js| 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  t|}|r|d	kr| j|||d
||dE d H  d S ztj}W n ty   d }Y nw | j|	|||d\}}t||}dd t|D }t|d }|d ura|| d d }| jr2d|v r*|dd
\}}| jd 	|}| jd 	|}|d | }n| jd 	|}| j
r[|r[t|trWt|sW|rW| jrQ| j|}|d| 7 }d| }|d ||< |rh| jV  t|}|r|rud}nd}| jr| jd 	|}|d
kr| j|d |ddE d H  n| |d |E d H  | || }| js| j s| j
r| j!||d}| d"||E d H  |rYd }t|j#d
dD ]l\}}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   q@|d%kr/t|r/d&}| ||d
 E d H  q| j||j||d
 dE d H  qt|rJ|d%kr[| jd'|d
 d"dE d H  d S d S d S )(N)r   r   zDThe above exception was the direct cause of the following exception:r[   z

z


r   zCDuring handling of the above exception, another exception occurred:r\   r   r   )r   r   r   r   r   c                 s   s"    | ]\}}| d s|V  qdS )r   Nr   )r   r   pr   r   r   r     s     z7ExceptionFormatter._format_exception.<locals>.<genexpr>r   r"   r`   ra   z: z2Exception Group Traceback (most recent call last):z"Traceback (most recent call last):rZ   z+ r   )r   r0   )start+z %s    r   #   -z+-r   zand %d more exceptions

   z... (max_group_depth is 10)
z#-----------------------------------)&r   setaddid	__cause___format_exception__traceback__rg   rj   r>   rh   r   __context____suppress_context__r   rU   tracebacklimitr   r   	tracebackformat_exception_onlyr   nextr   
issubclassAssertionErrorstrrl   rH   rp   bool_format_listrk   r   r   
exceptionscenterr   )r-   rc   r   r   r   r   r   exc_type	exc_valueexc_tracebackr[   r\   Z
is_groupedZtraceback_limitr   r   Zexception_onlyZno_indented_indexesZerror_message_indexerror_messager`   ra   r   rZ   r   r
   r   Zrulermessager   r   r   r     s   





"$
z$ExceptionFormatter._format_exceptionc           	      C   s   dd }dd }g }d}d }|D ]4^ }}||kr&|dkr&| ||d  ||kr4|d7 }|dkr3qnd}| |g ||R   |}q|dkrR| ||d  |S )Nc                 S   s&   d| ||f }|r|d|   7 }|S )Nz  File "%s", line %d, in %s
z    %s
)r   )r   r   r   rF   r  r   r   r   source_message  s   z7ExceptionFormatter._format_list.<locals>.source_messagec                 S   s   | dkrdnd}d| |f S )Nr   sr0   z*  [Previous line repeated %d more time%s]
r   )r3   pluralr   r   r   skip_message   s   z5ExceptionFormatter._format_list.<locals>.skip_messager   r   r   )r   )	r-   r   r  r  resultr3   Zlast_sourcer?   rF   r   r   r   r    s&   zExceptionFormatter._format_list)r   c                c   s    | j ||d|dE d H  d S )NT)r   r   )r   )r-   rD   rc   r   r   r   r   r   format_exception<  s   z#ExceptionFormatter.format_exception)	FFTNNrd   re   Nr0   )rN   rO   rP   rQ   rR   ri   r/   rX   rq   r   rs   r   r   r   r   r   r   r   r  r  r   r   r   r   rY   ~   sT    

@1) $rY   )rT   r   rJ   r   r   r   r   rU   r   r1   r  rV   r   Zexceptiongroupr   ImportErrorr   rY   r   r   r   r   <module>   s*    

^