
    ie9                    `   U d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
mZ ddl
m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ZddlmZ ddlZddlZ	 ddlmZ n# e$ r d4dZY nw xY w G d d          Zd4dZ  G d dej!                  Z" G d d          Z# G d d          Z$d5dZ% G d d e          Z&d6d!Z'd7d&Z(e)d'k    rMe*Z*d(e+d)<   e*,                                \  Z-Z.Z/Z0e0Y ej1                    Z2ej3        4                    de2           e2ej5        z   ej6        7                    d*d+          z   ej6        d*<   ne0e_3        e-d,         ej6        d-<   e-d.         ej6        d/<    e8e-d0                   ej6        d1<    ee.d          Z9 e(e9e/7                    d$                     ej3        :                    e-d2         d                   e9j;        _<        e-e9_-        i e9_=         e$e9e*          Z>e9j?        @                    e93           dS dS )8a/  
This module is executed in remote subprocesses and helps to
control a remote testing session and relay back information.
It assumes that 'py' is importable and does not have dependencies
on the rest of the xdist code.  This means that the xdist-plugin
needs not to be installed in remote environments.
    )annotationsN)	Generator)Iterable)Sequence)Any)Literal)	TypedDict)Union)_prepareconfig)setproctitletitlestrreturnNonec                    d S N r   s    S/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/xdist/remote.pyr   r   #   s        c                  8    e Zd ZdZdddd
ZddZddZddZdS )Producera  
    Simplified implementation of the same interface as py.log, for backward compatibility
    since we dropped the dependency on pylib.
    Note: this is defined here because this module can't depend on xdist, so we need
    to have the other way around.
    Tenablednamer   r   boolr   r   c               "    || _         || _        d S r   )r   r   )selfr   r   s      r   __init__zProducer.__init__/   s    	r   c                P    t          |           j         d| j        d| j         dS )N(z
, enabled=))type__name__r   r   r   s    r   __repr__zProducer.__repr__3   s.    t**%NN	NNt|NNNNr   ar   kc                f    | j         r)t          d| j         dg|R i |dt          j        i d S d S )N[]file)r   printr   sysstderr)r   r'   r(   s      r   __call__zProducer.__call__6   sU    < 	>"di"""=Q===!==#*======	> 	>r   c                @     t          |           || j                  S )Nr   )r#   r   )r   r   s     r   __getattr__zProducer.__getattr__:   s    tDzz$5555r   N)r   r   r   r   r   r   )r   r   )r'   r   r(   r   r   r   )r   r   r   r   )r$   
__module____qualname____doc__r   r&   r0   r2   r   r   r   r   r   '   s          6:      O O O O> > > >6 6 6 6 6 6r   r   c                H    	 t          |            d S # t          $ r Y d S w xY wr   )r   	Exceptionr   s    r   worker_titler8   >   s=    U   s    
!!c                      e Zd ZdZdS )Markerr   N)r$   r3   r4   SHUTDOWNr   r   r   r:   r:   F   s        HHHr   r:   c                  ~    e Zd ZdZeeeej                 f         Z	ddZ
ddZdd
ZddZej        dd            ZdS )	TestQueuezcA simple queue that can be inspected and modified while the lock is held via the ``lock()`` method.	execmodelexecnet.gateway_base.ExecModelc                    t          j                    | _        |                                | _        |                                | _        d S r   )collectionsdeque_itemsRLock_lockEvent_has_items_event)r   r>   s     r   r   zTestQueue.__init__O   s;    9D9J9L9L__&&
 ) 1 1r   r   Itemc                    	 |                                  5 }|r |                                cd d d            S 	 d d d            n# 1 swxY w Y   | j                                         ir   )lockpopleftrG   wait)r   locked_itemss     r   getzTestQueue.getT   s    	) 2 2'//112 2 2 2 2 2 2 222 2 2 2 2 2 2 2 2 2 2 2 2 2 2 !&&(((	)s   AA
A
itemr   c                    |                                  5 }|                    |           d d d            d S # 1 swxY w Y   d S r   )rJ   append)r   rO   rM   s      r   putzTestQueue.put\   s    YY[[ 	&L%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   8<<iterableIterable[Item]c                    |                                  5  t          j        |          | _        d d d            d S # 1 swxY w Y   d S r   )rJ   rA   rB   rC   )r   rS   s     r   replacezTestQueue.replace`   s    YY[[ 	6 	6%+H55DK	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   <A A "Generator[collections.deque[Item]]c              #  R  K   | j         5  	 | j        V  | j        r| j                                         nY| j                                         n?# | j        r| j                                         w | j                                         w xY wd d d            d S # 1 swxY w Y   d S r   )rE   rC   rG   setclearr%   s    r   rJ   zTestQueue.lockd   s      Z 	2 	22k!!!; 2)--////)//1111 ; 2)--////)//1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s'   B	A;B<BBB #B N)r>   r?   )r   rH   )rO   rH   r   r   )rS   rT   r   r   )r   rW   )r$   r3   r4   r5   r
   intr   r:   r;   rH   r   rN   rR   rV   
contextlibcontextmanagerrJ   r   r   r   r=   r=   J   s        mmgfo../D2 2 2 2
) ) ) )& & & &6 6 6 6 2 2 2 2 2 2r   r=   c                     e Zd Zd6dZd7dZej        d8d            Zej        d9d            Z ej        d          d:d            Z	ej        d;d            Z
d<dZd=dZej        d>d             Zd;d!Zd?d$Zej        d9d%            Zej        d@d)            Zej        d@d*            Zej        dAd-            Zej        dBd/            Zej        dCd4            Zd5S )DWorkerInteractorconfigpytest.Configchannelexecnet.Channelr   r   c                X   || _         |j        }|                    dd          | _        |d         | _        t          d| j         |j        j                  | _        || _	        t          | j	        j        j                  | _        d | _        |j                            |            d S )Nworkerid?
testrunuidzworker-r   )r`   workerinputrN   re   rg   r   optiondebuglogrb   r=   gatewayr>   torunnextitem_indexpluginmanagerregister)r   r`   rb   rh   s       r   r   zWorkerInteractor.__init__q   s    &,&8#
C88%l35dm55v}?RSSSt|3=>>
EI%%d+++++r   r   r   kwargsobjectc                l    |                      d||           | j                            ||f           d S )Nsending)rk   rb   send)r   r   rq   s      r   	sendeventzWorkerInteractor.sendevent|   s8    D&)))4.)))))r   excreprc                    t          |          }|                    d          D ]}|                     d|           t                              d|           d S )N
zIERROR>internal_error)formatted_error)r   splitrk   
interactorrv   )r   rw   r{   lines       r   pytest_internalerrorz%WorkerInteractor.pytest_internalerror   sa    g,,#))$// 	& 	&DHHY%%%%-OOOOOr   sessionpytest.Sessionc                ^    || _         t                      }|                     d|           d S )Nworkerready)
workerinfo)r   getinfodictrv   )r   r   r   s      r   pytest_sessionstartz$WorkerInteractor.pytest_sessionstart   s.     ]]
}<<<<<r   T)hookwrapper
exitstatusr[   Generator[None, object, None]c              #     K   | j         j        }t          |          |d<   | j        j        |d<   | j        j        |d<   d V  |                     d|           d S )Nr   
shouldfail
shouldstopworkerfinished)workeroutput)r`   r   r[   r   r   r   rv   )r   r   r   s      r   pytest_sessionfinishz%WorkerInteractor.pytest_sessionfinish   sd      '+{'?%(__\"%)\%<\"%)\%<\"'lCCCCCr   c                0    |                      d           d S )Ncollectionstartrv   r%   s    r   pytest_collectionz"WorkerInteractor.pytest_collection   s    ()))))r   command5tuple[str, dict[str, Any]] | Literal[Marker.SHUTDOWN]c                4   |t           j        u r&| j                            t           j                   d S |\  }}|                     d||           |dk    r'|d         D ]}| j                            |           d S |dk    rEt          t          | j        j                            D ]}| j                            |           d S |dk    r&| j                            t           j                   d S |dk    r| 	                    |d                    d S d S )Nzreceived commandruntestsindicesruntests_allshutdownsteal)
r:   r;   rm   rR   rk   rangelenr   itemsr   )r   r   r   rq   is        r   handle_commandzWorkerInteractor.handle_command   s0    fo%%JNN6?+++Ff#T6222:I& " "
q!!!!" "^##3t|12233 " "
q!!!!" "ZJNN6?+++++W__JJvi())))) _r   r   Sequence[int]c                ~   t          |          | j                                        5 }t          fd|D                       }t	          |          t	                    k    r'| j                            fd|D                        ng }ddd           n# 1 swxY w Y   |                     d|           dS )a   
        Remove tests from the queue.

        Removes either all requested tests, or none, if some of these tests
        are not in the queue (for example, if they were processed already).

        :param indices: indices of the tests to remove.
        c              3  $   K   | ]
}|v |V  d S r   r   .0rO   requested_sets     r   	<genexpr>z)WorkerInteractor.steal.<locals>.<genexpr>   s-      QQ44=;P;P$;P;P;P;PQQr   c              3  $   K   | ]
}|v|V  d S r   r   r   s     r   r   z)WorkerInteractor.steal.<locals>.<genexpr>   s6       # #!T5N5ND5N5N5N5N# #r   Nunscheduled)r   )rY   rm   rJ   listr   rV   rv   )r   r   locked_queuestolenr   s       @r   r   zWorkerInteractor.steal   s    GZ__ 		,QQQQ<QQQQQF 6{{c-0000
"" # # # #%1# # #     		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 	}f55555s   A%BB"Br   c                T   |                      d           | j                            | j        t          j                   | j                                        | _        | j        t          j        ur6| 	                                 |j
        s|j        rn| j        t          j        u6dS )Nzentering main loop)	endmarkerT)rk   rb   setcallbackr   r:   r;   rm   rN   rn   run_one_testr   r   r   r   s     r   pytest_runtestloopz#WorkerInteractor.pytest_runtestloop   s    %&&&  !4 PPP"jnn..!88! W%7  !88 tr   c                   | j         }t          |t                    }|sddt          j                    v st          j        t                    rt          j        t                    nddt          j                    v st          j        |           rt          j        |           ndt          j        |          dt          j                    v st          j        t                    rt          j        t                    ndt          j        |          dz  }t          t          j	        |                    d x}}| j         | _
        | j                                        | _         | j        j        }|| j
                 }| j         t          j        u rd }n| j         }d }||u}	|	st          j        d|	fd||f          dt          j                    v st          j        |           rt          j        |           ndt          j        |          t          j        |          dz  }
d	d
|
iz  }t          t          j	        |                    d x}x}	}|| j                  }t%          d|j        z             t)          j                    }| j        j                            ||           t)          j                    |z
  }t%          d           |                     d| j
        |           d S )NzYassert %(py6)s
{%(py6)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.nextitem_index
}, %(py4)s)
}
isinstancer   r[   )py0py1py3py4py6)is not)z:%(py2)s
{%(py2)s = %(py0)s.nextitem_index
} is not %(py5)s)r   py2py5zassert %(py7)spy7z[pytest-xdist running] %s)rO   nextitemz[pytest-xdist idle]runtest_protocol_complete)
item_indexduration)rn   r   r[   @py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanationr   rm   rN   r   r   r:   r;   _call_reprcomparer8   nodeidtimeperf_counterr`   hookpytest_runtest_protocolrv   )r   @py_assert2@py_assert5@py_format7r   rO   r   @py_assert1@py_assert4@py_assert3@py_format6@py_format8startr   s                 r   r   zWorkerInteractor.run_one_test   s   -3z-s333333333333333z33333z3333333333333$33333$333333-33333333333s33333s33333333333333333333333333-"jnn.."T_%&/11HH&2d2&d2222222222&d2222222222224222224222222&2222d222222222222222222222222222T01H04;>???!##00dX0NNN$&&.*+++'DOh 	 	
 	
 	
 	
 	
r   r   list[pytest.Item]c                   |                     d          r|D ]}t                      }|                    d          D ]d}t          |j                  dk    r|j        d         n|j                            dd          }|                    t          |                     e|s|j	         dd
                    t          |                     |_        d S d S )N	loadgroupxdist_groupr   r   default@_)getvaluerY   iter_markersr   argsrq   rN   addr   r   joinsorted_nodeid)r   r`   r   rO   gnamesmarkr   s          r   pytest_collection_modifyitemsz.WorkerInteractor.pytest_collection_modifyitems   s     ??;'' 	K K K#&55 --m<< * *D ty>>A-- 	!![__VY?? 
 JJs4yy)))) "&+JJ0H0HJJ	K 	KK Kr   c                    |                      dt          | j        j                  d |j        D                        d S )Ncollectionfinishc                    g | ]	}|j         
S r   )r   )r   rO   s     r   
<listcomp>z=WorkerInteractor.pytest_collection_finish.<locals>.<listcomp>  s    777777r   )topdirids)rv   r   r`   rootpathr   r   s     r   pytest_collection_finishz)WorkerInteractor.pytest_collection_finish   sM    t{+,,77777 	 	
 	
 	
 	
 	
r   r   locationtuple[str, int | None, str]c                6    |                      d||           d S )Nlogstartr   r   r   r   r   r   s      r   pytest_runtest_logstartz(WorkerInteractor.pytest_runtest_logstart  s"     	z&8DDDDDr   c                6    |                      d||           d S )N	logfinishr   r   r   s      r   pytest_runtest_logfinishz)WorkerInteractor.pytest_runtest_logfinish  s"     	{6HEEEEEr   reportpytest.TestReportc                   | j         j                            | j         |          }| j        |d<   | j        |d<   | j        |d<   | j        j        | j                 }|j        }|j        }||k    }|st          j
        d|fd||f          t          j        |          t          j        |          dt          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }d	d
|iz  }t          t          j        |                    d x}x}x}}|                     d|           d S )Nr`   r   r   	worker_idtestrun_uid)==)zJ%(py3)s
{%(py3)s = %(py1)s.nodeid
} == %(py7)s
{%(py7)s = %(py5)s.nodeid
}r   )r   r   r   r   zassert %(py9)spy9
testreportdata)r`   r   pytest_report_to_serializabler   re   rg   r   r   r   r   r   r   r   r   r   r   r   rv   )	r   r   r  @py_assert0r   @py_assert6r   r   @py_format10s	            r   pytest_runtest_logreportz)WorkerInteractor.pytest_runtest_logreport  st   {==;v > 
 
 "_\ M["o]|!$/2J29JV]J9]JJJJJJJJJJ9]JJJJJ2JJJJ9JJJJJJJJJJJVJJJJJVJJJJJJ]JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ|$/////r   pytest.CollectReportc                    |j         s?| j        j                            | j        |          }|                     d|           d S d S )Nr   collectreportr  )passedr`   r   r  rv   )r   r   r  s      r   pytest_collectreportz%WorkerInteractor.pytest_collectreport#  s]     } 	7;#AA{6 B  D NN?N66666		7 	7r   warning_messagewarnings.WarningMessagewhentuple[str, int, str] | Nonec                T    |                      dt          |          |||           d S )Nwarning_recorded)warning_message_datar  r   r   )rv   serialize_warning_message)r   r  r  r   r   s        r   pytest_warning_recordedz(WorkerInteractor.pytest_warning_recorded,  s@     	!:?!K!K 	 	
 	
 	
 	
 	
r   N)r`   ra   rb   rc   r   r   )r   r   rq   rr   r   r   )rw   rr   r   r   )r   r   r   r   )r   r[   r   r   )r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r`   ra   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   )r   r  r   r   )
r  r  r  r   r   r   r   r  r   r   )r$   r3   r4   r   rv   pytesthookimplr   r   r   r   r   r   r   r   r   r   r   r   r
  r  r  r   r   r   r_   r_   p   s$       	, 	, 	, 	,* * * * _P P P _P _= = = _=
 V_&&&D D D '&D _* * * _** * * **6 6 6 60 _   _
 
 
 
2K K K K( _
 
 
 _
 _E E E _E _F F F _F _0 0 0 _0 _7 7 7 _7 _
 
 
 _
 
 
r   r_   r  r  dict[str, Any]c                   t          | j        t                    rt          | j                  j        }t          | j                  j        }t          | j                  }	 t          j        | j        j	                   | j        j	        }n$# t          j
        $ r d }Y nw xY w| j        }d }d }d }| j        r| j        j        }| j        j        }nd }d }||||||d}| j        D ]X}|dv rt          | |          }		 t          j        |	           |	||<   2# t          j
        $ r t          |	          ||<   Y Uw xY w|S )N)message_strmessage_modulemessage_class_namemessage_argscategory_modulecategory_class_name)messagecategory)r   r#  Warningr#   r3   r$   r   execnetdumpsr   	DumpErrorr$  _WARNING_DETAILSgetattrrepr)
r  r  r  r  r   r!  r"  result	attr_nameattrs
             r   r  r  =  s    /)733 o566A!/"9::C/122	8M/16777 +27LL   	  	  	 LLL	 
 &-! #)2=-6?" #(0$*2 F %5 % %	///	22	%M$ !%F9   	+ 	+ 	+ $T

F9	+ Ms$   "B B! B!=D!D;:D;c                  `    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   d
ed<   dS )
WorkerInfor   versionztuple[int, int, int, str, int]version_infosysplatformplatform
executablecwdidzexecnet.XSpecspecN)r$   r3   r4   __annotations__r   r   r   r0  r0  p  sc         LLL0000MMMOOOHHHGGGr   r0  c            	         dd l } t          t          j        t	          t          j                  t          j         |                                  t          j        t          j                              S )Nr   )r1  r2  r3  r4  r5  r6  )	r4  dictr.   r1  tupler2  r5  osgetcwd)r4  s    r   r   r   {  sW    OOO3+,,L""$$>IKK   r   r`   ra   basetemp
str | Nonec                    |                      d          dk    | j        _        d| j        _        d| j        _        d| j        _        d| j        _        d | j        _        d | j        _        || j        _	        d S )Ndistr   Fno)
r   ri   r   
looponfailusepdbrB  distloadnumprocessesmaxprocessesr?  )r`   r?  s     r   setup_configrI    si    $oof55DFM$FM FMFM"FM!%FM!%FM%FMr   __channelexec__rc   rb   
PYTHONPATH rg   PYTEST_XDIST_TESTRUNUIDre   PYTEST_XDIST_WORKERworkercountPYTEST_XDIST_WORKER_COUNTmainargv)r`   )r   r   r   r   )r  r  r   r  )r   r0  )r`   ra   r?  r@  r   r   )Ar5   
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   rA   collections.abcr   r   r   r\   enumr=  r.   r   typingr   r   r	   r
   warnings_pytest.configr   r&  r  r   ImportErrorr   r8   Enumr:   r=   r_   r  r0  r   rI  r$   rb   r9  receiverh   r   option_dictchange_sys_pathr>  
importpathpathinsertpathsepenvironrN   r   r`   basename_parserprogr   r}   r   pytest_cmdline_mainr   r   r   <module>rj     s     # " " " " "                   % % % % % % $ $ $ $ $ $ $ $ $ $ $ $      				 



                           ) ) ) ) ) )  )))))))        6 6 6 6 6 6 6 6.       TY   #2 #2 #2 #2 #2 #2 #2 #2LJ
 J
 J
 J
 J
 J
 J
 J
Z0 0 0 0f       
 
 
 
& & & &    &G&&&&6=oo6G6G3K{ORY[[
:&&&#bjnn\2&F&FF 	
<   #,7,EBJ()(3J(?BJ$%.1c+m2L.M.MBJ*+^D$''FL44555'**;z+B1+EFFFN$FF!!&'22J
K##6#222221 ! s   ,A3 3	A?>A?