
    ܲe
                       U d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZmZmZmZ d dlZd dlZddlmZmZ dd	lmZ dad
ed<   daded<   d ad/dZed0d            Zd1dZd2dZ ej        d !          d3d%            Z ej        d !          d4d(            Z  ej!        d) e            *          d5d+            Z"ej!        d6d-            Z#ej!        d7d.            Z$dS )8    )annotations)Iterator)	ExitStackcontextmanager)isasyncgenfunctioniscoroutinefunction)AnyDictTuplecastN   )get_all_backendsget_async_backend)
TestRunnerz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   r
   r	   	TypeError)r   s    3lib/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          j                            d           It          j                            |           }t                              t          j        j	        |           |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   sniffiocurrent_async_library_cvargetsetcallbackresetenter_contextcreate_test_runner_runner_leasesclose)r"   r#   asynclibtokens       r   
get_runnerr4      sM     
 $\22!-11$77? 6::<HHE""7#E#KUSSS)/R'55''88
 
 aN3! 	3 ,,,!!!.22MOOO	3 	3 	! 	3 ,,,!!!.22MO2222s   	D 9Econfigr	   Nonec                2    |                      dd           d S )NmarkerszManyio: mark the (coroutine function) test to be run asynchronously via anyio.)addinivalue_line)r5   s    r   pytest_configurer:   ;   s,    
	$    r!   
fixturedefrequestc                    fd}| j         t                    st                    r/d|j        v r$d| j        v || _         s| xj        dz  c_        d S d S d S d S )Nc              ?    K   t          |           \  }}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 )Nanyio_backend)r    r4   r   run_asyncgen_fixturerun_fixture)r?   argskwargsr"   r#   runnerfunchas_backend_args         r   wrapperz%pytest_fixture_setup.<locals>.wrapperD   s      (CM(R(R%o 	4&3F?#o66 	7&!$'' 7!66tVDDDDDDDDDD((v66666		7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   AA??BBr?   r?   )rE   r   r   fixturenamesargnames)r;   r<   rG   rE   rF   s      @@r   pytest_fixture_setuprK   C   s    	7 	7 	7 	7 	7 	7 ?D$ :#6t#<#< :g222-1DDO%JO" :##'99####	 32: :: :r!   T)tryfirst	collectornameobjc                h   |                      ||          rt          |d          r|j        j        n|}t	          |          rl|                     d          }t          |dd          }|st          d |D                       r-t          j	        
                    d          |           d S d S d S d S )N
hypothesisanyio
pytestmark c              3  ,   K   | ]}|j         d k    V  dS )rR   N)rN   ).0markers     r   	<genexpr>z,pytest_pycollect_makeitem.<locals>.<genexpr>a   s)      NNV[G3NNNNNNr!   r?   )istestfunctionhasattrrQ   
inner_testr   get_closest_markergetattranypytestmarkusefixtures)rM   rN   rO   
inner_funcrW   own_markerss         r   pytest_pycollect_makeitemrd   Z   s    T** >29#|2L2LUS^..RU
z** 	>11'::F!#|R88K >NN+NNNNN >''88=====> >	> 	>> >r!   
pyfuncitembool | Nonec                   d
fd}| j                             d          }|rt          |          \  t          | j        d          rC| j        j        j        j        |j        k    r t                    r|| j        j        _        d S t          | j                  rd| j         fd| j	        j
        D             }t                    5 }|                    | j        |           d d d            n# 1 swxY w Y   d	S d S )NrC   r	   r   r6   c                     t                    5 }|                    |            d d d            d S # 1 swxY w Y   d S N)r4   run_test)rC   rD   r"   r#   original_funcs     r   run_with_hypothesisz/pytest_pyfunc_call.<locals>.run_with_hypothesisg   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?   rQ   c                "    i | ]}||         S rT   rT   )rV   argfuncargss     r   
<dictcomp>z&pytest_pyfunc_call.<locals>.<dictcomp>z   s    WWWsXc]WWWr!   T)rC   r	   r   r6   )ro   r*   r    rZ   rO   rQ   r[   __qualname__r   _fixtureinforJ   r4   rj   )	re   rl   r   testargsrD   r"   r#   ro   rk   s	        @@@@r   pytest_pyfunc_callrt   e   ss   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
999: : : : : : : : : : : : : : : 44s   C>>DDmodule)scopeparamsc                    | j         S ri   )param)r<   s    r   r?   r?      s
    =r!   r?   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 r'   r{   rH   s    r   anyio_backend_optionsr~      s$    -%%  	Qr!   )r   r   r   r   )r"   r   r#   r$   r   r%   )r5   r	   r   r6   )r;   r	   r<   r	   r   r6   )rM   r	   rN   r	   rO   r	   r   r6   )re   r	   r   rf   )r<   r	   r   r	   )r?   r	   r   r   )r?   r	   r   r$   )%
__future__r   collections.abcr   
contextlibr   r   inspectr   r   typingr	   r
   r   r   r_   r(   _core._eventloopr   r   abcr   r   __annotations__r   r0   r    r4   r:   rK   hookimplrd   rt   fixturer?   r|   r~   rT   r!   r   <module>r      s-   " " " " " " " $ $ $ $ $ $ 0 0 0 0 0 0 0 0 ; ; ; ; ; ; ; ; ) ) ) ) ) ) ) ) ) ) ) )   A A A A A A A A      %) ) ) ) )"& & & & &X X X X 3 3 3 3:   : : : :. $> > >  > $    : h'7'7'9'9:::   ;:                    r!   