
    RPf
                       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	 	 	 	 	 	 dd       ZddZddZ ej<                  d      dd       Z ej<                  d      d d       Z  ejB                  d e             d!d       Z"ejB                  d"d       Z#ejB                  d#d       Z$y)$    )annotations)Iterator)	ExitStackcontextmanager)isasyncgenfunctioniscoroutinefunction)AnyDictTuplecastN   )get_all_backendsget_async_backend)
TestRunnerz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   r
   r	   	TypeError)backends    M/var/www/fastapitest/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_runnerr/      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_configurer4   ;   s    
	$r   c                    fd}| j                   t              st              r=d|j                  v r.d| j                  v || _         s| xj                  dz  c_        y y y y )Nc              ?     K   t        |       \  }}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)Nanyio_backend)r   r/   r   run_asyncgen_fixturerun_fixture)r7   argskwargsr+   r,   runnerfunchas_backend_args         r   wrapperz%pytest_fixture_setup.<locals>.wrapperD   s}     (CM(R%o&3F?#o6 	7&!$'!66tVDDD((v66		7 	7D	7 	7s.   "A7!A+A)A+ 	A7)A++A40A7r7   r7   )r=   r   r   fixturenamesargnames)
fixturedefrequestr?   r=   r>   s      @@r   pytest_fixture_setuprE   C   sl    	7 ??D$#6t#<g222-1D1DDO%JO"##'99# # 3 $=r   T)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)rI   N)name).0markers     r   	<genexpr>z,pytest_pycollect_makeitem.<locals>.<genexpr>a   s     NV[[G3Ns   r7   )istestfunctionhasattrrH   
inner_testr   get_closest_markergetattranypytestmarkusefixtures)	collectorrM   obj
inner_funcrO   own_markerss         r   pytest_pycollect_makeitemr^   Z   s    T*29#|2LS^^..RU
z*11':F!#|R8KN+NN''8= O + +r   c                r  	 d	fd}| j                   j                  d      }|rt        |      \  t        | j                  d      r`| j                  j
                  j                  		j                  |j                  k7  r&t        	      r|| j                  j
                  _        y t        | j                        re| j                   }| j                  j                  D ci c]  }|||   
 }}t              5 }|j                  | j                  |       d d d        yy c c}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)r/   run_test)r;   r<   r+   r,   original_funcs     r   run_with_hypothesisz/pytest_pyfunc_call.<locals>.run_with_hypothesisg   s2    o6 	3&OOM62	3 	3 	3s   *3r7   rH   T)r;   r	   returnNone)funcargsr#   r   rR   r[   rH   rS   __qualname__r   _fixtureinforB   r/   rb   )

pyfuncitemrd   r   rg   argtestargsr<   r+   r,   rc   s
          @@@r   pytest_pyfunc_callrm   e   s   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
9:  X: s   &D(D--D6module)scopeparamsc                    | j                   S ra   )param)rD   s    r   r7   r7      s    ==r   c                0    t        | t              r| S | d   S )Nr   r   r   r@   s    r   anyio_backend_nameru      s    -%Qr   c                0    t        | t              ri S | d   S r    rt   r@   s    r   anyio_backend_optionsrw      s    -%	Qr   )r   objectre   ztuple[str, dict[str, Any]])r+   r   r,   dict[str, Any]re   zIterator[TestRunner])r3   r	   re   rf   )rC   r	   rD   r	   re   rf   )rZ   r	   rM   r	   r[   r	   re   rf   )rj   r	   re   zbool | None)rD   r	   re   r	   )r7   r	   re   r   )r7   r	   re   ry   )%
__future__r   collections.abcr   
contextlibr   r   inspectr   r   typingr	   r
   r   r   rW   r!   _core._eventloopr   r   abcr   r   __annotations__r   r)   r   r/   r4   rE   hookimplr^   rm   fixturer7   ru   rw   rK   r   r   <module>r      s   " $ 0 ; ) )   A %)" )"& &X 33(633 3::. $>  > $  : h'7'9: ;        r   