o
    Vh:                     @  s   d dl m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mZ d dlmZ d dlmZ d dlmZ er\d dlmZ d dlmZ d d	lmZ d d
lmZ G dd dZG dd dZdS )    )annotationsN)TYPE_CHECKING)ClassVar)FrameCollection)	Formatter)Frame)SolutionProviderRepository)IO)Outputc                   @  s   e Zd ZU dZdZdZdZdZdZdZ	dZ
d	Zed
ededededede	de
dedi	Zded< eejZded< eeeZded< dddddddZded< d:d;d$d%Z	&d<d=d.d/Zd>d0d1Zd>d2d3Zd?d@d8d9Zd4S )AHighlightertoken_defaulttoken_commenttoken_stringtoken_numbertoken_keywordtoken_builtintoken_opline_markerline_numberzfg=yellow;options=boldzfg=blue;options=boldzfg=default;options=dark,italiczfg=magenta;options=boldfg=default;options=boldz
fg=defaultzfg=default;options=darkzfg=red;options=boldClassVar[dict[str, str]]DEFAULT_THEMEzClassVar[set[str]]KEYWORDSBUILTINS>|)arrow	delimiteru   →u   │)FTz$ClassVar[dict[bool, dict[str, str]]]UITsupports_utf8boolreturnNonec                 C  s   | j  | _| j| | _d S N)r   copy_themer   _ui)selfr    r(   k/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/cleo/ui/exception_trace.py__init__>   s   zHighlighter.__init__   sourcestrlineintlines_beforelines_after	list[str]c                 C  sH   |  |}| ||}|| d }t|d}|| d }||||  S )N   r   )highlighted_linesline_numbersmax)r'   r,   r.   r0   r1   token_linesoffsetlengthr(   r(   r)   code_snippetB   s   

zHighlighter.code_snippetc                 C  s   | dd dd}| |S )Nz

)replacesplit_to_lines)r'   r,   r(   r(   r)   r4   M   s   
zHighlighter.highlighted_linesc              	     s  g }d}d}d}d }t | t  d fdd}t|}d}	|D ]6}
|
\}}}}}|d }|dkr8q%|tjkrZ|d u rD| j}|	d| j|  d	| d
7 }	||	  |S ||kr|d u re| j}|| }|dkrv|dg|d  7 }|	d}|	d| j|  d	| d
7 }	||	 d}	|}d}d}|| j
v r| j}n:|| jv s|dkr| j}n-|tjkr| j}n$|tjkr| j}n|tjkr| j}n|tjkr| j}n	|tjkrq%| j}|d u r|}|d |kr||
j||d  7 }||kr|	d| j|  d	| d
7 }	d}|}||d k rR|d}|	d| j|  d	|d  d
7 }	||	 |dd D ]}|d| j|  d	| d
 q.|d }|d d |d  }d}	q%||7 }|d }|}q%|S )Nr3   r    r!   bytesc                     s         S r#   )formatescapereadlinedecodeencoder(   	formatter	source_ior(   r)   rC   [   s
   z,Highlighter.split_to_lines.<locals>.readline<r   </>r;   r'   )r!   r@   )ioBytesIOrE   r   tokenize	ENDMARKERTOKEN_DEFAULTr%   appendrstripr   TOKEN_KEYWORDr   TOKEN_BUILTINSTRINGTOKEN_STRINGNUMBERTOKEN_NUMBERCOMMENTTOKEN_COMMENTOPTOKEN_OPNEWLINEr.   split)r'   r,   linescurrent_linecurrent_colbuffercurrent_typerC   tokensr.   
token_info
token_typer   startend_linenodiffstripped_buffernew_typer7   
token_liner(   rF   r)   r>   R   s   



A









 
"zHighlighter.split_to_linesNr_   	mark_line
int | Nonec                 C  s   t dttt|}g }d| j| j  d| jd  d}d}t|D ]J\}}d}	|d ur7||d kr5|n|}	|d d| }
||d krHd	n| j| j }|	d| d|
 d
| j| j  d| jd  d| 
7 }	||	 q#|S )N   rI   r   r   z</> z  r?   r3   r   z</><r   )	r6   lenr-   r%   LINE_MARKERr&   	enumerateLINE_NUMBERrQ   )r'   r_   ro   max_line_lengthsnippet_linesmarker	no_markerir.   snippetr   stylingr(   r(   r)   r5      s4    

zHighlighter.line_numbers)T)r   r    r!   r"   )r+   r+   )
r,   r-   r.   r/   r0   r/   r1   r/   r!   r2   )r,   r-   r!   r2   r#   )r_   r2   ro   rp   r!   r2   )__name__
__module____qualname__rP   rZ   rV   rX   rS   rT   r\   rs   ru   r   __annotations__setkeywordkwlistr   dirbuiltinsr   r   r*   r:   r4   r>   r5   r(   r(   r(   r)   r      s>   
 

ar   c                   @  s   e Zd ZU dZdddddZded< eed	d
 eeD dZ	ded< i Z
ded< 	d;d<ddZd=ddZd>d?d"d#Zd@d%d&ZdAd)d*ZdBd+d,ZdCd/d0Z	1dDdEd6d7ZdFd9d:ZdS )GExceptionTracez,
    Renders the trace of an exception.
    z<fg=black;options=bold><fg=yellow>	<fg=blue>z<fg=magenta>)commentr   builtinliteralr   THEMEc                 C  sF   g | ]}t | rttt|rttt|tjrtt|qS r(   )	r   	iskeywordlowerinspectisclassgetattrast
issubclassAST).0clsr(   r(   r)   
<listcomp>   s    zExceptionTrace.<listcomp>)r   keywordszClassVar[dict[str, list[str]]]AST_ELEMENTSz1ClassVar[dict[tuple[Frame, int, int], list[str]]]_FRAME_SNIPPET_CACHEN	exception	Exceptionsolution_provider_repository!SolutionProviderRepository | Noner!   r"   c                 C  s    || _ || _t | _d | _d S r#   )
_exception_solution_provider_repositorysysexc_info	_exc_info_ignore)r'   r   r   r(   r(   r)   r*      s   

zExceptionTrace.__init__ignorer-   c                 C  s
   || _ | S r#   )r   )r'   r   r(   r(   r)   ignore_files_in   s   zExceptionTrace.ignore_files_inFrL   IO | Outputsimpler    c                 C  sT   |rt | jnd}|r|d |d| d n| || j | || j d S )Nr?   <error></error>)r-   r   
write_line_render_exception_render_solution)r'   rL   r   simple_stringr(   r(   r)   render   s   
zExceptionTrace.renderBaseExceptionc                 C  s   ddl m} ||}|jsd S | r0|jd usJ | ||j |d |d |d | ||j | |d|j	 dd |d t
 |jdd	}| |d
| d |jd }| || d S )Nr   )	Inspectorr?   z>The following error occurred when trying to handle this error:r   r   Tr;   z
  z<b>z</b>rK   )crashtest.inspectorr   frameshas_previous_exceptionprevious_exceptionr   r   _render_trace_render_lineexception_namer   rA   exception_messager=   _render_snippet)r'   rL   r   r   	inspectorr   current_framer(   r(   r)   r     s(   



z ExceptionTrace._render_exceptionframer   c              
   C  sj   |  |d| |j d|j d|j dd t| d|j|jdd}|D ]
}| j ||dd q(d S )	Nzat <fg=green>z</>:<b></b> in <fg=cyan>rJ   Tr      indent)	r   _get_relative_file_pathfilenamerj   functionr   r   r:   file_content)r'   rL   r   
code_lines	code_liner(   r(   r)   r     s   zExceptionTrace._render_snippetc           
      C  s   | j d u rd S | j |}| rdnd}|D ]3}|j}|j}|j}|ddd}ddd |D }	| 	|d	| d
|
d d| |	 d qd S )Nu   •*r;   z
     ,c                 s  s    | ]	}d | dV  qdS )z
    <fg=blue>rJ   Nr(   )r   linkr(   r(   r)   	<genexpr><  s    z2ExceptionTrace._render_solution.<locals>.<genexpr>z<fg=blue;options=bold>z </><fg=default;options=bold>.z</>: T)r   get_solutions_for_exceptionr   solution_titlesolution_descriptiondocumentation_linksr=   stripjoinr   rR   )
r'   rL   r   	solutionssymbolsolutiontitledescriptionlinksjoined_linksr(   r(   r)   r   ,  s0   
zExceptionTrace._render_solutionr   r   c                 C  st  t  }|D ]}| jrt| j|jr| sq|| qt|d }| r4|r6| 	|dd tt
|}| }|}|D ]}	|	 rzt|	dkrUdt|	 d}
nd}
| 	|ddd	| d
|
 d|	jd  dd |t|	|	jd  8 }|	D ]}| |j}|tjj}dttj d|d d d|d  dg }| 	|d|d	| d| d|j d|j d	d | r|ddf| jvrt| d|j|j}|| j|ddf< | j|ddf }|D ]}| j	|d|  | dd qn2t| d}z||j d }W n t j!y   |j }Y nw | 	|d|d   |  |d8 }q|q@d S d S d S )Nr3   z<fg=yellow>Stack trace</>:Tr   z
</> framesr   r   z...r   z</>  Previous z repeated <fg=blue>z	</> timesz<fg=default;options=dark>rJ   rK   z<fg=default;options=bold>z</>  z <fg=default;options=dark>:</><b>r   r+   r   r   rq   r   r   r   )"r   r   rematchr   is_debugrQ   rr   is_very_verboser   r-   compactis_repeatedrepetitionsr   r^   ospathsepr   rB   r   rj   r   r   r   r   r:   r   r4   r.   r   rN   
TokenError)r'   rL   r   stack_framesr   remaining_frames_lengthmax_frame_lengthframe_collectionsrz   
collectionframes_messagerelative_file_pathrelative_file_path_partsr   r   highlighterr(   r(   r)   r   E  s   
	
zExceptionTrace._render_tracer+   r.   new_liner   r/   c                 C  s(   |r| d | |d  |  d S )Nr?   r   )r   )r'   rL   r.   r   r   r(   r(   r)   r     s   
zExceptionTrace._render_linefilepathc                 C  sP   t  }|r||t jj d}t jd}|r&||t jj dt jj }|S )Nr?   ~)r   getcwdr=   r   r   
expanduser)r'   r   cwdhomer(   r(   r)   r     s   z&ExceptionTrace._get_relative_file_pathr#   )r   r   r   r   r!   r"   )r   r-   r!   r   )F)rL   r   r   r    r!   r"   )rL   r   r   r   r!   r"   )rL   r   r   r   r!   r"   )rL   r   r   r   r!   r"   )rL   r   r   r   r!   r"   )Fr+   )
rL   r   r.   r-   r   r    r   r/   r!   r"   )r   r-   r!   r-   )r}   r~   r   __doc__r   r   r   r   r   r   r   r*   r   r   r   r   r   r   r   r   r(   r(   r(   r)   r      s0   
 





Zr   )
__future__r   r   r   r   rL   r   r   r   r   rN   typingr   r   crashtest.frame_collectionr   cleo.formatters.formatterr   crashtest.framer   9crashtest.solution_providers.solution_provider_repositoryr   
cleo.io.ior	   cleo.io.outputs.outputr
   r   r   r(   r(   r(   r)   <module>   s,     0