
    Mh$                       U d dl mZ d dlZd dlZd dlmZmZmZ d dlm	Z	m
Z
 d dlmZmZmZ d dlmZmZ d dlZd dlZd dlmZ d dlmZ d	d
lmZmZ d	dlmZ d	dlmZ ej        dk     rd dl m!Z! da"de#d<   da$de#d<   d a%dBdZ&e
dCd            Z'dDd!Z( ej)        d"#          dEd'            Z* ej)        d"(          dFd,            Z+ ej)        d"(          dGd/            Z, ej-        d0 e            1          dHd2            Z.ej-        dId4            Z/ej-        dJd5            Z0 G d6 d7          Z1 ej-        d89          dKd:            Z2 ej-        d89          dKd;            Z3ej-        dLd?            Z4ej-        dMdA            Z5dS )N    )annotationsN)Callable	GeneratorIterator)	ExitStackcontextmanager)isasyncgenfunctioniscoroutinefunctionismethod)Anycast)
SubRequest)Exit   )get_all_backendsget_async_backend)iterate_exceptions)
TestRunner)      )ExceptionGroupzTestRunner | None_current_runnerzExitStack | None_runner_stackbackendobjectreturntuple[str, dict[str, Any]]c                   t          | t                    r| i fS t          | t                    rt          |           dk    rot          | d         t                    rTt          | d         t                    r9t          t          t          t          t          t          f         f         |           S t          d          )N   r   r   z@anyio_backend must be either a string or tuple of (string, dict))
isinstancestrtuplelendictr   r   	TypeError)r   s    S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/anyio/pytest_plugin.pyextract_backend_and_optionsr'      s    '3 ={	GU	#	# =G(9(9gaj#&& 	=:gaj$+G+G 	=c4S>12G<<<
V
W
WW    backend_namer!   backend_optionsdict[str, Any]Iterator[TestRunner]c              #    K   t           t          |           }t                      at          j                            d           It          j                            |           }t                              t          j        j	        |           |pi }t          
                    |                    |                    a t          dz  a	 t           V  t          dz  at          s(t          J t                                           d xaa d S d S # t          dz  at          s&t          J t                                           d xaa w xY wNr   )r   r   r   r   sniffiocurrent_async_library_cvargetsetcallbackresetenter_contextcreate_test_runner_runner_leasesclose)r)   r*   asynclibtokens       r&   
get_runnerr;   %   sM     
 $\22!-11$77? 6::<HHE""7#E#KUSSS)/R'55''88
 
 aN3! 	3 ,,,!!!.22MOOO	3 	3 	! 	3 ,,,!!!.22MO2222s   	D 9Econfigr   Nonec                2    |                      dd           d S )NmarkerszManyio: mark the (coroutine function) test to be run asynchronously via anyio.)addinivalue_line)r<   s    r&   pytest_configurerA   C   s*    
W    r(   T)hookwrapper
fixturedefrequestGenerator[Any]c              #  T  K   dfd}| j         t                    st                    rsd|j        v rj|| _         | j        }d| j        v xs| xj        d	z  c_        d| j        v xs| xj        d
z  c_        	 d V | _         || _        S # | _         || _        w xY wd V S )Nargsr   anyio_backendrD   r   kwargsr   c              ?    K   |j         rWt                    rHt          j                  t          |j                   u r j                            |j                   }n}t          |           \  }}	r| |d<   
r||d<   t          ||          5 }t          |          r|	                    ||          E d {V  n|
                    ||          V  d d d            d S # 1 swxY w Y   d S )NrH   rD   )instancer   type__self____func____get__r'   r;   r	   run_asyncgen_fixturerun_fixture)rH   rD   rG   rI   
local_funcr)   r*   runnerfunchas_backend_arghas_request_args           r&   wrapperz%pytest_fixture_setup.<locals>.wrapperL   sa     
 		 T]##tG,<'='===..w/?@@JJJ(CM(R(R%o 	4&3F?# 	( 'F9o66 	=&!*-- =!66z6JJJJJJJJJJ((V<<<<<		= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   AC&&C*-C*rH   rD   )
rG   r   rH   r   rD   r   rI   r   r   r   )rT   r	   r
   fixturenamesargnames)rC   rD   rW   original_argnamerT   rU   rV   s       @@@r&   pytest_fixture_setupr]   J   s     = = = = = = = =8 ?D$ 7#6t#<#< 7g222%JO)2'6*:M'MMO :##'99##'0J4G'GGO 4##|3##7"&
&6
## #'
&6
#6666EENs   B B#)tryfirst	collectornameobjc                h   |                      ||          rt          |d          r|j        j        n|}t	          |          rl|                     d          }t          |dd          }|st          d |D                       r-t          j	        
                    d          |           d S d S d S d S )N
hypothesisanyio
pytestmark c              3  ,   K   | ]}|j         d k    V  dS )rd   N)r`   ).0markers     r&   	<genexpr>z,pytest_pycollect_makeitem.<locals>.<genexpr>   s)      NNV[G3NNNNNNr(   rH   )istestfunctionhasattrrc   
inner_testr
   get_closest_markergetattranypytestmarkusefixtures)r_   r`   ra   
inner_funcri   own_markerss         r&   pytest_pycollect_makeitemrv   }   s    T** >29#|2L2LUS^..RU
z** 	>11'::F!#|R88K >NN+NNNNN >''88=====> >	> 	>> >r(   
pyfuncitembool | Nonec           	       	
 d

fd}| j                             d          }|r/t          |          \  t          | j        d          rC| j        j        j        

j        |j        k    r t          
          r|| j        j        _        d S t          | j                  r| j         		fd| j	        j
        D             }t                    5 }	 |                    | j        |           nJ# t          $ r=}t          |          D ]'}t          |t           t"          t$          f          r||( d }~ww xY w	 d d d            n# 1 swxY w Y   d	S d S )NrI   r   r   r=   c                     t                    5 }|                    |            d d d            d S # 1 swxY w Y   d S N)r;   run_test)rI   rS   r)   r*   original_funcs     r&   run_with_hypothesisz/pytest_pyfunc_call.<locals>.run_with_hypothesis   s    o66 	3&OOM6222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   6::rH   rc   c                "    i | ]}||         S rf   rf   )rh   argfuncargss     r&   
<dictcomp>z&pytest_pyfunc_call.<locals>.<dictcomp>   s    WWWsXc]WWWr(   T)rI   r   r   r=   )r   r1   r'   rl   ra   rc   rm   __qualname__r
   _fixtureinfor[   r;   r|   r   r   r    r   KeyboardInterrupt
SystemExit)rw   r~   r   testargsrS   excgrpexcr)   r*   r   r}   s          @@@@r&   pytest_pyfunc_callr      s   3 3 3 3 3 3 3 3 !%%o66G (CG(L(L%o:><00 	&N5@M)-@-MMM&}55 O;NJN-84z~.. 	!*HWWWWj6M6VWWWHL/:: fOOJNH====%   1&99 2 2%cD2CZ+PQQ 2"%612  >               44s6   EC54E5
D<?8D77D<<EEEmodule)scopeparamsc                    | j         S r{   )paramrY   s    r&   rH   rH      s
    =r(   rH   c                @    t          | t                    r| S | d         S )Nr   r    r!   rX   s    r&   anyio_backend_namer      s%    -%%  Qr(   c                @    t          | t                    ri S | d         S r.   r   rX   s    r&   anyio_backend_optionsr      s$    -%%  	Qr(   c                  <    e Zd ZdZddZedd            ZdddZdS )FreePortFactoryaO  
    Manages port generation based on specified socket kind, ensuring no duplicate
    ports are generated.

    This class provides functionality for generating available free ports on the
    system. It is initialized with a specific socket kind and can generate ports
    for given address families while avoiding reuse of previously generated ports.

    Users should not instantiate this class directly, but use the
    ``free_tcp_port_factory`` and ``free_udp_port_factory`` fixtures instead. For simple
    uses cases, ``free_tcp_port`` and ``free_udp_port`` can be used instead.
    kindsocket.SocketKindr   r=   c                P    || _         t          t                               | _        d S r{   )_kindr2   int
_generated)selfr   s     r&   __init__zFreePortFactory.__init__   s    
c(**r(   c                    | j         S )z
        The type of socket connection (e.g., :data:`~socket.SOCK_STREAM` or
        :data:`~socket.SOCK_DGRAM`) used to bind for checking port availability

        )r   )r   s    r&   r   zFreePortFactory.kind   s     zr(   Nfamilysocket.AddressFamily | Noner   c                L   ||g}n8t           j        g}t           j        r|                    t           j                   	 d}t                      5 }|D ]}|                    t          j         || j                            }|t           j        k    rdnd}	 |                    ||f           n# t          $ r Y  nRw xY w|s|
                                d         }|| j        vr(| j                            |           |cddd           S ddd           n# 1 swxY w Y   )z
        Return an unbound port for the given address family.

        :param family: if omitted, both IPv4 and IPv6 addresses will be tried
        :return: a port number

        NTr   z::1z	127.0.0.1r   )socketAF_INEThas_ipv6appendAF_INET6r   r5   r   bindOSErrorgetsocknamer   add)r   r   familiesportstacksockaddrs          r&   __call__zFreePortFactory.__call__   s    xHH'H 1000	$D $& $ $F ..v}VTZ/P/PQQD$*fo$=$=55;D		4,////"      5#//11!44?22++D111#$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$s8   ADB/.D/
B=9D<B==ADD!D)r   r   r   r=   )r   r   r{   )r   r   r   r   )__name__
__module__r   __doc__r   propertyr   r   rf   r(   r&   r   r      sk         % % % %    X$ $ $ $ $ $ $r(   r   session)r   c                 4    t          t          j                  S r{   )r   r   SOCK_STREAMrf   r(   r&   free_tcp_port_factoryr      s    6-...r(   c                 4    t          t          j                  S r{   )r   r   
SOCK_DGRAMrf   r(   r&   free_udp_port_factoryr     s    6,---r(   r   Callable[[], int]r   c                     |             S r{   rf   )r   s    r&   free_tcp_portr   	        """r(   r   c                     |             S r{   rf   )r   s    r&   free_udp_portr     r   r(   )r   r   r   r   )r)   r!   r*   r+   r   r,   )r<   r   r   r=   )rC   r   rD   r   r   rE   )r_   r   r`   r   ra   r   r   r=   )rw   r   r   rx   )rD   r   r   r   )rH   r   r   r!   )rH   r   r   r+   )r   r   )r   r   r   r   )r   r   r   r   )6
__future__r   r   syscollections.abcr   r   r   
contextlibr   r   inspectr	   r
   r   typingr   r   rq   r/   _pytest.fixturesr   _pytest.outcomesr   _core._eventloopr   r   _core._exceptionsr   abcr   version_infoexceptiongroupr   r   __annotations__r   r7   r'   r;   rA   hookimplr]   rv   r   fixturerH   r   r   r   r   r   r   r   rf   r(   r&   <module>r      s   " " " " " " "  



 9 9 9 9 9 9 9 9 9 9 0 0 0 0 0 0 0 0 E E E E E E E E E E           ' ' ' ' ' ' ! ! ! ! ! ! A A A A A A A A 1 1 1 1 1 1      g------%) ) ) ) )"& & & & &X X X X 3 3 3 3:    T"""/ / / #"/d $> > >  > $! ! !  !H h'7'7'9'9:::   ;:                :$ :$ :$ :$ :$ :$ :$ :$z i   / / / ! / i   . . . ! . # # # # # # # # # #r(   