
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    '7`W                  	   @   s8  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 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-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl)m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? ddl*m@Z@mAZAmBZBmCZC ddlDmEZE ddlFmGZG ddlHmIZImJZJmKZKmLZLmMZM zd dlNZNd dlNmOZO W n ePk
r   dZNeQZOY nX zd dlRZSW n ePk
r   d dlSZSY nX dZTer2ddlUmVZV ddlWmXZX ddlYmZZZ e[dZ\ej]ddddG dd dZ^ej]ddddG dd dZ_G dd dZ`eNdk	reNjOeae`ebdfZcnebdZced eae`df eea ed  eed ed eae`df d!d"d#Zeej]dddd$G d%d& d&Zfegegead'd(d)ZhG d*d+ d+ZiG d,d- d-e;ZjdS ).    N)md5sha1sha256)CookieErrorMorselSimpleCookie)MappingProxyTypeTracebackType)TYPE_CHECKINGAny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)FormData)PY_36BaseTimerContext	BasicAuthHeadersMixin	TimerNoopnoopreify
set_result)SERVER_SOFTWAREHttpVersion10HttpVersion11StreamWriter)client_logger)StreamReader)DEFAULT_JSON_DECODERJSONDecoderLooseCookiesLooseHeaders
RawHeaders)
SSLContext)ClientRequestClientResponseRequestInfoFingerprint)ClientSession)
Connection)Tracez!^application/(?:[\w.+-]+?\+)?jsonT)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   H/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/client_reqrep.pyrF   W   s   
rF   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 )
r>   urlmethodCIMultiDictProxy[str]headersreal_urlreturnc                 C   s   | j S N)rQ   selfrO   rO   rP   real_url_defaulte   s    zRequestInfo.real_url_defaultN)rJ   rK   rL   r   rN   rM   attrZibrU   defaultr[   rO   rO   rO   rP   r>   ^   s   
r>   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 )r?   )          N)fingerprintrW   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)rZ   ra   Z	digestlenZhashfuncrO   rO   rP   __init__q   s    
zFingerprint.__init__rV   c                 C   s   | j S rX   )rg   rY   rO   rO   rP   ra   }   s    zFingerprint.fingerprint)	transportrW   c                 C   s`   | dsd S | d}|jdd}| | }|| jkr\| d^}}}t| j|||d S )NZ
sslcontextZ
ssl_objectT)Zbinary_formZpeername)Zget_extra_infoZgetpeercertrf   Zdigestrg   r&   )rZ   ri   ZsslobjZcertZgothostport_rO   rO   rP   check   s    


zFingerprint.check)rJ   rK   rL   r   r   r   rc   bytesrh   propertyra   asyncioZ	Transportrm   rO   rO   rO   rP   r?   j   s   r?   r;   )ssl
verify_sslssl_contextra   rW   c                 C   s   |d k	r2|s2t jdtdd | d k	r.tdnd} |d k	r`t jdtdd | d k	r\tdn|} |d k	rt jdtdd | d k	rtdnt|} t| tstd| | S )	Nz/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DeprecationWarningre   r?   
isinstanceSSL_ALLOWED_TYPES	TypeErrorformat)rq   rr   rs   ra   rO   rO   rP   _merge_ssl_params   sP    
r~   )rC   rE   rD   c                   @   sb   e Zd ZU eed< ee ed< eed< ee	dee
f ed< ee ed< ee ed< ee ed< dS )	ConnectionKeyrj   rk   is_sslNrq   proxy
proxy_authZproxy_headers_hash)rJ   rK   rL   rM   rN   r   intboolr   r;   r?   r   r*   rO   rO   rO   rP   r      s   
r   )response_content_typeexpected_content_typerW   c                 C   s   |dkrt | d k	S || kS )Napplication/json)json_rematch)r   r   rO   rO   rP   _is_expected_content_type   s    r   c                   @   s  e Zd Z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diZdZ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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,df ee ee-d	  d
ddZ.e%dddZ/e0e*dde%e,f dddZ1e0e2dddZ3e0edddZ4e0ee5 dddZ6e0e7dddZ8eddddZ9e*ej$ef dddd Z:ee dd!d"d#Z;e e dd$d%d&Z<ee" dd'd(d)Z=e!dd*d+d,Z>ddd-d.Z?ee# dd/d0d1Z@e!dd2d3d4ZAdKe%dd5d6d7ZBee ee# ee dd8d9d:ZCe%dd;d<ZDeEd=dd>d?d@ZFd=ddAdBdCZGdddDdEZHdddFdGZIeeeJddHdIdJZKdS )Lr<   z*/*zgzip, deflate    NF)paramsrT   skip_auto_headersdatacookiesauthversioncompresschunked	expect100loopresponse_classr   r   timersessionrq   proxy_headerstracesr=   r@   rB   )rR   rQ   r   rT   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rq   r   r   c                C   s  |d krt  }t|ts"t|t|ttd fs<t|td|| _|rvt|j	}|
|}||j	 |
|}|| _|d | _| | _|| _|
| _|| _d | _|d krt}n|}|| _|d k	r|nt | _|| _| rttd| _|  |	 | !| | "| | #| | $| | %| | &| | '||| | (| |sh| j| j)krp| *  | +| |d krg }|| _,d S )Nr@   r   )-rp   Zget_event_looprz   r   AssertionErrorrG   r   _sessionr   ZqueryZ
with_queryextendoriginal_urlwith_fragmentrQ   upperrR   r   r   r   Zlengthr=   r   r,   _timer_ssl	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)rZ   rR   rQ   r   rT   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rq   r   r   qZurl2Zreal_response_classrO   rO   rP   rh      sP    













zClientRequest.__init__rV   c                 C   s   | j jdkS )N)ZhttpsZwss)rQ   schemerY   rO   rO   rP   r   A  s    zClientRequest.is_sslr;   c                 C   s   | j S rX   )r   rY   rO   rO   rP   rq   D  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 rX   rO   ).0kvrO   rO   rP   	<genexpr>M  s     z/ClientRequest.connection_key.<locals>.<genexpr>)r   hashtupleitemsr   rj   rk   r   rq   r   r   )rZ   r   hrO   rO   rP   connection_keyH  s    zClientRequest.connection_keyc                 C   s   | j j}|d k	st|S rX   )rQ   raw_hostr   )rZ   ZretrO   rO   rP   rj   [  s    zClientRequest.hostc                 C   s   | j jS rX   )rQ   rk   rY   rO   rO   rP   rk   a  s    zClientRequest.portc                 C   s   t | j}t| j| j|| jS rX   )r   rT   r>   rQ   rR   r   )rZ   rT   rO   rO   rP   request_infoe  s    
zClientRequest.request_info)rQ   rW   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   )rZ   rQ   Zusernamer   rO   rO   rP   r   j  s
    zClientRequest.update_host)r   rW   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 rO   )strip)r   partrO   rO   rP   
<listcomp>{  s     z0ClientRequest.update_version.<locals>.<listcomp>.r   r   z#Can not parse http version number: N)rz   rM   splitr   HttpVersionr   re   r   )rZ   r   r   rO   rO   rP   r   u  s    
 zClientRequest.update_version)rT   rW   c                 C   s   t  | _tt| jj}t|r,d| d}| jjdk	rV| j	 sV|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.[]N:rj   )r   rT   r   rM   rQ   r   r   is_ipv6_addressrk   Zis_default_portr   ZHOSTrz   dictr   r   r   loweradd)rZ   rT   ZnetlockeyvaluerO   rO   rP   r     s    
zClientRequest.update_headers)r   rW   c                 C   sr   t dd t|D | _| j }|| j | j D ]\}}||kr8| j|| q8t	j
|krnt| jt	j
< d S )Nc                 s   s   | ]}|d fV  qd S rX   rO   )r   hdrrO   rO   rP   r     s    z4ClientRequest.update_auto_headers.<locals>.<genexpr>)r   sortedr   rT   copyr   DEFAULT_HEADERSr   r   r   Z
USER_AGENTr0   )rZ   r   Zused_headersr   valrO   rO   rP   r     s    


z!ClientRequest.update_auto_headers)r   rW   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COOKIErT   loadrd   rz   r   r   r   r   setr   Zcoded_valueoutputr   )rZ   r   cZiter_cookiesnamer   Zmrsl_valrO   rO   rP   r     s     





zClientRequest.update_cookies)r   rW   c                 C   s`   |sdS | j tjd }|r0| jr\tdn,| jr\t| jtsHd| _| j| j tj< d| _	dS )zSet request content encoding.Nr   z9compress can not be set if Content-Encoding header is setZdeflateT)
rT   rd   r   ZCONTENT_ENCODINGr   r   re   rz   rM   r   )rZ   r   encrO   rO   rP   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)rT   rd   r   ZTRANSFER_ENCODINGr   r   re   CONTENT_LENGTHrM   rb   body)rZ   ZterO   rO   rP   r     s    z&ClientRequest.update_transfer_encoding)r   rW   c                 C   sB   |dkr| j }|dkrdS t|tjs.td| | jtj< dS )zSet basic auth.Nz%BasicAuth() tuple is required instead)	r   rz   r   r*   r|   encoderT   r   ZAUTHORIZATION)rZ   r   rO   rO   rP   r     s    zClientRequest.update_auth)r   rW   c                 C   s   |sd S t |tr| }ztjj|d d}W n  tjk
rL   t| }Y nX || _| jstj	| j
kr|j}|d kr|d| _ntj	| j
krt|| j
tj	< |j
st|j
 D ]*\}}|| j
krq|| jkrq|| j
|< qd S )N)ZdispositionT)rz   r'   r   ZPAYLOAD_REGISTRYrd   LookupErrorr   r   r   r   rT   sizerM   r   r   r   )rZ   r   r   r   r   rO   rO   rP   r     s.    



z#ClientRequest.update_body_from_data)expectrW   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)rT   r   ZEXPECTrd   r   r   Zcreate_future	_continue)rZ   r   rO   rO   rP   r     s    z$ClientRequest.update_expect_continue)r   r   r   rW   c                 C   sD   |r|j dkstd|r.t|tjs.td|| _|| _|| _d S )Nr   zOnly http proxies are supportedz,proxy_auth must be None or BasicAuth() tuple)r   re   rz   r   r*   r   r   r   )rZ   r   r   r   rO   rO   rP   r      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   r1   rT   rd   r   
CONNECTIONrY   rO   rO   rP   
keep_alive.  s    

zClientRequest.keep_aliverA   )writerconnrW   c              
      sb  | j dk	r$| I dH  | j I dH  |j}|dk	s6tzzjt| jtjr^| j	|I dH  n6t| jt
tfrx| jf| _| jD ]}|	|I dH  q~| I dH  W n tk
r } z,t|jd| j }||_||_|| W 5 d}~X Y nd tjk
r$ } z|js|| W 5 d}~X Y n. tk
rP } z|| W 5 d}~X Y nX W 5 d| _X dS )z-Support coroutines that yields bytes objects.Nz!Can not write request body for %s)r   Zdrainprotocolr   _writerrz   r   r   ZPayloadwritern   	bytearrayZ	write_eofOSErrorr"   errnorQ   __context__	__cause__set_exceptionrp   ZCancelledErrorclosed	Exception)rZ   r   r   r   chunkexcnew_excrO   rO   rP   write_bytes<  s6    


  zClientRequest.write_bytes)r   rW   c           	         s  | j tjkrJ| jj}|d k	s tt|r6d| d}| d| jj }n:| j	rd| 
 sdt| j}n | jj}| jjr|d| jj 7 }|j}|d k	stt|| jt| j| j | j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}|sP|  r@| jt krPd}n| jt!krPd}|d k	rf|| jtj< d	"| j || j}|#|| jI d H  | j$| %||| _&| j'}|d k	st|| j | j(| j&| j)| j*| j+| j,| j| j-d
	| _.| j.S )Nr   r   r   ?)Zon_chunk_sentzapplication/octet-streamr   r   z{0} {1} HTTP/{2[0]}.{2[1]})r   continue100r   r   r   r   r   )/rR   r   ZMETH_CONNECTrQ   r   r   r   r   rk   r   r   rM   Zraw_pathZraw_query_stringr   r3   r   	functoolspartial_on_chunk_request_sentr   Zenable_compressionr   Zenable_chunkingPOST_METHODSCONTENT_TYPEr   rT   rd   r   r   r   r1   r2   r}   Zwrite_headersZcreate_taskr   r   r   r   r   r   r   r   r   response)	rZ   r   Zconnect_hostpathr   r   
connectionZstatus_liner   rO   rO   rP   senda  s~    
  





  zClientRequest.sendc                    s(   | j d k	r$z| j I d H  W 5 d | _ X d S rX   )r   rY   rO   rO   rP   r     s    
zClientRequest.closec                 C   s(   | j d k	r$| j s| j   d | _ d S rX   )r   r   	is_closedcancelrY   rO   rO   rP   	terminate  s    


zClientRequest.terminate)rR   rQ   r   rW   c                    s$   | j D ]}||||I d H  qd S rX   )r   Zsend_request_chunk_sent)rZ   rR   rQ   r   tracerO   rO   rP   r    s    
z$ClientRequest._on_chunk_request_sent)F)LrJ   rK   rL   r   ZMETH_GETZ	METH_HEADZMETH_OPTIONSZ
METH_TRACEr   Z
METH_PATCHZ	METH_POSTZMETH_PUTr  unionZMETH_DELETEZALL_METHODSZACCEPTZACCEPT_ENCODINGr   r   r   r  r   r   	frozensetr   r2   rM   r   r   r   r9   r   r   r8   r*   r   r   rp   AbstractEventLoopr   r)   r   r;   r?   r   rh   r   ro   rq   r   r   rj   r   rk   r>   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r	  r   r  rn   r  rO   rO   rO   rP   r<      s     

J" %Nr<   c                   @   st  e Zd ZdZdZdZdZdZdZ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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Z#edd d!Z$e%ed" dd#d$Z&ee'd% dd&d'Z(ed(dd)d*Z)d"d d+d,d-Z*ddd.d/Z+e%e,dd0d1Z-ddd2d3Z.e"dd4d5Z/e%e,dd6d7Z0ddd8d9Z1ddd:d;Z2ddd<d=Z3ddd>d?Z4e5dd@dAZ6eddBdCZ7dRee eedEdFdGZ8de9dHdIee e:ee e"dJdKdLZ;d ddMdNZ<ee=e>  ee> ee? ddOdPdQZ@dS )Sr=   NTFzasyncio.Task[None]zasyncio.Future[bool]rB   r@   )
rR   rQ   r   r   r   r   r   r   r   rW   c          
      C   s   t |tst|| _t | _|| _|d | _d | _	|| _
|| _d| _d| _|| _|d k	r^|nt | _i | _|| _|| _|	| _| rttd| _d S )NTrO   r   )rz   r   r   rR   r   r   	_real_urlr   _url_bodyr   r   _closed_history_request_infor,   r   _cacher   _loopr   r   r   r   r   r   r   )
rZ   rR   rQ   r   r   r   r   r   r   r   rO   rO   rP   rh     s$    zClientResponse.__init__rV   c                 C   s   | j S rX   )r  rY   rO   rO   rP   rQ     s    zClientResponse.urlc                 C   s   t jdtdd | jS )NzDeprecated, use .url #1654   ru   )rw   rx   ry   r  rY   rO   rO   rP   url_obj  s    zClientResponse.url_objc                 C   s   | j S rX   )r  rY   rO   rO   rP   rU     s    zClientResponse.real_urlc                 C   s   | j jd k	st| j jS rX   )r  rj   r   rY   rO   rO   rP   rj     s    zClientResponse.hostrS   c                 C   s   | j S rX   )_headersrY   rO   rO   rP   rT     s    zClientResponse.headersc                 C   s   | j S rX   )_raw_headersrY   rO   rO   rP   raw_headers  s    zClientResponse.raw_headersc                 C   s   | j S rX   )r  rY   rO   rO   rP   r     s    zClientResponse.request_infoc                 C   sF   | j tj}|d krd S t|\}}t|}t|}t|||S rX   )	r  rd   r   ZCONTENT_DISPOSITIONr   Zparse_content_dispositionr   Zcontent_disposition_filenamerF   )rZ   rawZdisposition_typeZ
params_dctr   rI   rO   rO   rP   content_disposition  s    
z"ClientResponse.content_disposition)	_warningsrW   c                 C   s   | j r
d S | jd k	r~| j  |   | j r~tr>d| i}ni }|jd| tf| | dd}| j	rr| j	|d< | j
| d S )NsourcezUnclosed response zUnclosed response)Zclient_responsemessageZsource_traceback)r  _connectionrelease_cleanup_writerr  r   r(   rx   ResourceWarningr   Zcall_exception_handler)rZ   r   kwargscontextrO   rO   rP   __del__  s    





zClientResponse.__del__c                 C   sb   t  }t| j}| jr.| jddd}n| j}td|| j	||d t| j
|d | S )Nasciibackslashreplacez<ClientResponse({}) [{} {}]>)file)ioStringIOrM   rQ   reasonr   decodeprintr}   statusrT   getvalue)rZ   outZascii_encodable_urlZascii_encodable_reasonrO   rO   rP   __repr__1  s(    
   zClientResponse.__repr__rA   c                 C   s   | j S rX   )r#  rY   rO   rO   rP   r  C  s    zClientResponse.connection)r=   .c                 C   s   | j S )z2A sequence of of responses, if redirects occurred.)r  rY   rO   rO   rP   historyG  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| q4t|S )
Nz, linkz	,(?=\s*<)z\s*<(.*)>(.*)r   r   z%^\s*(\S*)\s*=\s*(['\"]?)(.*?)(\2)\s*$ZrelrQ   )joinrT   getallr   r   rer   r   groupsMr   rd   rQ   r   )rZ   Z	links_strlinksr   r   rQ   Z
params_strr   r7  Zparamr   rl   r   rO   rO   rP   r=  L  s*    
zClientResponse.links)r  rW   c                    sX  d| _ |j| _|| _| j z| j I dH \}}W nB tjk
rv } 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
rN } zt d	| W 5 d}~X Y nX q
| S )
zStart response processing.FNr2  r"  rT   d      e   TrO   z!Can not load response cookies: %s)!r  r   Z	_protocolr#  r   readr   ZHttpProcessingErrorr#   r   r6  coder"  rT   r   r/   Zon_eof_response_eofr   r2  r/  r  r  r  contentr9  r   Z
SET_COOKIEr   r   r   r4   Zwarning)rZ   r  r"  r   r   r   rO   rO   rP   startp  sD    
"zClientResponse.startc                 C   sP   | j r
d S | jd k	r>| jjd k	r.| jjjr.d S | j  d | _d| _ |   d S NT)r  r#  r   Zupgradedr$  r%  rY   rO   rO   rP   rD    s    


zClientResponse._response_eofc                 C   s   | j S rX   )r  rY   rO   rO   rP   r     s    zClientResponse.closedc                 C   s\   | j s|   | jrd S d| _| jd ks2| j r6d S | jd k	rP| j  d | _|   d S rG  )	_released_notify_contentr  r  r
  r#  r   r%  rY   rO   rO   rP   r     s    

zClientResponse.closec                 C   sH   | j s|   | jrt S d| _| jd k	r:| j  d | _|   t S rG  )rH  rI  r  r-   r#  r$  r%  rY   rO   rO   rP   r$    s    

zClientResponse.releasec                 C   s(   z|    W n tk
r"   Y dS X d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.
        FT)raise_for_statusr#   rY   rO   rO   rP   ok  s
    zClientResponse.okc                 C   s@   d| j kr<| jd k	st|   t| j| j| j | j| jdd S )Ni  r>  )r2  r/  r   r$  r#   r   r6  rT   rY   rO   rO   rP   rJ    s    
zClientResponse.raise_for_statusc                 C   s$   | j d k	r| j   d | _ d | _d S rX   )r   r  r   rY   rO   rO   rP   r%    s    

zClientResponse._cleanup_writerc                 C   s.   | j }|r$| d kr$|td d| _d S )NConnection closedT)rE  Z	exceptionr   r!   rH  )rZ   rE  rO   rO   rP   rI    s    zClientResponse._notify_contentc                    s0   | j d k	r$z| j I d H  W 5 d | _ X |   d S rX   )r   r$  rY   rO   rO   rP   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 S )zRead response payload.NrL  )r  rE  rB  r   Zsend_response_chunk_receivedrR   rQ   BaseExceptionr   rH  r!   )rZ   r  rO   rO   rP   rB    s    

  
zClientResponse.readc                 C   s   | j tjd }t|}|jd}|rVzt	| W n t
k
rT   d }Y nX |s|jdkr~|jdksx|jdkr~d}n$| jd krtdnt| jd }|sd}|S )	Nr   charsetZapplicationjsonZrdapzutf-8z0Cannot guess the encoding of a not yet read bodyencoding)rT   rd   r   r  r   r   Zparse_mimetyperH   codecslookupr   rG   Zsubtyper  RuntimeErrorchardetZdetect)rZ   ctypeZmimetyperQ  rO   rO   rP   get_encoding  s.    



zClientResponse.get_encodingstrict)rQ  errorsrW   c                    s8   | j dkr|  I dH  |dkr(|  }| j j||dS )z!Read response payload and decode.N)rY  )r  rB  rW  r0  )rZ   rQ  rY  rO   rO   rP   text1  s
    
zClientResponse.textr   )rQ  loadscontent_type)rQ  r[  r\  rW   c                   s   | j dkr|  I dH  |rT| jtjd }t||sTt| j	| j
d| | jd| j  }|sfdS |dkrv|  }|||S )zRead and decodes JSON response.Nr   z3Attempt to decode JSON with unexpected mimetype: %s)r"  rT   )r  rB  rT   rd   r   r  r   r   r$   r   r6  r   rW  r0  )rZ   rQ  r[  r\  rV  strippedrO   rO   rP   rP  ;  s"    

	
zClientResponse.jsonc                    s   | S rX   rO   rY   rO   rO   rP   
__aenter__[  s    zClientResponse.__aenter__)exc_typeexc_valexc_tbrW   c                    s   |    d S rX   )r$  )rZ   r_  r`  ra  rO   rO   rP   	__aexit__^  s    	zClientResponse.__aexit__)NrX  )ArJ   rK   rL   r   r2  r/  rE  r  r  r#  r   r  rH  rM   r   r   r)   r>   r   rp   r  rh   r.   rQ   r  rU   rj   rT   r:   r  r   rF   r  rw   r   r)  r5  ro   r  r   r6  r=  rF  rD  r   r   r   r$  rK  rJ  r%  rI  rM  rn   rB  rW  rZ  r6   r7   rP  r^  r   rN  r	   rb  rO   rO   rO   rP   r=     s   #	#2 
r=   )krp   rR  r  r-  r:  r   r   rw   Zhashlibr   r   r   Zhttp.cookiesr   r   r   typesr   r	   typingr
   r   r   r   r   r   r   r   r   r   r   r\   Z	multidictr   r   r   r   Zyarlr   r   r   r   r   r   r   abcr    Zclient_exceptionsr!   r"   r#   r$   r%   r&   Zformdatar'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   logr4   Zstreamsr5   Ztypedefsr6   r7   r8   r9   r:   rq   r;   ImportErrorobjectZcchardetrU  __all__Zclientr@   Z	connectorrA   tracingrB   compiler   srF   r>   r?   r   rG   r{   rn   r~   r   rM   r   r<   r=   rO   rO   rO   rP   <module>   s   4 (


"
5    h