o
    ~#iE/                     @   s2  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mZmZmZmZmZmZmZ ddlmZ ddlmZ zd dlZW n ey[   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! Z-ej$d"d# Z.ej$d$eg e/f d%eg e/f fd&d'Zej$d%eg e/f fd(d$Z0ej$d!e j1d%e	e  fd)d*Z2ej$d+d, Z3ej$d!e j1d%e	e! fd-d.Z4ej$d/d0 Z5ej$d!e j1d%e	e fd1d2Z6ej$d3d4 Z7dS )6    N)	Any	AwaitableCallableDictIteratorOptionalProtocolTypeUnion   )BaseTestServerRawTestServer
TestClient
TestServerloop_contextsetup_test_loopteardown_test_loopunused_port)Application)_RequestHandlerc                
   @   sD   e Zd Zdddeeef deeee	f  de	de
e fddZdS )	AiohttpClientNserver_kwargs_AiohttpClient__paramr   kwargsreturnc                K      d S N )selfr   r   r   r   r   \/var/www/GraceOrthoHospital/venv_grace/lib/python3.10/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                
   @   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   r   r   r   )r   r*   r)   r   r   r   r    r!   1      zAiohttpServer.__call__)
r"   r#   r$   r   r   intr   r   r   r!   r   r   r   r    r'   0       r'   c                
   @   r&   )	AiohttpRawServerNr(   handlerr)   r   r   c                K   r   r   r   )r   r/   r)   r   r   r   r    r!   7   r+   zAiohttpRawServer.__call__)
r"   r#   r$   r   r   r,   r   r   r   r!   r   r   r   r    r.   6   r-   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)	addoption)parserr   r   r    pytest_addoption<   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r;   c                     sz   |d }r	|d= d|j vrtd|d r3| i | fdd}||   S  | i |S )Nr;   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addfinalizerr>   r?   )argsr   r;   rD   funcis_async_genstrip_requestrA   r    wrapperg   s   


z%pytest_fixture_setup.<locals>.wrapper)rK   inspectisasyncgenfunctionasyncioiscoroutinefunctionargnames)
fixturedefrN   r   rJ   r    pytest_fixture_setupQ   s   



 rU   c                 C      | j dS )z--fast config optionr0   config	getoptionr<   r   r   r    fast      rZ   c                 C   rV   )z!--enable-loop-debug config optionr7   rW   r<   r   r   r    
loop_debug   r[   r\   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).0r^   r   r   r    
<listcomp>   s
    

z,_runtime_warning_context.<locals>.<listcomp>z{} Runtime Warning{},
{}r    s
)warningscatch_warningsRuntimeErrorra   lenjoin)	_warningsrwr   r   r    _runtime_warning_context   s   	 "rn   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.
    rZ   N)r   r   )r=   rZ   r   r   r    _passthrough_loop_context   s   
rp   c                 C   s,   |  |rt|rt| ||S dS dS )z%Fix pytest collecting for coroutines.N)funcnamefilterrQ   rR   list_genfunctions)	collectornameobjr   r   r    pytest_pycollect_makeitem   s   rw   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.r0   proactor_loopr=   Nro   c                    s   i | ]}| j | qS r   )funcargs)rb   arg
pyfuncitemr   r    
<dictcomp>   s    
z&pytest_pyfunc_call.<locals>.<dictcomp>Tr   )rX   rY   rQ   rR   functionry   getrn   rp   _fixtureinforS   r>   rv   )r|   rZ   existing_looprB   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_factoryr6   uvloopallzpyloop,uvloop?,?z ?z&Unknown loop '%s', available loops: %s)ids)rE   rX   optionaiohttp_looprQ   DefaultEventLoopPolicyr   EventLoopPolicysplitendswithstrip
ValueErrorrr   keysparametrizevalues)metafuncloopsavail_factories	factoriesru   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.ro   TN)rQ   set_event_loop_policyr   	set_debugset_event_loop)r   rZ   r\   policyrB   r   r   r    r=      s   


"r=   c                  c   sT    t  } t |  t| j}t | |V  W d    d S 1 s#w   Y  d S r   )rQ   WindowsProactorEventLoopPolicyr   r   new_event_loopr   )r   rB   r   r   r    rx     s   

"rx   aiohttp_unused_portr   c                 C      t jdtdd | S )Nz3Deprecated, use aiohttp_unused_port fixture instead   
stacklevelrg   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(   r=   r   )r   start_serverappend)r*   r)   r   serverr=   serversr   r    go%  
   
zaiohttp_server.<locals>.goc                      $    r    I d H   sd S d S r   popcloser   r   r   r    finalize/     z aiohttp_server.<locals>.finalizer   N)r   r   r,   r   r   r>   r=   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_server6  r   r   c              	   #   r   )zpFactory to create a RawTestServer instance, given a web handler.

    aiohttp_raw_server(handler, **kwargs)
    Nr(   r/   r)   r   r   c                   r   r   )r   r   r   )r/   r)   r   r   r   r   r    r   H  r   zaiohttp_raw_server.<locals>.goc                      r   r   r   r   r   r   r    r   R  r   z$aiohttp_raw_server.<locals>.finalizer   )r   r   r,   r   r   r>   r   r   r   r    aiohttp_raw_server@  r   r   c                 C   r   )Nz2Deprecated, use aiohttp_raw_server fixture insteadr   r   r   )r   r   r   r    raw_test_serverY  s   r   c                 #   sh    g  dddt ttf dtdttttf  dtdt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   __paramrI   r   r   r   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 emptyr=   zUnknown argument type: %r)

isinstancer   r   r   r   r   r   typer   r   )r   r   rI   r   r   clientclientsr=   r   r    r   q  s"   


zaiohttp_client.<locals>.goc                      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   r   r    aiohttp_cliente  s"   

r   c                 C   r   )Nz.Deprecated, use aiohttp_client fixture insteadr   r   r   )r   r   r   r    test_client  r   r   )F)8rQ   
contextlibrO   rg   typingr   r   r   r   r   r   r   r	   r
   pytest
test_utilsr   r   r   r   r   r   r   r   r   webr   web_protocolr   r   ImportErrorr   r'   r.   r:   rU   fixturerZ   r\   contextmanagerrn   rp   rw   r   r   r=   rx   r,   r   AbstractEventLoopr   r   r   r   r   r   r   r   r   r    <module>   sl    ,(

9


 

	$	
	
0