U
    42iZ                     @  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 d dlmZ d dlZee  Zee  Zdd	d
ddZdd	dddZdd	dddZddddZdddddZejdddddddd Zejdd!d	dd"d#Zejdd!d	dd$d%ZdS )&    )annotationsN)	Generator)Config)Parser)Item)StashKeyr   None)parserreturnc                 C  s   d}| j d|dd d S )NzUDump the traceback of all threads if a test takes more than TIMEOUT seconds to finishfaulthandler_timeout        )default)Zaddini)r	   help r   8/tmp/pip-unpacked-wheel-7n2p7kht/_pytest/faulthandler.pypytest_addoption   s    r   r   )configr
   c                 C  sF   dd l }t }| r || jt< t|| jt< |j| jt d d S Nr   )file)	faulthandlerget_stderr_fileno
is_enabledstash$fault_handler_original_stderr_fd_keyosdupfault_handler_stderr_fd_keyenable)r   r   Zstderr_filenor   r   r   pytest_configure   s    
r   c                 C  sX   dd l }|  t| jkr2t| jt  | jt= t| jkrT|| jt  | jt= d S )Nr   )r   disabler   r   r   closer   r   )r   r   r   r   r   pytest_unconfigure)   s    

r!   int)r
   c               	   C  sT   zt j } | dkrt | W S  ttfk
rN   t jd k	s@tt j  Y S X d S )N)sysstderrfilenoAttributeError
ValueError
__stderr__AssertionError)r&   r   r   r   r   7   s    
r   floatc                 C  s   t | dpdS )Nr   r   )r+   Zgetini)r   r   r   r   get_timeout_config_valueG   s    r,   T)wrapperZtrylastr   zGenerator[None, object, object])itemr
   c                 c  sV   t | j}|dkrLdd l}| jjt }|j||d z
d V W S |  X nd V S d S r   )r,   r   r   r   r   Zdump_traceback_latercancel_dump_traceback_later)r.   timeoutr   r%   r   r   r   pytest_runtest_protocolK   s    

r1   )Ztryfirstc                  C  s   ddl } |   dS )z@Cancel any traceback dumping due to timeout before entering pdb.r   Nr   r/   r   r   r   r   pytest_enter_pdb[   s    r4   c                  C  s   ddl } |   dS )zNCancel any traceback dumping due to an interactive exception being
    raised.r   Nr2   r3   r   r   r   pytest_exception_interactc   s    r5   )
__future__r   r   r$   typingr   Z_pytest.configr   Z_pytest.config.argparsingr   Z_pytest.nodesr   Z_pytest.stashr   Zpytestr"   r   r   r   r   r!   r   r,   Zhookimplr1   r4   r5   r   r   r   r   <module>   s*   



