]L i'TUddlmZddlZddlmcmZddlZddl Z ddl m Z m Z m Z ddlmZmZddlmZmZmZddlmZmZddlZddlZddlmZddlmZd d lmZm Z d d l!m"Z"d d l#m$Z$e jJd krddl&m'Z'da(de)d<da*de)d<da+d*dZ,e d+dZ-d,dZ.d-dZ/ej`dd.dZ1ej`d d/dZ2ej`dd0dZ3ejhded1dZ5ejhd2d Z6ejhd3d!Z7Gd"d#Z8ejhd$%d4d&Z9ejhd$%d4d'Z:ejhd5d(Z;ejhd6d)Z12G< < V WWc #Ktt|}tatj j dMtj j|}tjtj j||xsi}tj|j|atdz a ttdza tsd}t|u}|stjd|fdt|fdtj vstj"trtj$tndtj$|dz}dd|iz}t'tj(|dx}}tj+dxaayy#tdza tsd}t|u}|stjd|fdt|fdtj vstj"trtj$tndtj$|dz}dd|iz}t'tj(|dx}}tj+dxaawwxYww)Nr)is not)z%(py0)s is not %(py3)sr)py0py3zassert %(py5)spy5)rrrrsniffiocurrent_async_library_cvargetsetcallbackreset enter_contextcreate_test_runner_runner_leases @pytest_ar_call_reprcompare @py_builtinslocals_should_repr_global_name _safereprAssertionError_format_explanationclose) backend_namebackend_optionsasynclibtoken @py_assert2 @py_assert1 @py_format4 @py_format6s r# get_runnerrE%s $\2!  - - 1 1$ 7 ?66::<HE  " "7#E#E#K#KU S)/R'55  ' ' 8 aN3!(, ,=, , , ,= , , , , , ,= , , ,= , , , , , , , , , ,    !.2 2MO !(, ,=, , , ,= , , , , , ,= , , ,= , , , , , , , , , ,    !.2 2MOs B;J>F$CJ$CJJc.|jddddy)N anyio_modestrictz-AnyIO plugin mode (either "strict" or "auto")string)defaulthelptype)addini)parsers r#pytest_addoptionrOCs MM <  r%c|jdd|jddk(rW|jjdr;|jddk(r&|j t j ddyyyy) NmarkerszManyio: mark the (coroutine function) test to be run asynchronously via anyio.rGautoasyncio asyncio_modezlAnyIO auto mode has been enabled together with pytest-asyncio auto mode. This may cause unexpected behavior.r)addinivalue_linegetini pluginmanager has_pluginissue_config_time_warningpytestPytestConfigWarning)configs r#pytest_configurer]Ls W  l#v-  + +I 6 MM. )V 3((  & &<     4 7 .r%T) hookwrapperc#Kdfd }|jts tr~d|jvrp||_|j}d|jvxs|xjdz c_d|jvxs|xjdz c_ d|_||_SdS#|_||_wxYww)N anyio_backendrequestc;K|jr[trPtjt|jur&jj |j}n}t |\}}r||d< r||d<t||5}t|r|j||Ed{n|j||dddy7"#1swYyxYww)Nr`ra) instancer rL__self____func____get__r$rEr run_asyncgen_fixture run_fixture) r`rakwargs local_funcr=r>runnerfunchas_backend_arghas_request_args r#wrapperz%pytest_fixture_setup..wrapperas   T]]#tG,<,<'==..w/?/?@JJ(CM(R% o &3F? #  'F9   o 6 =&!*-!66z6JJJ((V<<  = =J = =s0BC'!C6C7C C'CC$ C'r`ra)r`r rarrir returnr )rlr r fixturenamesargnames) fixturedefrarooriginal_argnamerlrmrns @@@r#pytest_fixture_setuprw_s=4 ??D$#6t#< g22 2%JO)22 '6*:M:M'MMOM##'99#'0J4G4G'GGOG##|3# 7"& &6 # N#' &6 #sBCB2C2CC)tryfirstcx|j||rt|dr|jjn|}t |rx|j j ddk(}|jd}t|dd}|s|std|Dr%tjjd|yyyy) N hypothesisrGrRanyio pytestmarkc3:K|]}|jdk(yw)r{N)name).0markers r# z,pytest_pycollect_makeitem..sH&v{{g-Hsr`) istestfunctionhasattrrz inner_testr r\rVget_closest_markergetattranyrZmark usefixtures) collectorrobj inner_funcanyio_auto_moder own_markerss r#pytest_pycollect_makeitemrsT*29#|2LS^^..RU z *'..55lCvMO11':F!#|R8KHKHH ''8=I ++r%c  d fd }|jjd}|rt|\ t|jdr`|jj j j|jk7r&t r||jj _yt|jrg|j}|jjDcic]}||| }}t 5} |j|j| dddyycc}w#t$r4}t|D] }t|t t"t$fs||d}~wwxYw#1swYyxYw)Nclt5}|j|dddy#1swYyxYwN)rErun_test)rirkr=r> original_funcs r#run_with_hypothesisz/pytest_pyfunc_call..run_with_hypothesiss2  o 6 3& OOM6 2 3 3 3s*3r`rzT)rir rrNone)funcargsr-r$rrrzr __qualname__r _fixtureinfortrErrrrrKeyboardInterrupt SystemExit) pyfuncitemrr"rargtestargsrkexcgrpexcr=r>rs @@@r#pytest_pyfunc_callrsQ3!!%%o6G(CG(L% o :>>< 0&NN55@@M))-@-M-MM&}5;NJNN--8 z~~ .!**H6@6M6M6V6VWsXc]*WHWL/: fOOJNNH=  X&1&92%cD2CZ+PQ"%612  s6' D+E0D00 E-9)E(#E((E--E00E9module)scopeparamsc|jSr)paramrqs r#r`r`s ==r%c0t|tr|S|dS)Nrrrrps r#anyio_backend_namers-%Qr%c0t|triS|dS)Nrrrps r#anyio_backend_optionsrs-% Qr%c4eZdZdZddZeddZdd dZy) 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>||_tt|_yr)_kindr.int _generated)selfkinds r#__init__zFreePortFactory.__init__s c(*r%c|jS)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)rs r#rzFreePortFactory.kindszzr%NcJ||g}n@tjg}tjr|jtj d}t 5}|D]r}|j tj||j}|tjk(rdnd} |j||f|r`|jd}t||jvr&|jj||cdddSddd#t$rYwxYw#1swYxYw)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 Nrz::1z 127.0.0.1r) socketAF_INEThas_ipv6appendAF_INET6rr1rbindOSError getsocknameradd)rfamilyfamiliesportstacksockaddrs r#__call__zFreePortFactory.__call__s   xH'H0D $& $F ..v}}VTZZ/PQD$*foo$=5;D 4,/ #//1!4 $4??2++D1# $ $ $#  $ $s7A D!D 4D7?D DDDDD")rsocket.SocketKindrrr)rrrr)rzsocket.AddressFamily | Nonerrr)__name__ __module__r__doc__rpropertyrrr}r%r#rrs% %$r%rsession)rc4ttjSr)rr SOCK_STREAMr}r%r#free_tcp_port_factoryrs 6-- ..r%c4ttjSr)rr SOCK_DGRAMr}r%r#free_udp_port_factoryrs 6,, --r%c|Srr})rs r# free_tcp_portr# ""r%c|Srr})rs r# free_udp_portr(rr%)r"objectrrztuple[str, dict[str, Any]])r=rr>dict[str, Any]rrzIterator[TestRunner])rNz pytest.Parserrrr)r\z pytest.Configrrr)rur rar rrzGenerator[Any])rzpytest.Module | pytest.Classrrrrrrr)rr rrz bool | None)rar rrr )r`r rrr)r`r rrr)rrr)rCallable[[], int]rrr)rrrrr)= __future__rbuiltinsr6_pytest.assertion.rewrite assertionrewriter4rsyscollections.abcrrr contextlibrrinspectr r r typingr r rZr+_pytest.fixturesr_pytest.outcomesr_core._eventlooprr_core._exceptionsrabcr version_infoexceptiongrouprr__annotations__rr3r$rErOr]hookimplrwrrfixturer`rrrrrrrr}r%r#rs" 990EE '!A1g-%)")"& &X33(6333: &T"-#-`$>+>36>=C> > >"$! !Hh'7'9:;    :$:$zi /!/i .!.####r%