o
    Zhk                     @   s   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m	Z	 d dl
mZ d dlmZ d d	lZer<d d
lmZ dZde	dd	fddZejdedd	fddZdedd	fddZG dd dZd	S )    )List)Optional)TYPE_CHECKING)nodes)Config)Parser)Session)
TestReportN)Cachezcache/stepwiseparserreturnc                 C   s:   |  d}|jddddddd |jd	d
ddddd d S )NZgeneralz--swz
--stepwise
store_trueFstepwisezBExit on test failure and continue from last failing test next time)actiondefaultdesthelpz	--sw-skipz--stepwise-skipstepwise_skipz_Ignore the first failing test but stop on the next failing test. Implicitly enables --stepwise.)ZgetgroupZ	addoption)r   group r   G/var/www/html/lang_env/lib/python3.10/site-packages/_pytest/stepwise.pypytest_addoption   s"   

r   configc                 C   s4   | j jrd| j _| dr| jt| d d S d S )NTr   Zstepwiseplugin)optionr   r   	getoptionZpluginmanagerregisterStepwisePlugin)r   r   r   r   pytest_configure(   s
   
r   sessionc                 C   sD   | j ds | j jd usJ t| j drd S | j jtg  d S d S )Nr   workerinput)r   r   cachehasattrsetSTEPWISE_CACHE_DIRr   r   r   r   pytest_sessionfinish1   s   r%   c                   @   sz   e Zd ZdeddfddZdeddfddZded	eej	 ddfd
dZ
deddfddZdee fddZdddZdS )r   r   r   Nc                 C   sH   || _ d | _d| _|jd usJ |j| _| jtd | _|d| _d S )N r   )	r   r   report_statusr    getr#   
lastfailedr   skip)selfr   r   r   r   __init__=   s   zStepwisePlugin.__init__r   c                 C   s
   || _ d S )Nr$   )r+   r   r   r   r   pytest_sessionstartF   s   
z"StepwisePlugin.pytest_sessionstartitemsc                 C   s   | j sd| _d S d }t|D ]\}}|j| j kr|} nq|d u r&d| _d S d| d| _|d | }|d |= |jj|d d S )Nz)no previously failed tests, not skipping.z/previously failed test not found, not skipping.z	skipping z already passed items.)r.   )r)   r'   	enumeratenodeidhookZpytest_deselected)r+   r   r.   Zfailed_indexindexitemZ
deselectedr   r   r   pytest_collection_modifyitemsI   s   

z,StepwisePlugin.pytest_collection_modifyitemsreportc                 C   sr   |j r%| jr|j| jkrd | _d| _d S |j| _| jd usJ d| j_d S |jdkr5|j| jkr7d | _d S d S d S )NFz0Test failed, continuing from this test next run.call)Zfailedr*   r0   r)   r   Z
shouldstopwhen)r+   r5   r   r   r   pytest_runtest_logreporta   s   



z'StepwisePlugin.pytest_runtest_logreportc                 C   s&   | j ddkr| jrd| j S d S )Nverboser   z
stepwise: )r   r   r'   r+   r   r   r   pytest_report_collectionfinishy   s   z-StepwisePlugin.pytest_report_collectionfinishc                 C   s$   t | jdrd S | jt| j d S )Nr   )r!   r   r    r"   r#   r)   r:   r   r   r   r%   ~   s   z#StepwisePlugin.pytest_sessionfinish)r   N)__name__
__module____qualname__r   r,   r   r-   r   r   ZItemr4   r	   r8   r   strr;   r%   r   r   r   r   r   <   s    	
r   )typingr   r   r   Z_pytestr   Z_pytest.configr   Z_pytest.config.argparsingr   Z_pytest.mainr   Z_pytest.reportsr	   ZpytestZ_pytest.cacheproviderr
   r#   r   Zhookimplr   r%   r   r   r   r   r   <module>   s"    