
    n i'                    &   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%dGdZ&e
dHd            Z'dId!Z(dJd$Z) ej*        d%&          dKd+            Z+ ej*        d%,          dLd1            Z, ej*        d%,          dMd4            Z- ej.        d5 e            6          dNd7            Z/ej.        dOd9            Z0ej.        dPd:            Z1 G d; d<          Z2 ej.        d=>          dQd?            Z3 ej.        d=>          dQd@            Z4ej.        dRdD            Z5ej.        dSdF            Z6dS )T    )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    J/var/www/findabus/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parserpytest.ParserNonec                8    |                      dddd           d S )N
anyio_modestrictz-AnyIO plugin mode (either "strict" or "auto")string)defaulthelptype)addini)r<   s    r&   pytest_addoptionrG   C   s3    
MM<	      r(   configpytest.Configc                &   |                      dd           |                     d          dk    r]| j                            d          rE|                     d          dk    r.|                     t          j        d          d           d S d S d S d S )	NmarkerszManyio: mark the (coroutine function) test to be run asynchronously via anyio.r@   autoasyncioasyncio_modezlAnyIO auto mode has been enabled together with pytest-asyncio auto mode. This may cause unexpected behavior.r   )addinivalue_linegetinipluginmanager
has_pluginissue_config_time_warningpytestPytestConfigWarning)rH   s    r&   pytest_configurerV   L   s    
W  
 	l##v-- ++I66 	.MM.))V33((&<  	
 	
 	
 	
 	
	 	.---33r(   T)hookwrapper
fixturedefr   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anyio_backendr   rY   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 )Nr\   rY   )instancer   rE   __self____func____get__r'   r;   r	   run_asyncgen_fixturerun_fixture)
r\   rY   r]   
local_funcr)   r*   runnerfunchas_backend_arghas_request_args
          r&   wrapperz%pytest_fixture_setup.<locals>.wrappera   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*r\   rY   )r\   r   rY   r   r]   r   r   r   )rg   r	   r
   fixturenamesargnames)rX   rY   rj   original_argnamerg   rh   ri   s       @@@r&   pytest_fixture_setuprp   _   s     = = = = = = = =4 ?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pytest.Module | pytest.Classnameobjc                   |                      ||          rt          |d          r|j        j        n|}t	          |          r| j                            d          dk    }|                     d          }t          |dd          }|s|st          d |D                       r-t          j                            d          |           d S d S d S d S )	N
hypothesisr@   rL   anyio
pytestmark c              3  ,   K   | ]}|j         d k    V  dS )rx   N)rt   ).0markers     r&   	<genexpr>z,pytest_pycollect_makeitem.<locals>.<genexpr>   s)      HH&v{g-HHHHHHr(   r\   )istestfunctionhasattrrw   
inner_testr
   rH   rP   get_closest_markergetattranyrT   markusefixtures)rr   rt   ru   
inner_funcanyio_auto_moder}   own_markerss          r&   pytest_pycollect_makeitemr      s     T** >29#|2L2LUS^..RU
z** 		>'.55lCCvMO11'::F!#|R88K>> HHKHHHHH>
 ''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 )Nr]   r   r   r>   c                     t                    5 }|                    |            d d d            d S # 1 swxY w Y   d S N)r;   run_test)r]   rf   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::r\   rw   c                "    i | ]}||         S rz   rz   )r|   argfuncargss     r&   
<dictcomp>z&pytest_pyfunc_call.<locals>.<dictcomp>   s    WWWsXc]WWWr(   T)r]   r   r   r>   )r   r1   r'   r   ru   rw   r   __qualname__r
   _fixtureinforn   r;   r   r   r   r    r   KeyboardInterrupt
SystemExit)r   r   r   testargsrf   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   )paramrl   s    r&   r\   r\      s
    =r(   r\   c                @    t          | t                    r| S | d         S )Nr   r    r!   rk   s    r&   anyio_backend_namer      s%    -%%  Qr(   c                @    t          | t                    ri S | d         S r.   r   rk   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   rz   r(   r&   r   r      sk         % % % %    X$ $ $ $ $ $ $r(   r   session)r   c                 4    t          t          j                  S r   )r   r   SOCK_STREAMrz   r(   r&   free_tcp_port_factoryr     s    6-...r(   c                 4    t          t          j                  S r   )r   r   
SOCK_DGRAMrz   r(   r&   free_udp_port_factoryr     s    6,---r(   r   Callable[[], int]r   c                     |             S r   rz   )r   s    r&   free_tcp_portr   #        """r(   r   c                     |             S r   rz   )r   s    r&   free_udp_portr   (  r   r(   )r   r   r   r   )r)   r!   r*   r+   r   r,   )r<   r=   r   r>   )rH   rI   r   r>   )rX   r   rY   r   r   rZ   )rr   rs   rt   r!   ru   r   r   r>   )r   r   r   r   )rY   r   r   r   )r\   r   r   r!   )r\   r   r   r+   )r   r   )r   r   r   r   )r   r   r   r   )7
__future__r   r   syscollections.abcr   r   r   
contextlibr   r   inspectr	   r
   r   typingr   r   rT   r/   _pytest.fixturesr   _pytest.outcomesr   _core._eventloopr   r   _core._exceptionsr   abcr   version_infoexceptiongroupr   r   __annotations__r   r7   r'   r;   rG   rV   hookimplrp   r   r   fixturer\   r   r   r   r   r   r   r   rz   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"""- - - #"-` $> > >  >" $! ! !  !H h'7'7'9'9:::   ;:                :$ :$ :$ :$ :$ :$ :$ :$z i   / / / ! / i   . . . ! . # # # # # # # # # #r(   