
    F/j<`                      r   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mZ ddlmZ ddl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(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eZIej                  dk\  rerddlmKZK ej                  dk\  rddlmLZL neZL ede=d      ZM ede?      ZNej                  dk(  xr ej                  dk7  ZQej                  fd eSd!ej                  d"ej                  fd#ZUd eSd$eVd!ej                  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/ d0e      Z]d1ed2ed3ed"efd4Z^eg ej                  f   Z`ej                  ej                  d5fd6e`d7ecd"eej                     fd8       Zdej                  fd6e`d"ej                  fd9ZedRd:ej                  d7ecd"dfd;Zfd"ej                  fd<ZhdSd=eIdz  d"ej                  fd>Zj	 dSe3 e5dd      d5de3e3e3e8dd?d@dAdBeSdCeSdDedEedFe5dGecdHedIedJedKedLe9d=eIdz  dMeVd:ed"eAfdNZke3e3fdOedPed"efdQZly)TzUtilities shared by tests.    N)ABCabstractmethod)CallableIterator)TracebackType)TYPE_CHECKINGAnyGenericLiteralTypeVarcastoverload)IsolatedAsyncioTestCasemock)Signal)CIMultiDictCIMultiDictProxy)URL)_BaseRequestContextManager_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     P/var/www/html/maxservice/venv/lib/python3.12/site-packages/aiohttp/test_utils.pyget_unused_port_socketr@   F   s     4F++    portc                     t        j                   |t         j                        }t        r/|j                  t         j                  t         j
                  d       |j                  | |f       |S )Nr   )socketSOCK_STREAMREUSE_ADDRESS
setsockopt
SOL_SOCKETSO_REUSEADDRbind)r:   rB   r;   ss       r?   r>   r>   L   sP     	ff001A 	
V&&(;(;Q?FFD$<HrA   c                      t        j                   t         j                  t         j                        5 } | j                  d       t	        t
        | j                         d         cddd       S # 1 sw Y   yxY w)z1Return a port that is unused on the current host.)	127.0.0.1r   r   N)rD   AF_INETrE   rJ   r   intgetsockname)rK   s    r?   unused_portrQ   Y   sS    	v~~v'9'9	: -a	 C+,- - -s   2A//A8c                      e Zd ZdZdddddeddedej                  dz  ded	edz  d
e	de
eeej                  gej                  f   deddfdZ	 ddej                  dz  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   dz  dedz  dedz  ddfdZ d dZ!dee   dz  dedz  dedz  ddfdZ"y)!BaseTestServerF NrM   )schemeloopr:   rB   skip_url_assertssocket_factoryrU   rV   r:   rB   rW   rX   kwargsr<   c                    || _         d | _        d | _        || _        || _        d| _        || _        || _        || _        y )NF)	_looprunner_rootr:   rB   _closedrU   rW   rX   )selfrU   rV   r:   rB   rW   rX   rY   s           r?   __init__zBaseTestServer.__init__c   sE     
)-!%
		 0,rA   c                 4  K   | j                   ry || _        |j                  dd       | _         | j                  dddi| d {   | _         | j                   j                          d {    | j                  sd| _        | j                  }	 t        j                  | j                        j                  }|dk(  rd| j                   d}|dk(  rt        j                  nt        j                  }| j                  | j                  | j                  |      }|j!                         d d	 \  | _        | _        t#        | j                   || j                  
      }|j%                          d {    |j&                  }|J |j(                  }	|	J |	d   j!                         d   | _        | j*                  s| j                  rdnd| _        t-        | j*                   d| d| j                         | _        y 7 7 # t        $ r d}Y Xw xY w7 w)Nsslhandler_cancellationTr         []   )sockssl_contextr   httpshttpz://: )r\   r[   pop_ssl_make_runnersetuprB   r:   	ipaddress
ip_addressversion
ValueErrorrD   AF_INET6rN   rX   rP   r,   start_serversocketsrU   r   r]   )
r_   rV   rY   absolute_hostru   r;   _socksiteserverrz   s
             r?   start_serverzBaseTestServer.start_serverz   s     ;;
JJud+	-D--R4R6RRkk!!!yyDI			**4995==G a<		{!,M$+qLfnn##DIItyy&A$0022A6	49%TYYGjjl!!!.."""AJ**,Q/	{{%)YY'FDKDKK=M?!DII;GH
/ S!  	G	 	sV   AHG>&H,H-#H)H :B6H0H1BHHHHHHc                    K   y wNrn   r_   rY   s     r?   rq   zBaseTestServer._make_runner   s	        pathc                     | j                   J t        |      }| j                  s)|j                  rJ | j                   j	                  |      S t        t        | j                         t        |      z         S r   )r]   r   rW   absolutejoinstr)r_   r   urls      r?   make_urlzBaseTestServer.make_url   s`    zz%%%$i$$||##::??3''s4::T233rA   c                     | j                   d uS r   )r\   r_   s    r?   startedzBaseTestServer.started   s    {{$&&rA   c                     | j                   S r   )r^   r   s    r?   closedzBaseTestServer.closed       ||rA   c                 V    | j                   }|J |j                  J |j                  S r   )r\   r~   )r_   r\   s     r?   handlerzBaseTestServer.handler   s3     !!!}}(((}}rA   c                    K   | j                   rS| j                  sF| j                  J | j                  j                          d{    d| _        d| _        d| _        yyy7 w)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]   rB   r^   r   s    r?   closezBaseTestServer.close   sZ      <<;;***++%%'''DJDIDL !,<'s   AA%A#A%c                     t        d      NzUse async with instead	TypeErrorr   s    r?   	__enter__zBaseTestServer.__enter__       011rA   exc_type	exc_value	tracebackc                      y r   rn   r_   r   r   r   s       r?   __exit__zBaseTestServer.__exit__        	rA   c                 Z   K   | j                  | j                         d {    | S 7 wNrV   )r   r[   r   s    r?   
__aenter__zBaseTestServer.__aenter__   s+     TZZ000 	1s    +)+c                 @   K   | j                          d {    y 7 wr   r   r   s       r?   	__aexit__zBaseTestServer.__aexit__         jjl   r   r<   N)r<   rS   )#__name__
__module____qualname____test__r>   r   asyncioAbstractEventLooprO   boolr   rD   AddressFamilyr	   r`   r   r   r(   rq   r$   r   r   propertyr   r   r*   r   r   r   typeBaseExceptionr   r   r   r   rn   rA   r?   rS   rS   `   s   H
 15!& - - ''$.	-
 - Dj- - !#v++,fmm;
- - 
-0 8<I--4IGJI	I@ 3 :  4X 4# 4 ' ' '       &2}%, !4' !4'	
 
}%, !4' !4'	
 
rA   rS   c                   T     e Zd Zdddddededededz  d	ef
 fd
Zd	edefdZ	 xZ
S )
TestServerrT   rM   NrU   r:   rB   apprU   r:   rB   rY   c                :    || _         t        |   d|||d| y Nr   rn   )r   superr`   )r_   r   rU   r:   rB   rY   	__class__s         r?   r`   zTestServer.__init__   s%     GTGGrA   r<   c                 6   K   t        | j                  fi |S wr   )r&   r   r   s     r?   rq   zTestServer._make_runner   s     ,V,,s   )r   r   r   r%   r   rO   r	   r`   r(   rq   __classcell__r   s   @r?   r   r      s`    
 
H
H 	
H
 
H Dj
H 
H-3 -: -rA   r   c                   ^     e Zd Zdddddededededz  d	ed
df fdZdded	ed
e	fdZ
 xZS )RawTestServerrT   rM   Nr   r   rU   r:   rB   rY   r<   c                :    || _         t        |   d|||d| y r   )_handlerr   r`   )r_   r   rU   r:   rB   rY   r   s         r?   r`   zRawTestServer.__init__   s%      GTGGrA   debugc                 l   K   t        | j                  f| j                  |d|}t        |fd|i|S w)N)rV   r   r   )r*   r   r[   r+   )r_   r   rY   srvs       r?   rq   zRawTestServer._make_runner  s9     T]]K5KFKC7u777s   24)T)r   r   r   r.   r   rO   r	   r`   r   r+   rq   r   r   s   @r?   r   r      sr    
 
H 
H 	
H
 
H Dj
H 
H 

H8 8s 8| 8rA   r   c                      e Zd ZdZdZedddddededz  d	ed
df
d       Z	eddddde
dedz  d	ed
df
d       Z	dddde
dedz  dej                  dz  d	ed
df
dZ	dFdZed
efd       Zed
edz  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\  rmerkd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*ed,d-ded.e+d/   d	ed
d0fd1       Z,eded.e+d   d	ed
d2fd3       Z,ed,d-ded.e-d	ed
d4fd5       Z,d/d-ded.e-d	ed
d4fd6Z,ed,d-ded.e+d/   d	ed
d7fd8       Z.eded.e+d   d	ed
d9fd:       Z.ed,d-ded.e-d	ed
d;fd<       Z.d/d-ded.e-d	ed
d;fd=Z.dFd>Z/dFd?Z0d@e1e2   dz  dAe2dz  dBe3dz  d
dfdCZ4d
e5fdDZ6d@e1e2   dz  dAe2dz  dBe3dz  d
dfdEZ7y)G
TestClientzb
    A test client implementation.

    To write functional tests for aiohttp based servers.

    FN)
cookie_jarr_   z TestClient[Request, Application]r~   r   rY   r<   c                     y r   rn   r_   r~   r   rY   s       r?   r`   zTestClient.__init__       rA   zTestClient[_Request, None]c                     y r   rn   r   s       r?   r`   zTestClient.__init__  r   rA   )r   rV   rV   c                   t        |t              st        dt        |      z        || _        || _        |t        j                  d|      }t        d||d|| _	        d| j                  _
        d| _        g | _        g | _        y )Nz2server must be TestServer instance, found type: %rT)unsaferV   )rV   r   Frn   )
isinstancerS   r   r   ry   r[   aiohttp	CookieJarr   _session_retry_connectionr^   
_responses_websockets)r_   r~   r   rV   rY   s        r?   r`   zTestClient.__init__!  s     &.1DtF|S  
 **$TBJ%Q4JQ&Q*/'02@BrA   c                 l   K   | j                   j                  | j                         d {    y 7 wr   )ry   r   r[   r   s    r?   r   zTestClient.start_server7  s%     ll''TZZ'888s   *424c                 .    | j                   j                  S r   )ry   r:   r   s    r?   r:   zTestClient.host:      ||   rA   c                 .    | j                   j                  S r   )ry   rB   r   s    r?   rB   zTestClient.port>  r   rA   c                     | j                   S r   )ry   r   s    r?   r~   zTestClient.serverB  r   rA   c                 0    t        | j                  dd       S )Nr   )getattrry   r   s    r?   r   zTestClient.appF  s    t||UD11rA   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.sessionJ  s     }}rA   r   c                 8    | j                   j                  |      S r   )ry   r   )r_   r   s     r?   r   zTestClient.make_urlU  s    ||$$T**rA   methodc                    K    | j                   j                  || j                  |      fi | d {   }| j                  j	                  |       |S 7 !wr   )r   requestr   r   append)r_   r   r   rY   resps        r?   _requestzTestClient._requestX  sN      +T]]**64==3FQ&QQt$ Rs   1AA"Ar0   c                      y r   rn   r_   r   r   rY   s       r?   r   zTestClient.requestb  s    %(rA   c                      y r   rn   r_   r   rY   s      r?   getzTestClient.getf       &)rA   c                      y r   rn   r   s      r?   optionszTestClient.optionsl  r   rA   c                      y r   rn   r   s      r?   headzTestClient.headr  r   rA   c                      y r   rn   r   s      r?   postzTestClient.postx  r   rA   c                      y r   rn   r   s      r?   putzTestClient.put~  r   rA   c                      y r   rn   r   s      r?   patchzTestClient.patch  r   rA   c                      y r   rn   r   s      r?   deletezTestClient.delete  r   rA   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PPrA   c                 X    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*Vv*VWWrA   c                 X    t         | j                  t        j                  |fi |      S )zPerform an HTTP POST request.)r   r   r   	METH_POSTr   s      r?   r   zTestClient.post  $    )-$--*WPV*WXXrA   c                 X    t         | j                  t        j                  |fi |      S )z Perform an HTTP OPTIONS request.)r   r   r   METH_OPTIONSr   s      r?   r   zTestClient.options  s*    )d//@@ rA   c                 X    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  rA   c                 X    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   rA   c                 X    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(    )doot>v> rA   c                 X    t         | j                  t        j                  |fi |      S r
  )r   r   r   METH_DELETEr   s      r?   r   zTestClient.delete  s*    )d..?? rA   .)decode_textr  TzB_BaseRequestContextManager[ClientWebSocketResponse[Literal[True]]]c                     y r   rn   r_   r   r  rY   s       r?   
ws_connectzTestClient.ws_connect  s	     PSrA   zC_BaseRequestContextManager[ClientWebSocketResponse[Literal[False]]]c                     y r   rn   r  s       r?   r  zTestClient.ws_connect  s	     QTrA   z9_BaseRequestContextManager[ClientWebSocketResponse[bool]]c                     y r   rn   r  s       r?   r  zTestClient.ws_connect  s	     GJrA   c                >    t         | j                  |fd|i|      S )zjInitiate websocket connection.

        The api corresponds to aiohttp.ClientSession.ws_connect.

        r  )r   _ws_connectr  s       r?   r  zTestClient.ws_connect  s+     (DTE{EfE
 	
rA   z&ClientWebSocketResponse[Literal[True]]c                   K   y wr   rn   r  s       r?   r  zTestClient._ws_connect  s      47r   z'ClientWebSocketResponse[Literal[False]]c                   K   y wr   rn   r  s       r?   r  zTestClient._ws_connect  s      58r   zClientWebSocketResponse[bool]c                   K   y wr   rn   r  s       r?   r  zTestClient._ws_connect  s      +.r   c                   K    | j                   j                  | j                  |      fd|i| d {   }| j                  j	                  |       |S 7 !w)Nr  )r   r  r   r   r   )r_   r   r  rY   wss        r?   r  zTestClient._ws_connect  s_      ,4==++MM$
-8
<B
 
 	#		
s   2AA"Ac                 \  K   | j                   s| j                  D ]  }|j                           | j                  D ]  }|j                          d{     | j                  j                          d{    | j
                  j                          d{    d| _         yy7 S7 17 w)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   ry   )r_   r   r  s      r?   r   zTestClient.close  s      || 

&& !hhj  !--%%''',,$$&&&DL  !'&s6   AB,B&#B,6B(7!B,B*B,(B,*B,c                     t        d      r   r   r   s    r?   r   zTestClient.__enter__  r   rA   r   exctbc                      y r   rn   r_   r   r  r  s       r?   r   zTestClient.__exit__  r   rA   c                 B   K   | j                          d {    | S 7 wr   )r   r   s    r?   r   zTestClient.__aenter__  s"     !!! 	"s   c                 @   K   | j                          d {    y 7 wr   r   r   s       r?   r   zTestClient.__aexit__  r   r   r   )8r   r   r   __doc__r   r   r   r   r	   r`   rS   r   r   r   r   r   r:   rO   rB   r~   r5   r   r   r   r$   r   r   r   r   sysversion_infor   r3   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r   r   r   r   r   r   r4   r   r   rn   rA   r?   r   r     sK    H
 04	0 &,	
  
  
 04	* &,	
  
  0415CC &,	C
 ''$.C C 
C,9 !c ! ! !cDj ! !    2% 2 2   +X +# +!)58	 7"}	)	)%-	)9?9P	)#	)	)	) _-	) $		)	)	) _-	) $		)	)	) _-	) $		)	)	) _-	) $		)	)	) _-	) $		)	)	) _-	) $		)	)	) _-	) $		)
	Q
	Q%-
	Q9<
	Q#
	Q	XH 	X 	X8N 	X	YX 	Y 	Y9O 	Y	 	C 	<R 		YX 	Y 	Y9O 	Y	XH 	X 	X8N 	X	h 	# 	:P 		x 	3 	;Q 	 >ASS.5dmSMPS	MS S TT.5enTHKT	NT T 58JJ.2JDGJ	DJ J
 6:



.2

EH

	D

 >A77.5dm7MP7	17 7 88.5en8HK8	28 8 58...2.DG.	(. .
 6:.2EH	( *2}%, T! D 	
 
$ }%, T! D 	
 
rA   r   c                   r    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y)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   | j                         S w)zGet application.

        This method should be overridden
        to return the aiohttp.web.Application
        object to test.
        )get_appr   s    r?   get_applicationzAioHTTPTestCase.get_application0  s      ||~s   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_app9  s    
 HIIrA   Nc                 p   K   t        j                         | _        | j                          d {   S 7 wr   )r   get_running_looprV   
setUpAsyncr   s    r?   
asyncSetUpzAioHTTPTestCase.asyncSetUp@  s)     ,,.	__&&&&s   -646c                 :  K   | j                          d {   | _        | j                  | j                         d {   | _        | j	                  | j                         d {   | _        | j
                  j                          d {    y 7 |7 V7 07 wr   )r*  r   
get_serverr~   
get_clientclientr   r   s    r?   r/  zAioHTTPTestCase.setUpAsyncD  sn     --// OODHH55 OODKK88kk&&(((	 058(sC   BB'BB'B&B'&BBBBBBc                 >   K   | j                          d {   S 7 wr   )tearDownAsyncr   s    r?   asyncTearDownzAioHTTPTestCase.asyncTearDownK  s     ''))))s   c                 T   K   | j                   j                          d {    y 7 wr   )r4  r   r   s    r?   r6  zAioHTTPTestCase.tearDownAsyncN  s     kk!!!s   (&(r   c                 8   K   t        || j                        S w)zReturn a TestServer instance.r   )r   rV   )r_   r   s     r?   r2  zAioHTTPTestCase.get_serverQ  s     #DII..   r~   c                 8   K   t        || j                        S w)zReturn a TestClient instance.r   )r   rV   )r_   r~   s     r?   r3  zAioHTTPTestCase.get_clientU  s     &tyy11r:  r   )r   r   r   r#  r%   r*  r)  r0  r/  r7  r6  r   r2  r   r)   r3  rn   rA   r?   r'  r'  !  se    { J J')*"/K /J /2z 2j+AU6V 2rA   r'  funcargsrY   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+rh   )
stacklevel)warningswarnDeprecationWarning)r<  r=  rY   s      r?   unittest_run_looprC  Z  s      MML
 KrA   Floop_factoryfastc              #   D   K   t        |       }| t        ||       yw)zzA contextmanager that creates an event_loop, for test purposes.

    Handles the creation and cleanup of a test loop.
    )rE  N)setup_test_loopteardown_test_loop)rD  rE  rV   s      r?   loop_contextrI  k  s!      <(D
Jt$'s    c                 >     |        }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)rD  rV   s     r?   rG  rG  x  s     >D4 KrA   rV   c                     | j                         }|s;| j                  | j                         | j                          | j	                          |st        j                          t        j                  d       y)z>Teardown and cleanup an event_loop created by setup_test_loop.N)		is_closed	call_soonstoprun_foreverr   gccollectr   rK  )rV   rE  r   s      r?   rH  rH    sP    ^^Ftyy!




4 rA   c                  "   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                  j                          |S )	Nr   keyr<   c                      | j                   |   S r   
__app_dict)r   rT  s     r?   get_dictz"_create_app_mock.<locals>.get_dict  s    ~~c""rA   valuec                 "    || j                   |<   y r   rV  )r   rT  rY  s      r?   set_dictz"_create_app_mock.<locals>.set_dict  s    #srA   )specF)r	   r   r   	MagicMockr%   rW  __getitem____setitem___debugr   on_response_preparefreeze)rX  r[  r   s      r?   _create_app_mockrc    s    #c # # #$c $ $C $D $ ..k
*CCNCOCOCJ$SkC""$JrA   
sslcontextc                      t        j                         }dt        dt        t        t        t
        f   z  d z  f fd}||j                  _        |S )NrT  r<   c                 $    | dk(  rS | dk(  rdS d S )Nrd  sockname)rM   P   rn   )rT  rd  s    r?   get_extra_infoz)_create_transport.<locals>.get_extra_info  s$    ,$':$5 ?4?rA   )r   Mockr   r/   tuplerO   ri  side_effect)rd  	transportri  s   `  r?   _create_transportrn    sL    		I@C @JsCx$@4$G @
 ,:I(rA   i   .)
match_inforu   closingr   writerprotocolrm  payloadrd  client_max_sizerV   r   r   headersro  ru   rp  r   rq  rr  rm  rs  rt  c                   t        j                         }|du r	 t        j                         }|t        dd      k  rd}|r5t        t        |            }t        d |j                         D              }nt        t                     }d}d|j                  t        j                  d      j                         v }|j                  t        j                   d      j                         dk(  xr( t#        |j                  t        j$                              }t'        | |||||d	||t)        |      
      }|
t+               }|	t,        u rt/        |      }	|t,        u rt        j                         }d
|_        d
|_        d|_        |	|_        t        j8                  |	j;                  d            t=        |      _        t        j8                  |	j;                  d            t=        |      _         t        j8                  |      t=        |      _!        |t,        u r[t        j                         }tE        d	      |_#        tE        d	      |_$        tE        d	      |_%        tE        d	      |_&        |	|_        |	|_        ||_'        tQ        ||
|||||      }tS        |t,        u ri n|t        j                               }|jU                  |       ||_+        |S # t        $ r) t        j                         }d|j
                  _        Y w xY w)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.
    .rn   r   Tc              3   f   K   | ])  \  }}|j                  d       |j                  d       f + yw)zutf-8N)encode).0kvs      r?   	<genexpr>z&make_mocked_request.<locals>.<genexpr>  s0      
7;q!QXXg 12
s   /1chunkedrT   upgradeNi     peername)return_valuerg  )rt  ),r   rj  r   r.  r,  create_futurer  r    r   r   rk  itemsr   r   TRANSFER_ENCODINGlower
CONNECTIONr   UPGRADEr!   r   rc  r   rn  max_field_sizemax_line_lengthmax_headersrm  PropertyMockri  r   r  rg  rj   make_mocked_corowrite_headerswrite	write_eofdrainrq  r)   r-   add_app_match_info)r   r   ru  ro  ru   rp  r   rq  rr  rm  rs  rd  rt  rV   taskraw_hdrsr}  r~  messagereqs                       r?   make_mocked_requestr    s   , 99;Ds{
	1++-D
 Q""";w#78 
?F}}
 
 #;=17;;t'='=rBHHJJGkk$//2.446)C DLL!IG  D	G { H%j1	899;"&#' "&"&"3"3"11*=#
X #'"3"3"11*=#
X &*%6%6J%OX"/5'-+D1'-$"HHO
(FD$C %H$*diikJ s COJU  	199;D.0D+	1s   K .L
Lr  raise_exceptionc                 d     dt         dt         dt         f fd}t        j                  |      S )zCreates a coroutine mock.r=  rY   r<   c                  h   K   t         urt        j                        sS  d {    y 7 wr   )r   inspectisawaitable)r=  rY   r  r  s     r?   	mock_coroz#make_mocked_coro.<locals>.mock_coro!  s2     (*!!""<0s   '202)wraps)r	   r   rj  )r  r  r  s   `` r?   r  r    s.    
s c c  999%%rA   )Fr   )mr#  r   
contextlibrQ  r  rs   osrD   r$  r@  abcr   r   collections.abcr   r   typesr   typingr   r	   r
   r   r   r   r   unittestr   r   	aiosignalr   	multidictr   r   yarlr   r   aiohttp.clientr   r   r   r   rT   r   r   r   client_reqrepr   	client_wsr   helpersr   rl   r    r!   streamsr"   r#   typedefsr$   webr%   r&   r'   r(   r)   r*   r+   r,   r-   web_protocolr.   rb   r/   r%  r3   r4   r5   r6   nameplatformrF   rN   r   r   r@   rO   r>   rQ   rS   r   r   r   r'  rC  r   _LOOP_FACTORYcontextmanagernew_event_loopr   rI  rG  rH  r]  rc  rj  rn  r  r  rn   rA   r?   <module>r     s       	   	  
  # .  P P P 2  3    " " ) .  0 0 
 
 
 *Jw=wD-{DA :[17"?s||x'? /5nn,
,++,]],



"("6"6
]]
-S -AS AH- -"8N 8$W#334 Wt62- 62rC  s s  W6667 ")"8"8u	(	(@D	(g''(	( 	( #*"8"8


!W66 !d !t !$.. $	*t"3 	tyy 	 h
 &q!,)$("hh
h h
 h h h 
h h h h h T!h h h  !hX !&&36&&rA   