Ë
    [üàgY  ã                    ón  — 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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.„ d/e«      Z]d0ed1ed2ed!efd3„Z^eg ej¾                  f   Z`ejÂ                  ejÄ                  d4fd5e`d6ecd!eej¾                     fd7„«       ZdejÄ                  fd5e`d!ej¾                  fd8„ZedQd9ej¾                  d6ecd!dfd:„Zfd!ejÎ                  fd;„ZhdRd<eeI   d!ejÒ                  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„Zly)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     úP/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/aiohttp/test_utils.pyÚget_unused_port_socketrA   P   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;   rC   r<   Úss       r@   r?   r?   V   sP   € ô 	�‰�fœf×0Ñ0Ó1€AÝð 	
�‰”V×&Ñ&¬×(;Ñ(;¸QÔ?Ø‡F�FˆD�$ˆ<ÔØ€HrB   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)rE   ÚAF_INETrF   rK   r   ÚintÚgetsockname)rL   s    r@   Úunused_portrR   c   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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#y)!ÚBaseTestServerFÚ NrN   )ÚschemeÚloopr;   rC   Úskip_url_assertsÚsocket_factoryrV   rW   r;   rC   rX   rY   Úkwargsr=   c                ó‚   — || _         d | _        d | _        || _        || _        d| _        || _        || _        || _        y )NF)	Ú_loopÚrunnerÚ_rootr;   rC   Ú_closedrV   rX   rY   )ÚselfrV   rW   r;   rC   rX   rY   rZ   s           r@   Ú__init__zBaseTestServer.__init__m   sE   € ð ˆŒ
Ø,0ˆŒØ$(ˆŒ
ØˆŒ	ØˆŒ	ØˆŒØˆŒØ 0ˆÔØ,ˆÕrB   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Ú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È  è ø€ ð �;Š;ØØˆŒ
Ø—J‘J˜u dÓ+ˆŒ	Ø-˜D×-Ñ-ÑRÀ4ÐRÈ6ÑR×RˆŒØ�k‰k×ÑÓ!×!Ð!Ø�yŠyØˆDŒIØŸ	™	ˆð	Ü×*Ñ*¨4¯9©9Ó5×=Ñ=ˆGð �aŠ<Ø §	¡	˜{¨!Ð,ˆMØ$+¨q¢L”—’´f·n±nˆØ×#Ñ# D§I¡I¨t¯y©y¸&ÓAˆØ$×0Ñ0Ó2°2°AÐ6ÑˆŒ	�4”9Ü˜Ÿ™¨%¸T¿Y¹YÔGˆØ�j‰j‹l×ÐØ—‘ˆØÐ!Ð!Ð!Ø—.‘.ˆØÐ"Ð"Ð"Ø˜A‘J×*Ñ*Ó,¨QÑ/ˆŒ	Ø�{Š{Ø%)§Y¢Y™'°FˆDŒKÜ˜DŸK™K˜=¨¨M¨?¸!¸D¿I¹I¸;Ð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©Nro   ©r`   rZ   s     r@   rr   zBaseTestServer._make_runner¤   s	   è ø€ àùs   ‚Úpathc                 óò   — | j                   €J ‚t        |«      }| j                  s)|j                  rJ ‚| 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¨   s`   € Ø�z‰zÐ%Ð%Ð%Ü�$‹iˆØ×$Ò$Ø—|’|Ð#Ð#Ø—:‘:—?‘? 3Ó'Ð'ä”s˜4Ÿ:™:“¬¨T«Ñ2Ó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                 óV   — | j                   }|€J ‚|j                  €J ‚|j                  S r‚   )r]   r   )r`   r]   s     r@   ÚhandlerzBaseTestServer.handler¹   s3   € ð —‘ˆØÐ!Ð!Ð!Ø�}‰}Ð(Ð(Ð(Ø�}‰}ÐrB   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^   rC   r_   rŒ   s    r@   ÚclosezBaseTestServer.closeÂ   sZ   è ø€ ð �<Š< §¢Ø—;‘;Ð*Ð*Ð*Ø—+‘+×%Ñ%Ó'×'Ð'ØˆDŒJØˆDŒIØˆD�Lð !,ˆ<à'ús   ‚AA%ÁA#ÁA%c                 ó   — t        d«      ‚©NzUse async with instead©Ú	TypeErrorrŒ   s    r@   Ú	__enter__zBaseTestServer.__enter__Õ   ó   € ÜÐ0Ó1Ð1rB   Úexc_typeÚ	exc_valueÚ	tracebackc                  ó   — y r‚   ro   ©r`   rœ   r�   rž   s       r@   Ú__exit__zBaseTestServer.__exit__Ø   ó   € ð 	rB   c              ƒ   óZ   K  — | j                  | j                  ¬«      ƒ d {  –—†  | S 7 Œ­w©N©rW   )r€   r\   rŒ   s    r@   Ú
__aenter__zBaseTestServer.__aenter__á   s+   è ø€ Ø×Ñ T§Z¡ZÐÓ0×0Ð0Øˆð 	1ús   ‚ +¢)£+c              ƒ   ó@   K  — | j                  «       ƒ d {  –—†  y 7 Œ­wr‚   ©r•   r    s       r@   Ú	__aexit__zBaseTestServer.__aexit__å   ó   è ø€ ð �j‰j‹l×Òúó   ‚–—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Ñ0Ñ1ð	-ð
 ð-ð �s‰mð-ð ð-ð !Ø�#�v×+Ñ+Ð,¨f¯m©mÐ;ñ
ð-ð ð-ð 
ó-ð0 ;?ñIØ˜W×6Ñ6Ñ7ðIØJMðIà	óIð@ ð¨3ð °:ò ó ðð4˜Xð 4¨#ó 4ð ð'˜ò 'ó ð'ð ð˜ò ó ðð ð˜ò ó ðó ó&2ðà˜4 Ñ.Ñ/ðð ˜MÑ*ðð ˜MÑ*ð	ð
 
óóðà˜4 Ñ.Ñ/ðð ˜MÑ*ðð ˜MÑ*ð	ð
 
ôrB   rT   c                   óT   ‡ — 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                ó:   •— || _         t        ‰| �  d|||dœ|¤Ž y ©Nr¹   ro   )rº   Úsuperra   )r`   rº   rV   r;   rC   rZ   Ú	__class__s         €r@   ra   zTestServer.__init__ï   s%   ø€ ð ˆŒÜ‰ÑÐG ¨T¸ÑGÀÓGrB   r=   c              ‹   ó6   K  — t        | j                  fi |¤ŽS ­wr‚   )r'   rº   rƒ   s     r@   rr   zTestServer._make_runnerû   s   è ø€ Ü˜Ÿ™Ñ, VÑ,Ð,ùs   ‚)r­   r®   r¯   r&   rˆ   r   rP   r   ra   r)   rr   Ú__classcell__©r¾   s   @r@   r¸   r¸   î   s`   ø„ ð
 ØØ"ò
Hàð
Hð ð	
Hð
 ð
Hð �s‰mð
Hð õ
Hð-¨3ð -°:÷ -rB   r¸   c                   ó^   ‡ — 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                ó:   •— || _         t        ‰| �  d|||dœ|¤Ž y r¼   )Ú_handlerr½   ra   )r`   r’   rV   r;   rC   rZ   r¾   s         €r@   ra   zRawTestServer.__init__   s%   ø€ ð  ˆŒÜ‰ÑÐG ¨T¸ÑGÀÓGrB   Údebugc              ‹   ól   K  — t        | j                  f| j                  |dœ|¤Ž}t        |fd|i|¤ŽS ­w)N)rW   rÆ   rÆ   )r+   rÅ   r\   r,   )r`   rÆ   rZ   Úsrvs       r@   rr   zRawTestServer._make_runner  s9   è ø€ Ü�T—]‘]ÐK¨¯©¸5ÑKÀFÑKˆÜ˜CÑ7 uÐ7°Ñ7Ð7ùs   ‚24)T)r­   r®   r¯   r/   rˆ   r   rP   r   ra   r³   r,   rr   rÀ   rÁ   s   @r@   rÃ   rÃ   ÿ   sr   ø„ ð
 ØØ"ò
Hà ð
Hð ð	
Hð
 ð
Hð �s‰mð
Hð ð
Hð 
õ
Hñ8¨ð 8¸sð 8À|÷ 8rB   rÃ   c                   ó   — 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\  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+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„Z8y)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                 ó   — y r‚   ro   ©r`   r   rË   rZ   s       r@   ra   zTestClient.__init__  ó   € ð rB   zTestClient[_Request, None]c                 ó   — y 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 | _        y )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ÜØDÄtÈFÃ|ÑSóð ð ˆŒØˆŒ
ØÐÜ ×*Ñ*°$¸TÔBˆJÜ%ÐQ¨4¸JÑQÈ&ÑQˆŒØ*/ˆ�‰Ô'ØˆŒØ02ˆŒØ:<ˆÕrB   c              ƒ   ól   K  — | j                   j                  | j                  ¬«      ƒ d {  –—†  y 7 Œ­wr¤   )rz   r€   r\   rŒ   s    r@   r€   zTestClient.start_serverA  s%   è ø€ Ø�l‰l×'Ñ'¨T¯Z©ZÐ'Ó8×8Ò8ús   ‚*4¬2­4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                 ó0   — t        | j                  dd «      S )Nrº   )Úgetattrrz   rŒ   s    r@   rº   zTestClient.appP  s   € ä�t—|‘| U¨DÓ1Ð1rB   c                 ó   — | j                   S )zðAn 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                 ó8   — | j                   j                  |«      S r‚   )rz   rŠ   )r`   r„   s     r@   rŠ   zTestClient.make_url_  s   € Ø�|‰|×$Ñ$ TÓ*Ð*rB   Úmethodc              ‹   ó²   K  —  | j                   j                  || j                  |«      fi |¤Žƒ d {  –—† }| j                  j	                  |«       |S 7 Œ!­wr‚   )rÖ   ÚrequestrŠ   rØ   Úappend)r`   rä   r„   rZ   Úresps        r@   Ú_requestzTestClient._requestb  sN   è ø€ ð +�T—]‘]×*Ñ*¨6°4·=±=ÀÓ3FÑQÈ&ÑQ×Qˆà�‰×Ñ˜tÔ$Øˆð Rús   ‚1A³A´"Ar1   c                  ó   — y r‚   ro   ©r`   rä   r„   rZ   s       r@   ræ   zTestClient.requestl  s   € à%(rB   c                  ó   — y r‚   ro   ©r`   r„   rZ   s      r@   ÚgetzTestClient.getp  ó   € ð &)rB   c                  ó   — y r‚   ro   rí   s      r@   ÚoptionszTestClient.optionsv  rï   rB   c                  ó   — y r‚   ro   rí   s      r@   ÚheadzTestClient.head|  rï   rB   c                  ó   — y r‚   ro   rí   s      r@   ÚpostzTestClient.post‚  rï   rB   c                  ó   — y r‚   ro   rí   s      r@   ÚputzTestClient.putˆ  rï   rB   c                  ó   — y r‚   ro   rí   s      r@   ÚpatchzTestClient.patchŽ  rï   rB   c                  ó   — y r‚   ro   rí   s      r@   ÚdeletezTestClient.delete”  rï   rB   c                 ó<   — t         | j                  ||fi |¤Ž«      S )zäRoutes 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ÐPrB   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Ñ*VÈvÑ*VÓWÐWrB   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¬  ó$   € ä)¨-¨$¯-©-¼¿¹ÈÑ*WÐPVÑ*WÓXÐXrB   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×/Ñ/°Ñ@¸Ñ@óð rB   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  rB   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ÿ   rB   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(   € ä)Ø�—‘œdŸo™o¨tÑ>°vÑ>óð rB   c                 óX   — t         | j                  t        j                  |fi |¤Ž«      S r
  )r   ré   r   ÚMETH_DELETErí   s      r@   rû   zTestClient.deleteÄ  s*   € ä)Ø�—‘œd×.Ñ.°Ñ?¸Ñ?óð rB   c                 ó:   — 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Ñ(8¸Ñ(HÀÑ(HÓIÐIrB   c              ‹   ó°   K  —  | j                   j                  | j                  |«      fi |¤Žƒ d {  –—† }| j                  j	                  |«       |S 7 Œ!­wr‚   )rÖ   r  rŠ   rÙ   rç   )r`   r„   rZ   Úwss       r@   r  zTestClient._ws_connectÒ  sN   è ø€ ð ,�4—=‘=×+Ñ+¨D¯M©M¸$Ó,?ÑJÀ6ÑJ×JˆØ×Ñ×Ñ Ô#Øˆ	ð Kús   ‚0A²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Ö   rz   )r`   rè   r  s      r@   r•   zTestClient.closeÙ  s”   è ø€ ð �|Š|ØŸ™ò �Ø—
‘
•ðà×&Ñ&ò !�Ø—h‘h“j× Ñ ð!à—-‘-×%Ñ%Ó'×'Ð'Ø—,‘,×$Ñ$Ó&×&Ð&ØˆD�Lð ð !øØ'øØ&ú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›   rB   rœ   ÚexcÚtbc                  ó   — y r‚   ro   ©r`   rœ   r  r  s       r@   r¡   zTestClient.__exit__ñ  r¢   rB   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¬   )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ðàðð Ð.Ñ/ð	ð
 ðð 
òó ðð ð
 37ò	Ø*ðàðð Ð.Ñ/ð	ð
 ðð 
òó ðð 37Ø48ò=àð=ð Ð.Ñ/ð	=ð
 �w×0Ñ0Ñ1ð=ð ð=ð 
ó=ó,9ð ð!�cò !ó ð!ð ð!�h˜s‘mò !ó ð!ð ð˜ò ó ðð ð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ó 	ðJ˜xð J°3ð JÐ;Só JðØðØ(+ðà	 óó ó*2ðà˜4 Ñ.Ñ/ðð �mÑ$ðð �]Ñ#ð	ð
 
óð $ó ðà˜4 Ñ.Ñ/ðð �mÑ$ðð �]Ñ#ð	ð
 
ôrB   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)z‰Get 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   è ø€ ð �|‰|‹~Ðù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_app  s   € ô
 ÐHÓIÐIrB   Nc              ƒ   óp   K  — t        j                  «       | _        | j                  «       ƒ d {  –—† S 7 Œ­wr‚   )r±   Úget_running_looprW   Ú
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.setUpAsync*  sn   è ø€ Ø×-Ñ-Ó/×/ˆŒØ ŸO™O¨D¯H©HÓ5×5ˆŒØ ŸO™O¨D¯K©KÓ8×8ˆŒà�k‰k×&Ñ&Ó(×(Ñ(ð	 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.asyncTearDown1  s   è ø€ Ø×'Ñ'Ó)×)Ð)Ð)ús   ‚–—c              ƒ   óT   K  — | j                   j                  «       ƒ d {  –—†  y 7 Œ­wr‚   )r,  r•   rŒ   s    r@   r.  zAioHTTPTestCase.tearDownAsync4  s   è ø€ Ø�k‰k×ÑÓ!×!Ò!ús   ‚( &¡(rº   c              ƒ   ó8   K  — t        || j                  ¬«      S ­w)zReturn a TestServer instance.r¥   )r¸   rW   )r`   rº   s     r@   r*  zAioHTTPTestCase.get_server7  s   è ø€ ä˜# D§I¡IÔ.Ð.ùó   ‚r   c              ƒ   ó8   K  — t        || j                  ¬«      S ­w)zReturn a TestClient instance.r¥   )rÊ   rW   )r`   r   s     r@   r+  zAioHTTPTestCase.get_client;  s   è ø€ ä˜& t§y¡yÔ1Ð1ùr2  r¬   )r­   r®   r¯   r  r&   r"  r!  r(  r'  r/  r.  r¸   r*  rÊ   r*   r+  ro   rB   r@   r  r    se   „ ñð {ó ðJ˜ó Jó'ó)ó*ó"ð/ Kð /°Jó /ð2 zð 2°jÀÈ+ÐAUÑ6Vô 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)r4  r5  rZ   s      r@   Úunittest_run_loopr;  @  s    € ô ‡M�MØLÜØõð
 €KrB   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.
    )r=  N)Úsetup_test_loopÚteardown_test_loop)r<  r=  rW   s      r@   Úloop_contextrA  Q  s!   è ø€ ô ˜<Ó(€DØ
‚JÜ�t $Ö'ùs   ‚ c                 ó>   —  | «       }t        j                  |«       |S )z”Create 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                 óô   — | 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±   rC  )rW   r=  r�   s      r@   r@  r@  k  sP   € à�^‰^Ó€FÙØ�‰�t—y‘yÔ!Ø×ÑÔØ�
‰
ŒáÜ
�
‰
Œä×Ñ˜4Õ rB   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º   rL  s     r@   Úget_dictz"_create_app_mock.<locals>.get_dictz  s   € Ø�~‰~˜cÑ"Ð"rB   Úvaluec                 ó"   — || j                   |<   y r‚   rN  )rº   rL  rQ  s      r@   Úset_dictz"_create_app_mock.<locals>.set_dict}  s   € Ø#ˆ�‰�sÒrB   )ÚspecF)r   rˆ   r   Ú	MagicMockr&   rO  Ú__getitem__Ú__setitem__Ú_debugr   Úon_response_prepareÚfreeze)rP  rS  rº   s      r@   Ú_create_app_mockr[  y  sŒ   € ð#”cð #¤ð #¬ó #ð$”cð $¤ð $¬Cð $°Dó $ô �.‰.œkÔ
*€CØ€C„NØ€C„OØ€C„Oà€C„JÜ$ S›k€CÔØ×Ñ×"Ñ"Ô$Ø€JrB   Ú
sslcontextc                 ó„   ‡ — t        j                  «       }dt        dt        t           fˆ fd„}||j
                  _        |S )NrL  r=   c                 ó   •— | dk(  r‰S y )Nr\  ro   )rL  r\  s    €r@   Úget_extra_infoz)_create_transport.<locals>.get_extra_infoŽ  s   ø€ Ø�,ÒØÐàrB   )r   ÚMockrˆ   r   r0   r_  Úside_effect)r\  Ú	transportr_  s   `  r@   Ú_create_transportrc  ‹  s<   ø€ Ü—	‘	“€IðœCð ¤H¬ZÑ$8õ ð ,:€I×ÑÔ(ØÐrB   i   .)Ú
match_inforv   Úclosingrº   ÚwriterÚprotocolrb  Úpayloadr\  Úclient_max_sizerW   rä   r„   Úheadersrd  rv   re  rº   rf  rg  rb  rh  ri  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 }t!        | |||||dd	|t#        |«      «
      }|€
t%        «       }|	t&        u rt)        |«      }	|t&        u rt        j                  «       }|	|_        |t&        u r[t        j                  «       }t-        d«      |_        t-        d«      |_        t-        d«      |_        t-        d«      |_        |	|_        |	|_        ||_        t9        ||
|||||¬
«      }t;        |t&        u ri n|t        j                  «       «      }|j=                  |«       ||_        |S # t        $ r) t        j                  «       }d|j
                  _        Y �Œâw xY w)z±Creates 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   ó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¸!ˆQ�X‰X�gÓ §¡¨Ó 1Ô2ñ
ùs   ‚/1ÚchunkedrU   NF)ri  ) r   r`  r±   r&  r$  Úcreate_futureÚreturn_valuer!   r   r   ÚtupleÚitemsrî   r   ÚTRANSFER_ENCODINGÚlowerr"   r   r[  r    rc  rb  Úmake_mocked_coroÚwrite_headersÚwriteÚ	write_eofÚdrainrf  r*   r.   Úadd_appÚ_match_info)rä   r„   rj  rd  rv   re  rº   rf  rg  rb  rh  r\  ri  rW   ÚtaskÚraw_hdrsrr  ÚmessageÚreqs                      r@   Úmake_mocked_requestr„  ˜  sé  € ô, �9‰9‹;€DØˆs�{ð
	1Ü×+Ñ+Ó-ˆDð
 ”˜Q Ó"Ò"ØˆáÜ"¤;¨wÓ#7Ó8ˆÜñ 
Ø?F¿}¹}»ô
ó 
‰ô #¤;£=Ó1ˆØˆà˜7Ÿ;™;¤t×'=Ñ'=¸rÓB×HÑHÓJÐJ€GäØØØØØØØØØÜˆD‹	ó€Gð €{ÜÓ ˆà”HÑÜ% jÓ1ˆ	à”8ÑÜ—9‘9“;ˆØ&ˆÔà”ÑÜ—‘“ˆÜ/°Ó5ˆÔÜ'¨Ó-ˆŒÜ+¨DÓ1ˆÔÜ'¨Ó-ˆŒØ$ˆÔà"€HÔØ€H„Oä
Ø�˜( F¨D°$Èô€Cô %ØœHÑ$‰¨*´d·i±i³kó€Jð ×Ñ�sÔØ €C„Oà€Jøô{ ò 	1Ü—9‘9“;ˆDØ.0ˆD×Ñ×+ð	1ús   šG Ç.HÈHrt  Úraise_exceptionc                 ód   ‡ ‡— dt         dt         dt         fˆˆ fd„}t        j                  |¬«      S )zCreates a coroutine mock.r5  rZ   r=   c               Ÿ   óh   •K  — ‰t         ur‰‚t        j                  ‰«      s‰S ‰ƒ d {  –—†  y 7 Œ­wr‚   )r    ÚinspectÚisawaitable)r5  rZ   r…  rt  s     €€r@   Ú	mock_coroz#make_mocked_coro.<locals>.mock_coroû  s2   øè ø€ Ø¤(Ñ*Ø!Ð!Ü×"Ñ" <Ô0ØÐØ×Òús   ƒ'2ª0«2)Úwraps)r   r   r`  )rt  r…  rŠ  s   `` r@   ry  ry  ö  s.   ù€ ð
œsð ¬cð ´cö ô �9‰9˜9Ô%Ð%rB   )Fr‚   )mr  r±   Ú
contextlibrI  rˆ  rt   ÚosrE   r  r8  Ú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  r;  r²   Ú_LOOP_FACTORYÚcontextmanagerÚnew_event_loopr³   rA  r?  r@  rU  r[  r`  rc  r„  ry  ro   rB   r@   ú<module>r¢     s¤  ðÙ  ã Û Û 	Û Û Û 	Û Û 
Û ß #Ý ÷÷ ÷ ñ ÷ 3å ß 3Ý ã ÷ñ ÷ "Ý "Ý )Ý .Ý ß 0ß 0Ý ÷
÷ 
õ 
õ *áÞà€Jà×Ñ�wÒ¡=Ýà×Ñ�wÒÞà€DáÐ-¨{¸DÓAÐ Ù�: [Ô1€à—‘˜7Ñ"Ò? s§|¡|°xÑ'?€ð /5¯n©nñ,Ø
ð,Ø×+Ñ+ð,à‡]�]ó,ð
Ø
ð
Øð
Ø"(×"6Ñ"6ð
à‡]�]ó
ð-�Só -ôA�Sô AôH-�ô -ô"8�Nô 8ô$s�˜Ð#3Ð3Ñ4ô sôl62Ð-ô 62ðr˜Cð ¨ð °sð ¸só ð ˜˜W×6Ñ6Ð6Ñ7€ð ×Ñà")×"8Ñ"8Àuñ	(Øð	(Ø@Dð	(àˆg×'Ñ'Ñ(ò	(ó ð	(ð #*×"8Ñ"8ñ
Øð
à×Ñó
ñ!˜W×6Ñ6ð !¸dð !Ètó !ð˜$Ÿ.™.ó ñ$
 (¨:Ñ"6ð 
À$Ç)Á)ó 
ð  ð[ð
 Ù& q¨!Ó,ØØØØØØ)Ø'+Ø"Øò[Øð[à
ð[ð ð[ð
 ð[ð ð[ð ð[ð 
ð[ð ð[ð ð[ð ð[ð ð[ð ˜Ñ$ð[ð ð[ð ð[ð  ó![ð~ !¸ñ&Øð&Ø36ð&àô&rB   