
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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	�r¤eNjOeae`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   Ú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	Transportrn   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	r’t jdtdd� | d k	rŠtdƒ‚nt|ƒ} t| tƒsªt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)rr   rs   rt   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 )	ÚConnectionKeyrk   rl   Úis_sslNrr   Ú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Úsessionrr   Úproxy_headersÚtracesr=   r@   rB   )rR   rQ   r�   rT   rŽ   r�   r�   r‘   r’   r“   r”   r•   r–   r—   r‚   rƒ   r˜   r™   rr   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r¸t}n|}|| _|d k	rÎ|ntƒ | _|| _| ¡ röt t d¡¡| _|   |	¡ |  !|¡ |  "|¡ |  #|¡ |  $|¡ |  %|¡ |  &|¡ |  '|||¡ |  (|¡ |�sh| j| j)k�rp|  *¡  |  +|¡ |d k�rˆg }|| _,d S )Nr@   r   )-rq   Zget_event_loopr{   r   ÚAssertionErrorrG   r   Ú_sessionr   ÚqueryZ
with_queryÚextendÚoriginal_urlÚwith_fragmentrQ   ÚupperrR   r”   r“   r–   Ú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™   rr   rš   r›   ÚqZurl2Zreal_response_classrO   rO   rP   rh   ÷   sP    













zClientRequest.__init__rV   c                 C   s   | j jdkS )N)ÚhttpsÚwss)rQ   ÚschemerY   rO   rO   rP   r�   A  s    zClientRequest.is_sslr;   c                 C   s   | j S rX   )r¥   rY   rO   rO   rP   rr   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€   rk   rl   r�   rr   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   ÚretrO   rO   rP   rk   [  s    zClientRequest.hostc                 C   s   | j jS rX   )rQ   rl   rY   rO   rO   rP   rl   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   Ú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)r{   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< |r²t|tttfƒr~| ¡ }|D ].\}}| ¡ dkr¢|| j|< q‚| j ||¡ q‚dS )zUpdate request headers.ú[ú]Nú:rk   )r   rT   r   rM   rQ   rÆ   r   Úis_ipv6_addressrl   Zis_default_portr   ZHOSTr{   Údictr   r   rÃ   ÚlowerÚadd)rZ   rT   Ú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   r{   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 setÚdeflateT)
rT   rd   r   ZCONTENT_ENCODINGrØ   r“   re   r{   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   Ú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‘   r{   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s˜tj	| j
kr˜|j}|d kr|d| _ntj	| j
kr˜t|ƒ| j
tj	< |j
s¢t‚|j
 ¡ D ]*\}}|| j
krÀq¬|| jkrÌq¬|| j
|< q¬d S )N)ZdispositionT)r{   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   r{   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œ   Ú_writerr{   rí   r   ZPayloadÚwritero   Ú	bytearrayZ	write_eofÚOSErrorr"   ÚerrnorQ   Ú__context__Ú	__cause__Úset_exceptionrq   Ú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	s–t‚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	�s¶t‚|| 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Ö   rl   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…   rq   ÚAbstractEventLoopr   r)   r   r;   r?   r   rh   r�   rp   rr   r€   rÅ   rk   r„   rl   r>   rÈ   r­   r¬   r®   r¯   r°   r±   r¶   r²   r´   r·   r³   r÷   r    r	  r  rõ   r  ro   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 | _|| _|| _|	| _| ¡ r˜t t d¡¡| _d S )NTrO   r   )r{   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é   rv   )rx   ry   rz   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  rk   rœ   rY   rO   rO   rP   rk     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(   ry   Ú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r”qv| ¡ \}
}}}| 
|
|¡ qv| d|¡}
| 
d	| j  t|ƒ¡¡ | 
|
t|ƒ¡ q4t|ƒS )
Nz, Úlinkz	,(?=\s*<)z\s*<(.*)>(.*)râ   r   z%^\s*(\S*)\s*=\s*(['\"]?)(.*?)(\2)\s*$ÚrelrQ   )ÚjoinrT   Úgetallr   r   ÚrerÑ   rŠ   ÚgroupsÚMrÙ   rd   rQ   r   )rZ   Z	links_strÚlinksrá   rŠ   rQ   Z
params_strr�   rB  ÚparamrÛ   rm   rÜ   rO   rO   rP   rI  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r˜q¶| 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©r=  r-  rT   éd   éÇ   ée   TrO   z!Can not load response cookies: %s)!r  rú   Z	_protocolr.  r¤   Úreadr   ZHttpProcessingErrorr#   rÈ   rA  Úcoder-  rT   ró   r/   Zon_eofÚ_response_eofr’   r=  r:  r&  r(  r'  ÚcontentrE  r   Z
SET_COOKIEr�   rå   r   r4   Ú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/  r0  rY   rO   rO   rP   rQ  ¢  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 rU  )Ú	_releasedÚ_notify_contentr  r#  r  r.  rõ   r0  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 rU  )rV  rW  r  r-   r.  r/  r0  rY   rO   rO   rP   r/  È  s    

zClientResponse.releasec                 C   s(   z|   ¡  W n tk
r"   Y dS X dS )zºReturns ``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�  rK  )r=  r:  rœ   r/  r#   rÈ   rA  rT   rY   rO   rO   rP   rX  ã  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   r0  ð  s    

zClientResponse._cleanup_writerc                 C   s.   | j }|r$| ¡ d kr$| tdƒ¡ d| _d S )NúConnection closedT)rR  Ú	exceptionr  r!   rV  )rZ   rR  rO   rO   rP   rW  ö  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.NrZ  )r  rR  rO  r¸   Zsend_response_chunk_receivedrR   rQ   ÚBaseExceptionrõ   rV  r!   )rZ   r  rO   rO   rP   rO    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r’tdƒ‚nt | j¡d }|sªd}|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   Úsubtyper  ÚRuntimeErrorÚchardetÚdetect)rZ   ÚctypeZmimetyper`  rO   rO   rP   Úget_encoding  s.    


ÿÿ
ÿzClientResponse.get_encodingÚstrict)r`  ÚerrorsrW   c                 Ã   s8   | j dkr|  ¡ I dH  |dkr(|  ¡ }| j j||d�S )z!Read response payload and decode.N)rj  )r  rO  rh  r;  )rZ   r`  rj  rO   rO   rP   Útext1  s
    
zClientResponse.textrˆ   )r`  ÚloadsÚcontent_type)r`  rl  rm  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  rO  rT   rd   r   r  rØ   r‹   r$   rÈ   rA  rÍ   rh  r;  )rZ   r`  rl  rm  rg  ÚstrippedrO   rO   rP   r_  ;  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   rp  rq  rr  rO   rO   rP   Ú	__aexit__^  s    	zClientResponse.__aexit__)Nri  )ArJ   rK   rL   r’   r=  r:  rR  r&  r'  r.  r«   r  rV  rM   r   r   r)   r>   r   rq   r  rh   r.   rQ   r%  rU   rk   rT   r:   r(  rÈ   rF   r*  rx   r   r4  r@  rp   r  r   rA  rI  rT  rQ  r…   r  rõ   r/  rY  rX  r0  rW  r\  ro   rO  rh  rk  r6   r7   r_  ro  r   r]  r	   rs  rO   rO   rO   rP   r=   Á  s–   ô#	#2ûú 
ûr=   )krq   ra  r  r8  rF  r©   r§   rx   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:   rr   r;   ÚImportErrorÚobjectÚcchardetre  Ú__all__Zclientr@   Z	connectorrA   ÚtracingrB   Úcompiler‰   ÚsrF   r>   r?   r…   rG   r|   ro   r   r€   rM   r‹   r<   r=   rO   rO   rO   rP   Ú<module>   s€   4 (


"
û5 þ   h