a
    Rf.                     @   s   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 zd dlZW n ey   dZY n0 eegee f ZG dd deZG dd	 d	eZd
d Z dd Z!ej"dd Z#ej"dd Z$ej%dd Z&ej%d4ddZ'dd Z(dd Z)dd Z*ej"dd Z+ej"dd  Z,ej"eg e-f eg e-f d!d"d#Zej"eg e-f d$d%d&Z.ej"e j/e	e d'd(d)Z0ej"d*d+ Z1ej"e j/e	e d'd,d-Z2ej"d.d/ Z3ej"e j/e	e d'd0d1Z4ej"d2d3 Z5dS )5    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                   @   s>   e Zd Zddeeef eeee	f  e	e
e dddZdS )AiohttpClientNserver_kwargs)_AiohttpClient__paramr   kwargsreturnc                K   s   d S N )selfr   r   r   r   r   N/var/www/ai-form-bot/venv/lib/python3.9/site-packages/aiohttp/pytest_plugin.py__call__)   s    zAiohttpClient.__call__)__name__
__module____qualname__r
   r   r   r   r   strr   r   r   r   r   r   r   r   r   (   s   
r   c                   @   s.   e Zd Zddeee eee dddZ	dS )AiohttpServerNportappr&   r   r   c                K   s   d S r   r   )r   r(   r&   r   r   r   r   r   3   s    zAiohttpServer.__call__)
r    r!   r"   r   r   intr   r   r   r   r   r   r   r   r$   2   s
   
r$   c                 C   s:   | j ddddd | j dddd	d | j d
dddd d S )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)Z	addoption)parserr   r   r   pytest_addoption8   s$    r3   c                    sd   | j  t rdnt r&dndS dd| jvrJ|  jd7  _d fdd}|| _ dS )zjSet up pytest fixture.

    Allow fixtures to be coroutines. Run coroutine fixtures in an event loop.
    TFNrequestr4   c                     s~   |d }r|d= d|j vr$td|d rf| i | fdd}||   S  | i |S d S )Nr4   loopz^Asynchronous fixtures must depend on the 'loop' fixture or be used in tests depending from it.c                      s(   z   W S  ty"   Y n0 d S r   )run_until_complete	__anext__StopAsyncIterationr   _loopgenr   r   	finalizerx   s    z8pytest_fixture_setup.<locals>.wrapper.<locals>.finalizer)fixturenames	ExceptionZgetfixturevalueZaddfinalizerr7   r8   )argsr   r4   r=   funcZis_async_genZstrip_requestr:   r   wrapperc   s    


z%pytest_fixture_setup.<locals>.wrapper)rB   inspectisasyncgenfunctionasyncioiscoroutinefunctionargnames)Z
fixturedefrC   r   rA   r   pytest_fixture_setupM   s    


 rI   c                 C   s   | j dS )z--fast config optionr*   config	getoptionr5   r   r   r   fast   s    rM   c                 C   s   | j dS )z!--enable-loop-debug config optionr1   rJ   r5   r   r   r   
loop_debug   s    rN   c               	   c   st   t jddT} dV  dd | D }|rRtdt|t|dkrBdnd	d
|W d   n1 sf0    Y  dS )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)recordNc                 S   s"   g | ]}|j tkrd j|dqS )z#{w.filename}:{w.lineno}:{w.message})w)categoryRuntimeWarningformat).0rP   r   r   r   
<listcomp>   s   
z,_runtime_warning_context.<locals>.<listcomp>z{} Runtime Warning{},
{}r    s
)warningscatch_warningsRuntimeErrorrS   lenjoin)	_warningsrwr   r   r   _runtime_warning_context   s    	 r`   Fc                 c   s(   | r| V  nt  } | V  t| |d dS )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.
    rM   N)r   r   )r6   rM   r   r   r   _passthrough_loop_context   s
    rb   c                 C   s(   |  |r$t|r$t| ||S dS )z%Fix pytest collecting for coroutines.N)ZfuncnamefilterrF   rG   listZ_genfunctions)	collectornameobjr   r   r   pytest_pycollect_makeitem   s    rg   c              	      s    j d}t jr jdp0 jdd}t h t||d<} fdd j	j
D }| jf i | W d   n1 s0    Y  W d   n1 s0    Y  dS dS )	zBRun coroutines in an event loop instead of a normal function call.r*   proactor_loopr6   Nra   c                    s   i | ]}| j | qS r   )funcargs)rT   arg
pyfuncitemr   r   
<dictcomp>   s   z&pytest_pyfunc_call.<locals>.<dictcomp>T)rK   rL   rF   rG   functionri   getr`   rb   Z_fixtureinforH   r7   rf   )rl   rM   Zexisting_loopr;   Ztestargsr   rk   r   pytest_pyfunc_call   s    
Rrp   c                 C   s   d| j vrd S | jjj}dtji}td ur4tj|d< |dkr@d}i }|dD ]N}|	d }|
d}||vr|rNtd	|t| f nqN|| ||< qN| jdt| t| d
 d S )Nloop_factoryr0   uvloopallzpyloop,uvloop?,?z ?z&Unknown loop '%s', available loops: %s)Zids)r>   rK   optionZaiohttp_looprF   ZDefaultEventLoopPolicyrr   ZEventLoopPolicysplitendswithstrip
ValueErrorrc   keysZparametrizevalues)ZmetafuncZloopsZavail_factoriesZ	factoriesre   requiredr   r   r   pytest_generate_tests   s0    




r~   c                 c   s\   |  }t | t|d.}|r*|d t | |V  W d   n1 sN0    Y  dS )z%Return an instance of the event loop.ra   TN)rF   set_event_loop_policyr   Z	set_debugset_event_loop)rq   rM   rN   policyr;   r   r   r   r6      s    


r6   c                  c   sP   t  } t |  t| j }t | |V  W d    n1 sB0    Y  d S r   )rF   ZWindowsProactorEventLoopPolicyr   r   Znew_event_loopr   )r   r;   r   r   r   rh      s
    

rh   )aiohttp_unused_portr   c                 C   s   t jdtdd | S )Nz3Deprecated, use aiohttp_unused_port fixture instead   
stacklevelrY   warnDeprecationWarning)r   r   r   r   r   	  s    r   r   c                   C   s   t S )z1Return a port that is unused on the current host.)_unused_portr   r   r   r   r     s    r   )r6   r   c                 #   sP   g ddt tt ttd fdd}|V  ddfdd} |  dS )	z^Factory to create a TestServer instance, given an app.

    aiohttp_server(app, **kwargs)
    Nr%   r'   c                   s4   t | |d}|jf d i|I d H  | |S Nr%   r6   )r   start_serverappend)r(   r&   r   serverr6   serversr   r   go!  s    
zaiohttp_server.<locals>.gor   c                      s    r    I d H  q d S r   popcloser   r   r   r   finalize+  s    z aiohttp_server.<locals>.finalize)r   r   r)   r   r   r7   r6   r   r   r   r   r   aiohttp_server  s    
r   c                 C   s   t jdtdd | S )Nz.Deprecated, use aiohttp_server fixture insteadr   r   r   )r   r   r   r   test_server2  s    r   c                 #   s@   g dd fdd
}|V  ddfdd}  |  dS )zpFactory to create a RawTestServer instance, given a web handler.

    aiohttp_raw_server(handler, **kwargs)
    Nr%   c                   s4   t | |d}|jf d i|I d H  | |S r   )r   r   r   )handlerr&   r   r   r   r   r   r   D  s    
zaiohttp_raw_server.<locals>.gor   c                      s    r    I d H  q d S r   r   r   r   r   r   r   L  s    z$aiohttp_raw_server.<locals>.finalize)r7   r   r   r   r   aiohttp_raw_server<  s
    r   c                 C   s   t jdtdd | S )Nz2Deprecated, use aiohttp_raw_server fixture insteadr   r   r   )r   r   r   r   raw_test_serverS  s    r   c                 #   sb   g  ddt ttf tttttf  ttd fdd}|V  dd fdd}|  dS )	zFactory to create a TestClient instance.

    aiohttp_client(app, **kwargs)
    aiohttp_client(server, **kwargs)
    aiohttp_client(raw_server, **kwargs)
    Nr   )__paramr@   r   r   r   c                   s   t | tr4t | ttfs4| g|R i |} i }n|r@J dt | tr||pPi }t| fdi|}t|fdi|}n0t | trt| fdi|}ntdt|  | I d H   	| |S )Nzargs should be emptyr6   zUnknown argument type: %r)

isinstancer   r   r   r   r   rz   typer   r   )r   r   r@   r   r   clientclientsr6   r   r   r   k  s     


zaiohttp_client.<locals>.gor   c                      s    r    I d H  q d S r   r   r   )r   r   r   r     s    z aiohttp_client.<locals>.finalize)	r
   r   r   r   r   r   r#   r   r7   r   r   r   r   aiohttp_client_  s    

r   c                 C   s   t jdtdd | S )Nz.Deprecated, use aiohttp_client fixture insteadr   r   r   )r   r   r   r   test_client  s    r   )F)6rF   
contextlibrD   rY   typingr   r   r   r   r   r   r   r	   r
   ZpytestZaiohttp.webr   Z
test_utilsr   r   r   r   r   r   r   r   r   rr   ImportErrorZAiohttpRawServerr   r$   r3   rI   ZfixturerM   rN   contextmanagerr`   rb   rg   rp   r~   r6   rh   r)   r   ZAbstractEventLoopr   r   r   r   r   r   r   r   r   r   <module>   sb   ,(

9


 

	"	
	
0