o
    m=8j2                  
   @   sd  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 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'd7ddZ)dd Z*dd Z+dd  Z,ej$d!eg e j-f de.de.d"ee j- fd#d$Z/ej$d"ee j- fd%d&Z0ej$d'eg e1f d"eg e1f fd(d)Zej$d"eg e1f fd*d'Z2ej$d$e j-d"ee  fd+d,Z3ej$d-d. Z4ej$d$e j-d"ee! fd/d0Z5ej$d1d2 Z6ej$d$e j-d"ee fd3d4Z7ej$d5d6 Z8dS )8    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                   @   s|   e Zd Zedddedeeef dB dedee	ef fddZ
edddedeeef dB 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   \/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/aiohttp/pytest_plugin.py__call__      zAiohttpClient.__call__c                   r   r   r   r   r   r   r    r!   &   r"   )__name__
__module____qualname__r   r   dict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dB 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!   1      zAiohttpServer.__call__)	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   r2   r+   r   r   r   r    r!   7   r.   zAiohttpRawServer.__call__)	r#   r$   r%   r   r/   r   r   r
   r!   r   r   r   r    r1   6   r0   r1   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addfinalizerrA   rB   )argsr   r>   rG   funcis_async_genstrip_requestrD   r    wrapperg   s   


z%pytest_fixture_setup.<locals>.wrapper)rN   inspectisasyncgenfunctioniscoroutinefunctionargnames)
fixturedefrQ   r   rM   r    pytest_fixture_setupQ   s   



 rW   c                 C      | j dS )z--fast config optionr3   config	getoptionr?   r   r   r    fast      r\   c                 C   rX   )z!--enable-loop-debug config optionr:   rY   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   s0   g | ]}|j tkr|j d |j d |j qS ):)categoryRuntimeWarningfilenamelinenomessage).0wr   r   r    
<listcomp>   s
    
z,_runtime_warning_context.<locals>.<listcomp>z{} Runtime Warning{},
{}r    s
)warningscatch_warningsRuntimeErrorformat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   )r@   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)funcnamefilterrR   rT   list_genfunctions)	collectornameobjr   r   r    pytest_pycollect_makeitem   s   r}   c              	      s    j d}t jrutdt  j	dp* j	dp* j	dp* j	dd}t
 = t||d} fd	d
 jjD }| jdi | W d   n1 sVw   Y  W d   dS W d   dS 1 snw   Y  dS dS )zBRun coroutines in an event loop instead of a normal function call.r3   zKaiohttp.pytest_plugin will be removed in v4. Please install pytest-aiohttp.proactor_loopselector_loopuvloop_loopr@   Nru   c                    s   i | ]}| j | qS r   )funcargs)rf   arg
pyfuncitemr   r    
<dictcomp>   s    
z&pytest_pyfunc_call.<locals>.<dictcomp>Tr   )rZ   r[   rR   rT   functionrl   warnDeprecationWarningr   getrt   rv   _fixtureinforU   rA   r|   )r   r\   existing_looprE   testargsr   r   r    pytest_pyfunc_call   s8   




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_factoryr9   uvloopallzpyloop,uvloop?,?z ?z&Unknown loop '%s', available loops: %s)ids)rH   rZ   optionaiohttp_loopasyncionew_event_loopr   splitendswithstrip
ValueErrorrx   keysparametrizevalues)metafuncloopsavail_factories	factoriesr{   requiredr   r   r    pytest_generate_tests   s0   





r   r   r   c                 c   sR    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)r   	set_debugr   set_event_loop)r   r\   r^   rE   r   r   r    r@      s   

"r@   c                  c   sF    t j} t| }t | |V  W d    d S 1 sw   Y  d S r   )r   ProactorEventLoopr   r   )factoryrE   r   r   r    r~     s   

"r~   aiohttp_unused_portc                 C      t jdtdd | S )Nz3Deprecated, use aiohttp_unused_port fixture instead   
stacklevelrl   r   r   )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                 #   sZ    g ddddt dtdtdB 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)
    z	127.0.0.1Nhostr+   r,   r   r+   r   r   c                   s8   t | ||d}|jdd i|I d H  | |S )Nr   r@   r   )r   start_serverappend)r,   r   r+   r   serverr@   serversr   r    go.  s
   
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   rA   r@   r   r   r   r   r    aiohttp_server&  s$   r   c                 C   r   )Nz.Deprecated, use aiohttp_server fixture insteadr   r   r   )r   r   r   r    test_serverC  r   r   c              	   #   sT    g dddt dtdB dtdtf fdd}|V  dfd	d
} |  dS )zpFactory to create a RawTestServer instance, given a web handler.

    aiohttp_raw_server(handler, **kwargs)
    Nr*   r2   r+   r   r   c                   s6   t | |d}|jdd i|I d H  | |S )Nr*   r@   r   )r
   r   r   )r2   r+   r   r   r   r   r    r   U  s
   
zaiohttp_raw_server.<locals>.goc                      r   r   r   r   r   r   r    r   _  r   z$aiohttp_raw_server.<locals>.finalizer   )r   r/   r   r
   rA   r   r   r   r    aiohttp_raw_serverM  s   r   c                 C   r   )Nz2Deprecated, use aiohttp_raw_server fixture insteadr   r   r   )r   r   r   r    raw_test_serverf  s   r   c                 #   s    g  t dddtdtttf dB dtdtttf fdd}t dddtdtttf dB dtdttdf fd	d}dddttB d
tdtttf dB 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   |     zaiohttp_client.<locals>.goc                   r   r   r   r   r   r   r    r     r   rL   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   rL   r   r   clientclientsr@   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   rA   r   r   r   r    aiohttp_clientr  sN   



r   c                 C   r   )Nz.Deprecated, use aiohttp_client fixture insteadr   r   r   )r   r   r   r    test_client  r   r   )F)9r   
contextlibrR   rl   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)   r1   r=   rW   fixturer\   r^   contextmanagerrt   rv   r}   r   r   AbstractEventLoopboolr@   r~   r/   r   r   r   r   r   r   r   r   r   r   r    <module>   sv    (
9


 $	
	
=