o
    rhK                     @  s  d Z ddlmZ ddlZddlZ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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 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% ddl$m&Z& ddl$m'Z' ddl$m(Z( ej)dk rddl*m+Z+ erdd l,m-Z- dd!l.m/Z/ dgd&d'Z0dhd*d+Z1did.d/Z2did0d1Z3djd7d8Z4	dkdld<d=Z5dmd>d?Z6dmd@dAZ7dmdBdCZ8dndDdEZ9dodHdIZ:dpdMdNZ;	9dqdrdQdRZ<dsdUdVZ=edWd9dXZ>eej?G dYdZ dZee> Z@dtd\d]ZAdudadbZBG dcdd ddZCdudedfZDdS )vz3Basic collect and runtest protocol implementations.    )annotationsN)Callable)cast)final)Generic)Literal)TYPE_CHECKING)TypeVar   )
BaseReport)CollectErrorRepr)CollectReport)
TestReport)timing)ExceptionChainRepr)ExceptionInfo)TerminalRepr)Parser)check_ispytest)	Collector)	Directory)Item)Node)Exit)OutcomeException)Skipped)TEST_OUTCOME)      )BaseExceptionGroup)Session)TerminalReporterparserr   returnNonec                 C  s@   | j dddd}|jddtd ddd	 |jd
dtdddd	 d S )Nzterminal reporting	Reportinggeneral)afterz--durationsstoreNz1Show N slowest setup/test durations (N=0 for all))actiontypedefaultmetavarhelpz--durations-ming{Gzt?zJMinimal duration in seconds for inclusion in slowest list. Default: 0.005.)getgroup	addoptionintfloat)r"   group r4   L/var/www/html/alpaca_bot/venv/lib/python3.10/site-packages/_pytest/runner.pypytest_addoption2   s"   
r6   terminalreporterr!   c           	      C  s*  | j jj}| j jj}| j  }|d u rd S | }g }|j D ]}|D ]}t|dr.|| q"q|s4d S |j	dd dd |sF|
dd n|
dd| d	 |d | }t|D ]8\}}|d
k r|j|k r|d |dt||  d|dd  d S ||jdd|jdd|j  qZd S )Ndurationc                 S  s   | j S N)r8   )xr4   r4   r5   <lambda>U   s    z)pytest_terminal_summary.<locals>.<lambda>T)keyreverse=zslowest durationszslowest z
 durations    (z durations < gz,s hidden.  Use -vv to show these durations.)z02.2fzs z<8 )configoption	durationsdurations_minget_verbositystatsvalueshasattrappendsort	write_sep	enumerater8   
write_linelenwhennodeid)	r7   rF   rG   verbosetrdlistreplistrepir4   r4   r5   pytest_terminal_summaryG   s:   





&rZ   sessionr    c                 C  s   t  | _d S r9   )
SetupState_setupstater[   r4   r4   r5   pytest_sessionstartf      r_   c                 C  s   | j d  d S r9   )r]   teardown_exactr^   r4   r4   r5   pytest_sessionfinishj   s   rb   itemr   nextitemItem | Noneboolc                 C  s:   | j }|j| j| jd t| |d |j| j| jd dS )N)rS   locationrd   T)ihookpytest_runtest_logstartrS   rg   runtestprotocolpytest_runtest_logfinish)rc   rd   ri   r4   r4   r5   pytest_runtest_protocoln   s
   rm   Tloglist[TestReport]c                 C  s   t | d}|r| js|   t| d|}|g}|jr5| jddr%t|  | jdds5|t| d| | j	j
s=| j	jr?d }|t| d||d |rRd| _d | _|S )	N_requestsetup	setupshowF	setuponlycallteardownrh   )rK   rp   _initrequestcall_and_reportpassedrD   	getoptionshow_test_itemrL   r[   
shouldfail
shouldstopfuncargs)rc   rn   rd   
hasrequestrX   reportsr4   r4   r5   rk   v   s"   

rk   c                 C  s^   | j  }|  |d || j tt| dg }|r)|dd| |	  dS )zAShow test function, parameters and the fixtures of the test item.z        fixturenamesz (fixtures used: {})z, N)
rD   get_terminal_writerlinewriterS   sortedgetattrformatjoinflush)rc   twused_fixturesr4   r4   r5   rz      s   

rz   c                 C  s   t | d | jj|  d S )Nrq   )_update_current_test_varr[   r]   rq   )rc   r4   r4   r5   pytest_runtest_setup   s   
r   c              
   C  s   t | d zt`t`t`tjdkrt`W n	 ty   Y nw z|   W d S  t	yN } zt
|t_|t_tjdkr=|t_|jd usDJ |jjt_ d }~ww )Nrt   )r      r   )r   sys	last_type
last_valuelast_tracebackversion_infolast_excAttributeErrorruntest	Exceptionr+   __traceback__tb_next)rc   er4   r4   r5   pytest_runtest_call   s.   




r   c                 C  s&   t | d | jj| t | d  d S )Nru   )r   r[   r]   ra   )rc   rd   r4   r4   r5   pytest_runtest_teardown   s   
r   rR   +Literal['setup', 'call', 'teardown'] | Nonec                 C  sD   d}|r| j  d| d}|dd}|tj|< dS tj| dS )zUpdate :envvar:`PYTEST_CURRENT_TEST` to reflect the current item and stage.

    If ``when`` is None, delete ``PYTEST_CURRENT_TEST`` from the environment.
    PYTEST_CURRENT_TESTz () z(null)N)rS   replaceosenvironpop)rc   rR   var_namevaluer4   r4   r5   r      s   r   reportr   tuple[str, str, str] | Nonec                 C  s&   | j dv r| jr
dS | jrdS dS d S )N)rq   ru   )errorEERROR)skippedsSKIPPED)r@   r@   r@   )rR   failedr   r   r4   r4   r5   pytest_report_teststatus   s   
r   $Literal['setup', 'call', 'teardown']r   c                   s    j }|dkr|jn|dkr|jn|dkr|jnJ d| tf} jdds1|tf7 }tj	 fdd||d	}|j
 |d
}|rN|j|d t||r[|j ||d |S )Nrq   rt   ru   FzUnhandled runtest hook case: usepdbc                     s   dd iS )Nrc   r4   r4   r4   rc   kwdsruntest_hookr4   r5   r;      s    z!call_and_report.<locals>.<lambda>)rR   reraiserc   rt   r   nodert   r   )ri   r   r   r   r   rD   ry   KeyboardInterruptCallInfo	from_callpytest_runtest_makereportpytest_runtest_logreportcheck_interactive_exceptionpytest_exception_interact)rc   rR   rn   r   ri   r   rt   r   r4   r   r5   rw      s(   

rw   rt   CallInfo[object]c                 C  s8   | j du rdS t|drdS t| j jttjfrdS dS )zVCheck whether the call raised an exception that should be reported as
    interactive.NFwasxfailT)excinforK   
isinstancer   r   bdbBdbQuit)rt   r   r4   r4   r5   r      s   

r   TResult)	covariantc                   @  s|   e Zd ZU dZded< ded< ded< ded< ded	< d
ed< ddd#ddZed$ddZe	d%d&ddZ	d'd!d"Z
dS )(r   z/Result/Exception info of a function invocation.TResult | None_result#ExceptionInfo[BaseException] | Noner   r2   startstopr8   /Literal['collect', 'setup', 'call', 'teardown']rR   F)	_ispytestresultr   rf   r#   r$   c                C  s0   t | || _|| _|| _|| _|| _|| _d S r9   )r   r   r   r   r   r8   rR   )selfr   r   r   r   r8   rR   r   r4   r4   r5   __init__  s   
zCallInfo.__init__r   c                 C  s$   | j durt| dtt| jS )zlThe return value of the call, if it didn't raise.

        Can only be accessed if excinfo is None.
        Nz has no valid result)r   r   r   r   r   r   r4   r4   r5   r   2  s   
zCallInfo.resultNfuncCallable[[], TResult]r   <type[BaseException] | tuple[type[BaseException], ...] | NoneCallInfo[TResult]c              	   C  s   d}t  }t  }z| }W n ty)   t }|dur%t|j|r% d}Y nw t  }|| }	t  }
| ||
|	|||ddS )a  Call func, wrapping the result in a CallInfo.

        :param func:
            The function to call. Called without arguments.
        :type func: Callable[[], _pytest.runner.TResult]
        :param when:
            The phase in which the function is called.
        :param reraise:
            Exception or exceptions that shall propagate if raised by the
            function, instead of being wrapped in the CallInfo.
        NT)r   r   r8   rR   r   r   r   )r   timeperf_counterBaseExceptionr   from_currentr   r   )clsr   rR   r   r   r   precise_startr   precise_stopr8   r   r4   r4   r5   r   ?  s.   
zCallInfo.from_callstrc                 C  s6   | j d u rd| jd| jdS d| jd| j dS )Nz<CallInfo when=z	 result: >z	 excinfo=)r   rR   r   r   r4   r4   r5   __repr__i  s   
zCallInfo.__repr__)r   r   r   r   r   r2   r   r2   r8   r2   rR   r   r   rf   r#   r$   )r#   r   r9   )r   r   rR   r   r   r   r#   r   )r#   r   )__name__
__module____qualname____doc____annotations__r   propertyr   classmethodr   r   r4   r4   r4   r5   r     s    
 )r   CallInfo[None]c                 C  s   t | |S r9   )r   from_item_and_callr   r4   r4   r5   r   o  r`   r   	collectorr   r   c                   s  d fdd}t j|dttfd}d }|jsd}n\tg}tjd}|d ur,|	|j
 t|jjt|r[d	} |jd
}t|tsIJ t||j}|sPJ t|j|j|jf}nd} |j}	t|	dsst|	tsoJ t|	}	|	}|js{|jnd }
t j|||
}||_|S )Nr#   list[Item | Collector]c                     sB   t  tr jjj j jd jj jdd t	 
 S )N
importmodeconsider_namespace_packages)rootpathr   )r   r   rD   pluginmanager_loadconftestmodulespathry   r   getinilistcollectr4   r   r4   r5   r   t  s   

	z+pytest_make_collect_report.<locals>.collectr   )r   rx   unittestr   r   r   
toterminal)r#   r   )r   r   r   
SystemExitr   r   r   modulesgetrL   SkipTestr   r   tuple_repr_failure_pyr   repr	reprcrashr   r   linenomessagerepr_failurerK   r   r   r   rS   rt   )r   r   rt   longreproutcomeskip_exceptionsr   r_r	errorinfor   rX   r4   r   r5   pytest_make_collect_reports  s8   

r
  c                   @  s8   e Zd ZdZdddZddd	ZdddZdddZdS )r\   aE  Shared state for setting up/tearing down test items or collectors
    in a session.

    Suppose we have a collection tree as follows:

    <Session session>
        <Module mod1>
            <Function item1>
        <Module mod2>
            <Function item2>

    The SetupState maintains a stack. The stack starts out empty:

        []

    During the setup phase of item1, setup(item1) is called. What it does
    is:

        push session to stack, run session.setup()
        push mod1 to stack, run mod1.setup()
        push item1 to stack, run item1.setup()

    The stack is:

        [session, mod1, item1]

    While the stack is in this shape, it is allowed to add finalizers to
    each of session, mod1, item1 using addfinalizer().

    During the teardown phase of item1, teardown_exact(item2) is called,
    where item2 is the next item to item1. What it does is:

        pop item1 from stack, run its teardowns
        pop mod1 from stack, run its teardowns

    mod1 was popped because it ended its purpose with item1. The stack is:

        [session]

    During the setup phase of item2, setup(item2) is called. What it does
    is:

        push mod2 to stack, run mod2.setup()
        push item2 to stack, run item2.setup()

    Stack:

        [session, mod2, item2]

    During the teardown phase of item2, teardown_exact(None) is called,
    because item2 is the last item. What it does is:

        pop item2 from stack, run its teardowns
        pop mod2 from stack, run its teardowns
        pop session from stack, run its teardowns

    Stack:

        []

    The end!
    r#   r$   c                 C  s
   i | _ d S r9   )stackr   r4   r4   r5   r     s   
zSetupState.__init__rc   r   c                 C  s   |  }| j D ]\}\}}||v sJ d|r"|d |d q	|t| jd D ]4}|| jvs5J |jgdf| j|< z|  W q, ty` } z| j| d ||jff| j|<  d}~ww dS )z4Setup objects along the collector chain to the item.z(previous item was not torn down properlyr   r
   N)		listchainr  itemswith_tracebackrQ   ru   rq   r   r   )r   rc   needed_collectorscol
finalizersexcr4   r4   r5   rq     s"   zSetupState.setup	finalizerCallable[[], object]r   r   c                 C  sN   |rt |tr	J t|sJ || jv sJ || jf| j| d | dS )zgAttach a finalizer to the given node.

        The node must be currently active in the stack.
        r   N)r   r   callabler  rL   )r   r  r   r4   r4   r5   addfinalizer  s   zSetupState.addfinalizerrd   re   c              
   C  s(  |r|  pg }g }| jrqt| j |dt| j krnS| j \}\}}g }|rN| }z|  W n tyK }	 z||	 W Y d}	~	nd}	~	ww |s+t|dkrZ|	| n|rnd|}
|t
|
|ddd  | jst|dkr{|d |rt
d|ddd |du r| jrJ dS dS )zTeardown the current stack up until reaching nodes that nextitem
        also descends from.

        When nextitem is None (meaning we're at the last item), the entire
        stack is torn down.
        Nr
   zerrors while tearing down r   zerrors during test teardown)r  r  r   keysrQ   popitemr   r   rL   extendr   )r   rd   r  
exceptionsr   r  _these_exceptionsfinr   msgr4   r4   r5   ra     s<    


zSetupState.teardown_exactN)r#   r$   rc   r   r#   r$   )r  r  r   r   r#   r$   )rd   re   r#   r$   )r   r   r   r   r   rq   r  ra   r4   r4   r4   r5   r\     s    
?


r\   c                 C  sN   | j }|j| d |j| d}|jdd }|r%t||r%|j| ||d |S )Nr   rt   r   )ri   pytest_collectstartr
  __dict__r   r   r   )r   ri   rX   rt   r4   r4   r5   collect_one_node4  s   r#  )r"   r   r#   r$   )r7   r!   r#   r$   )r[   r    r#   r$   )rc   r   rd   re   r#   rf   )TN)rc   r   rn   rf   rd   re   r#   ro   r   )rc   r   rd   re   r#   r$   )rc   r   rR   r   r#   r$   )r   r   r#   r   )T)rc   r   rR   r   rn   rf   r#   r   )rt   r   r   r   r#   rf   )rc   r   rt   r   r#   r   )r   r   r#   r   )Er   
__future__r   r   dataclassesr   r   typestypingr   r   r   r   r   r   r	   r   r   r   r   r   _pytestr   _pytest._code.coder   r   r   _pytest.config.argparsingr   _pytest.deprecatedr   _pytest.nodesr   r   r   r   _pytest.outcomesr   r   r   r   r   exceptiongroupr   _pytest.mainr    _pytest.terminalr!   r6   rZ   r_   rb   rm   rk   rz   r   r   r   r   r   rw   r   r   	dataclassr   r   r
  r\   r#  r4   r4   r4   r5   <module>   s|   





	







_
3 