o
    zsg1                     @   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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 zd dl Z W n e!ya   dZ Y nw G dd de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*d5ddZ,dd Z-dd Z.dd Z/ej'd d! Z0ej'd"d# Z1ej'd$eg e2f d%eg e2f fd&d'Zej'd%eg e2f fd(d$Z3ej'd!e j4d%e	e# fd)d*Z5ej'd+d, Z6ej'd!e j4d%e	e$ fd-d.Z7ej'd/d0 Z8ej'd!e j4d%e	e" fd1d2Z9ej'd3d4 Z:dS )6    N)
Any	AwaitableCallableDictIteratorOptionalProtocolTypeUnionoverload   )BaseTestServerRawTestServer
TestClient
TestServerloop_contextsetup_test_loopteardown_test_loopunused_port)ApplicationBaseRequestRequest)_RequestHandlerc                   @   s|   e Zd Zedddedeeeef  dede	e
ef fddZedddedeeeef  dede	edf fd	dZdS )
AiohttpClientNserver_kwargs_AiohttpClient__paramr   kwargsreturnc                      d S N selfr   r   r   r!   r!   Q/var/www/html/minecraft/env/lib/python3.10/site-packages/aiohttp/pytest_plugin.py__call__(      zAiohttpClient.__call__c                   r   r    r!   r"   r!   r!   r$   r%   0   r&   )__name__
__module____qualname__r   r   r   r   strr   r   r   r%   r   r   r!   r!   r!   r$   r   '   s.    

r   c                
   @   4   e Zd Zdddedee dedee fddZ	dS )	AiohttpServerNportappr.   r   r   c                K      d S r    r!   )r#   r/   r.   r   r!   r!   r$   r%   ;      zAiohttpServer.__call__)
r'   r(   r)   r   r   intr   r   r   r%   r!   r!   r!   r$   r,   :       r,   c                
   @   r+   )	AiohttpRawServerNr-   handlerr.   r   r   c                K   r0   r    r!   )r#   r5   r.   r   r!   r!   r$   r%   A   r1   zAiohttpRawServer.__call__)
r'   r(   r)   r   r   r2   r   r   r   r%   r!   r!   r!   r$   r4   @   r3   r4   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)	addoption)parserr!   r!   r$   pytest_addoptionF   s$   
r@   c                    sd   | j  t rdn
t rdndS dd| jvr%|  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rA   c                     sz   |d }r	|d= d|j vrtd|d r3| i | fdd}||   S  | i |S )NrA   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 d S w r    )run_until_complete	__anext__StopAsyncIterationr!   _loopgenr!   r$   	finalizer   s
   z8pytest_fixture_setup.<locals>.wrapper.<locals>.finalizer)fixturenames	ExceptiongetfixturevalueaddfinalizerrD   rE   )argsr   rA   rJ   funcis_async_genstrip_requestrG   r$   wrapperq   s   


z%pytest_fixture_setup.<locals>.wrapper)rQ   inspectisasyncgenfunctionasyncioiscoroutinefunctionargnames)
fixturedefrT   r!   rP   r$   pytest_fixture_setup[   s   



 r[   c                 C      | j dS )z--fast config optionr6   config	getoptionrB   r!   r!   r$   fast      r`   c                 C   r\   )z!--enable-loop-debug config optionr=   r]   rB   r!   r!   r$   
loop_debug   ra   rb   c               	   c   sx    t jdd+} dV  dd | D }|r*tdt|t|dkr"dnd	d
|W d   dS 1 s5w   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).0rd   r!   r!   r$   
<listcomp>   s
    

z,_runtime_warning_context.<locals>.<listcomp>z{} Runtime Warning{},
{}r    s
)warningscatch_warningsRuntimeErrorrg   lenjoin)	_warningsrwr!   r!   r$   _runtime_warning_context   s   	 "rt   Fc                 c   s,    | r| V  dS 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.
    r`   N)r   r   )rC   r`   r!   r!   r$   _passthrough_loop_context   s   
rv   c                 C   s,   |  |rt|rt| ||S dS dS )z%Fix pytest collecting for coroutines.N)funcnamefilterrW   rX   list_genfunctions)	collectornameobjr!   r!   r$   pytest_pycollect_makeitem   s   r}   c              	      s    j d}t jrc jdp jdd}t = t||d} fdd j	j
D }| jd	i | W d   n1 sDw   Y  W d   dS W d   dS 1 s\w   Y  dS dS )
zBRun coroutines in an event loop instead of a normal function call.r6   proactor_looprC   Nru   c                    s   i | ]}| j | qS r!   )funcargs)rh   arg
pyfuncitemr!   r$   
<dictcomp>   s    
z&pytest_pyfunc_call.<locals>.<dictcomp>Tr!   )r^   r_   rW   rX   functionr   getrt   rv   _fixtureinforY   rD   r|   )r   r`   existing_looprH   testargsr!   r   r$   pytest_pyfunc_call   s,   


r   c                 C   s   d| j vrd S | jjj}dtji}td urtj|d< |dkr d}i }|dD ]&}|	d }|
d}||vrG|rFtd	|t| f q'|| ||< q'| jdt| t| d
 d S )Nloop_factoryr<   uvloopallzpyloop,uvloop?,?z ?z&Unknown loop '%s', available loops: %s)ids)rK   r^   optionaiohttp_looprW   DefaultEventLoopPolicyr   EventLoopPolicysplitendswithstrip
ValueErrorrx   keysparametrizevalues)metafuncloopsavail_factories	factoriesr{   requiredr!   r!   r$   pytest_generate_tests   s0   





r   c                 c   s`    |  }t | t|d}|r|d t | |V  W d   dS 1 s)w   Y  dS )z%Return an instance of the event loop.ru   TN)rW   set_event_loop_policyr   	set_debugset_event_loop)r   r`   rb   policyrH   r!   r!   r$   rC     s   


"rC   c                  c   sT    t  } t |  t| j}t | |V  W d    d S 1 s#w   Y  d S r    )rW   WindowsProactorEventLoopPolicyr   r   new_event_loopr   )r   rH   r!   r!   r$   r~     s   

"r~   aiohttp_unused_portr   c                 C      t jdtdd | S )Nz3Deprecated, use aiohttp_unused_port fixture instead   
stacklevelrm   warnDeprecationWarning)r   r!   r!   r$   r        r   c                   C   s   t S )z1Return a port that is unused on the current host.)_unused_portr!   r!   r!   r$   r   !  s   c              	   #   T    g dddt dtt dtdtf fdd}|V  dfd	d
} |  dS )z^Factory to create a TestServer instance, given an app.

    aiohttp_server(app, **kwargs)
    Nr-   r/   r.   r   r   c                   6   t | |d}|jdd i|I d H  | |S Nr-   rC   r!   )r   start_serverappend)r/   r.   r   serverrC   serversr!   r$   go/  
   
zaiohttp_server.<locals>.goc                      $    r    I d H   sd S d S r    popcloser!   r   r!   r$   finalize9     z aiohttp_server.<locals>.finalizer   N)r   r   r2   r   r   rD   rC   r   r   r!   r   r$   aiohttp_server'     r   c                 C   r   )Nz.Deprecated, use aiohttp_server fixture insteadr   r   r   )r   r!   r!   r$   test_server@  r   r   c              	   #   r   )zpFactory to create a RawTestServer instance, given a web handler.

    aiohttp_raw_server(handler, **kwargs)
    Nr-   r5   r.   r   r   c                   r   r   )r   r   r   )r5   r.   r   r   r   r!   r$   r   R  r   zaiohttp_raw_server.<locals>.goc                      r   r    r   r!   r   r!   r$   r   \  r   z$aiohttp_raw_server.<locals>.finalizer   )r   r   r2   r   r   rD   r   r!   r   r$   aiohttp_raw_serverJ  r   r   c                 C   r   )Nz2Deprecated, use aiohttp_raw_server fixture insteadr   r   r   )r   r!   r!   r$   raw_test_serverc  s   r   c                 #   s    g  t dddtdttttf  dtdtttf fdd}t dddtdttttf  dtdtt	df fd	d}dddt
ttf d
tdttttf  dtdtttf f
 fdd}|V  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   c                   r   r    r!   r   r   r   r!   r!   r$   r   y     zaiohttp_client.<locals>.goc                   r   r    r!   r   r!   r!   r$   r     r   rO   c                   s   t | trt | ttfs| g|R i |} i }n|r!J dt | tr?|p)i }t| fdi|}t|fdi|}nt | trOt| fdi|}ntdt|  | I d H   	| |S )Nzargs should be emptyrC   zUnknown argument type: %r)

isinstancer   r   r   r   r   r   typer   r   )r   r   rO   r   r   clientclientsrC   r!   r$   r     s"   


c                      r   r    r   r!   )r   r!   r$   r     r   z aiohttp_client.<locals>.finalizer   )r   r   r   r   r*   r   r   r   r   r   r
   rD   r   r!   r   r$   aiohttp_cliento  sN   




r   c                 C   r   )Nz.Deprecated, use aiohttp_client fixture insteadr   r   r   )r   r!   r!   r$   test_client  r   r   )F);rW   
contextlibrU   rm   typingr   r   r   r   r   r   r   r	   r
   r   pytest
test_utilsr   r   r   r   r   r   r   r   r   webr   r   r   web_protocolr   r   ImportErrorr   r,   r4   r@   r[   fixturer`   rb   contextmanagerrt   rv   r}   r   r   rC   r~   r2   r   AbstractEventLoopr   r   r   r   r   r   r!   r!   r!   r$   <module>   sd    0(
9


 

	$	
	
=