
    Bh	                       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j4                   G d d             Z G d d      Zy)    )annotationsN)datetime)	timedelta)Any)TYPE_CHECKING)nodes)Cache)Config)Parser)Session)
TestReport)Selfzcache/stepwisec                    | j                  d      }|j                  dddddd       |j                  d	d
dddd       |j                  dddddd       y )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     [/var/www/html/Telegram-Engagement-Pod-/env/lib/python3.12/site-packages/_pytest/stepwise.pypytest_addoptionr      s    OOI&E	OOQ   
OO)   
OO)      c                    | j                   j                  s| j                   j                  rd| j                   _        | j	                  d      r&| j
                  j                  t        |       d       y y )NTr   stepwiseplugin)optionr   r   r   	getoptionpluginmanagerregisterStepwisePlugin)configs    r   pytest_configurer(   5   sV    }}""fmm&B&B!%
#%%nV&<>NO $r   c                    | j                   j                  d      s0| j                   j                  J t        | j                   d      ry y y )Nr   workerinput)r'   r#   cachehasattrsessions    r   pytest_sessionfinishr/   =   sG    >>##J/~~##///7>>=1  2 0r   c                  X    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y
)StepwiseCacheInfoz
str | Nonelast_failedz
int | Nonelast_test_countstrlast_cache_date_strc                @    t        j                  | j                        S N)r   fromisoformatr5   selfs    r   last_cache_datez!StepwiseCacheInfo.last_cache_dateS   s    %%d&>&>??r   c                X     | d d t        j                         j                               S )N)r2   r3   r5   )r   now	isoformat)clss    r   emptyzStepwiseCacheInfo.emptyW   s'      ( 8 8 :
 	
r   c                R    t        j                         j                         | _        y r7   )r   r=   r>   r5   r9   s    r   update_date_to_nowz$StepwiseCacheInfo.update_date_to_now_   s    #+<<>#;#;#= r   N)returnr   )rC   r   rC   None)	__name__
__module____qualname____annotations__propertyr;   classmethodr@   rB    r   r   r1   r1   F   sG     
   @ @ 
 
>r   r1   c                  P    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	y)r&   c                    || _         d | _        g | _        |j                  J |j                  | _        |j	                  d      | _        |j	                  d      | _        | j                         | _        y )Nr   r   )	r'   r.   report_statusr+   r#   skipreset_load_cached_infocached_info)r:   r'   s     r   __init__zStepwisePlugin.__init__d   si    '+(*||'''"LL
 **?;	!++,<=
113r   c                l   | j                   j                  t        d       }|r	 t        |d   |d   |d         S t        j                         S # t        t
        f$ rV}t        |      j                   d| }| j                  j                  d| d       Y d }~t        j                         S d }~ww xY w)Nr2   r3   r5   z: z!error reading cache, discarding ())r+   getSTEPWISE_CACHE_DIRr1   KeyError	TypeErrortyperF   rO   appendr@   )r:   cached_dicteerrors       r   rR   z 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 B39B..B3c                    || _         y r7   r-   )r:   r.   s     r   pytest_sessionstartz"StepwisePlugin.pytest_sessionstart~   s	    r   c                   | j                   j                  }t        |      | j                   _        | j                  r-| j                  j                  d       d | j                   _        y | j                   j                  s| j                  j                  d       y |K|t        |      k7  r=| j                  j                  dt        |       d| d       d | j                   _        y d }t        |      D ],  \  }}|j                  | j                   j                  k(  s*|} n || j                  j                  d       y t        j                         | j                   j                  z
  }t        t        |j                                     }| j                  j                  d| d	| d
       |d | }|d |= |j                  j!                  |       y )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)rS   r3   lenrQ   rO   r\   r2   	enumeratenodeidr   r=   r;   r   inttotal_secondshookpytest_deselected)	r:   r'   rd   r3   failed_indexindexitem	cache_age
deselecteds	            r   pytest_collection_modifyitemsz,StepwisePlugin.pytest_collection_modifyitems   s    **::+.u:(::%%&FG+/D(++%%&QR&?c%j+H%%8UDWXgWhhjk ,0D( $U+KE4{{d..:::$ , %%&WX )9)9)I)III!#i.E.E.G*HII%%L>)KI; W/ 0 }-Jm|m$KK))
);r   c                   |j                   r| j                  r<|j                  | j                  j                  k(  rd | j                  _        d| _        y |j                  | j                  _        | j
                  J d| j
                  _        y |j                  dk(  r6|j                  | j                  j                  k(  rd | j                  _        y y y )NFz0Test failed, continuing from this test next run.call)failedrP   rg   rS   r2   r.   
shouldstopwhen)r:   reports     r   pytest_runtest_logreportz'StepwisePlugin.pytest_runtest_logreport   s    ==yy ==D$4$4$@$@@37D$$0!	 06}}  ,||///F ' {{f$==D$4$4$@$@@37D$$0 A %r   c                    | j                   j                         dk\  r)| j                  r| j                  D cg c]  }d| 	 c}S y c c}w )Nr   z
stepwise: )r'   get_verbosityrO   )r:   xs     r   pytest_report_collectionfinishz-StepwisePlugin.pytest_report_collectionfinish   sL    ;;$$&!+0B0B.2.@.@A.@j$.@AA Bs   Ac                    t        | j                  d      ry | j                  j                          | j                  j                  t        t        j                  | j                               y )Nr*   )	r,   r'   rS   rB   r+   setrX   dataclassesasdictr9   s    r   r/   z#StepwisePlugin.pytest_sessionfinish   sK    4;;. ++-

);+=+=d>N>N+OPr   Nr'   r
   rC   rE   )rC   r1   r.   r   rC   rE   )r'   r
   rd   zlist[nodes.Item]rC   rE   )rw   r   rC   rE   )rC   zlist[str] | NonerD   )
rF   rG   rH   rT   rR   ra   rq   rx   r|   r/   rL   r   r   r&   r&   c   s?    4) +<+<%5+<	+<Z80
Qr   r&   )r   r   rC   rE   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(   r/   	dataclassr1   r&   rL   r   r   <module>r      st    "        ' ! ,   & &% <P > > >8nQ nQr   