a
    Rf                     @   sF  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( dd	l)m*Z*m+Z+m,Z,m-Z-m.Z. dd
l/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9 ddl:m;Z; ddl+m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE ddl,mFZFmGZGmHZHmIZImJZJ ddlKmLZL ddlMmNZN ddlOmPZPmQZQmRZRmSZSmTZT zd dlUZUd dlUmVZV W n eWy   dZUeXZVY n0 dZYer(ddlZm[Z[ ddl\m]Z] ddl^m_Z_ e`dZae`dZbecdddZde!jeddddG dd  d Zfe!jeddddG d!d" d"ZgG d#d$ d$ZheUdureUjVeiehejdfZkneiejdfZked%eiehf eei ed% eel ed%eiehf d&d'd(Zme!jedddd)G d*d+ d+Znececeid,d-d.ZoG d/d0 d0ZpG d1d2 d2e>ZqdS )3    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   )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
RawHeaders)
SSLContext)ClientRequestClientResponseRequestInfoFingerprint)ClientSession)
Connection)Tracez[^-!#$%&'*+.^_`|~0-9a-zA-Z]z!^application/(?:[\w.+-]+?\+)?jsonreturnc                   C   s   t rdS dS )Nzgzip, deflate, brzgzip, deflater(    rK   rK   N/var/www/ai-form-bot/venv/lib/python3.9/site-packages/aiohttp/client_reqrep.py_gen_default_accept_encoding^   s    rM   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__rK   rK   rK   rL   rQ   b   s   
rQ   c                   @   sJ   e Zd ZU eed< eed< ded< e Zeed< ej	edddZ
d	S )
rD   urlmethodCIMultiDictProxy[str]headersreal_urlrI   c                 C   s   | j S N)rZ   selfrK   rK   rL   real_url_defaultp   s    zRequestInfo.real_url_defaultN)rU   rV   rW   r   rY   rX   attrZibr^   defaultrb   rK   rK   rK   rL   rD   i   s   
rD   c                   @   sL   e Zd ZeeedZeddddZe	edddZ
ejdd	d
dZdS )rE   )          N)fingerprintrJ   c                 C   sJ   t |}| j|}|s"tdn|tu s2|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)ra   rh   Z	digestlenhashfuncrK   rK   rL   __init__|   s    
zFingerprint.__init__rI   c                 C   s   | j S r_   )rn   r`   rK   rK   rL   rh      s    zFingerprint.fingerprint)	transportrJ   c                 C   s`   | dsd S | d}|jdd}| | }|| jkr\| d^}}}t| j|||d S )NZ
sslcontextZ
ssl_objectT)binary_formZpeername)Zget_extra_infogetpeercertrm   digestrn   r'   )ra   rq   sslobjcertgothostport_rK   rK   rL   check   s    


zFingerprint.check)rU   rV   rW   r   r   r   rj   bytesrp   propertyrh   asyncio	Transportr{   rK   rK   rK   rL   rE   u   s   rE   rA   )ssl
verify_sslssl_contextrh   rJ   c                 C   s   | d u rd} |d ur>|s>t jdtdd | dur:tdnd} |d urlt jdtdd | durhtdn|} |d urt jdtdd | durtdnt|} t| tst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DeprecationWarningrl   rE   
isinstanceSSL_ALLOWED_TYPES	TypeErrorformat)r   r   r   rh   rK   rK   rL   _merge_ssl_params   sT    
r   )rN   rP   rO   c                   @   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 )	ConnectionKeyrx   ry   is_sslr   proxy
proxy_authZproxy_headers_hashN)rU   rV   rW   rX   rY   r   intboolr   rA   rE   r   r,   rK   rK   rK   rL   r      s   
r   )response_content_typeexpected_content_typerJ   c                 C   s   |dkrt | d uS || v S )Napplication/json)json_rematch)r   r   rK   rK   rL   _is_expected_content_type   s    r   c                   @   sH  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jdeje iZdZeed< dZdZdZdZdde dddejdddddddddddddddeee e!eef  e e" e#e ee e$ e e% ej&e e e e' e'e e(j) e e*d  e e e e% e e+ e d	 e,e-e'e.f e e" e e/d
  e'e e dddZ0dXe1ddddZ2e3e d dddZ4e4j5e d ddddZ4e'dddZ6e3e,de'e.f dddZ7e3e8dddZ9e3edddZ:e3e e; dd d!Z<e3e=dd"d#Z>edd$d%d&Z?e,ej&ef dd'd(d)Z@e e" dd*d+d,ZAe#e dd-d.d/ZBe e$ dd0d1d2ZCedd3d4d5ZDddd6d7ZEdYe e% e'dd8d9d:ZFedd;d<d=ZGdZe'dd>d?d@ZHe e e e% e e" ddAdBdCZIe'ddDdEZJeKdFddGdHdIZLdFddJdKdLZMdddMdNZNdddOdPZOeeePddQdRdSZQeedTddUdVdWZRdS )[rB   z*/*    bodyNFT)paramsr]   skip_auto_headersdatacookiesauthversioncompresschunked	expect100loopresponse_classr   r   timersessionr   proxy_headerstraces	trust_envserver_hostnamerC   rF   rH   )r[   rZ   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                C   s  |d u rt  }t|}|r.td|dt|ts@J |t|ttd fsZJ |td|| _	|rt
|j}||}||j ||}|| _|d | _| | _|| _|
| _|| _d | _|d u rt}n|}|| _|d ur|nt | _|d ur|nd| _|| _| r*tt !d| _"| #|	 | $| | %| | &| | '| | (| | )|| | *||| | +| |d us| j| j,vr| -  | .| |d u rg }|| _/d S )Nz+Method cannot contain non-token characters z# (found at least {match.group()!r})rF   Tr   )0r~   Zget_event_loop_CONTAINS_CONTROL_CHAR_REsearchrl   r   r   rR   r   _sessionr   queryZ
with_queryextendoriginal_urlwith_fragmentrZ   upperr[   r   r   r   lengthrC   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)ra   r[   rZ   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   qurl2Zreal_response_classrK   rK   rL   rp     s\    















zClientRequest.__init__rz   rJ   c                 C   s
   d | _ d S r_   _ClientRequest__writerra   rz   rK   rK   rL   __reset_writerX  s    zClientRequest.__reset_writerasyncio.Task[None]rI   c                 C   s   | j S r_   r   r`   rK   rK   rL   _writer[  s    zClientRequest._writerwriterrJ   c                 C   sL   | j d ur| j | j || _ |d u r*d S | r<|   n|| j d S r_   )r   remove_done_callback_ClientRequest__reset_writerdoneadd_done_callbackra   r   rK   rK   rL   r   _  s    

c                 C   s   | j jdv S )N)httpswss)rZ   schemer`   rK   rK   rL   r   l  s    zClientRequest.is_sslrA   c                 C   s   | j S r_   )r   r`   rK   rK   rL   r   o  s    zClientRequest.sslc                 C   sL   | j }|r&ttdd | D }nd }t| j| j|  | j| j	| j
|S )Nc                 s   s   | ]\}}||fV  qd S r_   rK   ).0kvrK   rK   rL   	<genexpr>w  r   z/ClientRequest.connection_key.<locals>.<genexpr>)r   hashtupleitemsr   rx   ry   r   r   r   r   )ra   r   hrK   rK   rL   connection_keys  s    zClientRequest.connection_keyc                 C   s   | j j}|d usJ |S r_   )rZ   raw_host)ra   retrK   rK   rL   rx     s    zClientRequest.hostc                 C   s   | j jS r_   )rZ   ry   r`   rK   rK   rL   ry     s    zClientRequest.portc                 C   s   t | j}t| j| j|| jS r_   )r   r]   rD   rZ   r[   r   )ra   r]   rK   rK   rL   request_info  s    
zClientRequest.request_info)rZ   rJ   c                 C   s6   |j st||j|j }}|r2t||p,d| _dS )z8Update destination host, port and connection type (ssl). N)r   r&   userpasswordr   r,   r   )ra   rZ   usernamer   rK   rK   rL   r     s
    zClientRequest.update_host)r   rJ   c                 C   sn   t |trddd |ddD }z tt|d t|d }W n" tyb   td| dY n0 || _dS )zdConvert request version to two elements tuple.

        parser HTTP version '1.1' => (1, 1)
        c                 S   s   g | ]}|  qS rK   )strip)r   partrK   rK   rL   
<listcomp>  r   z0ClientRequest.update_version.<locals>.<listcomp>.r   r   z#Can not parse http version number: N)r   rX   splitr   r6   r   rl   r   )ra   r   r   rK   rK   rL   r     s    
 zClientRequest.update_version)r]   rJ   c                 C   s   t  | _tt| jj}t|r,d| d}|d}| jj	dur`| j
 s`|dt| jj	 7 }|| jtj< |rt|tttfr| }|D ].\}}| dkr|| j|< q| j|| qdS )zUpdate request headers.[]r   N:rx   )r   r]   r   rX   rZ   r   r   is_ipv6_addressrstripry   Zis_default_portr   ZHOSTr   dictr   r   r   loweradd)ra   r]   netlockeyvaluerK   rK   rL   r     s    

zClientRequest.update_headers)r   rJ   c                 C   sr   t dd t|D | _| j }|| j | j D ]\}}||vr8| j|| q8t	j
|vrnt| jt	j
< d S )Nc                 s   s   | ]}|d fV  qd S r_   rK   )r   hdrrK   rK   rL   r     s   z4ClientRequest.update_auto_headers.<locals>.<genexpr>)r   sortedr   r]   copyr   DEFAULT_HEADERSr   r   r   Z
USER_AGENTr5   )ra   r   Zused_headersr   valrK   rK   rL   r     s    


z!ClientRequest.update_auto_headers)r   rJ   c                 C   s   |sdS t  }tj| jv r:|| jtjd | jtj= t|trN| }n|}|D ]H\}}t|t	r||j
t	 }||j
|j|j |||< qV|||< qV|jddd | jtj< dS )zUpdate request cookies header.Nr   ;)headersep)r   r   ZCOOKIEr]   loadrk   r   r   r   r   r   setr   coded_valueoutputr   )ra   r   cZiter_cookiesnamer   Zmrsl_valrK   rK   rL   r     s     





zClientRequest.update_cookies)r   rJ   c                 C   sd   |du rdS | j tjd }|r4| jr`tdn,| jr`t| jtsLd| _| j| j tj< d| _	dS )zSet request content encoding.Nr   z9compress can not be set if Content-Encoding header is setdeflateT)
r]   rk   r   ZCONTENT_ENCODINGr   r   rl   r   rX   r   )ra   r   encrK   rK   rL   r     s    z%ClientRequest.update_content_encodingc                 C   sz   | j tjd }d|v r,| jrvtdnJ| jrTtj| j v rFtdd| j tj< n"tj| j vrvtt	| j
| j tj< 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)r]   rk   r   ZTRANSFER_ENCODINGr   r   rl   CONTENT_LENGTHrX   ri   r   )ra   terK   rK   rL   r     s    z&ClientRequest.update_transfer_encoding)r   r   rJ   c                 C   s   |du r| j }|du rd|rd| jjdurdt }tt t|| jj}W d   n1 sZ0    Y  |du rpdS t|t	j
std| | jtj< dS )zSet basic auth.Nz%BasicAuth() tuple is required instead)r   rZ   rx   r0   
contextlibsuppressLookupErrorr/   r   r   r,   r   encoder]   r   ZAUTHORIZATION)ra   r   r   Z	netrc_objrK   rK   rL   r     s    ,zClientRequest.update_auth)r   rJ   c                 C   s   |d u rd S t |tr| }ztjj|d d}W n tjyN   t| }Y n0 || _| jstj	| j
vr|j}|d u r~d| _ntj	| j
vrt|| j
tj	< |j
sJ |j
 D ]*\}}|| j
v rq|| jv rq|| j
|< qd S )N)ZdispositionT)r   r*   r    ZPAYLOAD_REGISTRYrk   r  r   r   r   r  r]   sizerX   r   r   )ra   r   r  r   r   rK   rK   rL   r   $  s.    



z#ClientRequest.update_body_from_data)expectrJ   c                 C   sB   |rd| j tj< n| j tjd dkr.d}|r>| j | _d S )Nz100-continuer   T)r]   r   ZEXPECTrk   r   r   Zcreate_future	_continue)ra   r  rK   rK   rL   r   F  s    z$ClientRequest.update_expect_continue)r   r   r   rJ   c                 C   sL   |rt |tjstd|| _|| _|d urBt |ttfsBt|}|| _	d S )Nz,proxy_auth must be None or BasicAuth() tuple)
r   r   r,   rl   r   r   r   r   r   r   )ra   r   r   r   rK   rK   rL   r   O  s    
zClientRequest.update_proxyc                 C   sN   | j tk rdS | j tkr4| jtjdkr.dS dS n| jtjdkrJdS dS )NF
keep-aliveTclose)r   r7   r]   rk   r   
CONNECTIONr`   rK   rK   rL   
keep_alive_  s    

zClientRequest.keep_aliverG   )r   connrJ   c              
      s  | j dur@z| I dH  | j I dH  W n tjy>   Y dS 0 |j}|dusRJ z\t| jtjrv| j	|I dH  n6t| jt
tfr| jf| _| jD ]}|	|I dH  qW n ty } zL|}|jdupt|tj }|rt|jd| j}t||| W Y d}~n|d}~0  tjy6   | I dH  Y nR typ } z"t|td|| W Y d}~n d}~0 0 | 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 )r  Zdrainr~   CancelledErrorprotocolr   r   r    ZPayloadwriter|   	bytearrayOSErrorerrnoTimeoutErrorr#   rZ   r3   	write_eof	Exceptionr"   Zstart_timeout)ra   r   r  r  chunkZunderlying_excZreraised_excZexc_is_not_timeoutrK   rK   rL   write_bytesm  sL    



 zClientRequest.write_bytes)r  rJ   c                    s&  | j tjkrJ| jj}|d us J t|r6d| d}| d| jj }n:| jrd| 	 sdt
| j}n | jj}| jjr|d| jj 7 }|j}|d usJ t|| jt| j| j | jt| j| j | jd}| jr|| j | jd ur|  | j | jv r"tj| jvr"tj| jvr"d| jtj< | jtj}|sb|  rR| jt krbd}n| jt!krbd}|d urx|| jtj< d	j"| j || jd
}|#|| jI d H  | $||}t%j&dkrt'j(|| jdd}	n| j)|}	|	| _*| j+}
|
d usJ |
| j | j,| j*| j-| j.| j/| j0| j| j1d	| _2| j2S )Nr   r   r   ?)Zon_chunk_sentZon_headers_sentzapplication/octet-streamr  r  z {0} {1} HTTP/{v.major}.{v.minor})r   )r      T)r   Zeager_start)r   continue100r   r   r   r   r   )3r[   r   ZMETH_CONNECTrZ   r   r   r   ry   r   r   rX   raw_pathZraw_query_stringr  r9   r   	functoolspartial_on_chunk_request_sent_on_headers_request_sentr   Zenable_compressionr   Zenable_chunkingPOST_METHODSCONTENT_TYPEr   r]   rk   r  r  r   r7   r8   r   Zwrite_headersr&  r   version_infor~   TaskZcreate_taskr   r   r   r  r   r   r   r   response)ra   r  Zconnect_hostpathr  r   
connectionZstatus_linecorotaskr   rK   rK   rL   send  s    







zClientRequest.sendc                    sF   | j d urBttj | j I d H  W d    n1 s80    Y  d S r_   )r   r  r  r~   r  r`   rK   rK   rL   r    s    
zClientRequest.closec                 C   s6   | j d ur2| j s| j   | j | j d | _ d S r_   )r   r   	is_closedcancelr   r   r`   rK   rK   rL   	terminate  s
    


zClientRequest.terminate)r[   rZ   r%  rJ   c                    s$   | j D ]}||||I d H  qd S r_   )r   Zsend_request_chunk_sent)ra   r[   rZ   r%  tracerK   rK   rL   r-    s    
z$ClientRequest._on_chunk_request_sentzCIMultiDict[str])r[   rZ   r]   rJ   c                    s$   | j D ]}||||I d H  qd S r_   )r   Zsend_request_headers)ra   r[   rZ   r]   r<  rK   rK   rL   r.    s    
z&ClientRequest._on_headers_request_sent)N)F)F)SrU   rV   rW   r   ZMETH_GETZ	METH_HEADZMETH_OPTIONSZ
METH_TRACEr   Z
METH_PATCHZ	METH_POSTZMETH_PUTr/  unionZMETH_DELETEZALL_METHODSZACCEPTACCEPT_ENCODINGrM   r  r   r   rY   r   r3  r   r  	frozensetr   r8   rX   r   r   r   r?   r   r>   r,   r6   r   r~   AbstractEventLoopr   r+   r   rA   rE   r   rp   objectr   r}   r   setterr   r   r   r   rx   r   ry   rD   r   r   r   r   r   r   r   r   r   r   r   r   r  r!   r&  r8  r  r;  r|   r-  r.  rK   rK   rK   rL   rB      s   


S"2YrB   c                   @   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e
eded eeed ejddd
ddZddeddddZ e!ed dddZ"e"j#ed ddddZ"e$edddZ%e$edddZ&e$edddZ'e$e
dd d!Z(e$d"dd#d$Z)e$edd%d&Z*e$edd'd(Z+e$ee, dd)d*Z-e.fe/dd+d,d-Z0e
dd.d/Z1e!ed0 dd1d2Z2e$e3d3 dd4d5Z4e$d6dd7d8Z5d0d d9d:d;Z6ddd<d=Z7e!e8dd>d?Z9ddd@dAZ:e/ddBdCZ;e!e8ddDdEZ<dddFdGZ=dddHdIZ>dddJdKZ?dddLdMZ@dddNdOZAdddPdQZBeCddRdSZDe
ddTdUZEdeee
 e
e
dWdXdYZFdeGdZd[ee
 eHee
 e/d\d]d^ZId dd_d`ZJeeKeL  eeL eeM ddadbdcZNdS )frC   Nr   statusreasoncontent_headers_raw_headersr   TFr   zasyncio.Future[bool]rH   rF   )
r[   rZ   r   r)  r   r   r   r   r   rJ   c          
      C   s   t |tsJ || _t | _|| _|d | _d | _|| _	|| _
d| _d| _|| _|d ur^|nt | _i | _|| _|| _|	| _|	d u rdd | _n|	j| _| rttd| _d S )NTrK   c                  W   s   dS )Nutf-8rK   )rz   rK   rK   rL   <lambda>J  r   z)ClientResponse.__init__.<locals>.<lambda>r   )r   r   r[   r   r   	_real_urlr   _url_bodyr   r  _closed_history_request_infor.   r   _cacher   _loopr   _resolve_charsetr   r   r   r   r   r   )
ra   r[   rZ   r   r)  r   r   r   r   r   rK   rK   rL   rp   %  s,    zClientResponse.__init__r   c                 C   s
   d | _ d S r_   _ClientResponse__writerr   rK   rK   rL   r   Q  s    zClientResponse.__reset_writerrI   c                 C   s   | j S r_   rS  r`   rK   rK   rL   r   T  s    zClientResponse._writerr   c                 C   sL   | j d ur| j | j || _ |d u r*d S | r<|   n|| j d S r_   )rT  r   _ClientResponse__reset_writerr   r   r   rK   rK   rL   r   X  s    

c                 C   s   | j S r_   )rK  r`   rK   rK   rL   rZ   e  s    zClientResponse.urlc                 C   s   t jdtdd | jS )NzDeprecated, use .url #1654   r   )r   r   r   rK  r`   rK   rK   rL   url_obji  s    zClientResponse.url_objc                 C   s   | j S r_   )rJ  r`   rK   rK   rL   r^   n  s    zClientResponse.real_urlc                 C   s   | j jd usJ | j jS r_   )rK  rx   r`   rK   rK   rL   rx   r  s    zClientResponse.hostr\   c                 C   s   | j S r_   )rF  r`   rK   rK   rL   r]   w  s    zClientResponse.headersc                 C   s   | j S r_   )rG  r`   rK   rK   rL   raw_headers{  s    zClientResponse.raw_headersc                 C   s   | j S r_   )rO  r`   rK   rK   rL   r     s    zClientResponse.request_infoc                 C   sF   | j tj}|d u rd S t|\}}t|}t|}t|||S r_   )	rF  rk   r   ZCONTENT_DISPOSITIONr   parse_content_dispositionr   Zcontent_disposition_filenamerQ   )ra   rawZdisposition_typeZ
params_dctr   rT   rK   rK   rL   content_disposition  s    
z"ClientResponse.content_disposition)	_warningsrJ   c                 C   s|   | j r
d S | jd urx| j  |   | j rxd| i}|jd| tfi | | dd}| jrl| j|d< | j	| d S )NsourcezUnclosed response zUnclosed response)Zclient_responsemessageZsource_traceback)
rM  _connectionrelease_cleanup_writerrQ  r   r   ResourceWarningr   Zcall_exception_handler)ra   r\  kwargscontextrK   rK   rL   __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StringIOrX   rZ   rD  r  decodeprintr   rC  r]   getvalue)ra   outZascii_encodable_urlZascii_encodable_reasonrK   rK   rL   __repr__  s"    
zClientResponse.__repr__rG   c                 C   s   | j S r_   )r_  r`   rK   rK   rL   r5    s    zClientResponse.connection)rC   .c                 C   s   | j S )z2A sequence of of responses, if redirects occurred.)rN  r`   rK   rK   rL   history  s    zClientResponse.historyz/MultiDictProxy[MultiDictProxy[Union[str, URL]]]c                 C   s   d | jdg }|s"tt S t }td|D ]}td|}|d u rNq4| \}}|ddd  }t }|D ]:}	td|	tj	}|d u rqv| \}
}}}|
|
| qv|d|}
|
d	| j t| |
t|
t| q4t|S )
Nz, linkz	,(?=\s*<)z\s*<(.*)>(.*)r  r   z%^\s*(\S*)\s*=\s*(['\"]?)(.*?)(\2)\s*$relrZ   )joinr]   getallr   r   rer   r   groupsMr   rk   rZ   r   rX   )ra   Z	links_strlinksr  r   rZ   
params_strr   rr  paramr   rz   r   rK   rK   rL   ry    s*    
zClientResponse.links)r5  rJ   c                    st  d| _ |j| _|| _| j z| j}| I dH \}}W nD tjy| } z*t| j	| j
|j|j|jd|W Y d}~n
d}~0 0 |jdk s|jdks|jdkrq| jdurt| jd d| _qW d   n1 s0    Y  || j |j| _|j| _|j| _|j| _|j| _|| _| jtjdD ]J}z| j| W n2 tyj } zt d	| W Y d}~n
d}~0 0 q$| S )
zStart response processing.FNrC  r^  r]   d      e   TrK   z!Can not load response cookies: %s)!rM  r  	_protocolr_  r   readr   ZHttpProcessingErrorr$   r   rq  coder^  r]   r  r4   Zon_eof_response_eofr   rC  rD  rF  rX  rG  rE  ru  r   Z
SET_COOKIEr   r  r   r:   warning)ra   r5  r  r^  r    excr   rK   rK   rL   start  sF    
&&zClientResponse.startc                 C   sD   | j r
d S | jo| jj}|d ur*|jr*d S d| _ |   |   d S NT)rM  r_  r  upgradedra  _release_connection)ra   r  rK   rK   rL   r    s    zClientResponse._response_eofc                 C   s   | j S r_   )rM  r`   rK   rK   rL   closed  s    zClientResponse.closedc                 C   sR   | j s|   d| _| jd u s(| j r,d S |   | jd urN| j  d | _d S r  )	_released_notify_contentrM  rQ  r9  ra  r_  r  r`   rK   rK   rL   r     s    

zClientResponse.closec                 C   s*   | j s|   d| _|   |   t S r  )r  r  rM  ra  r  r1   r`   rK   rK   rL   r`  -  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  )rC  r`   rK   rK   rL   ok7  s    zClientResponse.okc                 C   s<   | j s8| jd usJ |   t| j| j| j| j| jdd S )Nr|  )r  rD  r`  r$   r   rq  rC  r]   r`   rK   rK   rL   raise_for_status@  s    zClientResponse.raise_for_statusc                    s>    j d ur: jd u r& j   d  _ n j fdd d S )Nc                    s      S r_   )r  )fr`   rK   rL   rI  S  r   z4ClientResponse._release_connection.<locals>.<lambda>)r_  r   r`  r   r`   rK   r`   rL   r  M  s
    


z"ClientResponse._release_connectionc                    s"   | j d ur| j I d H  |   d S r_   )r   r  r`   rK   rK   rL   _wait_releasedU  s    
zClientResponse._wait_releasedc                 C   s   | j d ur| j   d | _d S r_   )r   r:  r   r`   rK   rK   rL   ra  Z  s    

zClientResponse._cleanup_writerc                 C   s.   | j }|r$| d u r$t|td d| _d S )NConnection closedT)rE  	exceptionr3   r"   r  )ra   rE  rK   rK   rL   r  _  s    zClientResponse._notify_contentc                    s"   | j d ur| j I d H  |   d S r_   )r   r`  r`   rK   rK   rL   wait_for_closee  s    
zClientResponse.wait_for_closec                    s   | j du rfz<| j I dH | _ | jD ]}|| j| j| j I dH  q$W qt tyb   |    Y qt0 n| j	rtt
d| jo| jj}|du s|js|  I dH  | j S )zRead response payload.Nr  )rL  rE  r  r   Zsend_response_chunk_receivedr[   rZ   BaseExceptionr  r  r"   r_  r  r  r  )ra   r<  r  rK   rK   rL   r  j  s     


zClientResponse.readc                 C   s   | j tjd }t|}|jd}|rdt	t
 t|jW  d    S 1 sZ0    Y  |jdkr|jdks|jdkrdS | jd u rtd| | | jS )Nr   charsetZapplicationjsonZrdaprH  z7Cannot compute fallback encoding of a not yet read body)r]   rk   r   r0  r   r   Zparse_mimetyperS   r  r  r  codecslookupr  rR   subtyperL  RuntimeErrorrR  )ra   ctypemimetypeencodingrK   rK   rL   get_encoding~  s"    
*

zClientResponse.get_encodingstrict)r  errorsrJ   c                    s8   | j du r|  I dH  |du r(|  }| j j||dS )z!Read response payload and decode.N)r  )rL  r  r  rl  )ra   r  r  rK   rK   rL   text  s    
zClientResponse.textr   )r  loadscontent_type)r  r  r  rJ   c                   s   | j du r|  I dH  |rX| jtjd }t||sXt| j	| j
| jd| | jd| j  }|sjdS |du rz|  }|||S )zRead and decodes JSON response.Nr   z3Attempt to decode JSON with unexpected mimetype: %sr|  )rL  r  r]   rk   r   r0  r   r   r%   r   rq  rC  r   r  rl  )ra   r  r  r  r  strippedrK   rK   rL   r    s$    



zClientResponse.jsonc                    s   | S r_   rK   r`   rK   rK   rL   
__aenter__  s    zClientResponse.__aenter__)exc_typeexc_valexc_tbrJ   c                    s   |    |  I d H  d S r_   )r`  r  )ra   r  r  r  rK   rK   rL   	__aexit__  s    	zClientResponse.__aexit__)N)Nr  )OrU   rV   rW   r   r   r6   rY   rC  r   rD  rX   rE  r;   rF  r   rG  r@   r_  r   r   StackSummaryrM  r  rT  r   r+   rD   r   r~   r@  rp   rA  rU  r}   r   rB  r2   rZ   rW  r^   rx   r]   rX  r   rQ   r[  r   r   re  rp  r5  r   rq  ry  r  r  r   r  r  r`  r  r  r  r  ra  r  r  r|   r  r  r  r<   r=   r  r  r   r  r	   r  rK   rK   rK   rL   rC     s   
,	#3
!
rC   )rr~   r  r  r+  rj  rv  r   r   r   hashlibr   r   r   http.cookiesr   r   r   typesr   r	   typingr
   r   r   r   r   r   r   r   r   r   r   r   rc   Z	multidictr   r   r   r   Zyarlr   r   r   r   r   r   r    abcr!   Zclient_exceptionsr"   r#   r$   r%   r&   r'   Zcompression_utilsr)   Zformdatar*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   logr:   Zstreamsr;   Ztypedefsr<   r=   r>   r?   r@   r   rA   ImportErrorrA  __all__clientrF   Z	connectorrG   tracingrH   compiler   r   rX   rM   srQ   rD   rE   r   rR   r   r|   r   r   r   rB   rC   rK   rK   rK   rL   <module>   s   8 0


"
7    *