
    F/j2              
           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 d dlm	Z	m
Z
mZ d dlZddlmZmZmZmZmZmZmZmZ ddlmZmZmZ ddlmZ 	 d dlZ G d d	e
      Z G d
 de
      Z  G d de
      Z!d Z"d Z#ejH                  d        Z%ejH                  d        Z&ejN                  d        Z(ejN                  d'd       Z)d Z*d Z+d Z,ejH                  deg e jZ                  f   de.de.dee jZ                     fd       Z/ejH                  dee jZ                     fd       Z0ejH                  deg e1f   deg e1f   fd       ZejH                  deg e1f   fd       Z2ejH                  d e jZ                  dee    fd!       Z3ejH                  d"        Z4ejH                  d e jZ                  dee!   fd#       Z5ejH                  d$        Z6ejH                  d e jZ                  dee   fd%       Z7ejH                  d&        Z8y# e$ r dZY w xY w)(    N)	AwaitableCallableIterator)AnyProtocoloverload   )BaseTestServerRawTestServer
TestClient
TestServerloop_contextsetup_test_loopteardown_test_loopunused_port)ApplicationBaseRequestRequest)_RequestHandlerc                       e Zd Zedddedeeef   dz  dedee	ef   fd       Z
edddedeeef   dz  dedeedf   fd       Z
y)	AiohttpClientNserver_kwargs_AiohttpClient__paramr   kwargsreturnc                   K   y wN selfr   r   r   s       S/var/www/html/maxservice/venv/lib/python3.12/site-packages/aiohttp/pytest_plugin.py__call__zAiohttpClient.__call__   s      ,/   c                   K   y wr   r   r    s       r"   r#   zAiohttpClient.__call__&   s      ),r$   )__name__
__module____qualname__r   r   dictstrr   r   r   r#   r
   r   r       r"   r   r      s    
 04	// CH~,	/
 / 
G[(	)/ / 
 04	,, CH~,	,
 , 
K%	&, ,r+   r   c            
       6    e Zd Zdddededz  dedee   fdZy)AiohttpServerNportappr/   r   r   c                     y r   r   )r!   r0   r/   r   s       r"   r#   zAiohttpServer.__call__1   s     #r+   )	r&   r'   r(   r   intr   r   r   r#   r   r+   r"   r-   r-   0   s3    6:$$),t$FI$	:	$r+   r-   c            
       6    e Zd Zdddededz  dedee   fdZy)AiohttpRawServerNr.   handlerr/   r   r   c                     y r   r   )r!   r5   r/   r   s       r"   r#   zAiohttpRawServer.__call__7   s    #&r+   )	r&   r'   r(   r   r2   r   r   r   r#   r   r+   r"   r4   r4   6   s3    >B'&'14t'NQ'	=	!'r+   r4   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_addoptionrB   <   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rD   c                     |d   }r|d= d|j                   vrt        d      |j                  d      r> | i |fd}|j                  |       j	                  j                               S j	                   | i |      S )NrD   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>.finalizer|   s1     33CMMODD) s   " 	..)fixturenames	ExceptiongetfixturevalueaddfinalizerrI   rJ   )	argsr   rD   rN   rL   rM   funcis_async_genstrip_requests	       @@r"   wrapperz%pytest_fixture_setup.<locals>.wrapperg   s    #y!
 ---6 
 ''/ ''C   +++CMMO<<++D$,A&,ABBr+   )rT   inspectisasyncgenfunctioniscoroutinefunctionargnames)
fixturedefrW   rT   rU   rV   s     @@@r"   pytest_fixture_setupr]   Q   sr    
 ??D!!$'		$	$T	* 	M
+++|+C@ JOr+   c                 8    | j                   j                  d      S )z--fast config optionr8   config	getoptionrE   s    r"   fastrb      s     >>##$455r+   c                 8    | j                   j                  d      S )z!--enable-loop-debug config optionr?   r_   rE   s    r"   
loop_debugrd      s     >>##$ABBr+   c            
   #     K   t        j                  d      5 } d | D cg c]=  }|j                  t        k(  r(|j                   d|j
                   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)recordN:z{} Runtime Warning{},
{}r	    s
)warningscatch_warningscategoryRuntimeWarningfilenamelinenomessageRuntimeErrorformatlenjoin)	_warningswrws      r"   _runtime_warning_contextry      s      
	 	 	-  
zz^+ zzl!AHH:Qqyyk2
 

 +22G3r7a<RS$))B-   
 s/   C	B;AB6$AB;-	C6B;;C C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.
    rb   N)r   r   )rG   rb   s     r"   _passthrough_loop_contextr|      s)      
  
4d+s   $&c                     | j                  |      r1t        j                  |      rt        | j	                  ||            S yy)z%Fix pytest collecting for coroutines.N)funcnamefilterrX   rZ   list_genfunctions)	collectornameobjs      r"   pytest_pycollect_makeitemr      s>    %'*E*Ec*JI++D#677 +K%r+   c           	         | j                   j                  d      }t        j                  | j                        r	t        j                  dt               | j                  j                  d      xsV | j                  j                  d      xs9 | 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.r8   zKaiohttp.pytest_plugin will be removed in v4. Please install pytest-aiohttp.proactor_loopselector_loopuvloop_looprG   Nr{   Tr   )r`   ra   rX   rZ   functionrk   warnDeprecationWarningfuncargsgetry   r|   _fixtureinfor[   rI   r   )
pyfuncitemrb   existing_looprL   argtestargss         r"   pytest_pyfunc_callr      sV   &&'78D"":#6#67Y	

 ##O4 5""&&75""&&}55 ""&&vt4	 	 &' 	E*=tD E  *66?? ,,S11  (()C()CDE	E ) 8E E	E s6   E!E:E#E4EEE	EE 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_factoryr>   uvloopallzpyloop,uvloop?,?z ?zUnknown loop 'z', available loops: )ids)rO   r`   optionaiohttp_loopasyncionew_event_loopr   splitendswithstrip
ValueErrorr   keysparametrizevalues)metafuncloopsavail_factories	factoriesr   requireds         r"   pytest_generate_testsr      s   X222OO""//E!7!78O$*$9$9!~ IC  0}}S))zz$& T).."235 
 )$/	$0 Y--/0d9>>;K6L  r+   r   rb   rd   r   c              #      K   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.r{   TN)r   	set_debugr   set_event_loop)r   rb   rd   rL   s       r"   rG   rG      sJ      
l	. %OOD!u%	  s   A-A	AAAc               #      K   t         j                  } t        |       5 }t        j                  |       | d d d        y # 1 sw Y   y xY wwr   )r   ProactorEventLoopr   r   )factoryrL   s     r"   r   r     sB     ''G	g	 %u%  s   AA	AA
Aaiohttp_unused_portc                 >    t        j                  dt        d       | S )Nz3Deprecated, use aiohttp_unused_port fixture instead   
stacklevelrk   r   r   )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+   rG   c              #       K   g ddddt         dt        dt        dz  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)
    z	127.0.0.1Nhostr/   r0   r   r/   r   r   c                   K   t        | ||      } |j                  ddi| d {    j                  |       |S 7 w)Nr   rG   r   )r   start_serverappend)r0   r   r/   r   serverrG   serverss        r"   gozaiohttp_server.<locals>.go.  sK      Cd6!f!!6t6v666v 	7s   &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*   r2   r   r   rI   rG   r   r   r   s   `  @r"   aiohttp_serverr   &  sm      G
  	

 
 Dj	

 
 

 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   C      MM8
 r+   c           	   #       K   g dddt         dt        dz  dt        dt        f fd}| d	fd} j	                   |              yw)
zpFactory to create a RawTestServer instance, given a web handler.

    aiohttp_raw_server(handler, **kwargs)
    Nr.   r5   r/   r   r   c                   K   t        | |      } |j                  ddi| d {    j                  |       |S 7 w)Nr.   rG   r   )r   r   r   )r5   r/   r   r   rG   r   s       r"   r   zaiohttp_raw_server.<locals>.goU  sI      wT2!f!!6t6v666v 	7s   %AA Ac                  j   K    r* j                         j                          d {     r)y y 7 	wr   r   r   s   r"   r   z$aiohttp_raw_server.<locals>.finalize_  r   r   r   )r   r2   r   r   rI   r   s   `  @r"   aiohttp_raw_serverr   M  sZ      G 9= +.:HK	 H( 	HJ's   A	Ac                 >    t        j                  dt        d       | S )Nz2Deprecated, use aiohttp_raw_server fixture insteadr   r   r   )r   s    r"   raw_test_serverr   f  s!     MM<
 r+   c              #      K   g t         dddt        dt        t        t        f   dz  dt        dt
        t        t        f   fd       }t         dddt        dt        t        t        f   dz  dt        dt
        t        df   fd       }dddt        t        z  d	t        dt        t        t        f   dz  dt        dt
        t        t        f   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   __paramr   r   r   c                   K   y wr   r   r   r   r   s      r"   r   zaiohttp_client.<locals>.go|  s      ,/r$   c                   K   y wr   r   r   s      r"   r   zaiohttp_client.<locals>.go  s      ),r$   rS   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 emptyrG   zUnknown argument type: %r)

isinstancer   r   r
   r   r   r   typer   r   )r   r   rS   r   r   clientclientsrG   s         r"   r   zaiohttp_client.<locals>.go  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
   r   rI   )rG   r   r   r   s   `  @r"   aiohttp_clientr   r  s)     G 04// CH~,/ 	/
 
G[(	)/ /  04,, CH~,, 	,
 
K%	&, , 04~- CH~, 	
 
CH	6 H( 	HJ's   C6C:c                 >    t        j                  dt        d       | S )Nz.Deprecated, use aiohttp_client fixture insteadr   r   r   )r   s    r"   test_clientr     r   r+   )F)9r   
contextlibrX   rk   collections.abcr   r   r   typingr   r   r   pytest
test_utilsr
   r   r   r   r   r   r   r   r   webr   r   r   web_protocolr   r   ImportErrorr   r-   r4   rB   r]   fixturerb   rd   contextmanagerry   r|   r   r   r   AbstractEventLoopboolrG   r   r2   r   r   r   r   r   r   r   r   r+   r"   <module>r      s       9 9 * * 	 	 	 3 2 )
,H ,&$H $'x '*6r 6 6
 C C
  . , , 84@ 
2w8889


 
 g''(	
 
 x 9 9:   Xb#g%6 8BG;L   Xb#g.  
 (22 (x7N ( (8   (W66 (8DT;U ( (0   :(22 :(x7N :( :(z  q  Fs   H HH