
    i1                    ^   U d dl mZ d dl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mZ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 m!Z!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.dLdZ/edMd             Z0dNd$Z1dOd'Z2 ej3        d()          dPd.            Z4 ej3        d(/          dQd4            Z5dRd7Z6 ej3        d(/          dSd:            Z7 ej8        d; e            <          dTd=            Z9ej8        dUd?            Z:ej8        dVd@            Z; G dA dB          Z< ej8        d5C          dWdD            Z= ej8        d5C          dWdE            Z>ej8        dXdI            Z?ej8        dYdK            Z@dS )Z    )annotationsN)Callable	GeneratorIterator)	ExitStackcontextmanager)isasyncgenfunctioniscoroutinefunctionismethod)Anycast)FuncFixtureInfo
SubRequest)Exit)	CallSpec2)Scope   )get_available_backends)current_async_libraryget_async_backendreset_current_async_libraryset_current_async_library)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    P/root/projects/qq-shell/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	                      /t          |           }t                              t          |           |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   r   r   callbackr   enter_contextcreate_test_runner_runner_leasesclose)r/   r0   asynclibtokens       r,   
get_runnerr<   -   s4     
 $\22! ""* .l;;E""#>FFF)/R'55''88
 
 aN3! 	3 ,,,!!!.22MOOO	3 	3 	! 	3 ,,,!!!.22MO2222s    	C$ $9Dparserpytest.ParserNonec                6    |                      ddd           d S )N
anyio_modestrictz-AnyIO plugin mode (either "strict" or "auto"))defaulthelp)addini)r=   s    r,   pytest_addoptionrF   K   s0    
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.rA   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)rG   s    r,   pytest_configurerU   S   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   rX   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[   rX   )instancer   type__self____func____get__r-   r<   r	   run_asyncgen_fixturerun_fixture)
r[   rX   r\   
local_funcr/   r0   runnerfunchas_backend_arghas_request_args
          r,   wrapperz%pytest_fixture_setup.<locals>.wrapperh   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[   rX   )r[   r   rX   r   r\   r   r"   r   )rg   r	   r
   fixturenamesargnames)rW   rX   rj   original_argnamerg   rh   ri   s       @@@r,   pytest_fixture_setuprp   f   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
hypothesisrA   rK   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
   rG   rO   get_closest_markergetattranyrS   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.   sessionpytest.Sessionc                    t          t          t          | j                                      D ]\  }}t	          |t
          j                  rt          |j                  r|	                    d          d|j
        vrwg }	 d t          j        t                    D             }n# t          $ r t                      }Y nw xY wt          t!                                D ]\  }}d|v r&t          d|id|idt"          j        i|gg           }n&t          i d|id|idt"          j        i|gg           }|j        }t          |j                  }	d|	vr|	                    d           t-          |j        |j        |	|j                  }
t
          j                            |j        |j         d| d	||j        |
|j        |j        
          }|                    |           || j        ||dz   <   d S )Nrx   r[   c                    h | ]	}|j         
S rz   r|   )r}   fs     r,   	<setcomp>z+pytest_collection_finish.<locals>.<setcomp>   s    KKKQVKKKr.   
_arg2scope)paramsindicesr   _idlistmarks)funcargsr   r   	arg2scopeidlistr   )rn   initialnamesnames_closurename2fixturedefs[])rt   callspeccallobjfixtureinfokeywordsoriginalnamer   )reversedlist	enumerateitemsr&   rS   Functionr
   functionr   rm   dataclassesfieldsr   r+   setr   r   Module_fixtureinfor   appendr   rn   r   r   from_parentparentr   ru   r   )r   iitem	new_items	cs_fieldsparam_indexr    r   finew_names_closurenew_fixtureinfonew_items               r,   pytest_collection_finishr      sY   D7=!9!9::;; 61 614tV_--5	1#DM225	1 ''00<t'888I"KK[-?	-J-JKKK		 " " "EE			" )22H2J2J(K(K '+ '+$W9,,( /9!0+ >$3U\#B!(	      HH  )!# /9!0+ >#2EL"A 'y      H &$()9$:$:!"*;;;%,,_==="1[!#"3%'%8	# # # "?66K -:::::% H /!]!%!2 7     ****'0GM!a!e)$m61 61s   #B,,CC
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/   r0   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}   argr   s     r,   
<dictcomp>z&pytest_pyfunc_call.<locals>.<dictcomp>   s    WWWsXc]WWWr.   T)r\   r   r"   r?   )r   getr-   r   ru   rw   r   __qualname__r
   r   rn   r<   r   r   r   r&   r   KeyboardInterrupt
SystemExit)r   r   r    testargsrf   excgrpexcr/   r0   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)scoper   c                    | 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 r4   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   )_kindr   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_ipv6r   AF_INET6r   r6   r   bindOSErrorgetsocknamer   add)r   r   familiesportstacksockaddrs          r,   __call__zFreePortFactory.__call__8  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   )r   c                 4    t          t          j                  S r   )r   r   SOCK_STREAMrz   r.   r,   free_tcp_port_factoryr   Z  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   d        """r.   r   c                     |             S r   rz   )r   s    r,   free_udp_portr  i  r  r.   )r    r!   r"   r#   )r/   r'   r0   r1   r"   r2   )r=   r>   r"   r?   )rG   rH   r"   r?   )rW   r   rX   r   r"   rY   )rr   rs   rt   r'   ru   r!   r"   r?   )r   r   r"   r?   )r   r   r"   r   )rX   r   r"   r   )r[   r   r"   r'   )r[   r   r"   r1   )r"   r   )r   r   r"   r   )r   r   r"   r   )A
__future__r   r   r   syscollections.abcr   r   r   
contextlibr   r   inspectr	   r
   r   typingr   r   rS   _pytest.fixturesr   r   _pytest.outcomesr   _pytest.pythonr   _pytest.scoper    r   _core._eventloopr   r   r   r   _core._exceptionsr   abcr   version_infoexceptiongroupr   r   __annotations__r   r8   r-   r<   rF   rU   hookimplrp   r   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          8 8 8 8 8 8 8 8 ! ! ! ! ! ! $ $ $ $ $ $       $ $ $ $ $ $            2 1 1 1 1 1      g------%) ) ) ) )"& & & & &X X X X 3 3 3 3:   
 
 
 
& T"""- - - #"-` $> > >  >"71 71 71 71t $! ! !  !H h'='='?'?@@@   A@                :$ :$ :$ :$ :$ :$ :$ :$z i   / / / ! / i   . . . ! . # # # # # # # # # #r.   