B
    `                 @   s   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Zd dlmZ d dl	m
Z
 d dlmZ d dlmZ ee  Ze
ddd	d
ZeddddZG dd dZdS )    N)	Generator)TextIO)Config)Parser)Item)StoreKey)parserreturnc             C   s   d}| j d|dd d S )NzVDump the traceback of all threads if a test takes more than TIMEOUT seconds to finish.faulthandler_timeoutg        )default)Zaddini)r   help r   \/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/_pytest/faulthandler.pypytest_addoption   s    r   )configr	   c             C   sL   dd l }| s"| jt d n&t| }|dkrH| jtddd d S )Nr   zfaulthandler-hookszcfaulthandler module enabled before pytest configuration step, 'faulthandler_timeout' option ignored   )
stacklevel)	faulthandler
is_enabledZpluginmanagerregisterFaultHandlerHooksget_timeout_config_valueZissue_config_time_warningpytestZPytestConfigWarning)r   r   timeoutr   r   r   pytest_configure   s    
r   c               @   s   e Zd ZdZeddddZeddddZedd	 Zed
d Z	e
jdddee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 )r   zImplements hooks that will actually install fault handler before tests execute,
    as well as correctly handle pdb and internal errors.N)r   r	   c             C   s<   dd l }t|  }t|d|jt< |j|jt d d S )Nr   w)file)r   osdup_get_stderr_filenoopen_storefault_handler_stderr_keyenable)selfr   r   Zstderr_fd_copyr   r   r   r   2   s    z"FaultHandlerHooks.pytest_configurec             C   s:   dd l }|  |jt   |jt= |j|  d d S )Nr   )r   )r   disabler!   r"   closer#   r   )r$   r   r   r   r   r   pytest_unconfigure9   s
    z$FaultHandlerHooks.pytest_unconfigurec           	   C   sB   yt j } | dkrt | S  ttjfk
r<   t j S X d S )N)sysstderrfilenoAttributeErrorioUnsupportedOperation
__stderr__)r+   r   r   r   r   E   s    
z$FaultHandlerHooks._get_stderr_filenoc             C   s   t | dpdS )Nr
   g        )floatZgetini)r   r   r   r   r   T   s    z*FaultHandlerHooks.get_timeout_config_valueT)ZhookwrapperZtrylast)NNN)itemr	   c             c   s`   |  |j}|jjt }|dkrV|d k	rVdd l}|j||d z
d V  W d |  X nd V  d S )Nr   )r   )r   r   r!   r"   r   Zdump_traceback_latercancel_dump_traceback_later)r$   r1   r   r*   r   r   r   r   pytest_runtest_protocolX   s    
z)FaultHandlerHooks.pytest_runtest_protocol)Ztryfirst)r	   c             C   s   ddl }|  dS )z@Cancel any traceback dumping due to timeout before entering pdb.r   N)r   r2   )r$   r   r   r   r   pytest_enter_pdbg   s    z"FaultHandlerHooks.pytest_enter_pdbc             C   s   ddl }|  dS )zRCancel any traceback dumping due to an interactive exception being
        raised.r   N)r   r2   )r$   r   r   r   r   pytest_exception_interactn   s    z+FaultHandlerHooks.pytest_exception_interact)__name__
__module____qualname____doc__r   r   r'   staticmethodr   r   r   Zhookimplr   r   r3   r4   r5   r   r   r   r   r   .   s   

r   )r-   r   r)   typingr   r   r   Z_pytest.configr   Z_pytest.config.argparsingr   Z_pytest.nodesr   Z_pytest.storer   r"   r   r   r   r   r   r   r   <module>   s   
