
    hY                         d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZ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mZmZmZ ddlmZmZ ddlmZ ddl m!Z!m"Z" dd	l#m$Z$ ddl%Z%dd
l&m'Z'm(Z(m)Z) ddl*m+Z+m,Z, ddl
m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9 ddl:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE ddlFmGZG erddlHmIZI ndZIejJ        dk    rerddlmKZK ejJ        dk    rddlmLZL neZL ede=d          ZM ede?          ZNejO        dk    o
ejP        dk    ZQejR        fdeSd ejT        d!ej        fd"ZUdeSd#eVd ejT        d!ej        fd$ZWd!eVfd%ZX G d& d'e          ZY G d( d)eY          ZZ G d* d+eY          Z[ G d, d-eeNeMf                   Z\ G d. d/e          Z]d0ed1ed2ed!efd3Z^eg ej_        f         Z`eja        ejb        d4fd5e`d6ecd!eej_                 fd7            Zdejb        fd5e`d!ej_        fd8ZedQd9ej_        d6ecd!dfd:Zfd!ejg        fd;ZhdRd<eeI         d!eji        fd=Zj	 dRe3 e5dd          d4de3e3e3e8dd>d?d@dAeSdBeSdCedDedEe5dFecdGedHedIedJedKe9d<eeI         dLeVd9ed!eAfdMZke3e3fdNedOed!efdPZldS )SzUtilities shared by tests.    N)ABCabstractmethod)TracebackType)TYPE_CHECKINGAnyCallableGenericIteratorListOptionalTypeTypeVarcastoverload)IsolatedAsyncioTestCasemock)Signal)CIMultiDictCIMultiDictProxy)URL)_RequestContextManager_RequestOptions_WSRequestContextManager   )ClientSessionhdrs)AbstractCookieJar)ClientResponse)ClientWebSocketResponse)sentinel)HttpVersionRawRequestMessage)EMPTY_PAYLOADStreamReader)StrOrURL)	Application	AppRunnerBaseRequest
BaseRunnerRequestServerServerRunnerSockSiteUrlMappingMatchInfo)_RequestHandler)
SSLContext      )Unpack)Self_ApplicationNone_Request)boundposixcygwinhostfamilyreturnc                 $    t          | d|          S )Nr   )get_port_socket)r;   r<   s     T/var/www/html/prod/cognitive/venv/lib/python3.11/site-packages/aiohttp/test_utils.pyget_unused_port_socketrA   P   s     4F+++    portc                     t          j         |t           j                  }t          r+|                    t           j        t           j        d           |                    | |f           |S )Nr   )socketSOCK_STREAMREUSE_ADDRESS
setsockopt
SOL_SOCKETSO_REUSEADDRbind)r;   rC   r<   ss       r@   r?   r?   V   sZ     	ff011A @ 	
V&(;Q???FFD$<HrB   c                     t          j         t           j        t           j                  5 } |                     d           t	          t
          |                                 d                   cddd           S # 1 swxY w Y   dS )z1Return a port that is unused on the current host.)	127.0.0.1r   r   N)rE   AF_INETrF   rK   r   intgetsockname)rL   s    r@   unused_portrR   c   s    	v~v'9	:	: -a	   C+,,- - - - - - - - - - - - - - - - - -s   AA99A= A=c                      e Zd ZdZdddddeddedeej                 ded	ee	         d
e
deee	ej        gej        f         deddfdZ	 ddeej                 deddfdZededefd            ZdedefdZede
fd            Zede
fd            Zedefd            ZddZddZdeee                  dee         dee          ddfdZ!d dZ"deee                  dee         dee          ddfdZ#dS )!BaseTestServerF NrN   )schemeloopr;   rC   skip_url_assertssocket_factoryrV   rW   r;   rC   rX   rY   kwargsr=   c                    || _         d | _        d | _        || _        || _        d| _        || _        || _        || _        d S )NF)	_looprunner_rootr;   rC   _closedrV   rX   rY   )selfrV   rW   r;   rC   rX   rY   rZ   s           r@   __init__zBaseTestServer.__init__m   sK     
,0$(
		 0,rB   c                   K   | j         rd S || _        |                    dd           | _         | j        dddi| d {V | _         | j                                          d {V  | j        sd| _        | j        }	 t          j	        | j                  j
        }n# t          $ r d}Y nw xY w|dk    rd| j         d}|dk    rt          j        nt          j        }|                     | j        | j        |          }|                                d d	         \  | _        | _        t#          | j         || j        
          }|                                 d {V  |j        }|J |j        }	|	J |	d                                         d         | _        | j        s| j        rdnd| _        t-          | j         d| d| j                   | _        d S )Nsslhandler_cancellationTr         []   )sockssl_contextr   httpshttpz://: )r]   r\   pop_ssl_make_runnersetuprC   r;   	ipaddress
ip_addressversion
ValueErrorrE   AF_INET6rO   rY   rQ   r-   start_serversocketsrV   r   r^   )
r`   rW   rZ   absolute_hostrv   r<   _socksiteserverr{   s
             r@   start_serverzBaseTestServer.start_server   s      ; 	F
JJud++	-D-RR4R6RRRRRRRRk!!!!!!!!!y 	DI		*4955=GG 	 	 	GGG	a<<,	,,,M$+qLLfn##DIty&AA$00222A26	49%TYGGGjjll!!!."""AJ**,,Q/	{ 	;%)Y:''FDKDKGGMGGDIGGHH


s   =B B+*B+c                 
   K   d S Nro   r`   rZ   s     r@   rr   zBaseTestServer._make_runner   s      rB   pathc                     | j         J t          |          }| j        s#|j        rJ | j                             |          S t          t          | j                   t          |          z             S r   )r^   r   rX   absolutejoinstr)r`   r   urls      r@   make_urlzBaseTestServer.make_url   si    z%%%$ii$ 	4|###:??3'''s4:T2333rB   c                     | j         d uS r   )r]   r`   s    r@   startedzBaseTestServer.started   s    {$&&rB   c                     | j         S r   )r_   r   s    r@   closedzBaseTestServer.closed   
    |rB   c                 8    | j         }|J |j        J |j        S r   )r]   r   )r`   r]   s     r@   handlerzBaseTestServer.handler   s-     !!!}(((}rB   c                    K   | j         rF| j        sA| j        J | j                                         d{V  d| _        d| _        d| _        dS dS dS )a`  Close all fixtures created by the test client.

        After that point, the TestClient is no longer usable.

        This is an idempotent function: running close multiple times
        will not have any additional effects.

        close is also run when the object is garbage collected, and on
        exit when used as a context manager.

        NT)r   r   r]   cleanupr^   rC   r_   r   s    r@   closezBaseTestServer.close   s|       < 	  	 ;***+%%'''''''''DJDIDLLL	  	  	  	 rB   c                      t          d          NzUse async with instead	TypeErrorr   s    r@   	__enter__zBaseTestServer.__enter__       0111rB   exc_type	exc_value	tracebackc                     d S r   ro   r`   r   r   r   s       r@   __exit__zBaseTestServer.__exit__   	     	rB   c                 L   K   |                      | j                   d {V  | S NrW   )r   r\   r   s    r@   
__aenter__zBaseTestServer.__aenter__   s6      TZ000000000rB   c                 >   K   |                                   d {V  d S r   r   r   s       r@   	__aexit__zBaseTestServer.__aexit__   .       jjllrB   r   r=   N)r=   rT   )$__name__
__module____qualname____test__r?   r   r   asyncioAbstractEventLooprP   boolr   rE   AddressFamilyr   ra   r   r   r)   rr   r%   r   r   propertyr   r   r+   r   r   r   r   BaseExceptionr   r   r   r   ro   rB   r@   rT   rT   j   s       H
 48"!& - - - - w01	-
 - sm- - !#v+,fm;
- - 
- - - -0 ;?I IW67IJMI	I I I I@ 3 :    ^4X 4# 4 4 4 4 ' ' ' ' X'     X     X       &2 2 2 24./ M* M*	
 
      4./ M* M*	
 
     rB   rT   c                   Z     e Zd Zdddddedededee         d	ef
 fd
Zd	ede	fdZ
 xZS )
TestServerrU   rN   NrV   r;   rC   apprV   r;   rC   rZ   c                P    || _          t                      j        d|||d| d S Nr   ro   )r   superra   )r`   r   rV   r;   rC   rZ   	__class__s         r@   ra   zTestServer.__init__   s8     GTGGGGGGGrB   r=   c                 *   K   t          | j        fi |S r   )r'   r   r   s     r@   rr   zTestServer._make_runner   s      ,,V,,,rB   )r   r   r   r&   r   r   rP   r   ra   r)   rr   __classcell__r   s   @r@   r   r      s        
 "
H 
H 
H
H 	
H
 
H sm
H 
H 
H 
H 
H 
H 
H-3 -: - - - - - - - -rB   r   c                   d     e Zd Zdddddedededee         d	ed
df fdZdde	d	ed
e
fdZ xZS )RawTestServerrU   rN   Nr   r   rV   r;   rC   rZ   r=   c                P    || _          t                      j        d|||d| d S r   )_handlerr   ra   )r`   r   rV   r;   rC   rZ   r   s         r@   ra   zRawTestServer.__init__   s8      GTGGGGGGGrB   Tdebugc                 X   K   t          | j        f| j        |d|}t          |fd|i|S )N)rW   r   r   )r+   r   r\   r,   )r`   r   rZ   srvs       r@   rr   zRawTestServer._make_runner  sA      T]K5KKFKKC77u7777rB   )T)r   r   r   r/   r   r   rP   r   ra   r   r,   rr   r   r   s   @r@   r   r      s        
 "
H 
H 
H 
H 	
H
 
H sm
H 
H 

H 
H 
H 
H 
H 
H8 8 8s 8| 8 8 8 8 8 8 8 8rB   r   c                   8   e Zd ZdZdZedddddedee         d	e	d
df
d            Z
edddddedee         d	e	d
df
d            Z
ddddedee         deej                 d	e	d
df
dZ
d6dZed
efd            Zed
ee         fd            Zed
efd            Zed
efd            Zed
efd            Zded
efdZdeded	e	d
efdZej        dk    re rdeded	e!e"         d
e#fdZ$ded	e!e"         d
e#fdZ%ded	e!e"         d
e#fdZ&ded	e!e"         d
e#fdZ'ded	e!e"         d
e#fd Z(ded	e!e"         d
e#fd!Z)ded	e!e"         d
e#fd"Z*ded	e!e"         d
e#fd#Z+nRdeded	e	d
e#fd$Z$ded	e	d
e#fd%Z%ded	e	d
e#fd&Z(ded	e	d
e#fd'Z&ded	e	d
e#fd(Z'ded	e	d
e#fd)Z)ded	e	d
e#fd*Z*ded	e	d
e#fd+Z+ded	e	d
e,fd,Z-ded	e	d
e.fd-Z/d6d.Z0d6d/Z1d0ee2e3                  d1ee3         d2ee4         d
dfd3Z5d
e6fd4Z7d0ee2e3                  d1ee3         d2ee4         d
dfd5Z8dS )7
TestClientzb
    A test client implementation.

    To write functional tests for aiohttp based servers.

    FN)
cookie_jarr`   z TestClient[Request, Application]r   r   rZ   r=   c                    d S r   ro   r`   r   r   rZ   s       r@   ra   zTestClient.__init__  	     srB   zTestClient[_Request, None]c                    d S r   ro   r   s       r@   ra   zTestClient.__init__#  r   rB   )r   rW   rW   c                $   t          |t                    st          dt          |          z            || _        || _        |t          j        d|          }t          d||d|| _	        d| j	        _
        d| _        g | _        g | _        d S )Nz2server must be TestServer instance, found type: %rT)unsaferW   )rW   r   Fro   )
isinstancerT   r   typerz   r\   aiohttp	CookieJarr   _session_retry_connectionr_   
_responses_websockets)r`   r   r   rW   rZ   s        r@   ra   zTestClient.__init__+  s     &.11 	DtF||S   
 *$TBBBJ%Q4JQQ&QQ*/'02:<rB   c                 V   K   | j                             | j                   d {V  d S r   )rz   r   r\   r   s    r@   r   zTestClient.start_serverA  s9      l''TZ'88888888888rB   c                     | j         j        S r   )rz   r;   r   s    r@   r;   zTestClient.hostD      |  rB   c                     | j         j        S r   )rz   rC   r   s    r@   rC   zTestClient.portH  r   rB   c                     | j         S r   )rz   r   s    r@   r   zTestClient.serverL  r   rB   c                 .    t          | j        dd           S )Nr   )getattrrz   r   s    r@   r   zTestClient.appP  s    t|UD111rB   c                     | j         S )zAn internal aiohttp.ClientSession.

        Unlike the methods on the TestClient, client session requests
        do not automatically include the host in the url queried, and
        will require an absolute path to the resource.

        )r   r   s    r@   sessionzTestClient.sessionT  s     }rB   r   c                 6    | j                             |          S r   )rz   r   )r`   r   s     r@   r   zTestClient.make_url_  s    |$$T***rB   methodc                    K    | j         j        ||                     |          fi | d {V }| j                            |           |S r   )r   requestr   r   append)r`   r   r   rZ   resps        r@   _requestzTestClient._requestb  s_       +T]*64==3F3FQQ&QQQQQQQQt$$$rB   r1   c                     d S r   ro   r`   r   r   rZ   s       r@   r   zTestClient.requestl  s    %(SrB   c                     d S r   ro   r`   r   rZ   s      r@   getzTestClient.getp  	     &)SrB   c                     d S r   ro   r   s      r@   optionszTestClient.optionsv  r   rB   c                     d S r   ro   r   s      r@   headzTestClient.head|  r   rB   c                     d S r   ro   r   s      r@   postzTestClient.post  r   rB   c                     d S r   ro   r   s      r@   putzTestClient.put  r   rB   c                     d S r   ro   r   s      r@   patchzTestClient.patch  r   rB   c                     d S r   ro   r   s      r@   deletezTestClient.delete  r   rB   c                 :    t           | j        ||fi |          S )zRoutes a request to tested http server.

            The interface is identical to aiohttp.ClientSession.request,
            except the loop kwarg is overridden by the instance used by the
            test server.

            )r   r   r   s       r@   r   zTestClient.request  s(     *-$-*O*O*O*OPPPrB   c                 N    t           | j        t          j        |fi |          S )zPerform an HTTP GET request.)r   r   r   METH_GETr   s      r@   r   zTestClient.get  (    )-$-t*V*Vv*V*VWWWrB   c                 N    t           | j        t          j        |fi |          S )zPerform an HTTP POST request.)r   r   r   	METH_POSTr   s      r@   r   zTestClient.post  )    )-$-*W*WPV*W*WXXXrB   c                 N    t           | j        t          j        |fi |          S )z Perform an HTTP OPTIONS request.)r   r   r   METH_OPTIONSr   s      r@   r   zTestClient.options  s0    )d/@@@@  rB   c                 N    t           | j        t          j        |fi |          S )zPerform an HTTP HEAD request.)r   r   r   	METH_HEADr   s      r@   r   zTestClient.head  r  rB   c                 N    t           | j        t          j        |fi |          S )zPerform an HTTP PUT request.)r   r   r   METH_PUTr   s      r@   r   zTestClient.put  r   rB   c                 N    t           | j        t          j        |fi |          S zPerform an HTTP PATCH request.)r   r   r   
METH_PATCHr   s      r@   r   zTestClient.patch  s/    )dot>>v>>  rB   c                 N    t           | j        t          j        |fi |          S r	  )r   r   r   METH_DELETEr   s      r@   r   zTestClient.delete  s0    )d.????  rB   c                 8    t           | j        |fi |          S )zjInitiate websocket connection.

        The api corresponds to aiohttp.ClientSession.ws_connect.

        )r   _ws_connectr   s      r@   
ws_connectzTestClient.ws_connect  s(     ((8(8(H(H(H(HIIIrB   c                    K    | j         j        |                     |          fi | d {V }| j                            |           |S r   )r   r  r   r   r   )r`   r   rZ   wss       r@   r  zTestClient._ws_connect  s^       ,4=+DMM$,?,?JJ6JJJJJJJJ###	rB   c                 *  K   | j         s| j        D ]}|                                 | j        D ]}|                                 d{V  | j                                         d{V  | j                                         d{V  d| _         dS dS )aH  Close all fixtures created by the test client.

        After that point, the TestClient is no longer usable.

        This is an idempotent function: running close multiple times
        will not have any additional effects.

        close is also run on exit when used as a(n) (asynchronous)
        context manager.

        NT)r_   r   r   r   r   rz   )r`   r   r  s      r@   r   zTestClient.close  s       | 	   

& ! !hhjj        -%%''''''''',$$&&&&&&&&&DLLL	  	 rB   c                      t          d          r   r   r   s    r@   r   zTestClient.__enter__  r   rB   r   exctbc                     d S r   ro   r`   r   r  r  s       r@   r   zTestClient.__exit__  r   rB   c                 >   K   |                                   d {V  | S r   )r   r   s    r@   r   zTestClient.__aenter__  s/      !!!!!!!!!rB   c                 >   K   |                                   d {V  d S r   r   r  s       r@   r   zTestClient.__aexit__  r   rB   r   )9r   r   r   __doc__r   r   r   r   r   r   ra   rT   r   r   r   r   r   r;   rP   rC   r   r6   r   r   r   r%   r   r   r   r   sysversion_infor   r4   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r   r   r   r   r   r   r5   r   r   ro   rB   r@   r   r     s         H
 37	  0 ./	
  
   X 
 37	  * ./	
  
   X 3748= = == ./	=
 w01= = 
= = = =,9 9 9 9 !c ! ! ! X! !hsm ! ! ! X!     X 2% 2 2 2 X2     X+X +# + + + +!)58	    7""}"	)	)%-	)9?9P	)#	) 	) 	) 	)	)	) _-	) $		) 	) 	) 	)	)	) _-	) $		) 	) 	) 	)	)	) _-	) $		) 	) 	) 	)	)	) _-	) $		) 	) 	) 	)	)	) _-	) $		) 	) 	) 	)	)	) _-	) $		) 	) 	) 	)	)	) _-	) $		) 	) 	) 	) 	)
	Q
	Q%-
	Q9<
	Q#
	Q 
	Q 
	Q 
	Q	XH 	X 	X8N 	X 	X 	X 	X	YX 	Y 	Y9O 	Y 	Y 	Y 	Y	 	C 	<R 	 	 	 		YX 	Y 	Y9O 	Y 	Y 	Y 	Y	XH 	X 	X8N 	X 	X 	X 	X	h 	# 	:P 	 	 	 		x 	3 	;Q 	 	 	 	Jx J3 J;S J J J J(+	           *2 2 2 24./ m$ ]#	
 
   $    4./ m$ ]#	
 
     rB   r   c                   z    e Zd ZdZdefdZdefdZddZddZddZ	dd	Z
d
edefdZdedeeef         fdZdS )AioHTTPTestCasea  A base class to allow for unittest web applications using aiohttp.

    Provides the following:

    * self.client (aiohttp.test_utils.TestClient): an aiohttp test client.
    * self.loop (asyncio.BaseEventLoop): the event loop in which the
        application and server are running.
    * self.app (aiohttp.web.Application): the application returned by
        self.get_application()

    Note that the TestClient's methods are asynchronous: you have to
    execute function on the test client using asynchronous methods.
    r=   c                 .   K   |                                  S )zGet application.

        This method should be overridden
        to return the aiohttp.web.Application
        object to test.
        )get_appr   s    r@   get_applicationzAioHTTPTestCase.get_application  s       ||~~rB   c                      t          d          )zqObsolete method used to constructing web application.

        Use .get_application() coroutine instead.
        z+Did you forget to define get_application()?)RuntimeErrorr   s    r@   r   zAioHTTPTestCase.get_app  s    
 HIIIrB   Nc                 j   K   t          j                    | _        |                                  d {V S r   )r   get_running_looprW   
setUpAsyncr   s    r@   
asyncSetUpzAioHTTPTestCase.asyncSetUp&  s8      ,..	__&&&&&&&&&rB   c                   K   |                                   d {V | _        |                     | j                   d {V | _        |                     | j                   d {V | _        | j                                         d {V  d S r   )r!  r   
get_serverr   
get_clientclientr   r   s    r@   r&  zAioHTTPTestCase.setUpAsync*  s      --//////// OODH55555555 OODK88888888k&&(((((((((((rB   c                 :   K   |                                   d {V S r   )tearDownAsyncr   s    r@   asyncTearDownzAioHTTPTestCase.asyncTearDown1  s*      '')))))))))rB   c                 H   K   | j                                          d {V  d S r   )r+  r   r   s    r@   r-  zAioHTTPTestCase.tearDownAsync4  s2      k!!!!!!!!!!!rB   r   c                 2   K   t          || j                  S )zReturn a TestServer instance.r   )r   rW   )r`   r   s     r@   r)  zAioHTTPTestCase.get_server7  s      #DI....rB   r   c                 2   K   t          || j                  S )zReturn a TestClient instance.r   )r   rW   )r`   r   s     r@   r*  zAioHTTPTestCase.get_client;  s      &ty1111rB   r   )r   r   r   r  r&   r!  r   r'  r&  r.  r-  r   r)  r   r*   r*  ro   rB   r@   r  r    s         {    J J J J J' ' ' ') ) ) )* * * *" " " "/K /J / / / /2z 2j+AU6V 2 2 2 2 2 2rB   r  funcargsrZ   c                 >    t          j        dt          d           | S )zw
    A decorator dedicated to use with asynchronous AioHTTPTestCase test methods.

    In 3.8+, this does nothing.
    zBDecorator `@unittest_run_loop` is no longer needed in aiohttp 3.8+ri   )
stacklevel)warningswarnDeprecationWarning)r2  r3  rZ   s      r@   unittest_run_loopr9  @  s-     ML   
 KrB   Floop_factoryfastc              #   R   K   t          |           }|V  t          ||           dS )zzA contextmanager that creates an event_loop, for test purposes.

    Handles the creation and cleanup of a test loop.
    )r;  N)setup_test_loopteardown_test_loop)r:  r;  rW   s      r@   loop_contextr?  Q  s7       <((D
JJJt$''''''rB   c                 B     |             }t          j        |           |S )zCreate and return an asyncio.BaseEventLoop instance.

    The caller should also call teardown_test_loop,
    once they are done with the loop.
    )r   set_event_loop)r:  rW   s     r@   r=  r=  ^  s%     <>>D4   KrB   rW   c                    |                                  }|sB|                     | j                   |                                  |                                  |st          j                     t          j        d           dS )z>Teardown and cleanup an event_loop created by setup_test_loop.N)		is_closed	call_soonstoprun_foreverr   gccollectr   rA  )rW   r;  r   s      r@   r>  r>  k  sv    ^^F ty!!!

 

4     rB   c                  4   dt           dt          dt           fd} dt           dt          dt           dd fd}t          j        t                    }i |_        | |_        ||_        d|_        t          |          |_
        |j
                                         |S )	Nr   keyr=   c                     | j         |         S r   
__app_dict)r   rJ  s     r@   get_dictz"_create_app_mock.<locals>.get_dictz  s    ~c""rB   valuec                     || j         |<   d S r   rL  )r   rJ  rO  s      r@   set_dictz"_create_app_mock.<locals>.set_dict}  s    #srB   )specF)r   r   r   	MagicMockr&   rM  __getitem____setitem___debugr   on_response_preparefreeze)rN  rQ  r   s      r@   _create_app_mockrY  y  s    #c # # # # # #$c $ $C $D $ $ $ $ .k
*
*
*CCNCOCOCJ$SkkC""$$$JrB   
sslcontextc                      t          j                    }dt          dt          t                   f fd}||j        _        |S )NrJ  r=   c                     | dk    rS d S )NrZ  ro   )rJ  rZ  s    r@   get_extra_infoz)_create_transport.<locals>.get_extra_info  s    ,4rB   )r   Mockr   r   r0   r]  side_effect)rZ  	transportr]  s   `  r@   _create_transportra    sR    	IC HZ$8       ,:I(rB   i   .)
match_inforv   closingr   writerprotocolr`  payloadrZ  client_max_sizerW   r   r   headersrb  rv   rc  r   rd  re  r`  rf  rg  c                ~   t          j                    }|du rD	 t          j                    }n/# t          $ r" t          j                    }d|j        _        Y nw xY w|t          dd          k     rd}|rHt          t          |                    }t          d |                                D                       }nt          t                                }d}d|                    t          j        d                                          v }t!          | |||||dd	|t#          |          
  
        }|t%                      }|	t&          u rt)          |          }	|t&          u r{t          j                    }|	|_        t          j        |	                    d
                    t1          |          _        t          j        |          t1          |          _        |t&          u rjt          j                    }t7          d          |_        t7          d          |_        t7          d          |_        t7          d          |_        |	|_        |	|_        ||_         tC          ||
|||||          }tE          |t&          u ri n|t          j                              }|#                    |           ||_$        |S )zCreates mocked web.Request testing purposes.

    Useful in unit tests, when spinning full web server is overkill or
    specific conditions and errors are hard to trigger.
    .ro   r   Tc              3   p   K   | ]1\  }}|                     d           |                     d           fV  2dS )zutf-8N)encode).0kvs      r@   	<genexpr>z&make_mocked_request.<locals>.<genexpr>  sT       
 
7;q!QXXg 1 12
 
 
 
 
 
rB   chunkedrU   NFpeername)return_value)rg  )%r   r^  r   r%  r#  create_futurerr  r!   r   r   tupleitemsr   r   TRANSFER_ENCODINGlowerr"   r   rY  r    ra  r`  PropertyMockr]  r   rq  rk   make_mocked_corowrite_headerswrite	write_eofdrainrd  r*   r.   add_app_match_info)r   r   rh  rb  rv   rc  r   rd  re  r`  rf  rZ  rg  rW   taskraw_hdrsrp  messagereqs                      r@   make_mocked_requestr    s   , 9;;Ds{{
	1+--DD 	1 	1 	19;;D.0D+++	1 Q"""" ";w#7#788 
 
?F}}
 
 
 
 
 #;==117;;t'=rBBHHJJJGD		 G {  H%j11	89;;&"&"3"11*==#
 #
 #
X &*%6J%O%O%OX"/55'--+D11'--$"HHO
(FD$  C %H$$*dikk J s COJs   - )AArr  raise_exceptionc                 h     dt           dt           dt           f fd}t          j        |          S )zCreates a coroutine mock.r3  rZ   r=   c                  ^   K   t           urt          j                  sS  d {V  d S r   )r    inspectisawaitable)r3  rZ   r  rr  s     r@   	mock_coroz#make_mocked_coro.<locals>.mock_coro  sO      (**!!"<00 	 rB   )wraps)r   r   r^  )rr  r  r  s   `` r@   ry  ry    sQ    
s c c        99%%%%rB   )Fr   )mr  r   
contextlibrG  r  rt   osrE   r  r6  abcr   r   typesr   typingr   r   r   r	   r
   r   r   r   r   r   r   unittestr   r   	aiosignalr   	multidictr   r   yarlr   r   aiohttp.clientr   r   r   rU   r   r   r   client_reqrepr   	client_wsr   helpersr    rm   r!   r"   streamsr#   r$   typedefsr%   webr&   r'   r(   r)   r*   r+   r,   r-   r.   web_protocolr/   rc   r0   r  r4   r5   r6   r7   nameplatformrG   rO   r   r   rA   rP   r?   rR   rT   r   r   r   r  r9  r   _LOOP_FACTORYcontextmanagernew_event_loopr   r?  r=  r>  rS  rY  r^  ra  r  ry  ro   rB   r@   <module>r     s            				      				  



  # # # # # # # #                                3 2 2 2 2 2 2 2       3 3 3 3 3 3 3 3                 " ! ! ! ! ! ! ! " " " " " " ) ) ) ) ) ) . . . . . .       0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 * ) ) ) ) ) Jw=wD7-{DAA 7:[1117"?s|x'? /5n, ,
,+,], , , ,



"("6
]
 
 
 
-S - - - -A A A A AS A A AH- - - - - - - -"8 8 8 8 8N 8 8 8$s s s s s#334 s s sl62 62 62 62 62- 62 62 62rC  s s     W667 ")"8u	( 	(	(@D	(g'(	( 	( 	( 	( #*"8
 


 
 
 
! !W6 !d !t ! ! ! !$.    $
 
(:"6 
$) 
 
 
 
  _
 &;q!,,)'+"_ _ __
_ _
 _ _ _ 
_ _ _ _ _ $_ _ _  !_ _ _ _F !& &&36&& & & & & &rB   