
    f.                        d dl Z d dlZd dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZmZ d dlZd dlmZ ddlmZmZmZmZmZmZmZmZ 	 d dlZeegee   f   Z G d de      Z G d d	e      Zd
 Z d Z!ejD                  d        Z#ejD                  d        Z$ejJ                  d        Z&ejJ                  d d       Z'd Z(d Z)d Z*ejD                  d        Z+ejD                  d        Z,ejD                  deg e-f   deg e-f   fd       ZejD                  deg e-f   fd       Z.ejD                  de j^                  de	e   fd       Z0ejD                  d        Z1ejD                  de j^                  de	e   fd       Z2ejD                  d        Z3ejD                  de j^                  de	e   fd       Z4ejD                  d        Z5y# e$ r dZY w xY w)!    N)	Any	AwaitableCallableDictIteratorOptionalProtocolTypeUnion)Application   )BaseTestServerRawTestServer
TestClient
TestServerloop_contextsetup_test_loopteardown_test_loopunused_portc            
       J    e Zd Zdddeeef   deeee	f      de	de
e   fdZy)AiohttpClientNserver_kwargs_AiohttpClient__paramr   kwargsreturnc                     y N )selfr   r   r   s       T/opt/lhia/ganansol/python/venv/lib/python3.12/site-packages/aiohttp/pytest_plugin.py__call__zAiohttpClient.__call__)   s     !$    )__name__
__module____qualname__r   r   r   r   r   strr   r   r   r"   r   r#   r!   r   r   (   sN    
 37	${N23$  S#X/	$
 $ 
:	$r#   r   c            
       6    e Zd Zdddedee   dedee   fdZ	y)AiohttpServerNportappr+   r   r   c                     y r   r   )r    r,   r+   r   s       r!   r"   zAiohttpServer.__call__3   s     #r#   )
r$   r%   r&   r   r   intr   r   r   r"   r   r#   r!   r)   r)   2   s3    9=$$)1#$IL$	:	$r#   r)   c                     | j                  dddd       | j                  dddd	       | j                  d
ddd       y )N--aiohttp-fast
store_trueFz*run tests faster by disabling extra checks)actiondefaulthelpz--aiohttp-loopstorepyloopz3run tests with specific loop: pyloop, uvloop or all--aiohttp-enable-loop-debugzenable event loop debug mode)	addoption)parsers    r!   pytest_addoptionr:   8   sc    
9	   B	   %+	  r#   c                     | j                   t        j                        rdnt        j                        rdnydd| j
                  vr| xj
                  dz  c_        dfd}|| _         y)zjSet up pytest fixture.

    Allow fixtures to be coroutines. Run coroutine fixtures in an event loop.
    TFNrequestr<   c                     |d   }r|d= d|j                   vrt        d      |j                  d      r> | i |fd}|j                  |       j	                  j                               S j	                   | i |      S )Nr<   loopz^Asynchronous fixtures must depend on the 'loop' fixture or be used in tests depending from it.c                  b    	  j                  j                               S # t        $ r Y y w xY wr   )run_until_complete	__anext__StopAsyncIteration)_loopgens   r!   	finalizerz8pytest_fixture_setup.<locals>.wrapper.<locals>.finalizerx   s1     33CMMODD) s   " 	..)fixturenames	ExceptiongetfixturevalueaddfinalizerrA   rB   )	argsr   r<   rF   rD   rE   funcis_async_genstrip_requests	       @@r!   wrapperz%pytest_fixture_setup.<locals>.wrapperc   s    #y!
 ---6 
 ''/ ''C   +++CMMO<<++D$,A&,ABBr#   )rL   inspectisasyncgenfunctionasyncioiscoroutinefunctionargnames)
fixturedefrO   rL   rM   rN   s     @@@r!   pytest_fixture_setuprV   M   sr    
 ??D!!$'		$	$T	* 	M
+++|+C@ JOr#   c                 8    | j                   j                  d      S )z--fast config optionr0   config	getoptionr=   s    r!   fastr[      s     >>##$455r#   c                 8    | j                   j                  d      S )z!--enable-loop-debug config optionr7   rX   r=   s    r!   
loop_debugr]      s     >>##$ABBr#   c            
   #   f  K   t        j                  d      5 } d | D cg c]'  }|j                  t        k(  rdj	                  |      ) }}|rDt        dj	                  t        |      t        |      dk(  rdnd	d
j                  |                  	 ddd       yc c}w # 1 sw Y   yxY ww)zContext manager which checks for RuntimeWarnings.

    This exists specifically to
    avoid "coroutine 'X' was never awaited" warnings being missed.

    If RuntimeWarnings occur in the context a RuntimeError is raised.
    T)recordNz#{w.filename}:{w.lineno}:{w.message})wz{} Runtime Warning{},
{}r    s
)warningscatch_warningscategoryRuntimeWarningformatRuntimeErrorlenjoin)	_warningsr`   rws      r!   _runtime_warning_contextrn      s      
	 	 	-  
zz^+ 28818=
 

 +22G3r7a<RS$))B-   
 s.   B1	B%,B AB%	B1 B%%B.*B1c              #   P   K   | r|  yt               } |  t        | |       yw)zPassthrough loop context.

    Sets up and tears down a loop unless one is passed in via the loop
    argument when it's passed straight through.
    r[   N)r   r   )r?   r[   s     r!   _passthrough_loop_contextrq      s)      
  
4d+s   $&c                     | j                  |      r1t        j                  |      rt        | j	                  ||            S yy)z%Fix pytest collecting for coroutines.N)funcnamefilterrR   rS   list_genfunctions)	collectornameobjs      r!   pytest_pycollect_makeitemry      s>    %'*E*Ec*JI++D#677 +K%r#   c           	         | j                   j                  d      }t        j                  | j                        r| j
                  j                  d      xs | j
                  j                  dd      }t               5  t        ||      5 }| j                  j                  D ci c]  }|| j
                  |    }}|j                   | j                  di |       ddd       ddd       yyc c}w # 1 sw Y   xY w# 1 sw Y   yxY w)zBRun coroutines in an event loop instead of a normal function call.r0   proactor_loopr?   Nrp   Tr   )rY   rZ   rR   rS   functionfuncargsgetrn   rq   _fixtureinforT   rA   rx   )
pyfuncitemr[   existing_looprD   argtestargss         r!   pytest_pyfunc_callr      s   &&'78D"":#6#67"++//
 3  $$VT2 	 &' 	E*=tD E  *66?? ,,S11  (()C()CDE	E  8E E	E s6   >DC6%C1<#C6D1C66C?	;DDc           
      .   d| j                   vry | j                  j                  j                  }dt        j
                  i}t        t        j                  |d<   |dk(  rd}i }|j                  d      D ]\  }|j                  d       }|j                  d      }||vr+|r(t        d	|d
t        |j                                     U||   ||<   ^ | j                  dt        |j                               t        |j                                      y )Nloop_factoryr6   uvloopallzpyloop,uvloop?,?z ?zUnknown loop 'z', available loops: )ids)rG   rY   optionaiohttp_looprR   DefaultEventLoopPolicyr   EventLoopPolicysplitendswithstrip
ValueErrorrt   keysparametrizevalues)metafuncloopsavail_factories	factoriesrw   requireds         r!   pytest_generate_testsr      s   X222OO""//E!?!?@O$*$:$:!~ IC  0}}S))zz$& T).."235 
 )$/	$0 Y--/0d9>>;K6L  r#   c              #      K    |        }t        j                  |       t        |      5 }|r|j                  d       t        j                  |       | ddd       y# 1 sw Y   yxY ww)z%Return an instance of the event loop.rp   TN)rR   set_event_loop_policyr   	set_debugset_event_loop)r   r[   r]   policyrD   s        r!   r?   r?      s]      ^F!!&)	4	  EOOD!u%	  s   )A--A!	A-!A*&A-c               #      K   t        j                         } t        j                  |        t        | j                        5 }t        j
                  |       | d d d        y # 1 sw Y   y xY wwr   )rR   WindowsProactorEventLoopPolicyr   r   new_event_loopr   )r   rD   s     r!   r{   r{      sY     335F!!&)	f++	, u%  s   ?A0A$	A0$A-)A0aiohttp_unused_portr   c                 >    t        j                  dt        d       | S )Nz3Deprecated, use aiohttp_unused_port fixture instead   
stacklevelrd   warnDeprecationWarning)r   s    r!   r   r   	  s    MM=
 r#   c                      t         S )z1Return a port that is unused on the current host.)_unused_portr   r#   r!   r   r     s
     r#   r?   c           	   #       K   g dddt         dt        t           dt        dt        f fd}| d	fd} j                   |              yw)
z^Factory to create a TestServer instance, given an app.

    aiohttp_server(app, **kwargs)
    Nr*   r,   r+   r   r   c                   K   t        | |      } |j                  ddi| d {    j                  |       |S 7 wNr*   r?   r   )r   start_serverappend)r,   r+   r   serverr?   serverss       r!   gozaiohttp_server.<locals>.go!  sI      Cd+!f!!6t6v666v 	7   %AA Ac                  j   K    r* j                         j                          d {     r)y y 7 	wr   popcloser   s   r!   finalizez aiohttp_server.<locals>.finalize+  *     ++-%%''' '   $3133r   N)r   r   r.   r   r   rA   r?   r   r   r   s   `  @r!   aiohttp_serverr     sZ      G 48#+C=CF	 H( 	HJ's   AAc                 >    t        j                  dt        d       | S )Nz.Deprecated, use aiohttp_server fixture insteadr   r   r   )r   s    r!   test_serverr   2      MM8
 r#   c              #   f    K   g dd fd
}| dfd} j                   |              yw)zpFactory to create a RawTestServer instance, given a web handler.

    aiohttp_raw_server(handler, **kwargs)
    Nr*   c                   K   t        | |      } |j                  ddi| d {    j                  |       |S 7 wr   )r   r   r   )handlerr+   r   r   r?   r   s       r!   r   zaiohttp_raw_server.<locals>.goD  sG     wT2!f!!6t6v666v 	7r   c                  j   K    r* j                         j                          d {     r)y y 7 	wr   r   r   s   r!   r   z$aiohttp_raw_server.<locals>.finalizeL  r   r   r   )rA   r   s   `  @r!   aiohttp_raw_serverr   <  s4      G"&  H( 	HJ's   -1c                 >    t        j                  dt        d       | S )Nz2Deprecated, use aiohttp_raw_server fixture insteadr   r   r   )r   s    r!   raw_test_serverr   S  s!     MM<
 r#   c              #       K   g dddt         t        t        f   dt        dt        t
        t        t        f      dt        dt        f
 fd}| d
fd	} j                   |              yw)zFactory to create a TestClient instance.

    aiohttp_client(app, **kwargs)
    aiohttp_client(server, **kwargs)
    aiohttp_client(raw_server, **kwargs)
    Nr   __paramrK   r   r   r   c                  K   t        | t              r%t        | t        t        f      s | g|i |} i }n	|rJ d       t        | t              r#|xs i }t	        | fdi|}t        |fdi|}n6t        | t              rt        | fdi|}nt        dt        |       z        |j                          d {    j                  |       |S 7 w)Nzargs should be emptyr?   zUnknown argument type: %r)

isinstancer   r   r   r   r   r   typer   r   )r   r   rK   r   r   clientclientsr?   s         r!   r   zaiohttp_client.<locals>.gok  s      gx(k>22
 d4T4V4GF3338g{+)/RMDdDmDF<T<V<F0=d=f=F84=HII!!###v 	$s   B;C>C?Cc                  j   K    r* j                         j                          d {     r)y y 7 	wr   r   )r   s   r!   r   z aiohttp_client.<locals>.finalize  r   r   r   )	r   r   r   r   r   r   r'   r   rA   )r?   r   r   r   s   `  @r!   aiohttp_clientr   _  s{      G
 37{N23  S#X/ 	
 
8 H( 	HJ's   A-A1c                 >    t        j                  dt        d       | S )Nz.Deprecated, use aiohttp_client fixture insteadr   r   r   )r   s    r!   test_clientr     r   r#   )F)6rR   
contextlibrP   rd   typingr   r   r   r   r   r   r	   r
   r   pytestaiohttp.webr   
test_utilsr   r   r   r   r   r   r   r   r   r   ImportErrorAiohttpRawServerr   r)   r:   rV   fixturer[   r]   contextmanagerrn   rq   ry   r   r   r?   r{   r.   r   AbstractEventLoopr   r   r   r   r   r   r   r#   r!   <module>r      sw      
 
 
  #	 	 	 [M9]+CCD $H $$H $*6r 6 6
 C C
  . , , 8$@     Xb#g%6 8BG;L   Xb#g.  
 (22 (x7N ( (0   (W66 (8DT;U ( (,   -(

#
#-(m-( -(`  _  Fs   G GG