
    3CfU-                        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 d dlZd dlm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eef   gee   f   Zeegee   f   Zeegee   f   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TypeUnion)isasyncgenfunction)Application   )BaseTestServerRawTestServer
TestClient
TestServerloop_contextsetup_test_loopteardown_test_loopunused_portc                     | 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    U/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/aiohttp/pytest_plugin.pypytest_addoptionr"       sc    
9	   B	   %+	      c                     | j                   t              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N)run_until_complete	__anext__StopAsyncIteration)_loopgens   r!   	finalizerz8pytest_fixture_setup.<locals>.wrapper.<locals>.finalizer`   s1     33CMMODD) s   " 	..)fixturenames	Exceptiongetfixturevalueaddfinalizerr+   r,   )	argskwargsr%   r0   r.   r/   funcis_async_genstrip_requests	       @@r!   wrapperz%pytest_fixture_setup.<locals>.wrapperK   s    #y!
 ---6 
 ''/ ''C   +++CMMO<<++D$,A&,ABBr#   )r7   r   asyncioiscoroutinefunctionargnames)
fixturedefr:   r7   r8   r9   s     @@@r!   pytest_fixture_setupr?   5   sl    
 ??D$		$	$T	* 	M
+++|+C@ JOr#   c                 8    | j                   j                  d      S )z--fast config optionr   config	getoptionr&   s    r!   fastrD   n   s     >>##$455r#   c                 8    | j                   j                  d      S )z!--enable-loop-debug config optionr   rA   r&   s    r!   
loop_debugrF   t   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)	_warningsrI   rws      r!   _runtime_warning_contextrW   z   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.
    rD   N)r   r   )r(   rD   s     r!   _passthrough_loop_contextrZ      s)      
  
4d+s   $&c                     | j                  |      r1t        j                  |      rt        | j	                  ||            S yy)z%Fix pytest collecting for coroutines.N)funcnamefilterr;   r<   list_genfunctions)	collectornameobjs      r!   pytest_pycollect_makeitemrb      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.r   proactor_loopr(   NrY   T )rB   rC   r;   r<   functionfuncargsgetrW   rZ   _fixtureinfor=   r+   ra   )
pyfuncitemrD   existing_loopr.   argtestargss         r!   pytest_pyfunc_callrn      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_factoryr   uvloopallzpyloop,uvloop?,?z ?zUnknown loop 'z', available loops: )ids)r1   rB   optionaiohttp_loopr;   DefaultEventLoopPolicyrq   EventLoopPolicysplitendswithstrip
ValueErrorr]   keysparametrizevalues)metafuncloopsavail_factories	factoriesr`   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.rY   TN)r;   set_event_loop_policyr   	set_debugset_event_loop)rp   rD   rF   policyr.   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*   )r;   WindowsProactorEventLoopPolicyr   r   new_event_loopr   )r   r.   s     r!   rd   rd      sY     335F!!&)	f++	, u%  s   ?A0A$	A0$A-)A0aiohttp_unused_portreturnc                 >    t        j                  dt        d       | S )Nz3Deprecated, use aiohttp_unused_port fixture instead   
stacklevelrM   warnDeprecationWarning)r   s    r!   r   r      s    MM=
 r#   c                      t         S )z1Return a port that is unused on the current host.)_unused_portre   r#   r!   r   r      s
     r#   r(   c              #   f    K   g dd fd
}| dfd} j                   |              yw)z^Factory to create a TestServer instance, given an app.

    aiohttp_server(app, **kwargs)
    Nportc                   K   t        | |      } |j                  ddi| d {    j                  |       |S 7 wNr   r(   re   )r   start_serverappend)appr   r6   serverr(   serverss       r!   gozaiohttp_server.<locals>.go	  sG     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   s   `  @r!   aiohttp_serverr     s4      G"  H( 	HJ'   -1c                 >    t        j                  dt        d       | S )Nz.Deprecated, use aiohttp_server fixture insteadr   r   r   )r   s    r!   test_serverr         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   r6   r   r(   r   s       r!   r   zaiohttp_raw_server.<locals>.go*  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>.finalize2  r   r   r   r   r   s   `  @r!   aiohttp_raw_serverr   "  s4      G"&  H( 	HJ'r   c                 >    t        j                  dt        d       | S )Nz2Deprecated, use aiohttp_raw_server fixture insteadr   r   r   )r   s    r!   raw_test_serverr   9  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)
    N)server_kwargs__paramr5   r   r6   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   r5   r6   r   clientclientsr(   s         r!   r   zaiohttp_client.<locals>.goQ  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>.finalizeo  r   r   r   )	r
   r   r   r   r   r   strr   r+   )r(   r   r   r   s   `  @r!   aiohttp_clientr   E  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   v  r   r#   )F)6r;   
contextlibrM   typingr   r   r   r   r   r   r	   r
   pytestaiohttp.helpersr   aiohttp.webr   
test_utilsr   r   r   r   r   r   r   r   r   rq   ImportErrorAiohttpClientAiohttpRawServerAiohttpServerr"   r?   fixturerD   rF   contextmanagerrW   rZ   rb   rn   r   r(   rd   intr   AbstractEventLoopr   r   r   r   r   r   re   r#   r!   <module>r      s      R R R  . #	 	 	 %^ ;<=y?TTU[M9]+CCD +	*(==>*6r 6 6
 C C
  . , , 8$@     Xb#g%6 8BG;L   Xb#g.  
 (22 (x7N ( (,   (W66 (8DT;U ( (,   -(

#
#-(m-( -(`  
  Fs   G
 
GG