Ë
     ²‘i(  ã                  óF  — 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jD                  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+d.d„Z, ejZ                  d¬«      d/d„«       Z. ejZ                  d¬«      	 	 	 	 	 	 	 	 d0d„«       Z/ ejZ                  d¬«      d1d„«       Z0 ejb                  d e«       ¬«      d2d „«       Z2ejb                  d3d!„«       Z3ejb                  d4d"„«       Z4 G d#„ d$«      Z5 ejb                  d%¬&«      d5d'„«       Z6 ejb                  d%¬&«      d5d(„«       Z7ejb                  d6d)„«       Z8ejb                  d7d*„«       Z9y)8é    )Ú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_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    úJ/var/www/telegram/venv/lib/python3.12/site-packages/anyio/pytest_plugin.pyÚextract_backend_and_optionsr'       sq   € Ü�'œ3ÔØ˜ˆ{ÐÜ	�GœUÔ	#¬¨G«¸Ò(9Ü�g˜a‘j¤#Ô&¬:°g¸a±jÄ$Ô+GÜœœc¤4¬¬S¨¡>Ð1Ñ2°GÓ<Ð<ä
ÐVÓ
WÐWó    c              #  óâ  K  — t         €nt        | «      }t        «       at	        «       €%t        | «      }t        j                  t        |«       |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   r   r   Úcallbackr   Úenter_contextÚcreate_test_runnerÚ_runner_leasesÚclose)Úbackend_nameÚbackend_optionsÚasynclibÚtokens       r&   Ú
get_runnerr4   *   sï   è ø€ ô
 ÐÜ$ \Ó2ˆÜ!›ˆÜ Ó"Ð*ô .¨lÓ;ˆEÜ×"Ñ"Ô#>ÀÔFà)Ò/¨RˆÜ'×5Ñ5Ø×'Ñ'¨Ó8ó
ˆô �aÑ€Nð3ÜÒä˜!ÑˆÝÜ Ð,Ð,Ð,Ü×ÑÔ!Ø.2Ð2ˆM™Oð øô 	˜!ÑˆÝÜ Ð,Ð,Ð,Ü×ÑÔ!Ø.2Ð2ˆM™Oð üs   ‚A>C/ÂB: Â	1C/Â:2C,Ã,C/c                ó,   — | j                  ddd¬«       y )NÚ
anyio_modeÚstrictz-AnyIO plugin mode (either "strict" or "auto"))ÚdefaultÚhelp)Úaddini)Úparsers    r&   Úpytest_addoptionr<   H   s   € Ø
‡M�MØØØ<ð õ r(   c                óþ   — | j                  dd«       | j                  d«      dk(  rW| j                  j                  d«      r;| j                  d«      dk(  r&| j	                  t        j                  d«      d«       y y y y )	NÚmarkerszManyio: mark the (coroutine function) test to be run asynchronously via anyio.r6   Ú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)Úconfigs    r&   Úpytest_configurerJ   P   sƒ   € Ø
×ÑØØWôð
 	�‰�lÓ# vÒ-Ø× Ñ ×+Ñ+¨IÔ6Ø�M‰M˜.Ó)¨VÒ3à×(Ñ(Ü×&Ñ&ð<óð õ	
ð 4ð 7ð 	.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)NrM   rN   )Úinstancer   ÚtypeÚ__self__Ú__func__Ú__get__r'   r4   r	   Úrun_asyncgen_fixtureÚrun_fixture)
rM   rN   ÚkwargsÚ
local_funcr0   r1   ÚrunnerÚfuncÚhas_backend_argÚhas_request_args
          €€€r&   Úwrapperz%pytest_fixture_setup.<locals>.wrappere   s×   øè ø€ ð ×ÒÜ˜”Ü�T—]‘]Ó#¤t¨G×,<Ñ,<Ó'=Ñ=àŸ™×.Ñ.¨w×/?Ñ/?Ó@‰JàˆJä(CÀMÓ(RÑ%ˆ�oÙØ&3ˆF�?Ñ#áØ 'ˆF�9Ñä˜ oÓ6ð 	=¸&Ü! *Ô-Ø!×6Ñ6°zÀ6ÓJ×JÑJà×(Ñ(¨°VÓ<Ò<÷		=ð 	=àJø÷	=ð 	=üs0   ƒBC'Â!CÂ6CÂ7CÃ	C'ÃCÃC$Ã C'©rM   ©rN   )rM   r   rN   r   rW   r   Úreturnr   )rZ   r	   r
   ÚfixturenamesÚargnames)Ú
fixturedefrN   r]   Úoriginal_argnamerZ   r[   r\   s       @@@r&   Úpytest_fixture_setupre   c   sÅ   úè ø€ ÷=ð4 �?‰?€DÜ˜$ÔÔ#6°tÔ#<Ø˜g×2Ñ2Ñ2Ø%ˆJŒOØ)×2Ñ2Ðà'6¸*×:MÑ:MÐ'MÐM�OÐMØ×#Ò#Ð'9Ñ9Õ#à'0°J×4GÑ4GÐ'GÐG�OÐGØ×#Ò# |Ñ3Õ#ð7Úà"&�
”Ø&6�
Õ#â€Nøð #'�
”Ø&6�
Õ#üs   …BCÂB2 ÂCÂ2CÃC)Útryfirstc                óx  — | j                  ||«      r¨t        |d«      r|j                  j                  n|}t	        |«      rx| j
                  j                  d«      dk(  }| j                  d«      }t        |dd«      }|s|st        d„ |D «       «      r%t        j                  j                  d«      |«       y y y y )	NÚ
hypothesisr6   r?   ÚanyioÚ
pytestmark© c              3  ó:   K  — | ]  }|j                   d k(  –— Œ y­w)ri   N)Úname)Ú.0Úmarkers     r&   ú	<genexpr>z,pytest_pycollect_makeitem.<locals>.<genexpr>¡   s   è ø€ ÒH°&�v—{‘{ gÕ-ÑHùs   ‚rM   )ÚistestfunctionÚhasattrrh   Ú
inner_testr
   rI   rC   Úget_closest_markerÚgetattrÚanyrG   ÚmarkÚusefixtures)Ú	collectorrm   ÚobjÚ
inner_funcÚanyio_auto_modero   Úown_markerss          r&   Úpytest_pycollect_makeitemr~   ”   s«   € ð ×Ñ  TÔ*Ü29¸#¸|Ô2L�S—^‘^×.Ò.ÐRUˆ
Ü˜zÔ*Ø'×.Ñ.×5Ñ5°lÓCÀvÑMˆOØ×1Ñ1°'Ó:ˆFÜ! # |°RÓ8ˆKáÙÜÑH¸KÔHÔHä—‘×'Ñ'¨Ó8¸Õ=ð Ið +ð +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)r4   Úrun_test)rW   rY   r0   r1   Úoriginal_funcs     €€€r&   Úrun_with_hypothesisz/pytest_pyfunc_call.<locals>.run_with_hypothesis¨   s2   ø€ Ü˜ oÓ6ð 	3¸&Ø�O‰O˜M¨6Ô2÷	3÷ 	3ñ 	3ús   Ž*ª3rM   rh   T)rW   r   r`   ÚNone)ÚfuncargsÚgetr'   rr   rz   rh   rs   Ú__qualname__r
   Ú_fixtureinforb   r4   r‚   r   r   r   r   ÚKeyboardInterruptÚ
SystemExit)Ú
pyfuncitemr„   r%   r†   ÚargÚtestargsrY   ÚexcgrpÚexcr0   r1   rƒ   s            @@@r&   Úpytest_pyfunc_callr‘   ¦   sQ  ú€ ÷3ð ×!Ñ!×%Ñ% oÓ6€GÚÜ(CÀGÓ(LÑ%ˆ�oä�:—>‘> <Ô0à&ŸN™N×5Ñ5×@Ñ@ˆMØ×)Ñ)Ð-@×-MÑ-MÒMÜ& }Ô5Ø;N�J—N‘N×-Ñ-Ô8àä˜zŸ~™~Ô.Ø!×*Ñ*ˆHØ6@×6MÑ6M×6VÑ6VÖW¨s˜˜X c™]Ñ*ÐWˆHÐWÜ˜L¨/Ó:ð ¸fðØ—O‘O J§N¡N°HÕ=÷ð àùò Xøô &ò Ü1°&Ó9ò 2˜Ü% c¬DÔ2CÄZÐ+PÕQØ"%¨6Ð1ð2ð ûðú÷ð ús6   Ã'D+ÄE0ÄD0Ä0	E-Ä9)E(Å#E(Å(E-Å-E0Å0E9Úmodule)ÚscopeÚparamsc                ó   — | j                   S r�   )Úparamr_   s    r&   rM   rM   Ë   s   € à�=‰=Ðr(   c                ó0   — t        | t        «      r| S | d   S )Nr   ©r   r    r^   s    r&   Úanyio_backend_namer™   Ð   s   € ä�-¤Ô%ØÐà˜QÑÐr(   c                ó0   — t        | t        «      ri S | d   S r*   r˜   r^   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 r�   )Ú_kindÚsetÚ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   € ð �z‰zÐ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  € ð ÐØ�x‰HäŸ™Ð'ˆHÜ�ŠØ—‘¤§¡Ô0àØˆDÜ“ð $ Ø&ò $�FØ ×.Ñ.¬v¯}©}¸VÀTÇZÁZÓ/PÓQ�DØ$*¬f¯o©oÒ$=™5À;�DðØŸ	™	 4¨ ,Ô/ò  Ø#×/Ñ/Ó1°!Ñ4™ð$ð  4§?¡?Ñ2ØŸ™×+Ñ+¨DÔ1Ø#÷$÷ $ñ $ð øô #ò Úðú÷$ð $ús7   ÁADÂ!D	Â4DÂ7?DÄ		DÄDÄDÄDÄD")r¤   úsocket.SocketKindr`   r…   )r`   r¸   r�   )r±   zsocket.AddressFamily | Noner`   r¡   )Ú__name__Ú
__module__rˆ   Ú__doc__r¥   Úpropertyr¤   r·   rk   r(   r&   r�   r�   à   s%   „ ñó%ð òó ðõ$r(   r�   Úsession)r“   c                 ó4   — t        t        j                  «      S r�   )r�   r¨   ÚSOCK_STREAMrk   r(   r&   Úfree_tcp_port_factoryrÀ     s   € äœ6×-Ñ-Ó.Ð.r(   c                 ó4   — t        t        j                  «      S r�   )r�   r¨   Ú
SOCK_DGRAMrk   r(   r&   Úfree_udp_port_factoryrÃ   "  s   € äœ6×,Ñ,Ó-Ð-r(   c                ó   —  | «       S r�   rk   )rÀ   s    r&   Úfree_tcp_portrÅ   '  ó   € á Ó"Ð"r(   c                ó   —  | «       S r�   rk   )rÃ   s    r&   Úfree_udp_portrÈ   ,  rÆ   r(   )r%   Úobjectr`   ztuple[str, dict[str, Any]])r0   r    r1   údict[str, Any]r`   zIterator[TestRunner])r;   zpytest.Parserr`   r…   )rI   zpytest.Configr`   r…   )rc   r   rN   r   r`   zGenerator[Any])ry   zpytest.Module | pytest.Classrm   r    rz   rÉ   r`   r…   )rŒ   r   r`   zbool | None)rN   r   r`   r   )rM   r   r`   r    )rM   r   r`   rÊ   )r`   r�   )rÀ   úCallable[[], int]r`   r¡   )rÃ   rË   r`   r¡   ):Ú
__future__r   r¨   ÚsysÚcollections.abcr   r   r   Ú
contextlibr   r   Úinspectr	   r
   r   Útypingr   r   rG   Ú_pytest.fixturesr   Ú_pytest.outcomesr   Ú r   Ú_core._eventloopr   r   r   r   Ú_core._exceptionsr   Úabcr   Úversion_infoÚexceptiongroupr   r   Ú__annotations__r   r.   r'   r4   r<   rJ   Úhookimplre   r~   r‘   ÚfixturerM   r™   r›   r�   rÀ   rÃ   rÅ   rÈ   rk   r(   r&   ú<module>rÝ      sô  ðÞ "ã Û 
ß 9Ñ 9ß 0ß EÑ Eß ã Ý 'Ý !å $÷ó õ 2Ý à×Ñ�gÒÝ-à%)€Ð"Ó )Ø"&€ÐÓ &Ø€óXð ð3Øð3Ø(6ð3àò3ó ð3ó:ó
ð& €‡�˜TÔ"ò-ó #ð-ð` €‡�˜$Ôð>Ø+ð>Ø36ð>Ø=Cð>à	ò>ó  ð>ð" €‡�˜$Ôò!ó  ð!ðH €‡��hÑ'=Ó'?Ô@òó Aðð ‡�ò ó ð ð ‡�ò ó ð ÷:$ñ :$ðz €‡��iÔ ò/ó !ð/ð €‡��iÔ ò.ó !ð.ð ‡�ò#ó ð#ð ‡�ò#ó ñ#r(   