
    ,h$                    "   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%d)dZ&e
	 	 	 	 	 	 d*d       Z'd+dZ( ejR                  d      d,d       Z* ejR                  d      d-d       Z+ ejR                  d      d.d       Z, ejZ                  d e             d/d       Z.ejZ                  d0d       Z/ejZ                  d1d        Z0 G d! d"      Z1 ejZ                  d#$      d2d%       Z2 ejZ                  d#$      d2d&       Z3ejZ                  d3d'       Z4ejZ                  d4d(       Z5y)5    )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_stackc                   t        | t              r| i fS t        | t              r^t        |       dk(  rPt        | d   t              r=t        | d   t              r*t        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)backends    U/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/anyio/pytest_plugin.pyextract_backend_and_optionsr$      sq    '3{	GU	#G(9gaj#&:gaj$+Gc4S>12G<<
V
WW    c              #  \  K   t         t        |       }t               at        j
                  j                  d       Mt        j
                  j                  |       }t        j                  t        j
                  j                  |       |xs i }t        j                  |j                  |            a t        dz  a	 t          t        dz  at        s!t        J t        j                          d xaa y y # t        dz  at        s!t        J t        j                          d xaa w w xY wwNr   )r   r   r   r   sniffiocurrent_async_library_cvargetsetcallbackresetenter_contextcreate_test_runner_runner_leasesclose)backend_namebackend_optionsasynclibtokens       r#   
get_runnerr6   %   s    
 $\2!--11$7? 66::<HE""7#E#E#K#KUS)/R'55''8
 aN3! ,,!.22MO  	! ,,!.22MO s   B;D,>C7 1D,72D))D,c                (    | j                  dd       y )NmarkerszManyio: mark the (coroutine function) test to be run asynchronously via anyio.)addinivalue_line)configs    r#   pytest_configurer;   C   s    
Wr%   T)hookwrapperc              #    K   	 	 	 	 	 	 	 	 	 	 dfd}| j                   t              st              r~d|j                  v rp|| _         | j                  }d| j                  v xs| xj                  dz  c_        d| j                  v xs| xj                  dz  c_        	 d | _         || _        S d S # | _         || _        w xY ww)Nanyio_backendrequestc              ?    K   |j                   r[t              rPt        j                        t        |j                         u r&j                  j                  |j                         }n}t        |       \  }}	r| |d<   
r||d<   t        ||      5 }t        |      r|j                  ||      E d {    n|j                  ||       d d d        y 7 "# 1 sw Y   y xY ww)Nr>   r?   )instancer   type__self____func____get__r$   r6   r	   run_asyncgen_fixturerun_fixture)r>   r?   argskwargs
local_funcr2   r3   runnerfunchas_backend_arghas_request_args           r#   wrapperz%pytest_fixture_setup.<locals>.wrapperL   s     
 T]]#tG,<,<'==..w/?/?@JJ(CM(R%o&3F?# 'F9o6 	=&!*-!66z6JJJ((V<<		= 	=J	= 	=s0   BC'!C6C7C	C'CC$ C'r>   r?   )
rH   r   r>   r   r?   r   rI   r   returnr   )rL   r	   r
   fixturenamesargnames)
fixturedefr?   rO   original_argnamerL   rM   rN   s       @@@r#   pytest_fixture_setuprW   J   s     ==#&=1;=GJ=	=8 ??D$#6t#<g222%JO)22'6*:M:M'MMOM##'99#'0J4G4G'GGOG##|3#7"&
&6
#N #'
&6
#s   B C&B< )C<CC)tryfirstc                8   | j                  ||      rt        |d      r|j                  j                  n|}t	        |      rX| j                  d      }t        |dd      }|st        d |D              r%t        j                  j                  d      |       y y y y )N
hypothesisanyio
pytestmark c              3  :   K   | ]  }|j                   d k(    yw)r[   N)name).0markers     r#   	<genexpr>z,pytest_pycollect_makeitem.<locals>.<genexpr>   s     NV[[G3Ns   r>   )istestfunctionhasattrrZ   
inner_testr
   get_closest_markergetattranypytestmarkusefixtures)	collectorr_   obj
inner_funcra   own_markerss         r#   pytest_pycollect_makeitemrp   }   s    T*29#|2LS^^..RU
z*11':F!#|R8KN+NN''8= O + +r%   c           	       	
 d	
fd}| j                   j                  d      }|r t        |      \  	
t        | j                  d      r`| j                  j
                  j                  j                  |j                  k7  r&t              r|| j                  j
                  _        y t        | j                        rg| j                   }| j                  j                  D ci c]  }|||   
 }}t        	
      5 }	 |j                  | j                  |       	 d d d        yy c c}w # t        $ r4}t        |      D ]   }t        |t         t"        t$        f      s||  d }~ww xY w# 1 sw Y   yxY w)Nc                 l    t              5 }|j                  |        d d d        y # 1 sw Y   y xY wN)r6   run_test)rI   rK   r2   r3   original_funcs     r#   run_with_hypothesisz/pytest_pyfunc_call.<locals>.run_with_hypothesis   s2    o6 	3&OOM62	3 	3 	3s   *3r>   rZ   T)rI   r   rR   None)funcargsr*   r$   rd   rm   rZ   re   __qualname__r
   _fixtureinforT   r6   rt   r   r   r   r   KeyboardInterrupt
SystemExit)
pyfuncitemrv   r"   rx   argtestargsrK   excgrpexcr2   r3   ru   s            @@@r#   pytest_pyfunc_callr      sQ   3 !!%%o6G(CG(L%o:>><0&NN55@@M))-@-M-MM&}5;NJNN--8z~~.!**H6@6M6M6V6VWsXc]*WHWL/: fOOJNNH=  X & 1&9 2%cD2CZ+PQ"%612  s6   'D+E0D00	E-9)E(#E((E--E00E9module)scopeparamsc                    | j                   S rs   )paramrQ   s    r#   r>   r>      s    ==r%   c                0    t        | t              r| S | d   S )Nr   r   r   rP   s    r#   anyio_backend_namer      s    -%Qr%   c                0    t        | t              ri S | d   S r'   r   rP   s    r#   anyio_backend_optionsr      s    -%	Qr%   c                  4    e Zd ZdZddZedd       Zdd	dZy)
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.
    c                >    || _         t        t                  | _        y rs   )_kindr+   int
_generated)selfkinds     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     zzr%   Nc                J   ||g}n@t         j                  g}t         j                  r|j                  t         j                         	 d}t               5 }|D ]r  }|j                  t        j                   || j                              }|t         j                  k(  rdnd}	 |j                  ||f       |r`|j                         d   }t || j                  vr&| j                  j                  |       |cddd       S ddd       # t        $ r Y  w xY w# 1 sw Y   xY w)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

        Nr   z::1z	127.0.0.1r   )socketAF_INEThas_ipv6appendAF_INET6r   r.   r   bindOSErrorgetsocknamer   add)r   familyfamiliesportstacksockaddrs          r#   __call__zFreePortFactory.__call__   s    xH'H0D $& $F ..v}}VTZZ/PQD$*foo$=5;D		4,/  #//1!4$ 4??2++D1#$ $ $  # $ $s7   AD!D	4D7?D		DDDDD")r   socket.SocketKindrR   rw   )rR   r   rs   )r   zsocket.AddressFamily | NonerR   r   )__name__
__module__ry   __doc__r   propertyr   r   r]   r%   r#   r   r      s%    %  $r%   r   session)r   c                 4    t        t        j                        S rs   )r   r   SOCK_STREAMr]   r%   r#   free_tcp_port_factoryr      s    6--..r%   c                 4    t        t        j                        S rs   )r   r   
SOCK_DGRAMr]   r%   r#   free_udp_port_factoryr     s    6,,--r%   c                     |        S rs   r]   )r   s    r#   free_tcp_portr   	       ""r%   c                     |        S rs   r]   )r   s    r#   free_udp_portr     r   r%   )r"   objectrR   ztuple[str, dict[str, Any]])r2   r   r3   dict[str, Any]rR   zIterator[TestRunner])r:   r   rR   rw   )rU   r   r?   r   rR   zGenerator[Any])rl   r   r_   r   rm   r   rR   rw   )r}   r   rR   zbool | None)r?   r   rR   r   )r>   r   rR   r   )r>   r   rR   r   )rR   r   )r   Callable[[], int]rR   r   )r   r   rR   r   )6
__future__r   r   syscollections.abcr   r   r   
contextlibr   r   inspectr	   r
   r   typingr   r   ri   r(   _pytest.fixturesr   _pytest.outcomesr   _core._eventloopr   r   _core._exceptionsr   abcr   version_infoexceptiongroupr   r   __annotations__r   r0   r$   r6   r;   hookimplrW   rp   r   fixturer>   r   r   r   r   r   r   r   r]   r%   r#   <module>r      s   "  
 9 9 0 E E    ' ! A 1 g-%)" )"& &X 33(633 3: T"/ #/d $>  > $!  !H h'7'9: ;        :$ :$z i / !/ i . !. # # # #r%   