a
     ÑOcm�  ã                	   @   s4  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 eP�yÔ   dZNeQZOY n0 zd dlRZSW n eP�yþ   d dlTZSY n0 dZUe�r.ddlVmWZW ddlXmYZY ddlZm[Z[ 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ƒZaeNdu�r eNjOebeaecdƒfZdnecdƒZded ebeadf eeb ed  eee ed ebeadf d!œd"d#„Zfej^dddd$�G d%d&„ d&ƒƒZgehehebd'œd(d)„ZiG d*d+„ d+ƒZjG d,d-„ d-e;ƒZkd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   úL/var/www/html/gsl.tools/lib/python3.9/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   ÚattrÚ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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)rZ   rb   Z	digestlenÚhashfuncrO   rO   rP   Ú__init__q   s    
ÿzFingerprint.__init__rV   c                 C   s   | j S rX   )rh   rY   rO   rO   rP   rb   }   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)Úbinary_formZpeername)Zget_extra_infoÚgetpeercertrg   Údigestrh   r&   )rZ   rk   ÚsslobjÚcertÚgotÚhostÚportÚ_rO   rO   rP   Úcheck�   s    


zFingerprint.check)rJ   rK   rL   r   r   r   rd   Úbytesrj   Úpropertyrb   ÚasyncioÚ	Transportru   rO   rO   rO   rP   r?   j   s   ýr?   r;   )ÚsslÚ
verify_sslÚssl_contextrb   rW   c                 C   s®   |d ur2|s2t jdtdd� | d ur.tdƒ‚nd} |d ur`t jdtdd� | d ur\tdƒ‚n|} |d ur’t jdtdd� | d u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ÚDeprecationWarningrf   r?   Ú
isinstanceÚSSL_ALLOWED_TYPESÚ	TypeErrorÚformat)rz   r{   r|   rb   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 )	ÚConnectionKeyrr   rs   Úis_sslNrz   Ú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 uS || v 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„ZAdOe%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„ZKeedKddLœdMdN„ZLdS )Pr<   z*/*zgzip, deflateó    NF)ÚparamsrT   Úskip_auto_headersÚdataÚcookiesÚauthÚversionÚcompressÚchunkedÚ	expect100ÚloopÚresponse_classrŠ   r‹   ÚtimerÚsessionrz   Úproxy_headersÚtracesr=   r@   rB   )rR   rQ   r•   rT   r–   r—   r˜   r™   rš   r›   rœ   r�   rž   rŸ   rŠ   r‹   r    r¡   rz   r¢   r£   c                C   s–  |d u rt  ¡ }t|tƒs"J |ƒ‚t|ttd ƒfƒs<J |ƒ‚td|ƒ| _|rvt|jƒ}| 	|¡}| 
|j¡ | 	|¡}|| _| d ¡| _| ¡ | _|| _|
| _|| _d | _|d u r¸t}n|}|| _|d urÎ|ntƒ | _|| _| ¡ röt t d¡¡| _|  |	¡ |   |¡ |  !|¡ |  "|¡ |  #|¡ |  $|¡ |  %|¡ |  &|||¡ |  '|¡ |d u�sl| j| j(v�rt|  )¡  |  *|¡ |d u �rŒg }|| _+d S )Nr@   r   ),rx   Zget_event_looprƒ   r   rG   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¡   rz   r¢   r£   ÚqÚurl2Zreal_response_classrO   rO   rP   rj   ÷   sP    













zClientRequest.__init__rV   c                 C   s   | j jdv 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   rz   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>L  r”   z/ClientRequest.connection_key.<locals>.<genexpr>)r¢   ÚhashÚtupleÚitemsrˆ   rr   rs   r‰   rz   rŠ   r‹   )rZ   r¢   ÚhrO   rO   rP   Úconnection_keyH  s    ùzClientRequest.connection_keyc                 C   s   | j j}|d usJ ‚|S rX   )rQ   Úraw_host)rZ   ÚretrO   rO   rP   rr   Y  s    zClientRequest.hostc                 C   s   | j jS rX   )rQ   rs   rY   rO   rO   rP   rs   _  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_infoc  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´   h  s
    zClientRequest.update_host)rš   rW   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 rO   )Ústrip)rÅ   ÚpartrO   rO   rP   Ú
<listcomp>y  r”   z0ClientRequest.update_version.<locals>.<listcomp>Ú.r   r   z#Can not parse http version number: N)rƒ   rM   Úsplitr   ÚHttpVersionrŒ   rf   rš   )rZ   rš   rÇ   rO   rO   rP   r³   s  s    
 ÿþzClientRequest.update_version)rT   rW   c                 C   s¶   t ƒ | _tt| jjƒ}t |¡r,d|› d�}| jjdu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ú:rr   )r   rT   r   rM   rQ   rÎ   r   Úis_ipv6_addressrs   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 ]\}}||vr8| j ||¡ q8t	j
|v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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COOKIErT   Úloadre   rƒ   r   rË   r   rã   Úseträ   Úcoded_valueÚoutputrÕ   )rZ   r˜   ÚcZiter_cookiesÚnamerä   Zmrsl_valrO   rO   rP   r·   §  s     





zClientRequest.update_cookies)r—   rW   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)
rT   re   r   ZCONTENT_ENCODINGrà   r›   rf   rƒ   rM   rœ   )rZ   r—   ÚencrO   rO   rP   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)rT   re   r   ZTRANSFER_ENCODINGrà   rœ   rf   ÚCONTENT_LENGTHrM   rc   Úbody)rZ   ÚterO   rO   rP   r½   Ñ  s    ÿÿz&ClientRequest.update_transfer_encoding)r™   rW   c                 C   sB   |du r| j }|du 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Þ   |d u rd S t |tƒr|ƒ }ztjj|d d�}W n tjyN   t|ƒƒ }Y n0 || _| jsštj	| j
vrš|j}|d u r~d| _ntj	| j
vršt|ƒ| j
tj	< |j
s¤J ‚|j
 ¡ D ]*\}}|| j
v rÂq®|| jv rÎq®|| j
|< q®d S )N)ÚdispositionT)rƒ   r'   r   ZPAYLOAD_REGISTRYre   ÚLookupErrorrö   rœ   r   rõ   rT   ÚsizerM   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EXPECTre   rà   rž   Zcreate_futureÚ	_continue)rZ   rü   rO   rO   rP   r¾     s    z$ClientRequest.update_expect_continue)rŠ   r‹   r¢   rW   c                 C   s.   |rt |tjƒstdƒ‚|| _|| _|| _d S )Nz,proxy_auth must be None or BasicAuth() tuple)rƒ   r   r*   rf   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   re   r   Ú
CONNECTIONrY   rO   rO   rP   Ú
keep_alive*  s    

zClientRequest.keep_aliverA   )ÚwriterÚconnrW   c              
   Ã   s’  | j dur$| ¡ I dH  | j I dH  |j}|dus6J ‚�zLzjt| 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�y } zV|jdu rØt|tjƒrØ| |¡ n(t|jd| j ƒ}||_||_| |¡ W Y d}~npd}~0  tj�yL } z|j�s8| |¡ W Y d}~n8d}~0  t�yz } z| |¡ W Y d}~n
d}~0 0 W d| _nd| _0 dS )z-Support coroutines that yields bytes objects.Nz!Can not write request body for %s)rý   ZdrainÚprotocolrƒ   rö   r   ZPayloadÚwriterv   Ú	bytearrayÚ	write_eofÚOSErrorÚerrnorx   ÚTimeoutErrorÚset_exceptionr"   rQ   Ú__context__Ú	__cause__ZCancelledErrorÚclosedÚ	ExceptionÚ_writer)rZ   r  r  r  ÚchunkÚexcÚnew_excrO   rO   rP   Úwrite_bytes8  s8    


ÿ"zClientRequest.write_bytes)r  rW   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s–J ‚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¡I d H  | j $|  %||¡¡| _&| j'}|d u�sÈJ ‚|| j | j(| j&| j)| j*| j+| j,| j| j-d
�	| _.| j.S )NrÛ   rÜ   rÝ   ú?)Zon_chunk_sentZon_headers_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Þ   rs   rŠ   r‰   rM   Úraw_pathZraw_query_stringr  r3   rž   Ú	functoolsÚpartialÚ_on_chunk_request_sentÚ_on_headers_request_sentr›   Zenable_compressionrœ   Zenable_chunkingÚPOST_METHODSÚCONTENT_TYPEr–   rT   re   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   Úsend`  s|    
ÿÿú

ÿ
þ
ý


ÿ÷zClientRequest.sendc                 Ã   s.   | j d ur*z| j I d H  W d | _ nd | _ 0 d S rX   )r  rY   rO   rO   rP   rÿ   ±  s    
zClientRequest.closec                 C   s(   | j d u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_sentzCIMultiDict[str])rR   rQ   rT   rW   c                 Ã   s$   | j D ]}| |||¡I d H  qd S rX   )r¿   Zsend_request_headers)rZ   rR   rQ   rT   r%  rO   rO   rP   r  Â  s    
z&ClientRequest._on_headers_request_sent)F)MrJ   rK   rL   r   ZMETH_GETZ	METH_HEADZMETH_OPTIONSZ
METH_TRACEr¼   Z
METH_PATCHZ	METH_POSTZMETH_PUTr  ÚunionZMETH_DELETEZALL_METHODSZACCEPTÚACCEPT_ENCODINGrè   rö   r™   r  r  rý   Ú	frozensetr   r2   rM   r   r   r   r9   r   r   r8   r*   rÚ   r�   rx   ÚAbstractEventLoopr   r)   r   r;   r?   r   rj   r‰   rw   rz   rˆ   rÍ   rr   rŒ   rs   r>   rÐ   r´   r³   rµ   r¶   r·   r¸   r½   r¹   r»   r¾   rº   r  r    r  r!  rÿ   r$  rv   r  r  rO   rO   rO   rP   r<   Ü   s¼   üþé

éJ"ûþ(Qþr<   c                   @   s–  e Zd ZU dZdZeed< dZdZe	ed< dZ
ded< dZe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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/œd0d1„Z-ddœd2d3„Z.e(e/dœd4d5„ƒZ0ddœd6d7„Z1e%dœd8d9„Z2e(e/dœd:d;„ƒZ3ddœd<d=„Z4ddœd>d?„Z5ddœd@dA„Z6ddœdBdC„Z7e8dœdDdE„Z9edœdFdG„Z:dVee eedIœdJdK„Z;de<dLdMœee e=ee e%dNœdOdP„Z>d dœdQdR„Z?ee@eA  eeA eeB ddSœdTdU„ZCdS )Wr=   NÚstatusÚcontentrS   Ú_headersÚ_raw_headersTFz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J ‚|| _tƒ | _|| _| d ¡| _d | _|| _	|| _
d| _d| _|| _|d ur^|ntƒ | _i | _|| _|| _|	| _| ¡ r˜t t d¡¡| _d S )NTrO   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   rj   Û  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é   r~   )r€   r�   r‚   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 usJ ‚| j jS rX   )r/  rr   rY   rO   rO   rP   rr     s    zClientResponse.hostc                 C   s   | j S rX   )r,  rY   rO   rO   rP   rT     s    zClientResponse.headersc                 C   s   | j S rX   )r-  rY   rO   rO   rP   Úraw_headers  s    zClientResponse.raw_headersc                 C   s   | j S rX   )r3  rY   rO   rO   rP   rÐ     s    zClientResponse.request_infoc                 C   sF   | j  tj¡}|d u rd S t |¡\}}t|ƒ}t |¡}t|||ƒS rX   )	r,  re   r   ZCONTENT_DISPOSITIONr   Ú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 ur‚| j ¡  |  ¡  | j ¡ r‚tr>d| i}ni }|jd| ›�tfi |¤Ž | ddœ}| j	rv| j	|d< | j 
|¡ d S )NÚsourcezUnclosed response zUnclosed response)Zclient_responseÚmessageZsource_traceback)r1  Ú_connectionÚreleaseÚ_cleanup_writerr5  r­   r(   r�   Ú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†   r*  rT   Úgetvalue)rZ   ÚoutZascii_encodable_urlZascii_encodable_reasonrO   rO   rP   Ú__repr__9  s"    
ÿþÿüzClientResponse.__repr__rA   c                 C   s   | j S rX   )r?  rY   rO   rO   rP   r   K  s    zClientResponse.connection)r=   .c                 C   s   | j S )z2A sequence of of responses, if redirects occurred.)r2  rY   rO   rO   rP   ÚhistoryO  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 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á   re   rQ   r   )rZ   Z	links_strÚlinksré   r’   rQ   Z
params_strr•   rR  Úparamrã   rt   rä   rO   rO   rP   rY  T  s*    
zClientResponse.links)r   rW   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ržq¼| jdurt| jdƒ d| _qW d  ƒ n1 sÐ0    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©r*  r>  rT   éd   éÇ   ée   TrO   z!Can not load response cookies: %s)!r1  r  Ú	_protocolr?  r«   Úreadr   ZHttpProcessingErrorr#   rÐ   rQ  Úcoder>  rT   rý   r/   Zon_eofÚ_response_eofrš   r*  rK  r,  r8  r-  r+  rU  r   Z
SET_COOKIEr˜   rí   r   r4   Úwarning)rZ   r   r  r>  r   r  rå   rO   rO   rP   Ústartx  sF    ûú
&&zClientResponse.startc                 C   sP   | j r
d S | jd ur>| jjd ur.| jjjr.d S | j ¡  d | _d| _ |  ¡  d S ©NT)r1  r?  r  Zupgradedr@  rA  rY   rO   rO   rP   rb  «  s    

ÿþ
zClientResponse._response_eofc                 C   s   | j S rX   )r1  rY   rO   rO   rP   r  ¾  s    zClientResponse.closedc                 C   s\   | j s|  ¡  | jrd S d| _| jd u s2| j ¡ r6d S | jd urP| j ¡  d | _|  ¡  d S re  )Ú	_releasedÚ_notify_contentr1  r5  r"  r?  rÿ   rA  rY   rO   rO   rP   rÿ   Â  s    

zClientResponse.closec                 C   sH   | j s|  ¡  | jrtƒ S d| _| jd ur:| j ¡  d | _|  ¡  tƒ S re  )rf  rg  r1  r-   r?  r@  rA  rY   rO   rO   rP   r@  Ñ  s    

zClientResponse.releasec                 C   s
   d| j k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.
        i�  )r*  rY   rO   rO   rP   Úokß  s    zClientResponse.okc                 C   s<   | j s8| jd usJ ‚|  ¡  t| j| j| j| j| jd�‚d S )Nr[  )rh  rK  r@  r#   rÐ   rQ  r*  rT   rY   rO   rO   rP   Úraise_for_statusè  s    ûzClientResponse.raise_for_statusc                 C   s$   | j d ur| j  ¡  d | _ d | _d S rX   )r  r#  r¤   rY   rO   rO   rP   rA  õ  s    

zClientResponse._cleanup_writerc                 C   s.   | j }|r$| ¡ d u r$| tdƒ¡ d| _d S )NúConnection closedT)r+  Ú	exceptionr  r!   rf  )rZ   r+  rO   rO   rP   rg  û  s    zClientResponse._notify_contentc                 Ã   s6   | j d ur*z| j I d H  W d | _ nd | _ 0 |  ¡  d S rX   )r  r@  rY   rO   rO   rP   Úwait_for_close  s
    
zClientResponse.wait_for_closec                 Ã   sz   | 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 S )zRead response payload.Nrj  )r0  r+  r`  r¿   Zsend_response_chunk_receivedrR   rQ   ÚBaseExceptionrÿ   rf  r!   )rZ   r%  rO   rO   rP   r`  	  s    

ÿ
zClientResponse.readc                 C   s¬   | j  tjd¡ ¡ }t |¡}|j d¡}|rTzt 	|¡ W n t
yR   d }Y n0 |s |jdkr||jdksv|jdkr|d}n$| jd u 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   re   r   r  rà   r   Zparse_mimetyperH   ÚcodecsÚlookuprú   rG   Úsubtyper0  ÚRuntimeErrorÚchardetÚdetect)rZ   ÚctypeÚmimetyperp  rO   rO   rP   Úget_encoding  s.    


ÿÿ
ÿzClientResponse.get_encodingÚstrict)rp  ÚerrorsrW   c                 Ã   s8   | j du r|  ¡ I dH  |du r(|  ¡ }| j j||d�S )z!Read response payload and decode.N)r{  )r0  r`  ry  rL  )rZ   rp  r{  rO   rO   rP   Útext6  s    
ÿzClientResponse.textr�   )rp  ÚloadsÚcontent_type)rp  r}  r~  rW   c                Ã   s„   | j du r|  ¡ I dH  |rT| j tjd¡ ¡ }t||ƒsTt| j	| j
d| | jd�‚| j  ¡ }|sfdS |du rv|  ¡ }|| |¡ƒS )zRead and decodes JSON response.NrÑ   z3Attempt to decode JSON with unexpected mimetype: %s)r>  rT   )r0  r`  rT   re   r   r  rà   r“   r$   rÐ   rQ  rÕ   ry  rL  )rZ   rp  r}  r~  rw  ÚstrippedrO   rO   rP   ro  B  s"    

ú	
zClientResponse.jsonc                 Ã   s   | S rX   rO   rY   rO   rO   rP   Ú
__aenter__b  s    zClientResponse.__aenter__)Úexc_typeÚexc_valÚexc_tbrW   c                 Ã   s   |   ¡  d S rX   )r@  )rZ   r�  r‚  rƒ  rO   rO   rP   Ú	__aexit__e  s    	zClientResponse.__aexit__)Nrz  )DrJ   rK   rL   rš   r*  rŒ   rN   rK  r+  r5   r,  r-  r:   r?  r²   r1  rf  rM   r   r   r)   r>   r   rx   r)  rj   r.   rQ   r7  rU   rr   rT   r8  rÐ   rF   r;  r€   r   rE  rP  rw   r   r   rQ  rY  rd  rb  r�   r  rÿ   r@  rh  ri  rA  rg  rl  rv   r`  ry  r|  r6   r7   ro  r€  r   rm  r	   r„  rO   rO   rO   rP   r=   É  s–   
ô#	#3ûú 
ûr=   )lrx   rq  r  rI  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\   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:   rz   r;   ÚImportErrorÚobjectZcchardetru  Zcharset_normalizerÚ__all__Úclientr@   Z	connectorrA   ÚtracingrB   Úcompiler‘   ÚsrF   r>   r?   r�   rG   r„   rv   r‡   rˆ   rM   r“   r<   r=   rO   rO   rO   rP   Ú<module>   s~   4 (


"
û5þ   p