o
    ~#i                     @   s  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	Z	d dl
mZmZmZ d dlmZmZmZ d dlmZ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 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-m.Z.m/Z/m0Z0m1Z1 dd
l2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< ddl=m>Z> ddl.m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH ddl/mIZImJZJmKZKmLZLmMZM ddlNmOZO ddlPmQZQ ddlRmSZSmTZTmUZUmVZVmWZWmXZX zd dlYZYd dlYmZZZ W n e[y   dZYe\ZZY nw dZ]erddl^m_Z_ ddl`maZa ddlbmcZc eddZeeddZfegeheie+jddd dkZkdelfddZme"jnd d d d!G d"d# d#Zoe"jnd d d d!G d$d% d%ZpG d&d' d'ZqeYdurqeYjZereqesdfZtneresdfZtd(e d)ereqf d*eer d+ed) d,eeu de d)ereqf f
d-d.Zve"jnd d d d d/G d0d1 d1Zwd2eld3elderfd4d5ZxG d6d7 d7Zye5d8ZzG d9d: d:eAZ{dS );    N)md5sha1sha256)CookieErrorMorselSimpleCookie)MappingProxyTypeTracebackType)TYPE_CHECKINGAnyCallableDictIterableListMappingOptionalTupleTypeUnioncast)CIMultiDictCIMultiDictProxy	MultiDictMultiDictProxy)URL__version__   )hdrshelpershttp	multipartpayload)AbstractStreamWriter)ClientConnectionErrorClientOSErrorClientResponseErrorContentTypeError
InvalidURLServerFingerprintMismatch
HAS_BROTLI)FormData)
BaseTimerContext	BasicAuthHeadersMixin	TimerNoopbasicauth_from_netrcnetrc_from_envnoopreifyset_exception
set_result)SERVER_SOFTWAREHttpVersionHttpVersion10HttpVersion11StreamWriter)client_logger)StreamReader)DEFAULT_JSON_DECODERJSONDecoderLooseCookiesLooseHeadersQuery
RawHeaders)
SSLContext)ClientRequestClientResponseRequestInfoFingerprint)ClientSession)
Connection)Tracez[^-!#$%&'*+.^_`|~0-9a-zA-Z]z!^application/(?:[\w.+-]+?\+)?json.   )r      returnc                   C   s   t rdS dS )Nzgzip, deflate, brzgzip, deflater)    rO   rO   \/var/www/GraceOrthoHospital/venv_grace/lib/python3.10/site-packages/aiohttp/client_reqrep.py_gen_default_accept_encodingd      rQ   T)auto_attribsfrozenslotsc                   @   s.   e Zd ZU ee ed< ded< ee ed< dS )ContentDispositiontypezMappingProxyType[str, str]
parametersfilenameN)__name__
__module____qualname__r   str__annotations__rO   rO   rO   rP   rV   h   s   
 rV   c                   @   sJ   e Zd ZU eed< eed< ded< e Zeed< ej	defddZ
d	S )
rF   urlmethodCIMultiDictProxy[str]headersreal_urlrN   c                 C      | j S N)r_   selfrO   rO   rP   real_url_defaultv      zRequestInfo.real_url_defaultN)rZ   r[   r\   r   r^   r]   attribrc   defaultrh   rO   rO   rO   rP   rF   o   s   
 rF   c                   @   sP   e Zd ZeeedZdeddfddZe	defddZ
d	ejddfd
dZdS )rG   )          fingerprintrN   Nc                 C   sH   t |}| j|}|std|tu s|tu rtd|| _|| _d S )Nzfingerprint has invalid lengthz8md5 and sha1 are insecure and not supported. Use sha256.)lenHASHFUNC_BY_DIGESTLENget
ValueErrorr   r   	_hashfunc_fingerprint)rg   rp   	digestlenhashfuncrO   rO   rP   __init__   s   
zFingerprint.__init__c                 C   rd   re   )rv   rf   rO   rO   rP   rp      ri   zFingerprint.fingerprint	transportc                 C   s`   | dsd S | d}|jdd}| | }|| jkr.| d^}}}t| j|||d S )N
sslcontext
ssl_objectT)binary_formpeername)get_extra_infogetpeercertru   digestrv   r(   )rg   rz   sslobjcertgothostport_rO   rO   rP   check   s   


zFingerprint.check)rZ   r[   r\   r   r   r   rr   bytesry   propertyrp   asyncio	Transportr   rO   rO   rO   rP   rG   {   s    rG   sslrC   
verify_sslssl_contextrp   c                 C   s   | d u rd} |d ur|st jdtdd | durtdd} |d ur4t jdtdd | dur2td|} |d urLt jdtdd | durHtdt|} t| tsXtd	| | S )
NTz/verify_ssl is deprecated, use ssl=False instead   
stacklevelzNverify_ssl, ssl_context, fingerprint and ssl parameters are mutually exclusiveFz2ssl_context is deprecated, use ssl=context insteadzCfingerprint is deprecated, use ssl=Fingerprint(fingerprint) insteadzFssl should be SSLContext, bool, Fingerprint or None, got {!r} instead.)	warningswarnDeprecationWarningrt   rG   
isinstanceSSL_ALLOWED_TYPES	TypeErrorformat)r   r   r   rp   rO   rO   rP   _merge_ssl_params   sR   
r   )rS   rU   rT   
cache_hashc                   @   s`   e Zd ZU eed< ee ed< eed< ee	ee
f ed< ee ed< ee ed< ee ed< dS )	ConnectionKeyr   r   is_sslr   proxy
proxy_authproxy_headers_hashN)rZ   r[   r\   r]   r^   r   intboolr   rC   rG   r   r-   rO   rO   rO   rP   r      s   
 r   response_content_typeexpected_content_typec                 C   s   |dkrt | d uS || v S )Napplication/json)json_rematch)r   r   rO   rO   rP   _is_expected_content_type   s   r   c                0   @   s  e Zd ZU ejejejejhZej	ej
ejhZeeejhZeedjejed d  Zejdeje iZdZeed< dZ dZ!dZ"dZ#dddddde$j%ddddddddddddddd	d
e&de'de(de)e* de)e+e&  dede)e, de)e- de$j.de/e&e0df de)e0 de0de)e1j2 de)e3d  de)e' de)e- de)e4 de)d de/e5e0e6f de)e* d e)e7d!  d"e0d#e)e& f.d$d%Z8ded&e9d'dfd(d)Z:e;d'e)d* fd+d,Z<e<j=dfd.d,Z<d'e0fd/d0Z>e;d'e/d1e0e6f fd2d3Z?e;d'e@fd4d5ZAe;d'e&fd6d7ZBe;d'e)eC fd8d9ZDe;d'eEfd:d;ZFde'd'dfd<d=ZGde/e$j.e&f d'dfd>d?ZHde)e* d'dfd@dAZIde)e+e&  d'dfdBdCZJde)e, d'dfdDdEZKded'dfdFdGZLdgdHdIZMdhde)e- d"e0d'dfdJdKZNded'dfdLdMZOdhdNe0d'dfdOdPZPde)e' de)e- de)e* d'dfdQdRZQd'e0fdSdTZRd-eSdUdVd'dfdWdXZTdidYdZZUdgd[d\ZVdgd]d^ZWd
e&de'd_eXd'dfd`daZYd
e&de'ddbd'dfdcddZZdS )jrD    r   z*/*    bodyNFT)paramsrb   skip_auto_headersdatacookiesauthversioncompresschunked	expect100loopresponse_classr   r   timersessionr   proxy_headerstraces	trust_envserver_hostnamer`   r_   r   rb   r   r   r   r   r   r   r   r   r   r   rE   r   r   r   r   rH   r   r   r   rJ   r   r   c                C   s  |d u rt  }t| }rtd|d| dt|tu s&J ||d ur4t|tu s4J |tr<|d us<J || _	|rF|
|}|| _|jrQ|d n|| _| | _|| _|
| _|| _d | _|d u rlt}n|}|| _|d urw|nt | _|d ur|nd| _|| _| rttd| _ | !|	 | "| | #| | $| | %| | &| | '|| | (||| | )| |d us| j| j*vr| +  | ,| |d u rg | _-d S || _-d S )Nz+Method cannot contain non-token characters z (found at least )Tr   ).r   get_event_loop_CONTAINS_CONTROL_CHAR_REsearchrt   grouprW   r   r
   _sessionextend_queryoriginal_urlraw_fragmentwith_fragmentr_   upperr`   r   r   r   lengthrE   r   r/   _timer_sslr   	get_debug	tracebackextract_stacksys	_getframe_source_tracebackupdate_versionupdate_hostupdate_headersupdate_auto_headersupdate_cookiesupdate_content_encodingupdate_authupdate_proxyupdate_body_from_dataGET_METHODSupdate_transfer_encodingupdate_expect_continue_traces)rg   r`   r_   r   rb   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   real_response_classrO   rO   rP   ry     sZ   









zClientRequest.__init__r   rN   c                 C   
   d | _ d S re   _ClientRequest__writerrg   r   rO   rO   rP   __reset_writer]     
zClientRequest.__reset_writerasyncio.Task[None]c                 C   rd   re   r   rf   rO   rO   rP   _writer`  ri   zClientRequest._writerwriterc                 C   s.   | j d ur| j | j || _ || j d S re   )r   remove_done_callback_ClientRequest__reset_writeradd_done_callbackrg   r   rO   rO   rP   r   d  s   
c                 C   s   | j jdv S )N)httpswss)r_   schemerf   rO   rO   rP   r   k  rR   zClientRequest.is_sslrC   c                 C   rd   re   )r   rf   rO   rO   rP   r   n  ri   zClientRequest.sslc                 C   sB   | j }|rtt| }nd }t| j| j|  | j| j	| j
|S re   )r   hashtupleitemsr   r   r   r   r   r   r   )rg   r   hrO   rO   rP   connection_keyr  s   zClientRequest.connection_keyc                 C   s   | j j}|d us
J |S re   )r_   raw_host)rg   retrO   rO   rP   r     s   zClientRequest.hostc                 C   s   | j jS re   )r_   r   rf   rO   rO   rP   r     s   zClientRequest.portc                 C   s   t | j}t| j| j|| jS re   )r   rb   rF   r_   r`   r   )rg   rb   rO   rO   rP   request_info  s   
zClientRequest.request_infoc                 C   s<   |j st||js|jrt|jpd|jpd| _dS dS )z8Update destination host, port and connection type (ssl).r   N)	r   r'   raw_userraw_passwordr   r-   userpasswordr   )rg   r_   rO   rO   rP   r     s
   zClientRequest.update_hostc                 C   sj   t |tr0dd |ddD }ztt|d t|d }W n ty/   td| dw || _dS )zdConvert request version to two elements tuple.

        parser HTTP version '1.1' => (1, 1)
        c                 S   s   g | ]}|  qS rO   )strip).0partrO   rO   rP   
<listcomp>  s    z0ClientRequest.update_version.<locals>.<listcomp>rK   r   r   z#Can not parse http version number: N)r   r]   splitr   r7   r   rt   r   )rg   r   vrO   rO   rP   r     s   
 
zClientRequest.update_versionc                 C   s   t  | _tr| jj}|dusJ ntt| jj}t	|r#d| d}|d dkr.|
d}| jj}|durB| j sB| d| }|| jtj< |sLdS t|tttfrX| }|D ]\}}|| jv ri|| j|< qZ| j|| qZdS )zUpdate request headers.N[]rK   :)r   rb    _YARL_SUPPORTS_HOST_SUBCOMPONENTr_   host_subcomponentr   r]   r   r   is_ipv6_addressrstripexplicit_portis_default_portr   HOSTr   dictr   r   r   _HOST_STRINGSadd)rg   rb   r   r	  keyvaluerO   rO   rP   r     s,   


zClientRequest.update_headersc                 C   s   |d urt dd t|D | _| j }|| j nt  | _| j}| j D ]\}}||vr7| j|| q(t	j
|vrEt| jt	j
< d S d S )Nc                 s   s    | ]}|d fV  qd S re   rO   )r   hdrrO   rO   rP   	<genexpr>  s    
z4ClientRequest.update_auto_headers.<locals>.<genexpr>)r   sortedr   rb   copyextendDEFAULT_HEADERSr   r  r   
USER_AGENTr6   )rg   r   used_headersr  valrO   rO   rP   r     s   


z!ClientRequest.update_auto_headersc                 C   s   |sdS t  }tj| jv r|| jtjd | jtj= t|tr'| }n|}|D ]$\}}t|t	rK||j
t	 }||j
|j|j |||< q+|||< q+|jddd | jtj< dS )zUpdate request cookies header.Nr   ;)headersep)r   r   COOKIErb   loadrs   r   r   r   r   r  setr  coded_valueoutputr   )rg   r   citer_cookiesnamer  mrsl_valrO   rO   rP   r     s    





zClientRequest.update_cookiesc                 C   sb   |sd| _ dS | jtjr| j rtddS | j r/t| j ts#d| _ | j | jtj< d| _dS dS )zSet request content encoding.Nz9compress can not be set if Content-Encoding header is setdeflateT)	r   rb   rs   r   CONTENT_ENCODINGrt   r   r]   r   )rg   r   rO   rO   rP   r     s   
z%ClientRequest.update_content_encodingc                 C   s   | j tjd }d|v r| jrtddS | jr,tj| j v r$tdd| j tj< dS tj| j vr?tt	| j
| j tj< dS dS )z!Analyze transfer-encoding header.r   r   zDchunked can not be set if "Transfer-Encoding: chunked" header is setz6chunked can not be set if Content-Length header is setN)rb   rs   r   TRANSFER_ENCODINGlowerr   rt   CONTENT_LENGTHr]   rq   r   )rg   terO   rO   rP   r     s    z&ClientRequest.update_transfer_encodingc                 C   s   |du r| j }|du r2|r2| jjdur2t }tt t|| jj}W d   n1 s-w   Y  |du r8dS t|t	j
sBtd| | jtj< dS )zSet basic auth.Nz%BasicAuth() tuple is required instead)r   r_   r   r1   
contextlibsuppressLookupErrorr0   r   r   r-   r   encoderb   r   AUTHORIZATION)rg   r   r   	netrc_objrO   rO   rP   r   0  s   zClientRequest.update_authc                 C   s   |d u rd S t |tr| }z
tjj|d d}W n tjy'   t| }Y nw || _| jsMtj	| j
vrM|j}|d u r?d| _ntj	| j
vrMt|| j
tj	< |j
sRJ |j
 D ]\}}|| j
v se|| jv rfqW|| j
|< qWd S )N)dispositionT)r   r+   r!   PAYLOAD_REGISTRYrs   r.  r   r   r   r*  rb   sizer]   r   r   )rg   r   r4  r  r  rO   rO   rP   r   @  s.   

z#ClientRequest.update_body_from_dataexpectc                 C   sN   |r	d| j tj< ntj| j v r| j tj  dkrd}|r%| j | _d S d S )Nz100-continueT)rb   r   EXPECTr)  r   create_future	_continue)rg   r5  rO   rO   rP   r   `  s   z$ClientRequest.update_expect_continuec                 C   sd   || _ |d u rd | _d | _d S |rt|tjstd|| _|d ur-t|ttfs-t	|}|| _d S )Nz,proxy_auth must be None or BasicAuth() tuple)
r   r   r   r   r   r-   rt   r   r   r   )rg   r   r   r   rO   rO   rP   r   l  s   

zClientRequest.update_proxyc                 C   sD   | j tk rdS | j tkr| jtjdkS | jtjdkr dS dS )NF
keep-alivecloseT)r   r8   rb   rs   r   
CONNECTIONrf   rO   rO   rP   
keep_alive  s   

zClientRequest.keep_aliveconnrI   c              
      sh  | j dur| I dH  | j I dH  |j}|dusJ z.t| jtjr.| j|I dH  nt| jtt	fr;| jf| _| jD ]
}||I dH  q>W n\ t
y} } z'|}|jdup_t|tj }|rlt|jd| j}t||| W Y d}~dS d}~w tjy   |    ty } zt|td|| W Y d}~dS d}~ww | I dH  |  dS )z-Support coroutines that yields bytes objects.NzCan not write request body for z4Failed to send bytes into the underlying connection )r8  drainprotocolr   r   r!   Payloadwriter   	bytearrayOSErrorerrnor   TimeoutErrorr$   r_   r4   CancelledErrorr:  	Exceptionr#   	write_eofstart_timeout)rg   r   r=  r?  chunkunderlying_excreraised_excexc_is_not_timeoutrO   rO   rP   write_bytes  sR   



	zClientRequest.write_bytesc                    sJ  | j tjkr3tr| jj}|d usJ n| jj}|d usJ t|r)d| d}| d| jj	 }n| j
r@|  s@t| j}n| jj}|j}|d usMJ t|| j| jr^t| j| j | jnd | jrlt| j| j | jnd d}| jry|| j | jd ur|  | j | jv rtj| jvrtj| jvrd| jtj< | jtj}|s|   r| j!t"krd}n| j!t#krd}|d ur|| jtj< | j!}| j  d| d	|j$ d
|j% }|&|| jI d H  | '||}	t(j)dkrt*j+|	| jdd}
n| j,|	}
|
- rd }
n|
| _.| j/}|d usJ || j | j0|
| j1| j2| j3| j| j| j4d	| _5| j5S )Nr  r  r  )on_chunk_senton_headers_sentzapplication/octet-streamr9  r:   z HTTP/rK   )r      T)r   eager_start)r   continue100r   r   r   r   r   )6r`   r   METH_CONNECTr  r_   r  r   r   r  r   r   r   r]   raw_path_qsr?  r:   r   r   	functoolspartial_on_chunk_request_sent_on_headers_request_sentr   enable_compressionr   enable_chunkingPOST_METHODSCONTENT_TYPEr   rb   rs   r;  r<  r   r8   r9   majorminorwrite_headersrN  r   version_infor   Taskcreate_taskdoner   r   r   r8  r   r   r   response)rg   r=  connect_hostpathr?  r   
connectionr   status_linecorotaskr   rO   rO   rP   send  s   



 
zClientRequest.sendc                    sf   | j d ur1z	| j I d H  W d S  tjy0   tjdkr't  }r*| r- Y d S Y d S Y d S w d S N)r      )r   r   rF  r   rb  current_task
cancellingrg   rl  rO   rO   rP   r:  "  s   


zClientRequest.closec                 C   s:   | j d ur| j s| j   | j | j d | _ d S d S re   )r   r   	is_closedcancelr   r   rf   rO   rO   rP   	terminate.  s   



zClientRequest.terminaterJ  c                    &   | j D ]}||||I d H  qd S re   )r   send_request_chunk_sent)rg   r`   r_   rJ  tracerO   rO   rP   rY  5  s   
z$ClientRequest._on_chunk_request_sentzCIMultiDict[str]c                    rv  re   )r   send_request_headers)rg   r`   r_   rb   rx  rO   rO   rP   rZ  9  s   
z&ClientRequest._on_headers_request_sentre   )r   r   rN   NrN   N)F)r=  rI   rN   rE   )[rZ   r[   r\   r   METH_GET	METH_HEADMETH_OPTIONS
METH_TRACEr   
METH_PATCH	METH_POSTMETH_PUTr]  unionMETH_DELETEALL_METHODS	frozensetmapjoin	itertoolsproductzipr   r)  r  ACCEPTACCEPT_ENCODINGrQ   r  r   r   r^   r   rf  r   r8  r   r9   r]   r   rA   r   r@   r   r?   r-   r7   r   r   r   AbstractEventLoopr   r,   rC   rG   r   ry   objectr   r   r   setterr   r   r   r   r   r   r   rF   r   r   r   r   r   r   r   r   r   r   r   r   r<  r"   rN  rm  r:  ru  r   rY  rZ  rO   rO   rO   rP   rD      s  
 
	



O
0
 


1
c
rD   Connection closedc                   @   s  e Zd ZU dZee ed< dZeed< dZ	ee
 ed< dZeed< dZee
 ed< dZeed< dZdZeej ed< d	Zd
Zd
ZdZde
deddded dededed dejddddfddZdpde ddfddZ!e"ded fdd Z#e#j$ded ddfd!d Z#e%defd"d#Z&e%defd$d%Z'e%defd&d'Z(e%de
fd(d)Z)e%dqd+d,Z*e%defd-d.Z+e%defd/d0Z,e%dee- fd1d2Z.e/fd3e0ddfd4d5Z1de
fd6d7Z2e"ded8 fd9d:Z3e%de4d; fd<d=Z5e%drd?d@Z6dsdBdCZ7dtdDdEZ8e"de9fdFdGZ:dtdHdIZ;de0fdJdKZ<e"de9fdLdMZ=dtdNdOZ>dtdPdQZ?dtdRdSZ@dtdTdUZAdtdVdWZBdtdXdYZCdeDfdZd[ZEde
fd\d]ZFdud_ee
 d`e
de
fdadbZGdeHdcddd_ee
 deeIdfee
 de0fdgdhZJdvdidjZKdkeeLeM  dleeM dmeeN ddfdndoZOdS )wrE   Nr   statusreasoncontent_headers_raw_headersr   TFr`   r_   r   zOptional[asyncio.Task[None]]rT  zasyncio.Future[bool]r   r   r   rJ   r   r   rH   rN   c          
      C   s   t |tsJ || _t | _|| _|jr|d n|| _d | _	|d ur&|| _
|| _d| _d| _|| _|d ur8|nt | _i | _|| _|| _|	| _|	d u rRdd | _n|	j| _| rettd| _d S d S )NTrO   c                  W   s   dS )Nutf-8rO   )r   rO   rO   rP   <lambda>  s    z)ClientResponse.__init__.<locals>.<lambda>r   )r   r   r`   r   r   	_real_urlr   r   _url_bodyr   r8  _closed_history_request_infor/   r   _cacher   _loopr   _resolve_charsetr   r   r   r   r   r   )
rg   r`   r_   r   rT  r   r   r   r   r   rO   rO   rP   ry   Z  s0   zClientResponse.__init__r   c                 C   r   re   _ClientResponse__writerr   rO   rO   rP   r     r   zClientResponse.__reset_writerr   c                 C   rd   )zThe writer task for streaming data.

        _writer is only provided for backwards compatibility
        for subclasses that may need to access it.
        r  rf   rO   rO   rP   r     s   zClientResponse._writerc                 C   sL   | j dur| j | j || _ |du rdS | rd| _ dS || j dS )z'Set the writer task for streaming data.N)r  r   _ClientResponse__reset_writerre  r   r   rO   rO   rP   r     s   

c                 C   rd   re   )r  rf   rO   rO   rP   r_     ri   zClientResponse.urlc                 C   s   t jdtdd | jS )NzDeprecated, use .url #1654rL   r   )r   r   r   r  rf   rO   rO   rP   url_obj  s   zClientResponse.url_objc                 C   rd   re   )r  rf   rO   rO   rP   rc     ri   zClientResponse.real_urlc                 C   s   | j jd usJ | j jS re   )r  r   rf   rO   rO   rP   r     s   zClientResponse.hostra   c                 C   rd   re   )r  rf   rO   rO   rP   rb     ri   zClientResponse.headersc                 C   rd   re   )r  rf   rO   rO   rP   raw_headers  ri   zClientResponse.raw_headersc                 C   rd   re   )r  rf   rO   rO   rP   r     ri   zClientResponse.request_infoc                 C   sF   | j tj}|d u rd S t|\}}t|}t|}t|||S re   )	r  rs   r   CONTENT_DISPOSITIONr    parse_content_dispositionr   content_disposition_filenamerV   )rg   rawdisposition_type
params_dctr   rY   rO   rO   rP   content_disposition  s   
z"ClientResponse.content_disposition	_warningsc                 C   s   | j rd S | jd ur>| j  |   | j r@d| i}|jd| tfi | | dd}| jr6| j|d< | j	| d S d S d S )NsourcezUnclosed response zUnclosed response)client_responsemessagesource_traceback)
r  _connectionrelease_cleanup_writerr  r   r   ResourceWarningr   call_exception_handler)rg   r  kwargscontextrO   rO   rP   __del__  s   




zClientResponse.__del__c                 C   s`   t  }t| j}| jr| jddd}nd}td|| j	||d t| j
|d | S )NasciibackslashreplaceNonez<ClientResponse({}) [{} {}]>)file)ioStringIOr]   r_   r  r/  decodeprintr   r  rb   getvalue)rg   outascii_encodable_urlascii_encodable_reasonrO   rO   rP   __repr__  s"   
zClientResponse.__repr__rI   c                 C   rd   re   )r  rf   rO   rO   rP   ri    ri   zClientResponse.connection)rE   .c                 C   rd   )z2A sequence of of responses, if redirects occurred.)r  rf   rO   rO   rP   history  s   zClientResponse.history/MultiDictProxy[MultiDictProxy[Union[str, URL]]]c                 C   s   d | jdg }|stt S t }td|D ][}td|}|d u r'q| \}}|ddd  }t }|D ]}	td|	tj	}|d u rJq;| \}
}}}|
|
| q;|d|}
|
d	| j t| |
t|
t| qt|S )
Nz, linkz	,(?=\s*<)z\s*<(.*)>(.*)r  r   z%^\s*(\S*)\s*=\s*(['\"]?)(.*?)(\2)\s*$relr_   )r  rb   getallr   r   rer   r   groupsMr  rs   r_   r   r]   )rg   	links_strlinksr  r   r_   
params_strr   r  paramr  r   r  rO   rO   rP   r    s*   
zClientResponse.linksri  c                    sf  d| _ |j| _|| _| jS 	 z| j}| I dH \}}W n tjy: } zt| j	| j
|j|j|jd|d}~ww |jdk sJ|jdksJ|jdkrKn| jdurYt| jd d| _qW d   n1 sdw   Y  || j |j| _|j| _|j| _|j| _|j| _|| _| jtjdD ]"}z| j| W q ty } zt d	| W Y d}~qd}~ww | S )
zStart response processing.FTNr  r  rb   d      e   rO   z!Can not load response cookies: %s)!r  r?  	_protocolr  r   readr   HttpProcessingErrorr%   r   r  coder  rb   r8  r5   on_eof_response_eofr   r  r  r  r  r  r  r  r   
SET_COOKIEr   r  r   r;   warning)rg   ri  r?  r  r!   excr  rO   rO   rP   start  sX   	
zClientResponse.startc                 C   sD   | j rd S | jo| jj}|d ur|jrd S d| _ |   |   d S NT)r  r  r?  upgradedr  _release_connection)rg   r?  rO   rO   rP   r  K  s   zClientResponse._response_eofc                 C   rd   re   )r  rf   rO   rO   rP   closedX  ri   zClientResponse.closedc                 C   sV   | j s|   d| _| jd u s| j rd S |   | jd ur)| j  d | _d S d S r  )	_released_notify_contentr  r  rs  r  r  r:  rf   rO   rO   rP   r:  \  s   


zClientResponse.closec                 C   s*   | j s|   d| _|   |   t S r  )r  r  r  r  r  r2   rf   rO   rO   rP   r  i  s   zClientResponse.releasec                 C   s
   d| j kS )zReturns ``True`` if ``status`` is less than ``400``, ``False`` if not.

        This is **not** a check for ``200 OK`` but a check that the response
        status is under 400.
        i  )r  rf   rO   rO   rP   oks  s   
zClientResponse.okc                 C   sB   | j s| jd us
J | js|   t| j| j| j| j| jdd S )Nr  )	r  r  _in_contextr  r%   r   r  r  rb   rf   rO   rO   rP   raise_for_status|  s   zClientResponse.raise_for_statusc                    sD    j d ur  jd u r j   d  _ d S  j fdd d S d S )Nc                    s      S re   )r  )frf   rO   rP   r    s    z4ClientResponse._release_connection.<locals>.<lambda>)r  r  r  r   rf   rO   rf   rP   r    s   



z"ClientResponse._release_connectionc                    ^   | j d ur)z| j I d H  W n tjy(   tjdkr&t  }r&| r& Y nw |   d S rn  )r  r   rF  r   rb  rp  rq  r  rr  rO   rO   rP   _wait_released     


zClientResponse._wait_releasedc                 C   s   | j d ur
| j   d | _d S re   )r  rt  r   rf   rO   rO   rP   r    s   


zClientResponse._cleanup_writerc                 C   s*   | j }|r| d u rt|t d| _d S r  )r  	exceptionr4   _CONNECTION_CLOSED_EXCEPTIONr  )rg   r  rO   rO   rP   r    s   

zClientResponse._notify_contentc                    r  rn  )r  r   rF  r   rb  rp  rq  r  rr  rO   rO   rP   wait_for_close  r  zClientResponse.wait_for_closec                    s   | j du r1z| j I dH | _ | jD ]}|| j| j| j I dH  qW n ty0   |    w | j	r8t
d| jo>| jj}|du sF|jsM|  I dH  | j S )zRead response payload.Nr  )r  r  r  r   send_response_chunk_receivedr`   r_   BaseExceptionr:  r  r#   r  r?  r  r  )rg   rx  r?  rO   rO   rP   r    s&   

zClientResponse.readc                 C   s   | j tjd }t|}|jd}|r3t	t
t t|jW  d    S 1 s.w   Y  |jdkrD|jdksB|jdkrDdS | jd u rMtd| | | jS )Nr   charsetapplicationjsonrdapr  z7Cannot compute fallback encoding of a not yet read body)rb   rs   r   r^  r)  r   parse_mimetyperX   r,  r-  r.  rt   codecslookupr$  rW   subtyper  RuntimeErrorr  )rg   ctypemimetypeencodingrO   rO   rP   get_encoding  s   

 

zClientResponse.get_encodingstrictr  errorsc                    s:   | j du r|  I dH  |du r|  }| j j||dS )z!Read response payload and decode.N)r  )r  r  r  r  )rg   r  r  rO   rO   rP   text  s   
zClientResponse.textr   )r  loadscontent_typer  r  c                   s   | j du r|  I dH  |r-| jtjd }t||s-t| j	| j
| jd| | jd| j  }|s6dS |du r>|  }|||S )zRead and decodes JSON response.Nr   z3Attempt to decode JSON with unexpected mimetype: %sr  )r  r  rb   rs   r   r^  r)  r   r&   r   r  r  r   r  r  )rg   r  r  r  r  strippedrO   rO   rP   r    s&   



zClientResponse.jsonc                    s   d| _ | S r  )r  rf   rO   rO   rP   
__aenter__  s   zClientResponse.__aenter__exc_typeexc_valexc_tbc                    s"   d| _ |   |  I d H  d S )NF)r  r  r  )rg   r  r  r	  rO   rO   rP   	__aexit__  s   zClientResponse.__aexit__re   )rN   ra   )rN   r  )ri  rI   rN   rE   rz  )Nr   )rN   rE   )PrZ   r[   r\   r   r   r7   r^   r  r   r  r]   r  r<   r  r   r  rB   r  r   r   StackSummaryr  r  r  r  r   r,   rF   r   r   r  ry   r  r  r   r   r  r3   r_   r  rc   r   rb   r  r   rV   r  r   r   r  r  ri  r   r  r  r  r  r   r  r:  r  r  r  r  r  r  r  r  r   r  r  r  r=   r>   r  r  r   r  r	   r
  rO   rO   rO   rP   rE   C  s   
 	

-	
#
3









!
rE   )|r   r  r,  rW  r  r  r  r   r   r   hashlibr   r   r   http.cookiesr   r   r   typesr   r	   typingr
   r   r   r   r   r   r   r   r   r   r   r   rj   	multidictr   r   r   r   yarlr   r   yarl_versionr   r   r   r   r    r!   abcr"   client_exceptionsr#   r$   r%   r&   r'   r(   compression_utilsr*   formdatar+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   logr;   streamsr<   typedefsr=   r>   r?   r@   rA   rB   r   rC   ImportErrorr  __all__clientrH   	connectorrI   tracingrJ   compiler   r   r   r  r   r   r  r]   rQ   srV   rF   rG   r   rW   r   r   r   r   r   rD   r  rE   rO   rO   rO   rP   <module>   s    8 0 	

 
"
7
    U