
    -2i(                    2   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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(dHdZ)e
dId            Z*dJd"Z+dKd%Z, ej-        d&'          dLd,            Z. ej-        d&-          dMd2            Z/ ej-        d&-          dNd5            Z0 ej1        d6 e            7          dOd8            Z2ej1        dPd:            Z3ej1        dQd;            Z4 G d< d=          Z5 ej1        d>?          dRd@            Z6 ej1        d>?          dRdA            Z7ej1        dSdE            Z8ej1        dTdG            Z9dS )U    )annotationsN)Callable	GeneratorIterator)	ExitStackcontextmanager)isasyncgenfunctioniscoroutinefunctionismethod)Anycast)
SubRequest)Exit   )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    R/var/www/html/pixcura-vrs/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,   r-   asynclibtokens       r)   
get_runnerr9   *   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_addoptionrC   H   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.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)rD   s    r)   pytest_configurerR   P   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   rU   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 )NrX   rU   )instancer   type__self____func____get__r*   r9   r	   run_asyncgen_fixturerun_fixture)
rX   rU   rY   
local_funcr,   r-   runnerfunchas_backend_arghas_request_args
          r)   wrapperz%pytest_fixture_setup.<locals>.wrappere   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*rX   rU   )rX   r   rU   r   rY   r   r   r   )rd   r	   r
   fixturenamesargnames)rT   rU   rg   original_argnamerd   re   rf   s       @@@r)   pytest_fixture_setuprm   c   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>   rH   anyio
pytestmark c              3  ,   K   | ]}|j         d k    V  dS )ru   N)rq   ).0markers     r)   	<genexpr>z,pytest_pycollect_makeitem.<locals>.<genexpr>   s)      HH&v{g-HHHHHHr+   rX   )istestfunctionhasattrrt   
inner_testr
   rD   rL   get_closest_markergetattranyrP   markusefixtures)ro   rq   rr   
inner_funcanyio_auto_moderz   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 )NrY   r   r   r<   c                     t                    5 }|                    |            d d d            d S # 1 swxY w Y   d S N)r9   run_test)rY   rc   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::rX   rt   c                "    i | ]}||         S rw   rw   )ry   argfuncargss     r)   
<dictcomp>z&pytest_pyfunc_call.<locals>.<dictcomp>   s    WWWsXc]WWWr+   T)rY   r   r   r<   )r   getr*   r}   rr   rt   r~   __qualname__r
   _fixtureinfork   r9   r   r   r   r#   r   KeyboardInterrupt
SystemExit)r   r   r   testargsrc   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   )paramri   s    r)   rX   rX      s
    =r+   rX   c                @    t          | t                    r| S | d         S )Nr   r#   r$   rh   s    r)   anyio_backend_namer      s%    -%%  Qr+   c                @    t          | t                    ri S | d         S r1   r   rh   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   )_kindset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   r3   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   rw   r+   r)   r   r      sk         % % % %    X$ $ $ $ $ $ $r+   r   session)r   c                 4    t          t          j                  S r   )r   r   SOCK_STREAMrw   r+   r)   free_tcp_port_factoryr     s    6-...r+   c                 4    t          t          j                  S r   )r   r   
SOCK_DGRAMrw   r+   r)   free_udp_port_factoryr   "  s    6,---r+   r   Callable[[], int]r   c                     |             S r   rw   )r   s    r)   free_tcp_portr   '        """r+   r   c                     |             S r   rw   )r   s    r)   free_udp_portr   ,  r   r+   )r   r   r   r    )r,   r$   r-   r.   r   r/   )r:   r;   r   r<   )rD   rE   r   r<   )rT   r   rU   r   r   rV   )ro   rp   rq   r$   rr   r   r   r<   )r   r   r   r   )rU   r   r   r   )rX   r   r   r$   )rX   r   r   r.   )r   r   )r   r   r   r   )r   r   r   r   ):
__future__r   r   syscollections.abcr   r   r   
contextlibr   r   inspectr	   r
   r   typingr   r   rP   _pytest.fixturesr   _pytest.outcomesr    r   _core._eventloopr   r   r   r   _core._exceptionsr   abcr   version_infoexceptiongroupr   r   __annotations__r   r5   r*   r9   rC   rR   hookimplrm   r   r   fixturerX   r   r   r   r   r   r   r   rw   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          ' ' ' ' ' ' ! ! ! ! ! ! $ $ $ $ $ $            2 1 1 1 1 1      g------%) ) ) ) )"& & & & &X X X X 3 3 3 3:   
 
 
 
& T"""- - - #"-` $> > >  >" $! ! !  !H h'='='?'?@@@   A@                :$ :$ :$ :$ :$ :$ :$ :$z i   / / / ! / i   . . . ! . # # # # # # # # # #r+   