U
    ;g                     @   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[k
r
   dZYe\ZZY nX 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Zkeld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k	reYjZereqesdfZtneresdfZte d(ereqf eer ed( eeu e d(ereqf d)d*d+Zve"jnd d d d d,G d-d. d.Zwelelerd/d0d1ZxG d2d3 d3Zye5d4ZzG d5d6 d6eAZ{dS )7    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)    rP   rP   U/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/aiohttp/client_reqrep.py_gen_default_accept_encodingd   s    rR   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__rP   rP   rP   rQ   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	edddZ
d	S )
rF   urlmethodCIMultiDictProxy[str]headersreal_urlrN   c                 C   s   | j S N)r_   selfrP   rP   rQ   real_url_defaultv   s    zRequestInfo.real_url_defaultN)rZ   r[   r\   r   r^   r]   attrZibrc   defaultrg   rP   rP   rP   rQ   rF   o   s   
rF   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 )rG   )          N)fingerprintrO   c                 C   sJ   t |}| j|}|s"tdn|tks2|tk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)rf   rm   Z	digestlenhashfuncrP   rP   rQ   __init__   s    
zFingerprint.__init__rN   c                 C   s   | j S rd   )rs   re   rP   rP   rQ   rm      s    zFingerprint.fingerprint)	transportrO   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getpeercertrr   digestrs   r(   )rf   rv   sslobjcertgothostport_rP   rP   rQ   check   s    


zFingerprint.check)rZ   r[   r\   r   r   r   ro   bytesru   propertyrm   asyncio	Transportr   rP   rP   rP   rQ   rG   {   s   rG   rC   )ssl
verify_sslssl_contextrm   rO   c                 C   s   | d krd} |d k	r>|s>t jdtdd | dk	r:tdnd} |d k	rlt jdtdd | dk	rhtdn|} |d k	rt jdtdd | dk	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DeprecationWarningrq   rG   
isinstanceSSL_ALLOWED_TYPES	TypeErrorformat)r   r   r   rm   rP   rP   rQ   _merge_ssl_params   sT    
r   )rS   rU   rT   Z
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_authZproxy_headers_hashN)rZ   r[   r\   r]   r^   r   intboolr   rC   rG   r   r-   rP   rP   rP   rQ   r      s   
r   )response_content_typeexpected_content_typerO   c                 C   s   |dkrt | d k	S || kS )Napplication/json)json_rematch)r   r   rP   rP   rQ   _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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	e&e'e(e)e* e)e+e&  ee)e, e)e- e$j.e/e&e0df e)e0 e0e)e1j2 e)e3d
  e)e' e)e- e)e4 e)d e/e5e0e6f e)e* e)e7d  e0e)e& dddZ8dZe9ddddZ:e;e)d dddZ<e<j=dddddZ<e0dddZ>e;e/de0e6f dddZ?e;e@dddZAe;e&dd d!ZBe;e)eC dd"d#ZDe;eEdd$d%ZFe'dd&d'd(ZGe/e$j.e&f dd)d*d+ZHe)e* dd,d-d.ZIe)e+e&  dd/d0d1ZJe)e, dd2d3d4ZKedd5d6d7ZLddd8d9ZMd[e)e- e0dd:d;d<ZNedd=d>d?ZOd\e0dd@dAdBZPe)e' e)e- e)e* ddCdDdEZQe0ddFdGZReSdHddIdJdKZTdHd
dLdMdNZUdddOdPZVdddQdRZWe&e'eXddSdTdUZYe&e'dVddWdXdYZZdS )]rD    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_hostnamerE   rH   rJ   )r`   r_   r   rb   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                C   s  |d krt  }t| }r8td|d| dt|tksLt||d k	rht|tksht|t	rx|d k	sxt|| _
|r||}|| _|jr|d n|| _| | _|| _|
| _|| _d | _|d krt}n|}|| _|d k	r|nt | _|d k	r|nd| _|| _| r,tt d| _!| "|	 | #| | $| | %| | &| | '| | (|| | )||| | *| |d k	s| j| j+kr| ,  | -| |d krg n|| _.d S )Nz+Method cannot contain non-token characters z (found at least )Tr   )/r   Zget_event_loop_CONTAINS_CONTROL_CHAR_REsearchrq   grouprW   r   AssertionErrorr
   _sessionZ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)rf   r`   r_   r   rb   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zreal_response_classrP   rP   rQ   ru     sV    










zClientRequest.__init__r   rO   c                 C   s
   d | _ d S rd   _ClientRequest__writerrf   r   rP   rP   rQ   __reset_writer]  s    zClientRequest.__reset_writerasyncio.Task[None]rN   c                 C   s   | j S rd   r   re   rP   rP   rQ   _writer`  s    zClientRequest._writerwriterrO   c                 C   s.   | j d k	r| j | j || _ || j d S rd   )r   remove_done_callback_ClientRequest__reset_writeradd_done_callbackrf   r   rP   rP   rQ   r   d  s    
c                 C   s   | j jdkS )N)httpswss)r_   schemere   rP   rP   rQ   r   k  s    zClientRequest.is_sslrC   c                 C   s   | j S rd   )r   re   rP   rP   rQ   r   n  s    zClientRequest.sslc                 C   sB   | j }|rtt| }nd }t| j| j|  | j| j	| j
|S rd   )r   hashtupleitemsr   r}   r~   r   r   r   r   )rf   r   hrP   rP   rQ   connection_keyr  s    zClientRequest.connection_keyc                 C   s   | j j}|d k	st|S rd   )r_   raw_hostr   )rf   retrP   rP   rQ   r}     s    zClientRequest.hostc                 C   s   | j jS rd   )r_   r~   re   rP   rP   rQ   r~     s    zClientRequest.portc                 C   s   t | j}t| j| j|| jS rd   )r   rb   rF   r_   r`   r   )rf   rb   rP   rP   rQ   request_info  s    
zClientRequest.request_info)r_   rO   c                 C   s8   |j st||js|jr4t|jp&d|jp.d| _dS )z8Update destination host, port and connection type (ssl).r   N)	r   r'   Zraw_userZraw_passwordr   r-   userpasswordr   )rf   r_   rP   rP   rQ   r     s    zClientRequest.update_host)r   rO   c                 C   sp   t |trfdd |ddD }z tt|d t|d }W n$ tk
rd   td| dY nX || _dS )zdConvert request version to two elements tuple.

        parser HTTP version '1.1' => (1, 1)
        c                 S   s   g | ]}|  qS rP   )strip).0partrP   rP   rQ   
<listcomp>  s     z0ClientRequest.update_version.<locals>.<listcomp>rK   r   r   z#Can not parse http version number: N)r   r]   splitr   r7   r   rq   r   )rf   r   vrP   rP   rQ   r     s    
 zClientRequest.update_version)rb   rO   c                 C   s   t  | _tr"| jj}|dk	sFtn$tt| jj}t	
|rFd| d}|d dkr\|d}| jj}|dk	r| j s| d| }|| jtj< |sdS t|tttfr| }|D ],\}}|| jkr|| j|< q| j|| qdS )zUpdate request headers.N[]rK   :)r   rb    _YARL_SUPPORTS_HOST_SUBCOMPONENTr_   host_subcomponentr   r   r]   r   r   is_ipv6_addressrstripexplicit_portZis_default_portr   ZHOSTr   dictr   r   r   _HOST_STRINGSadd)rf   rb   r}   r   keyvaluerP   rP   rQ   r     s*    


zClientRequest.update_headers)r   rO   c                 C   s   |d k	r8t dd t|D | _| j }|| j nt  | _| j}| j D ]\}}||krP| j|| qPt	j
|krt| jt	j
< d S )Nc                 s   s   | ]}|d fV  qd S rd   rP   )r   hdrrP   rP   rQ   	<genexpr>  s    z4ClientRequest.update_auto_headers.<locals>.<genexpr>)r   sortedr   rb   copyextendDEFAULT_HEADERSr   r   r   Z
USER_AGENTr6   )rf   r   Zused_headersr  valrP   rP   rQ   r     s    


z!ClientRequest.update_auto_headers)r   rO   c                 C   s   |sdS t  }tj| jk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COOKIErb   loadrp   r   r   r   r   r   setr   coded_valueoutputr   )rf   r   cZiter_cookiesnamer   Zmrsl_valrP   rP   rQ   r     s     





zClientRequest.update_cookies)r   rO   c                 C   s\   |sd| _ dS | jtjr,| j rXtdn,| j rXt| j tsDd| _ | j | jtj< d| _dS )zSet request content encoding.Nz9compress can not be set if Content-Encoding header is setdeflateT)	r   rb   rp   r   ZCONTENT_ENCODINGrq   r   r]   r   )rf   r   rP   rP   rQ   r     s    z%ClientRequest.update_content_encodingc                 C   sz   | j tjd }d|kr,| jrvtdnJ| jrTtj| j krFtdd| j tj< n"tj| j k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)rb   rp   r   ZTRANSFER_ENCODINGlowerr   rq   CONTENT_LENGTHr]   rn   r   )rf   terP   rP   rQ   r     s    z&ClientRequest.update_transfer_encoding)r   r   rO   c              	   C   s   |dkr| j }|dkrP|rP| jjdk	rPt }tt t|| jj}W 5 Q R X |dkr\dS t|t	j
spt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   ZAUTHORIZATION)rf   r   r   Z	netrc_objrP   rP   rQ   r   0  s    zClientRequest.update_auth)r   rO   c                 C   s   |d krd S t |tr| }ztjj|d d}W n  tjk
rP   t| }Y nX || _| jstj	| j
kr|j}|d krd| _ntj	| j
krt|| j
tj	< |j
st|j
 D ](\}}|| j
ks|| jkrq|| j
|< qd S )N)ZdispositionT)r   r+   r!   ZPAYLOAD_REGISTRYrp   r  r   r   r   r  rb   sizer]   r   r   r   )rf   r   r  r   r   rP   rP   rQ   r   @  s*    

z#ClientRequest.update_body_from_data)expectrO   c                 C   sJ   |rd| j tj< n$tj| j kr6| j tj  dkr6d}|rF| j | _d S )Nz100-continueT)rb   r   ZEXPECTr  r   Zcreate_future	_continue)rf   r  rP   rP   rQ   r   `  s    
z$ClientRequest.update_expect_continue)r   r   r   rO   c                 C   sd   || _ |d krd | _d | _d S |r6t|tjs6td|| _|d k	rZt|ttfsZt	|}|| _d S )Nz,proxy_auth must be None or BasicAuth() tuple)
r   r   r   r   r   r-   rq   r   r   r   )rf   r   r   r   rP   rP   rQ   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   rp   r   
CONNECTIONre   rP   rP   rQ   
keep_alive  s    

zClientRequest.keep_aliverI   )r   connrO   c              
      sh  | j dk	r$| I dH  | j I dH  |j}|dk	s6tz\t| jtjrZ| j|I dH  n6t| jt	t
frt| jf| _| jD ]}||I dH  qzW n tk
r } zD|}|jdk	pt|tj }|rt|jd| j}t||| W 5 d}~X Y np tjk
r   |   Y nP tk
rL } zt|td|| W 5 d}~X Y nX | 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drainprotocolr   r   r   r!   ZPayloadwriter   	bytearrayOSErrorerrnor   TimeoutErrorr$   r_   r4   CancelledErrorr  	Exceptionr#   	write_eofZstart_timeout)rf   r   r   r!  chunkZunderlying_excZreraised_excZexc_is_not_timeoutrP   rP   rQ   write_bytes  sJ    


 
zClientRequest.write_bytes)r   rO   c                    s^  | j tjkrdtr&| jj}|d k	sPtn*| jj}|d k	s:tt	|rPd| d}| d| jj
 }n"| jr~|  s~t| j}n| jj}|j}|d k	stt|| j| jrt| j| j | jnd | jrt| j| j | jnd d}| jr|| j | jd k	r|  | j | jkr:tj| jkr:tj| jkr:d| jtj< | jtj }|sz| ! rj| j"t#krzd}n| j"t$krzd}|d k	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-|	}
|
. rd }
n|
| _/| j0}|d k	s,t|| j | j1|
| j2| j3| j4| j| j| j5d	| _6| j6S )Nr   r   r   )Zon_chunk_sentZon_headers_sentzapplication/octet-streamr  r   z HTTP/rK   )r      T)r   Zeager_start)r   continue100r   r   r   r   r   )7r`   r   ZMETH_CONNECTr   r_   r   r   r   r   r   r~   r   r   r]   Zraw_path_qsr!  r:   r   r   	functoolspartial_on_chunk_request_sent_on_headers_request_sentr   Zenable_compressionr   Zenable_chunkingPOST_METHODSCONTENT_TYPEr   rb   rp   r  r  r   r8   r9   majorminorZwrite_headersr+  r   version_infor   TaskZcreate_taskdoner   r   r   r  r   r   r   response)rf   r   Zconnect_hostpathr!  r   
connectionr   Zstatus_linecorotaskr   rP   rP   rQ   send  s    





 
zClientRequest.sendc                    sV   | j d k	rRz| j I d H  W n6 tjk
rP   tjdkrLt  }rL| rL Y nX d S N)r      )r   r   r'  r   r7  current_task
cancellingrf   r>  rP   rP   rQ   r  "  s    

zClientRequest.closec                 C   s6   | j d k	r2| j s| j   | j | j d | _ d S rd   )r   r   	is_closedcancelr   r   re   rP   rP   rQ   	terminate.  s
    


zClientRequest.terminate)r`   r_   r*  rO   c                    s$   | j D ]}||||I d H  qd S rd   )r   Zsend_request_chunk_sent)rf   r`   r_   r*  tracerP   rP   rQ   r1  5  s    
z$ClientRequest._on_chunk_request_sentzCIMultiDict[str])r`   r_   rb   rO   c                    s$   | j D ]}||||I d H  qd S rd   )r   Zsend_request_headers)rf   r`   r_   rb   rH  rP   rP   rQ   r2  9  s    
z&ClientRequest._on_headers_request_sent)N)F)F)[rZ   r[   r\   r   ZMETH_GETZ	METH_HEADZMETH_OPTIONSZ
METH_TRACEr   Z
METH_PATCHZ	METH_POSTZMETH_PUTr3  unionZMETH_DELETEZALL_METHODS	frozensetmapjoin	itertoolsproductzipr   r  r   ZACCEPTACCEPT_ENCODINGrR   r  r   r   r^   r   r:  r   r  r   r9   r]   r   rA   r   r@   r   r?   r-   r7   r   r   r   AbstractEventLoopr   r,   rC   rG   r   ru   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"   r+  r?  r  rG  r   r1  r2  rP   rP   rP   rQ   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e
eded eeed ejddd
ddZdee 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e0dd,d-d.Z1e
dd/d0Z2e"ed1 dd2d3Z3e%e4d4 dd5d6Z5e%d7dd8d9Z6d1d d:d;d<Z7ddd=d>Z8e"e9dd?d@Z:dddAdBZ;e0ddCdDZ<e"e9ddEdFZ=dddGdHZ>dddIdJZ?dddKdLZ@dddMdNZAdddOdPZBdddQdRZCeDddSdTZEe
ddUdVZFdfee
 e
e
dXdYdZZGdeHd[d\ee
 eIee
 e0d]d^d_ZJd dd`daZKeeLeM  eeM eeN ddbdcddZOdS )grE   Nr   statusreasoncontent_headers_raw_headersr   TFzOptional[asyncio.Task[None]]zasyncio.Future[bool]rJ   rH   )
r`   r_   r   r.  r   r   r   r   r   rO   c          
      C   s   t |tst|| _t | _|| _|jr2|d n|| _	d | _
|d k	rL|| _|| _d| _d| _|| _|d k	rp|nt | _i | _|| _|| _|	| _|	d krdd | _n|	j| _| rttd| _d S )NTrP   c                  W   s   dS )Nutf-8rP   )r   rP   rP   rQ   <lambda>  r   z)ClientResponse.__init__.<locals>.<lambda>r   )r   r   r   r`   r   r   	_real_urlr   r   _url_bodyr   r  _closed_history_request_infor/   r   _cacher   _loopr   _resolve_charsetr   r   r   r   r   r   )
rf   r`   r_   r   r.  r   r   r   r   r   rP   rP   rQ   ru   Z  s.    zClientResponse.__init__r   c                 C   s
   d | _ d S rd   _ClientResponse__writerr   rP   rP   rQ   r     s    zClientResponse.__reset_writerr   rN   c                 C   s   | j S )zThe writer task for streaming data.

        _writer is only provided for backwards compatibility
        for subclasses that may need to access it.
        re  re   rP   rP   rQ   r     s    zClientResponse._writerr   c                 C   sJ   | j dk	r| j | j || _ |dkr*dS | r:d| _ n|| j dS )z'Set the writer task for streaming data.N)rf  r   _ClientResponse__reset_writerr9  r   r   rP   rP   rQ   r     s    
c                 C   s   | j S rd   )r]  re   rP   rP   rQ   r_     s    zClientResponse.urlc                 C   s   t jdtdd | jS )NzDeprecated, use .url #1654rL   r   )r   r   r   r]  re   rP   rP   rQ   url_obj  s    zClientResponse.url_objc                 C   s   | j S rd   )r\  re   rP   rP   rQ   rc     s    zClientResponse.real_urlc                 C   s   | j jd k	st| j jS rd   )r]  r}   r   re   rP   rP   rQ   r}     s    zClientResponse.hostra   c                 C   s   | j S rd   )rX  re   rP   rP   rQ   rb     s    zClientResponse.headersc                 C   s   | j S rd   )rY  re   rP   rP   rQ   raw_headers  s    zClientResponse.raw_headersc                 C   s   | j S rd   )ra  re   rP   rP   rQ   r     s    zClientResponse.request_infoc                 C   sF   | j tj}|d krd S t|\}}t|}t|}t|||S rd   )	rX  rp   r   ZCONTENT_DISPOSITIONr    parse_content_dispositionr   Zcontent_disposition_filenamerV   )rf   rawZdisposition_typeZ
params_dctr   rY   rP   rP   rQ   content_disposition  s    
z"ClientResponse.content_disposition)	_warningsrO   c                 C   sx   | j r
d S | jd k	rt| j  |   | j rtd| i}|jd| tf| | dd}| jrh| j|d< | j	| d S )NsourcezUnclosed response zUnclosed response)Zclient_responsemessageZsource_traceback)
r_  _connectionrelease_cleanup_writerrc  r   r   ResourceWarningr   Zcall_exception_handler)rf   rm  kwargscontextrP   rP   rQ   __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_   rV  r  decodeprintr   rU  rb   getvalue)rf   outZascii_encodable_urlZascii_encodable_reasonrP   rP   rQ   __repr__  s(    
   zClientResponse.__repr__rI   c                 C   s   | j S rd   )rp  re   rP   rP   rQ   r<    s    zClientResponse.connection)rE   .c                 C   s   | j S )z2A sequence of of responses, if redirects occurred.)r`  re   rP   rP   rQ   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 krNq4| \}}|ddd  }t }|D ]:}	td|	tj	}|d krqv| \}
}}}|
|
| qv|d|}
|
d	| j t| |
t|
t| q4t|S )
Nz, linkz	,(?=\s*<)z\s*<(.*)>(.*)r  r   z%^\s*(\S*)\s*=\s*(['\"]?)(.*?)(\2)\s*$relr_   )rL  rb   getallr   r   rer   r   groupsMr   rp   r_   r   r]   )rf   Z	links_strlinksr  r   r_   
params_strr   r  paramr   r   r   rP   rP   rQ   r    s*    
zClientResponse.links)r<  rO   c                    s\  d| _ |j| _|| _| j z| j}| I dH \}}W nB tjk
rz } z"t| j	| j
|j|j|jd|W 5 d}~X Y nX |jdk s|jdks|jdkrq| jdk	rt| jd d| _qW 5 Q R X || j |j| _|j| _|j| _|j| _|j| _|| _| jtjdD ]H}z| j| W n0 tk
rR } zt d	| W 5 d}~X Y nX q| S )
zStart response processing.FNrU  ro  rb   d      e   TrP   z!Can not load response cookies: %s)!r_  r!  	_protocolrp  r   readr   ZHttpProcessingErrorr%   r   r  codero  rb   r  r5   Zon_eof_response_eofr   rU  rV  rX  ri  rY  rW  r  r   Z
SET_COOKIEr   r  r   r;   warning)rf   r<  r!  ro  r!   excr  rP   rP   rQ   start  sF    
"zClientResponse.startc                 C   sD   | j r
d S | jo| jj}|d k	r*|jr*d S d| _ |   |   d S NT)r_  rp  r!  upgradedrr  _release_connection)rf   r!  rP   rP   rQ   r  K  s    zClientResponse._response_eofc                 C   s   | j S rd   )r_  re   rP   rP   rQ   closedX  s    zClientResponse.closedc                 C   sR   | j s|   d| _| jd ks(| j r,d S |   | jd k	rN| j  d | _d S r  )	_released_notify_contentr_  rc  rE  rr  rp  r  re   rP   rP   rQ   r  \  s    

zClientResponse.closec                 C   s*   | j s|   d| _|   |   t S r  )r  r  r_  rr  r  r2   re   rP   rP   rQ   rq  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  )rU  re   rP   rP   rQ   oks  s    zClientResponse.okc                 C   sB   | j s>| jd k	st| js"|   t| j| j| j| j| j	dd S )Nr  )
r  rV  r   _in_contextrq  r%   r   r  rU  rb   re   rP   rP   rQ   raise_for_status|  s    zClientResponse.raise_for_statusc                    s>    j d k	r: jd kr& j   d  _ n j fdd d S )Nc                    s      S rd   )r  )fre   rP   rQ   r[    r   z4ClientResponse._release_connection.<locals>.<lambda>)rp  rf  rq  r   re   rP   re   rQ   r    s
    


z"ClientResponse._release_connectionc                    s^   | j d k	rRz| j I d H  W n6 tjk
rP   tjdkrLt  }rL| rL Y nX |   d S r@  )rf  r   r'  r   r7  rB  rC  r  rD  rP   rP   rQ   _wait_released  s    

zClientResponse._wait_releasedc                 C   s   | j d k	r| j   d | _d S rd   )rf  rF  r   re   rP   rP   rQ   rr    s    

zClientResponse._cleanup_writerc                 C   s*   | j }|r | d kr t|t d| _d S r  )rW  	exceptionr4   _CONNECTION_CLOSED_EXCEPTIONr  )rf   rW  rP   rP   rQ   r    s    
zClientResponse._notify_contentc                    s^   | j d k	rRz| j I d H  W n6 tjk
rP   tjdkrLt  }rL| rL Y nX |   d S r@  )rf  r   r'  r   r7  rB  rC  rq  rD  rP   rP   rQ   wait_for_close  s    

zClientResponse.wait_for_closec                    s   | j dkrhz<| j I dH | _ | jD ]}|| j| j| j I dH  q$W qv tk
rd   |    Y qvX n| j	rvt
d| jo| jj}|dks|js|  I dH  | j S )zRead response payload.NrT  )r^  rW  r  r   Zsend_response_chunk_receivedr`   r_   BaseExceptionr  r  r#   rp  r!  r  r  )rf   rH  r!  rP   rP   rQ   r    s$    

  
zClientResponse.readc              
   C   s   | j tjd }t|}|jd}|rZt	t
t t|jW  5 Q R  S Q R X |jdkr||jdksx|jdkr|dS | jd krtd| | | jS )Nr   charsetZapplicationjsonZrdaprZ  z7Cannot compute fallback encoding of a not yet read body)rb   rp   r   r4  r  r   Zparse_mimetyperX   r  r  r  rq   codecslookupr  rW   subtyper^  RuntimeErrorrd  )rf   ctypemimetypeencodingrP   rP   rQ   get_encoding  s"    


zClientResponse.get_encodingstrict)r  errorsrO   c                    s8   | j dkr|  I dH  |dkr(|  }| j j||dS )z!Read response payload and decode.N)r  )r^  r  r  r}  )rf   r  r  rP   rP   rQ   text  s
    
zClientResponse.textr   )r  loadscontent_type)r  r  r  rO   c                   s   | j dkr|  I dH  |rX| jtjd }t||sXt| j	| j
| jd| | jd| j  }|sjdS |dkrz|  }|||S )zRead and decodes JSON response.Nr   z3Attempt to decode JSON with unexpected mimetype: %sr  )r^  r  rb   rp   r   r4  r  r   r&   r   r  rU  r   r  r}  )rf   r  r  r  r  strippedrP   rP   rQ   r    s$    



zClientResponse.jsonc                    s
   d| _ | S r  )r  re   rP   rP   rQ   
__aenter__  s    zClientResponse.__aenter__)exc_typeexc_valexc_tbrO   c                    s    d| _ |   |  I d H  d S )NF)r  rq  r  )rf   r  r  r  rP   rP   rQ   	__aexit__  s    zClientResponse.__aexit__)N)Nr  )PrZ   r[   r\   r   r   r7   r^   rU  r   rV  r]   rW  r<   rX  r   rY  rB   rp  r   r   StackSummaryr_  r  r  rf  r   r,   rF   r   r   rQ  ru   rR  rg  r   r   rS  r3   r_   rh  rc   r}   rb   ri  r   rV   rl  r   r   rv  r  r<  r   r  r  r  r  r   r  r  rq  r  r  r  r  rr  r  r  r   r  r  r  r=   r>   r  r  r   r  r	   r  rP   rP   rP   rQ   rE   C  s   
-	#3
!
rE   )|r   r  r  r/  r{  rM  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   rh   Z	multidictr   r   r   r   Zyarlr   r   Zyarl_versionr   r   r   r   r    r!   abcr"   Zclient_exceptionsr#   r$   r%   r&   r'   r(   Zcompression_utilsr*   Zformdatar+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   logr;   streamsr<   Ztypedefsr=   r>   r?   r@   rA   rB   r   rC   ImportErrorrR  __all__clientrH   Z	connectorrI   tracingrJ   compiler   r   r   rK  r   r   r   r]   rR   srV   rF   rG   r   rW   r   r   r   r   r   rD   r  rE   rP   rP   rP   rQ   <module>   s   8 0 	


 "
7     U