
    i	                       S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S S	KJr  S S
KJr  S SKJr  S SKJr  \(       a  S SKJr  SrSS jrSS jrSS jr\R4                   " S S5      5       r " S S5      rg)    )annotationsN)datetime)	timedelta)Any)TYPE_CHECKING)nodes)Cache)Config)Parser)Session)
TestReport)Selfzcache/stepwisec           	         U R                  S5      nUR                  SSSSSSS9  UR                  S	S
SSSSS9  UR                  SSSSSSS9  g )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)parsergroups     O/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/_pytest/stepwise.pypytest_addoptionr      s    OOI&E	OOQ   
OO)   
OO)      c                
   U R                   R                  (       d  U R                   R                  (       a  SU R                   l        U R	                  S5      (       a&  U R
                  R                  [        U 5      S5        g g )NTr   stepwiseplugin)optionr   r   r   	getoptionpluginmanagerregisterStepwisePlugin)configs    r   pytest_configurer(   5   sY    }}""fmm&B&B!%
##%%nV&<>NO $r   c                    U R                   R                  S5      (       d6  U R                   R                  c   e[        U R                   S5      (       a  g g g )Nr   workerinput)r'   r#   cachehasattrsessions    r   pytest_sessionfinishr/   =   sM    >>##J//~~##///7>>=11  2 0r   c                  f    \ rS rSr% S\S'   S\S'   S\S'   \SS j5       r\SS	 j5       rSS
 jr	Sr
g)StepwiseCacheInfoF   z
str | Nonelast_failedz
int | Nonelast_test_countstrlast_cache_date_strc                B    [         R                  " U R                  5      $ N)r   fromisoformatr6   selfs    r   last_cache_date!StepwiseCacheInfo.last_cache_dateS   s    %%d&>&>??r   c                T    U " S S [         R                  " 5       R                  5       S9$ )N)r3   r4   r6   )r   now	isoformat)clss    r   emptyStepwiseCacheInfo.emptyW   s'      ( 8 8 :
 	
r   c                T    [         R                  " 5       R                  5       U l        g r8   )r   r?   r@   r6   r:   s    r   update_date_to_now$StepwiseCacheInfo.update_date_to_now_   s    #+<<>#;#;#= r   )r6   N)returnr   )rG   r   rG   None)__name__
__module____qualname____firstlineno____annotations__propertyr<   classmethodrB   rE   __static_attributes__ r   r   r1   r1   F   sG     
   @ @ 
 
>r   r1   c                  f    \ rS rSrSS jrSS jrSS jr      SS jrSS jrSS jr	SS jr
S	rg
)r&   c   c                    Xl         S U l        / U l        UR                  c   eUR                  U l        UR	                  S5      U l        UR	                  S5      U l        U R                  5       U l        g )Nr   r   )	r'   r.   report_statusr+   r#   skipreset_load_cached_infocached_info)r;   r'   s     r   __init__StepwisePlugin.__init__d   sg    '+(*||'''"LL
 **?;	!++,<=
113r   c                x   U R                   R                  [        S 5      nU(       a   [        US   US   US   5      $ [        R                  5       $ ! [        [
        4 aV  n[        U5      R                   SU 3nU R                  R                  SU S35         S nA[        R                  5       $ S nAff = f)Nr3   r4   r6   z: z!error reading cache, discarding ())r+   getSTEPWISE_CACHE_DIRr1   KeyError	TypeErrortyperJ   rV   appendrB   )r;   cached_dicteerrors       r   rY    StepwisePlugin._load_cached_infon   s    -1ZZ^^<NPT-UX(. 12 56  !&&(( i( X7++,Bqc2"")),MeWTU*VWW !&&((Xs   A B9#9B44B9c                    Xl         g r8   r-   )r;   r.   s     r   pytest_sessionstart"StepwisePlugin.pytest_sessionstart~   s    r   c                   U R                   R                  n[        U5      U R                   l        U R                  (       a-  U R                  R                  S5        S U R                   l        g U R                   R                  (       d  U R                  R                  S5        g UbL  U[        U5      :w  a=  U R                  R                  S[        U5       SU S35        S U R                   l        g S n[        U5       H-  u  pVUR                  U R                   R                  :X  d  M+  Un  O   Uc  U R                  R                  S5        g [        R                  " 5       U R                   R                  -
  n[        [        UR                  5       5      S9nU R                  R                  SU S	U S
35        US U nUS U2	 UR                  R!                  US9  g )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).)items)rZ   r4   lenrX   rV   rd   r3   	enumeratenodeidr   r?   r<   r   inttotal_secondshookpytest_deselected)	r;   r'   rn   r4   failed_indexindexitem	cache_age
deselecteds	            r   pytest_collection_modifyitems,StepwisePlugin.pytest_collection_modifyitems   s    **::+.u:(::%%&FG+/D(++%%&QR&?c%j+H%%8UDWXgWhhjk ,0D( $U+KE{{d..:::$ , %%&WX )9)9)I)III!#i.E.E.G*HII%%L>)KI; W/ 0 }-Jm|m$KK))
);r   c                   UR                   (       a  U R                  (       a=  UR                  U R                  R                  :X  a  S U R                  l        SU l        g UR                  U R                  l        U R
                  c   eSU R
                  l        g UR                  S:X  a7  UR                  U R                  R                  :X  a  S U R                  l        g g g )NFz0Test failed, continuing from this test next run.call)failedrW   rq   rZ   r3   r.   
shouldstopwhen)r;   reports     r   pytest_runtest_logreport'StepwisePlugin.pytest_runtest_logreport   s    ==yy ==D$4$4$@$@@37D$$0!	 06}}  ,||///F ' {{f$==D$4$4$@$@@37D$$0 A %r   c                    U R                   R                  5       S:  a1  U R                  (       a   U R                   Vs/ s H  nSU 3PM
     sn$ g s  snf )Nr   z
stepwise: )r'   get_verbosityrV   )r;   xs     r   pytest_report_collectionfinish-StepwisePlugin.pytest_report_collectionfinish   sL    ;;$$&!+0B0B.2.@.@A.@j$.@AA Bs   Ac                    [        U R                  S5      (       a  g U R                  R                  5         U R                  R                  [        [        R                  " U R                  5      5        g )Nr*   )	r,   r'   rZ   rE   r+   setr`   dataclassesasdictr:   s    r   r/   #StepwisePlugin.pytest_sessionfinish   sN    4;;.. ++-

);+=+=d>N>N+OPr   )r+   rZ   r'   rV   rX   r.   rW   Nr'   r
   rG   rI   )rG   r1   r.   r   rG   rI   )r'   r
   rn   zlist[nodes.Item]rG   rI   )r   r   rG   rI   )rG   zlist[str] | NonerH   )rJ   rK   rL   rM   r[   rY   rj   r{   r   r   r/   rQ   rR   r   r   r&   r&   c   s?    4) +<+<%5+<	+<Z80
Qr   r&   )r   r   rG   rI   r   r   )
__future__r   r   r   r   typingr   r   _pytestr   _pytest.cacheproviderr	   _pytest.configr
   _pytest.config.argparsingr   _pytest.mainr   _pytest.reportsr   typing_extensionsr   r`   r   r(   r/   	dataclassr1   r&   rR   r   r   <module>r      st    "        ' ! ,   & &% <P > > >8nQ nQr   