U
    \Sh                     @  s   d dl m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	d
dddZddd
dddZdS )    )annotationsN)NamedTemporaryFile)TYPE_CHECKING)SphinxParallelError)strip_colors)SphinxzSphinx | NoneBaseExceptionstr)appexcreturnc                 C  s  ddl }ddl}ddl}ddl}ddl}t|tr>d|j }nt }| dkrXd }}	n4| j	
 }
ddd | jD }ddd |
D }	td	d
dddj}|dtj  d|   d|j d|  d|  d|j d|j d|j d| d|	 d| d W 5 Q R X |jS )z9Save the given exception's traceback in a temporary file.r   Nz(Error in parallel process)
 
c                 s  s    | ]}d t |  V  qdS )#   N)r   strip).0s r   I/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/util/exceptions.py	<genexpr>"   s     z!save_traceback.<locals>.<genexpr>c                 s  s.   | ]&}|j d krd|j d|j  dV  qdS )builtinr    ()N)versionname)r   extr   r   r   r   #   s    
wz.logzsphinx-err-F)suffixprefixdeletez# Platform:         z; (z)
# Sphinx version:   z
# Python version:   r   z)
# Docutils version: z
# Jinja2 version:   z
# Pygments version: z

# Last messages:
z

# Loaded extensions:
z

# Traceback:
)platformdocutilsjinja2pygmentssphinx
isinstancer   	traceback
format_exc
extensionsvaluesjoinZ
messagelogr   writesysZ__display_version__python_versionpython_implementation__version__r   )r
   r   r    r!   r"   r#   r$   Z
exc_formatZ	last_msgsZ	exts_listr(   fr   r   r   save_traceback   sL    


	r1      int)xr   c                 C  sH   t  \}}}g }t|}|||  d 7 }|t||7 }d|S )z?Format an exception with traceback, but only the last x frames.Nr   )r,   exc_infor&   	format_tbformat_exception_onlyr*   )r4   typvaltbresZtbresr   r   r   format_exception_cut_frames;   s    
r<   )r2   )
__future__r   r,   r&   tempfiler   typingr   Zsphinx.errorsr   Zsphinx.util.consoler   Zsphinx.applicationr   r1   r<   r   r   r   r   <module>   s   ,