
    F-Ph	                       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 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 erd dlmZ dZddZddZd dZej         G d d                      Z G d d          ZdS )!    )annotationsN)datetime)	timedelta)Any)TYPE_CHECKING)nodes)Cache)Config)Parser)Session)
TestReport)Selfzcache/stepwiseparserr   returnNonec                    |                      d          }|                    dddddd           |                    d	d
dddd           |                    dddddd           d S )N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
--sw-resetz--stepwise-resetstepwise_resetzWResets stepwise state, restarting the stepwise workflow. Implicitly enables --stepwise.)getgroup	addoption)r   groups     P/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/_pytest/stepwise.pypytest_addoptionr       s    OOI&&E	OOQ     
OO)     
OO)          configr
   c                    | j         j        s| j         j        rd| j         _        |                     d          r*| j                            t          |           d           d S d S )NTr   stepwiseplugin)optionr   r   r   	getoptionpluginmanagerregisterStepwisePlugin)r"   s    r   pytest_configurer*   5   sp    }" &fm&B &!%
## P%%nV&<&<>NOOOOOP Pr!   sessionr   c                    | j                             d          s%| j         j        J t          | j         d          rd S d S d S )Nr   workerinput)r"   r&   cachehasattrr+   s    r   pytest_sessionfinishr1   =   sZ    >##J// ~#///7>=11 	 F 	 	r!   c                  f    e Zd ZU ded<   ded<   ded<   edd	            Zedd            ZddZdS )StepwiseCacheInfoz
str | Nonelast_failedz
int | Nonelast_test_countstrlast_cache_date_strr   r   c                4    t          j        | j                  S N)r   fromisoformatr7   selfs    r   last_cache_datez!StepwiseCacheInfo.last_cache_dateS   s    %d&>???r!   r   c                d     | d d t          j                                                              S )N)r4   r5   r7   )r   now	isoformat)clss    r   emptyzStepwiseCacheInfo.emptyW   s6    s  ( 8 8 : :
 
 
 	
r!   r   c                Z    t          j                                                    | _        d S r9   )r   r?   r@   r7   r;   s    r   update_date_to_nowz$StepwiseCacheInfo.update_date_to_now_   s"    #+<>>#;#;#=#=   r!   N)r   r   )r   r   r   r   )	__name__
__module____qualname____annotations__propertyr=   classmethodrB   rD    r!   r   r3   r3   F   s          
   @ @ @ X@ 
 
 
 [
> > > > > >r!   r3   c                  F    e Zd ZddZddZdd
ZddZddZddZddZ	dS )r)   r"   r
   r   r   c                    || _         d | _        g | _        |j        J |j        | _        |                    d          | _        |                    d          | _        |                                 | _        d S )Nr   r   )	r"   r+   report_statusr.   r&   skipreset_load_cached_infocached_info)r<   r"   s     r   __init__zStepwisePlugin.__init__d   st    '+(*|'''"L
 **?;;	!++,<==
1133r!   r3   c                j   | j                             t          d           }|ry	 t          |d         |d         |d                   S # t          t
          f$ rA}t          |          j         d| }| j        	                    d| d           Y d }~nd }~ww xY wt          
                                S )Nr4   r5   r7   z: z!error reading cache, discarding ())r.   getSTEPWISE_CACHE_DIRr3   KeyError	TypeErrortyperF   rO   appendrB   )r<   cached_dicteerrors       r   rR   z StepwisePlugin._load_cached_infon   s    -1Z^^<NPT-U-U 		XX(. 12 56  
 i( X X X77+22q22"))*Ve*V*V*VWWWWWWWWX
 !&&(((s   "A B7BBr+   r   c                    || _         d S r9   r0   )r<   r+   s     r   pytest_sessionstartz"StepwisePlugin.pytest_sessionstart~   s    r!   itemslist[nodes.Item]c                p   | j         j        }t          |          | j         _        | j        r(| j                            d           d | j         _        d S | j         j        s| j                            d           d S |O|t          |          k    r<| j                            dt          |           d| d           d | j         _        d S d }t          |          D ]\  }}|j        | j         j        k    r|} n|| j                            d           d S t          j
                    | j         j        z
  }t          t          |                                                    }| j                            d| d	| d
           |d |         }|d |= |j                            |           d S )Nzresetting state, not skipping.z)no previously failed tests, not skipping.z&test count changed, not skipping (now z tests, previously z).z/previously failed test not found, not skipping.)secondsz	skipping z" already passed items (cache from z! ago, use --sw-reset to discard).)rb   )rS   r5   lenrQ   rO   r\   r4   	enumeratenodeidr   r?   r=   r   inttotal_secondshookpytest_deselected)	r<   r"   rb   r5   failed_indexindexitem	cache_age
deselecteds	            r   pytest_collection_modifyitemsz,StepwisePlugin.pytest_collection_modifyitems   s    *:+.u::(: 	%%&FGGG+/D(F+ 	%%&QRRRF&?c%jj+H+H%%kUkkXgkkk   ,0D(F $U++ 	 	KE4{d.:::$ ; %%&WXXXXX )9)III!#i.E.E.G.G*H*HIIII%%0L 0 0I 0 0 0   }}-Jm|m$K))
);;;;;r!   reportr   c                &   |j         rY| j        r*|j        | j        j        k    rd | j        _        d| _        d S |j        | j        _        | j        J d| j        _        d S |j        dk    r#|j        | j        j        k    rd | j        _        d S d S d S )NFz0Test failed, continuing from this test next run.call)failedrP   rh   rS   r4   r+   
shouldstopwhen)r<   rs   s     r   pytest_runtest_logreportz'StepwisePlugin.pytest_runtest_logreport   s    = 	8y  =D$4$@@@37D$0!			 06} ,|///F ''' {f$$=D$4$@@@37D$000 %$@@r!   list[str] | Nonec                p    | j                                         dk    r| j        rd | j        D             S d S )Nr   c                    g | ]}d | S )z
stepwise: rL   ).0xs     r   
<listcomp>zAStepwisePlugin.pytest_report_collectionfinish.<locals>.<listcomp>   s!    AAA$$$AAAr!   )r"   get_verbosityrO   r;   s    r   pytest_report_collectionfinishz-StepwisePlugin.pytest_report_collectionfinish   s?    ;$$&&!++0B+AAd.@AAAAtr!   c                    t          | j        d          rd S | j                                         | j                            t          t          j        | j                             d S )Nr-   )	r/   r"   rS   rD   r.   setrX   dataclassesasdictr;   s    r   r1   z#StepwisePlugin.pytest_sessionfinish   s]    4;.. 	 F++---
);+=d>N+O+OPPPPPr!   Nr"   r
   r   r   )r   r3   r+   r   r   r   )r"   r
   rb   rc   r   r   )rs   r   r   r   )r   rz   rE   )
rF   rG   rH   rT   rR   ra   rr   ry   r   r1   rL   r!   r   r)   r)   c   s        4 4 4 4) ) ) )    +< +< +< +<Z8 8 8 80   
Q Q Q Q Q Qr!   r)   )r   r   r   r   r   r   )
__future__r   r   r   r   typingr   r   _pytestr   _pytest.cacheproviderr	   _pytest.configr
   _pytest.config.argparsingr   _pytest.mainr   _pytest.reportsr   typing_extensionsr   rX   r    r*   r1   	dataclassr3   r)   rL   r!   r   <module>r      s   " " " " " "                                         ' ' ' ' ' ' ! ! ! ! ! ! , , , , , ,             & & & & & &  '&&&&&&%    <P P P P    > > > > > > > >8nQ nQ nQ nQ nQ nQ nQ nQ nQ nQr!   