
    rp0j<`                         S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
JrJr  SSKJrJr  SSKJr  SSKJrJrJrJrJrJrJr  SSKJrJr  SSKJr  SS	KJ r J!r!  SS
K"J#r#  SSK$r$SSK%J&r&J'r'J(r(J)r)  SSK*J+r+J,r,  SSK
J-r-  SSK.J/r/  SSK0J1r1  SSK2J3r3  SSK4J5r5J6r6  SSK7J8r8J9r9  SSK:J;r;  SSK<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErE  SSKFJGrG  \(       a  SSKHJIrI  O\rI\R                  S:  a  \(       a  SSKJKrK  \R                  S:  a  SSKJLrL  O\rL\" S\=S5      rM\" S\?S9rN\R                  S:H  =(       a    \R                  S:g  rQ\R                  4S \SS!\R                  S"\R                  4S# jjrUS \SS$\VS!\R                  S"\R                  4S% jrWS"\V4S& jrX " S' S(\5      rY " S) S*\Y5      rZ " S+ S,\Y5      r[ " S- S.\\N\M4   5      r\ " S/ S0\5      r]S1\S2\S3\S"\4S4 jr^\/ \R                  4   r`\R                  \R                  S54S6\`S7\cS"\\R                     4S8 jj5       rd\R                  4S6\`S"\R                  4S9 jjreSRS:\R                  S7\cS"S4S; jjrfS"\R                  4S< jrhSSS=\IS-  S"\R                  4S> jjrj SS\3\5" SS5      S5S\3\3\3\8SS?S@SA.SB\SSC\SSD\SE\SF\5SG\cSH\SI\SJ\SK\SL\9S=\IS-  SM\VS:\S"\A4SN jjjrk\3\34SO\SP\S"\4SQ jjrlg)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                     [        U SU5      $ )Nr   )get_port_socket)r:   r;   s     L/home/wildlama/miniconda3/lib/python3.13/site-packages/aiohttp/test_utils.pyget_unused_port_socketr@   F   s     4F++    portc                     [         R                   " U[         R                  5      n[        (       a/  UR                  [         R                  [         R
                  S5        UR                  X45        U$ )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                     [         R                   " [         R                  [         R                  5       n U R                  S5        [	        [
        U R                  5       S   5      sSSS5        $ ! , (       d  f       g= f)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   sJ    	v~~v'9'9	:a	 C+, 
;	:	:s   2A00
A>c                      \ rS rSrSrSSSSS\S.S\S\R                  S-  S	\S
\	S-  S\
S\\\	\R                  /\R                  4   S\SS4S jjr S S\R                  S-  S\SS4S jjr\S\S\4S j5       rS\S\4S jr\S\
4S j5       r\S\
4S j5       r\S\4S j5       rS!S jrS!S jrS\\   S-  S\S-  S\ S-  SS4S jr!S"S jr"S\\   S-  S\S-  S\ S-  SS4S jr#Sr$g)#BaseTestServer`   F NrM   )schemeloopr:   rB   skip_url_assertssocket_factoryrV   rW   r:   rB   rX   rY   kwargsr<   c                v    X l         S U l        S U l        X0l        X@l        SU l        Xl        XPl        X`l        g )NF)	_looprunner_rootr:   rB   _closedrV   rX   rY   )selfrV   rW   r:   rB   rX   rY   rZ   s           r?   __init__BaseTestServer.__init__c   s9     
)-!%
		 0,rA   c                 ^  #    U R                   (       a  g Xl        UR                  SS 5      U l        U R                  " SSS0UD6I S h  vN U l         U R                   R                  5       I S h  vN   U R                  (       d  SU l        U R                  n [        R                  " U R                  5      R                  nUS:X  a  SU R                   S3nUS:X  a  [        R                  O[        R                  nU R                  U R                  U R                  U5      nUR!                  5       S S	 u  U l        U l        [#        U R                   X`R                  S
9nUR%                  5       I S h  vN   UR&                  nUc   eUR(                  n	U	c   eU	S   R!                  5       S   U l        U R*                  (       d  U R                  (       a  SOSU l        [-        U R*                   SU SU R                   35      U l        g  GN GN! [         a    Sn GNcf = f N7f)Nsslhandler_cancellationTr         []   )sockssl_contextr   httpshttpz://: )r]   r\   pop_ssl_make_runnersetuprB   r:   	ipaddress
ip_addressversion
ValueErrorrD   AF_INET6rN   rY   rP   r,   start_serversocketsrV   r   r^   )
r`   rW   rZ   absolute_hostrw   r;   _socksiteserverr|   s
             r?   start_serverBaseTestServer.start_serverz   s     ;;
JJud+	 --R4R6RRkk!!!yyDI			**4995==G a<		{!,M$+qLfnn##DIItyy&A$0022A6	49%YYGjjl!!!.."""AJ**,Q/	{{%)YY'FDKDKK=M?!DII;GH
/ S!  	G	 	sV   AH-	H
&H-0H1(H-*H B4H-8H+9BH-H-H($H-'H((H-c                    #    g 7fNrp   r`   rZ   s     r?   rs   BaseTestServer._make_runner   s        pathc                    U R                   c   e[        U5      nU R                  (       d.  UR                  (       a   eU R                   R	                  U5      $ [        [        U R                   5      [        U5      -   5      $ r   )r^   r   rX   absolutejoinstr)r`   r   urls      r?   make_urlBaseTestServer.make_url   s`    zz%%%$i$$||##::??3''s4::T233rA   c                     U R                   S L$ r   )r]   r`   s    r?   startedBaseTestServer.started   s    {{$&&rA   c                     U R                   $ r   )r_   r   s    r?   closedBaseTestServer.closed       ||rA   c                 Z    U R                   nUc   eUR                  c   eUR                  $ r   )r]   r   )r`   r]   s     r?   handlerBaseTestServer.handler   s3     !!!}}(((}}rA   c                    #    U R                   (       aY  U R                  (       dG  U R                  c   eU R                  R                  5       I Sh  vN   SU l        SU l        SU l        ggg N7f)a0  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?   closeBaseTestServer.close   sY      <<;;***++%%'''DJDIDL !,<'s   AA0A.A0c                     [        S5      eNzUse async with instead	TypeErrorr   s    r?   	__enter__BaseTestServer.__enter__       011rA   exc_type	exc_value	tracebackc                     g r   rp   r`   r   r   r   s       r?   __exit__BaseTestServer.__exit__        	rA   c                 T   #    U R                  U R                  S9I S h  vN   U $  N7fNrW   )r   r\   r   s    r?   
__aenter__BaseTestServer.__aenter__   s*     TZZ000 	1s   (&(c                 @   #    U R                  5       I S h  vN   g  N7fr   r   r   s       r?   	__aexit__BaseTestServer.__aexit__         jjl   )
r_   r\   r^   rr   r:   rB   r]   rV   rX   rY   r   r<   N)r<   rS   )%__name__
__module____qualname____firstlineno____test__r>   r   asyncioAbstractEventLooprO   boolr   rD   AddressFamilyr	   ra   r   r   r(   rs   r$   r   r   propertyr   r   r*   r   r   r   typeBaseExceptionr   r   r   r   __static_attributes__rp   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                   d   ^  \ rS rSrSSSS.S\S\S\S	\S-  S
\4
U 4S jjjrS
\S\	4S jr
SrU =r$ )
TestServer   rU   rM   NrV   r:   rB   apprV   r:   rB   rZ   c                8   > Xl         [        TU ]  " SX#US.UD6  g Nr   rp   )r   superra   )r`   r   rV   r:   rB   rZ   	__class__s         r?   ra   TestServer.__init__   s!     GGGrA   r<   c                 6   #    [        U R                  40 UD6$ 7fr   )r&   r   r   s     r?   rs   TestServer._make_runner   s     ,V,,s   )r   )r   r   r   r   r%   r   rO   r	   ra   r(   rs   r   __classcell__r   s   @r?   r   r      sk    
 
H
H 	
H
 
H Dj
H 
H 
H-3 -: - -rA   r   c                   p   ^  \ rS rSrSSSS.S\S\S\S	\S-  S
\SS4U 4S jjjrSS\	S
\S\
4S jjrSrU =r$ )RawTestServer   rU   rM   Nr   r   rV   r:   rB   rZ   r<   c                8   > Xl         [        TU ]  " SX#US.UD6  g r   )_handlerr   ra   )r`   r   rV   r:   rB   rZ   r   s         r?   ra   RawTestServer.__init__   s!      GGGrA   debugc                 l   #    [        U R                  4U R                  US.UD6n[        U4SU0UD6$ 7f)N)rW   r   r   )r*   r   r\   r+   )r`   r   rZ   srvs       r?   rs   RawTestServer._make_runner  s8     T]]K5KFKC7u777s   24)r   )T)r   r   r   r   r.   r   rO   r	   ra   r   r+   rs   r   r   r   s   @r?   r   r      s}    
 
H 
H 	
H
 
H Dj
H 
H 

H 
H8 8s 8| 8 8rA   r   c                   &   \ rS rSrSrSr\SS.SSS\S	\S-  S
\	SS4
S jj5       r
\SS.SSS\S	\S-  S
\	SS4
S jj5       r
SSS.S\S	\S-  S\R                  S-  S
\	SS4
S jjr
SHS jr\S\4S j5       r\S\S-  4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       rS\S\4S jrS\S\S
\	S\4S jr\R>                  S:  az  \ (       as  S\S\S
\!\"   S\#4S jr$S\S
\!\"   S\#4S jr%S\S
\!\"   S\#4S jr&S\S
\!\"   S\#4S  jr'S\S
\!\"   S\#4S! jr(S\S
\!\"   S\#4S" jr)S\S
\!\"   S\#4S# jr*S\S
\!\"   S\#4S$ jr+OZS\S\S
\	S\#4S% jr$S\S
\	S\#4S& jr%S\S
\	S\#4S' jr(S\S
\	S\#4S( jr&S\S
\	S\#4S) jr'S\S
\	S\#4S* jr)S\S
\	S\#4S+ jr*S\S
\	S\#4S, jr+\S-S..S\S/\,S0   S
\	SS14S2 jj5       r-\S\S/\,S   S
\	SS34S4 j5       r-\S-S..S\S/\.S
\	SS54S6 jj5       r-S0S..S\S/\.S
\	SS54S7 jjr-\S-S..S\S/\,S0   S
\	SS84S9 jj5       r/\S\S/\,S   S
\	SS:4S; j5       r/\S-S..S\S/\.S
\	SS<4S= jj5       r/S0S..S\S/\.S
\	SS<4S> jjr/SHS? jr0SHS@ jr1SA\2\3   S-  SB\3S-  SC\4S-  SS4SD jr5S\64SE jr7SA\2\3   S-  SB\3S-  SC\4S-  SS4SF jr8SGr9g)I
TestClienti  zV
A test client implementation.

To write functional tests for aiohttp based servers.

FN)
cookie_jarr`   z TestClient[Request, Application]r   r   rZ   r<   c                    g r   rp   r`   r   r   rZ   s       r?   ra   TestClient.__init__       rA   zTestClient[_Request, None]c                    g r   rp   r   s       r?   ra   r     r   rA   )r   rW   rW   c                   [        U[        5      (       d  [        S[        U5      -  5      eXl        X0l        Uc  [        R                  " SUS9n[        SX2S.UD6U l	        SU R                  l
        SU l        / U l        / U l        g )Nz2server must be TestServer instance, found type: %rT)unsaferW   )rW   r   Frp   )
isinstancerS   r   r   r{   r\   aiohttp	CookieJarr   _session_retry_connectionr_   
_responses_websockets)r`   r   r   rW   rZ   s        r?   ra   r   !  s     &.11DtF|S  
 **$TBJ%Q4Q&Q*/'02@BrA   c                 f   #    U R                   R                  U R                  S9I S h  vN   g  N7fr   )r{   r   r\   r   s    r?   r   TestClient.start_server7  s$     ll''TZZ'888s   '1/1c                 .    U R                   R                  $ r   )r{   r:   r   s    r?   r:   TestClient.host:      ||   rA   c                 .    U R                   R                  $ r   )r{   rB   r   s    r?   rB   TestClient.port>  r   rA   c                     U R                   $ r   )r{   r   s    r?   r   TestClient.serverB  r   rA   c                 0    [        U R                  SS 5      $ )Nr   )getattrr{   r   s    r?   r   TestClient.appF  s    t||UD11rA   c                     U R                   $ )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?   sessionTestClient.sessionJ  s     }}rA   r   c                 8    U R                   R                  U5      $ r   )r{   r   )r`   r   s     r?   r   TestClient.make_urlU  s    ||$$T**rA   methodc                    #    U R                   R                  " XR                  U5      40 UD6I S h  vN nU R                  R	                  U5        U$  N!7fr   )r   requestr   r   append)r`   r  r   rZ   resps        r?   _requestTestClient._requestX  sI      ]]**6==3FQ&QQt$ Rs   0AA"Ar0   c                     g r   rp   r`   r  r   rZ   s       r?   r  TestClient.requestb  s    %(rA   c                     g r   rp   r`   r   rZ   s      r?   getTestClient.getf       &)rA   c                     g r   rp   r  s      r?   optionsTestClient.optionsl  r  rA   c                     g r   rp   r  s      r?   headTestClient.headr  r  rA   c                     g r   rp   r  s      r?   postTestClient.postx  r  rA   c                     g r   rp   r  s      r?   putTestClient.put~  r  rA   c                     g r   rp   r  s      r?   patchTestClient.patch  r  rA   c                     g r   rp   r  s      r?   deleteTestClient.delete  r  rA   c                 :    [        U R                  " X40 UD65      $ )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  r
    s     *$--*O*OPPrA   c                 X    [        U R                  " [        R                  U40 UD65      $ )zPerform an HTTP GET request.)r   r  r   METH_GETr  s      r?   r  r    !    )$--t*Vv*VWWrA   c                 X    [        U R                  " [        R                  U40 UD65      $ )zPerform an HTTP POST request.)r   r  r   	METH_POSTr  s      r?   r  r    "    )$--*WPV*WXXrA   c                 X    [        U R                  " [        R                  U40 UD65      $ )z Perform an HTTP OPTIONS request.)r   r  r   METH_OPTIONSr  s      r?   r  r    s(    )d//@@ rA   c                 X    [        U R                  " [        R                  U40 UD65      $ )zPerform an HTTP HEAD request.)r   r  r   	METH_HEADr  s      r?   r  r    r(  rA   c                 X    [        U R                  " [        R                  U40 UD65      $ )zPerform an HTTP PUT request.)r   r  r   METH_PUTr  s      r?   r  r    r%  rA   c                 X    [        U R                  " [        R                  U40 UD65      $ zPerform an HTTP PATCH request.)r   r  r   
METH_PATCHr  s      r?   r  r    s&    )doot>v> rA   c                 X    [        U R                  " [        R                  U40 UD65      $ r0  )r   r  r   METH_DELETEr  s      r?   r   r!    s(    )d..?? rA   .)decode_textr4  TzB_BaseRequestContextManager[ClientWebSocketResponse[Literal[True]]]c                    g r   rp   r`   r   r4  rZ   s       r?   
ws_connectTestClient.ws_connect  s	     PSrA   zC_BaseRequestContextManager[ClientWebSocketResponse[Literal[False]]]c                    g r   rp   r6  s       r?   r7  r8    s	     QTrA   z9_BaseRequestContextManager[ClientWebSocketResponse[bool]]c                    g r   rp   r6  s       r?   r7  r8    s	     GJrA   c                >    [        U R                  " U4SU0UD65      $ )zZInitiate websocket connection.

The api corresponds to aiohttp.ClientSession.ws_connect.

r4  )r   _ws_connectr6  s       r?   r7  r8    s)     (TE{EfE
 	
rA   z&ClientWebSocketResponse[Literal[True]]c                   #    g 7fr   rp   r6  s       r?   r<  TestClient._ws_connect  s
      47r   z'ClientWebSocketResponse[Literal[False]]c                   #    g 7fr   rp   r6  s       r?   r<  r>    s
      58r   zClientWebSocketResponse[bool]c                   #    g 7fr   rp   r6  s       r?   r<  r>    s
      +.r   c                   #    U R                   R                  " U R                  U5      4SU0UD6I S h  vN nU R                  R	                  U5        U$  N!7f)Nr4  )r   r7  r   r   r  )r`   r   r4  rZ   wss        r?   r<  r>    s\      ==++MM$
-8
<B
 
 	#		
s   2AA"Ac                 n  #    U R                   (       d  U R                   H  nUR                  5         M     U R                   H  nUR                  5       I Sh  vN   M     U R                  R                  5       I Sh  vN   U R
                  R                  5       I Sh  vN   SU l         gg NU N1 N7f)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 on exit when used as a(n) (asynchronous)
context manager.

NT)r_   r   r   r   r   r{   )r`   r  rB  s      r?   r   TestClient.close  s      ||

 (&&hhj   '--%%''',,$$&&&DL  !'&s6   AB5B/%B5?B1 !B5!B3"B51B53B5c                     [        S5      er   r   r   s    r?   r   TestClient.__enter__  r   rA   r   exctbc                     g r   rp   r`   r   rG  rH  s       r?   r   TestClient.__exit__  r   rA   c                 B   #    U R                  5       I S h  vN   U $  N7fr   )r   r   s    r?   r   TestClient.__aenter__  s!     !!! 	"s   c                 @   #    U R                  5       I S h  vN   g  N7fr   r   rJ  s       r?   r   TestClient.__aexit__  r   r   )r_   r\   r   r{   r   r   r   ):r   r   r   r   __doc__r   r   r   r   r	   ra   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   r7  r   r<  r   r   r   r   r   r   r4   r   r   r   rp   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S rSrSrS\4S jrS\4S jrSS jrSS jr	SS	 jr
SS
 jrS\S\4S jrS\S\\\4   4S jrSrg)AioHTTPTestCasei!  a  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                 *   #    U R                  5       $ 7f)ziGet application.

This method should be overridden
to return the aiohttp.web.Application
object to test.
)get_appr   s    r?   get_applicationAioHTTPTestCase.get_application0  s      ||~s   c                     [        S5      e)zaObsolete method used to constructing web application.

Use .get_application() coroutine instead.
z+Did you forget to define get_application()?)RuntimeErrorr   s    r?   rV  AioHTTPTestCase.get_app9  s    
 HIIrA   Nc                 r   #    [         R                  " 5       U l        U R                  5       I S h  vN $  N7fr   )r   get_running_looprW   
setUpAsyncr   s    r?   
asyncSetUpAioHTTPTestCase.asyncSetUp@  s(     ,,.	__&&&&s   .757c                 :  #    U R                  5       I S h  vN U l        U R                  U R                  5      I S h  vN U l        U R	                  U R                  5      I S h  vN U l        U R
                  R                  5       I S h  vN   g  N| NV N0 N7fr   )rW  r   
get_serverr   
get_clientclientr   r   s    r?   r^  AioHTTPTestCase.setUpAsyncD  sj     --// OODHH55 OODKK88kk&&(((	 058(sC   BB'BB'B&B'&BBBBBBc                 >   #    U R                  5       I S h  vN $  N7fr   )tearDownAsyncr   s    r?   asyncTearDownAioHTTPTestCase.asyncTearDownK  s     ''))))s   c                 T   #    U R                   R                  5       I S h  vN   g  N7fr   )rd  r   r   s    r?   rg  AioHTTPTestCase.tearDownAsyncN  s     kk!!!s   (&(r   c                 0   #    [        XR                  S9$ 7f)zReturn a TestServer instance.r   )r   rW   )r`   r   s     r?   rb  AioHTTPTestCase.get_serverQ  s     #II..   r   c                 0   #    [        XR                  S9$ 7f)zReturn a TestClient instance.r   )r   rW   )r`   r   s     r?   rc  AioHTTPTestCase.get_clientU  s     &yy11rn  )r   rd  rW   r   r   )r   r   r   r   rP  r%   rW  rV  r_  r^  rh  rg  r   rb  r   r)   rc  r   rp   rA   r?   rT  rT  !  se    { J J')*"/K /J /2z 2j+AU6V 2rA   rT  funcargsrZ   c                 :    [         R                  " S[        SS9  U $ )zk
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+rj   )
stacklevel)warningswarnDeprecationWarning)rq  rr  rZ   s      r?   unittest_run_looprx  Z  s      MML
 KrA   Floop_factoryfastc              #   <   #    [        U 5      nUv   [        X!S9  g7f)zrA contextmanager that creates an event_loop, for test purposes.

Handles the creation and cleanup of a test loop.
)rz  N)setup_test_loopteardown_test_loop)ry  rz  rW   s      r?   loop_contextr~  k  s      <(D
Jt's   c                 @    U " 5       n[         R                  " U5        U$ )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)ry  rW   s     r?   r|  r|  x  s     >D4 KrA   rW   c                    U R                  5       nU(       d;  U R                  U R                  5        U R                  5         U R	                  5         U(       d  [
        R                  " 5         [        R                  " S5        g)z>Teardown and cleanup an event_loop created by setup_test_loop.N)		is_closed	call_soonstoprun_foreverr   gccollectr   r  )rW   rz  r   s      r?   r}  r}    sP    ^^Ftyy!




4 rA   c                     S[         S[        S[         4S jn S[         S[        S[         SS 4S jn[        R                  " [        S9n0 Ul        Xl        Xl        SUl        [        U5      Ul
        UR                  R                  5         U$ )	Nr   keyr<   c                      U R                   U   $ r   
__app_dict)r   r  s     r?   get_dict"_create_app_mock.<locals>.get_dict  s    ~~c""rA   valuec                      X R                   U'   g r   r  )r   r  r  s      r?   set_dict"_create_app_mock.<locals>.set_dict  s    #srA   )specF)r	   r   r   	MagicMockr%   r  __getitem____setitem___debugr   on_response_preparefreeze)r  r  r   s      r?   _create_app_mockr    s    #c # # #$c $ $C $D $ ..k
*CCNOOCJ$SkC""$JrA   
sslcontextc                    ^  [         R                  " 5       nS[        S[        [        [        [
        4   -  S -  4U 4S jjnX!R                  l        U$ )Nr  r<   c                 (   > U S:X  a  T$ U S:X  a  S$ S $ )Nr  sockname)rM   P   rp   )r  r  s    r?   get_extra_info)_create_transport.<locals>.get_extra_info  s$    ,$':$5 ?4?rA   )r   Mockr   r/   tuplerO   r  side_effect)r  	transportr  s   `  r?   _create_transportr    sJ    		I@C @JsCx$@4$G @
 ,:(rA   i   .)
match_inforw   closingr   writerprotocolr  payloadr  client_max_sizerW   r  r   headersr  rw   r  r   r  r  r  r  r  c                .   [         R                  " 5       nUSL a   [        R                  " 5       nU[        SS5      :  a  SnU(       a5  [        [        U5      5      n[        S UR                  5        5       5      nO[        [        5       5      nSnSUR                  [        R                  S5      R                  5       ;   nUR                  [        R                   S5      R                  5       S:H  =(       a(    [#        UR                  [        R$                  5      5      n['        U UUUUUS	UU[)        U5      5
      nUc
  [+        5       nU	[,        L a  [/        U5      n	U[,        L a  [         R                  " 5       nS
Ul        S
Ul        SUl        Xl        [         R8                  " U	R;                  S5      S9[=        U5      l        [         R8                  " U	R;                  S5      S9[=        U5      l         [         R8                  " US9[=        U5      l!        U[,        L a[  [         R                  " 5       n[E        S	5      Ul#        [E        S	5      Ul$        [E        S	5      Ul%        [E        S	5      Ul&        Xl        Xl        Xxl'        [Q        UXX~XS9n[S        U[,        L a  0 OU[         R                  " 5       5      nURU                  U5        UUl+        U$ ! [         a*    [         R                  " 5       nSUR
                  l         GNf = f)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.
.rp   r   Tc              3   j   #    U  H)  u  pUR                  S 5      UR                  S 5      4v   M+     g7f)zutf-8N)encode).0kvs      r?   	<genexpr>&make_mocked_request.<locals>.<genexpr>  s,      
?NtqQXXg 12s   13chunkedrU   upgradeNi     peername)return_valuer  )r  ),r   r  r   r]  rZ  create_futurer  r    r   r   r  itemsr  r   TRANSFER_ENCODINGlower
CONNECTIONr   UPGRADEr!   r   r  r   r  max_field_sizemax_line_lengthmax_headersr  PropertyMockr  r   r  r  rl   make_mocked_corowrite_headerswrite	write_eofdrainr  r)   r-   add_app_match_info)r  r   r  r  rw   r  r   r  r  r  r  r  r  rW   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'-$"O
F$C %H$*diikJ s COJU  	199;D.0D+	1s   K   0LLr  raise_exceptionc                 d   ^ ^ S[         S[         S[         4UU 4S jjn[        R                  " US9$ )zCreates a coroutine mock.rr  rZ   r<   c                  v   >#    T[         La  Te[        R                  " T5      (       d  T$ TI S h  vN   g  N7fr   )r   inspectisawaitable)rr  rZ   r  r  s     r?   	mock_coro#make_mocked_coro.<locals>.mock_coro!  s4     (*!!""<00s   .979)wraps)r	   r   r  )r  r  r  s   `` r?   r  r    s3    
s c c   999%%rA   )Fr   )mrP  r   
contextlibr  r  ru   osrD   rQ  ru  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   rU   r   r   r   client_reqrepr   	client_wsr   helpersr   rn   r    r!   streamsr"   r#   typedefsr$   webr%   r&   r'   r(   r)   r*   r+   r,   r-   web_protocolr.   rd   r/   rR  r3   r4   r5   r6   nameplatformrF   rN   r   r   r@   rO   r>   rQ   rS   r   r   r   rT  rx  r   _LOOP_FACTORYcontextmanagernew_event_loopr   r~  r|  r}  r  r  r  r  r  r  rp   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   