a
    `g                     @   sn  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZmZ d dlmZmZmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZmZmZmZm Z  d dl!Z!d dl"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( dd	l)m*Z*m+Z+m,Z,m-Z-m.Z. dd
l/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9 ddl:m;Z; ddl+m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF ddl,mGZGmHZHmIZImJZJmKZK ddlLmMZM ddlNmOZO ddlPmQZQmRZRmSZSmTZTmUZUmVZV erd dlWZWd dlWmXZX n6zd dlWZWd dlWmXZX W n eYy   dZWeZZXY n0 dZ[erLddl\m]Z] ddl^m_Z_ ddl`maZa ebdZcebdZdeedddZfe!jgddddG dd  d ZhG d!d" d"eZiG d#d$ d$eiZjG d%d& d&ZkeWdureWjXelekemdfZnnelemdfZne d'elekf eel ed' eeo e d'elekf d(d)d*Zpeqd+ZrG d,d- d-eZseeeeeld.d/d0ZtG d1d2 d2Zue2d3ZvG d4d5 d5e?ZwdS )6    N)md5sha1sha256)CookieErrorMorselSimpleCookie)MappingProxyTypeTracebackType)TYPE_CHECKINGAnyCallableDictIterableListMapping
NamedTupleOptionalTupleTypeUnion)CIMultiDictCIMultiDictProxy	MultiDictMultiDictProxy)URL   )hdrshelpershttp	multipartpayload)AbstractStreamWriter)ClientConnectionErrorClientOSErrorClientResponseErrorContentTypeError
InvalidURLServerFingerprintMismatch
HAS_BROTLI)FormData)	_SENTINEL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returnc                   C   s   t rdS dS )Nzgzip, deflate, brzgzip, deflater(    rM   rM   c/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/aiohttp/client_reqrep.py_gen_default_accept_encodingd   s    rO   T)Z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__rM   rM   rM   rN   rR   h   s   
rR   c                   @   s.   e Zd ZU eed< eed< ded< eed< dS )_RequestInfourlmethodCIMultiDictProxy[str]headersreal_urlN)rV   rW   rX   r   rZ   rY   rM   rM   rM   rN   r[   o   s   
r[   c                   @   s&   e Zd Zefeeded dddZdS )rF   r^   )r\   r]   r_   r`   rL   c                 C   s    t | ||||tu r|n|fS )zuCreate a new RequestInfo instance.

        For backwards compatibility, the real_url parameter is optional.
        )tuple__new__r+   )clsr\   r]   r_   r`   rM   rM   rN   rb   x   s    zRequestInfo.__new__N)rV   rW   rX   r+   r   rY   rb   rM   rM   rM   rN   rF   v   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)fingerprintrL   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)selfrg   Z	digestlenhashfuncrM   rM   rN   __init__   s    
zFingerprint.__init__rK   c                 C   s   | j S N)rm   rn   rM   rM   rN   rg      s    zFingerprint.fingerprint)	transportrL   c                 C   s`   | dsd S | d}|jdd}| | }|| jkr\| d^}}}t| j|||d S )N
sslcontext
ssl_objectT)binary_formpeername)get_extra_infogetpeercertrl   digestrm   r'   )rn   rs   sslobjcertgothostport_rM   rM   rN   check   s    


zFingerprint.check)rV   rW   rX   r   r   r   ri   bytesrp   propertyrg   asyncio	Transportr   rM   rM   rM   rN   rG      s   
rG   rC   )ssl
verify_sslssl_contextrg   rL   c                 C   s   | d u rd} |d ur>|s>t jdtdd | dur:tdnd} |d urlt jdtdd | durhtdn|} |d urt jdtdd | durtdnt|} t| tstd	| | S )
NTz/verify_ssl is deprecated, use ssl=False instead   
stacklevelzNverify_ssl, ssl_context, fingerprint and ssl parameters are mutually exclusiveFz2ssl_context is deprecated, use ssl=context insteadzCfingerprint is deprecated, use ssl=Fingerprint(fingerprint) insteadzFssl should be SSLContext, bool, Fingerprint or None, got {!r} instead.)	warningswarnDeprecationWarningrk   rG   
isinstanceSSL_ALLOWED_TYPES	TypeErrorformat)r   r   r   rg   rM   rM   rN   _merge_ssl_params   sT    
r   )httpswssc                   @   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)rV   rW   rX   rY   rZ   r   intboolr   rC   rG   r   r-   rM   rM   rM   rN   r      s   
r   )response_content_typeexpected_content_typerL   c                 C   s   |dkrt | d uS || v S )Napplication/json)json_rematch)r   r   rM   rM   rN   _is_expected_content_type   s    r   c                   @   s\  e Zd ZU ejejejejhZej	ej
ejhZeeejhZejdeje iZdZeed< dZdZdZdZdZed ed< 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e(df ee( e(ee)j* ee+d
  ee  ee% ee, ed e'e-e(e.f ee" ee/d  e(ee dddZ0dZe1ddddZ2e3e4d dddZ5e3ed dddZ6e6j7dddddZ6e(dddZ8e3e'de(e.f dddZ9e3e:dd d!Z;e3edd"d#Z<e3ee= dd$d%Z>e3e?dd&d'Z@e dd(d)d*ZAe'ej&ef dd+d,d-ZBee" dd.d/d0ZCee#e  dd1d2d3ZDee$ dd4d5d6ZEedd7d8d9ZFddd:d;ZGd[ee% e(dd<d=d>ZHedd?d@dAZId\e(ddBdCdDZJee  ee% ee" ddEdFdGZKeLdHddIdJdKZMdHd
dLdMdNZNdddOdPZOdddQdRZPee eQddSdTdUZRee dVddWdXdYZSdS )]rD   z*/*    bodyNzCIMultiDict[None]_skip_auto_headersFT)paramsr_   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   r_   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                C   s  |d u rt  }t| }r8td|d| dt|tu sLJ ||d urht|tu shJ |trx|d usxJ || _	|r|
|}|| _|jr|d n|| _| | _|| _|
| _|| _d | _|d u rt}n|}|| _|d ur|nt | _|d ur|nd| _|| _| r,ttd| _ | !|	 | "| | #| | $| | %| | &| | '|| | (||| | )| |d us| j| j*vr| +  | ,| |d u rg n|| _-d S )Nz+Method cannot contain non-token characters z (found at least )Tr   ).r   get_event_loop_CONTAINS_CONTROL_CHAR_REsearchrk   grouprS   r   r
   _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)rn   r]   r\   r   r_   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zreal_response_classrM   rM   rN   rp     sZ    










zClientRequest.__init__r   rL   c                 C   s
   d | _ d S rq   _ClientRequest__writerrn   r   rM   rM   rN   __reset_writerl  s    zClientRequest.__reset_writerrK   c                 C   s   | j p
t S rq   )r   r   rr   rM   rM   rN   r   o  s    zClientRequest.skip_auto_headersasyncio.Task[None]c                 C   s   | j S rq   r   rr   rM   rM   rN   _writers  s    zClientRequest._writerwriterrL   c                 C   s.   | j d ur| j | j || _ || j d S rq   )r   remove_done_callback_ClientRequest__reset_writeradd_done_callbackrn   r   rM   rM   rN   r   w  s    
c                 C   s   | j jtv S rq   )r\   scheme_SSL_SCHEMESrr   rM   rM   rN   r   ~  s    zClientRequest.is_sslrC   c                 C   s   | j S rq   )r   rr   rM   rM   rN   r     s    zClientRequest.sslc              
   C   sT   | j  }rtt| }nd }| j}tt|jp4d|j|j	t
v | j| j| j|fS )N )r   hashra   itemsr\   rb   r   raw_hostr   r   r   r   r   r   )rn   r   hr\   rM   rM   rN   connection_key  s    
zClientRequest.connection_keyc                 C   s   | j j}|d usJ |S rq   )r\   r   )rn   retrM   rM   rN   r~     s    zClientRequest.hostc                 C   s   | j jS rq   )r\   r   rr   rM   rM   rN   r     s    zClientRequest.portc                 C   s$   t | j}tt| j| j|| jfS rq   )r   r_   ra   rb   rF   r\   r]   r   )rn   r_   rM   rM   rN   request_info  s    
zClientRequest.request_info)r\   rL   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   )rn   r\   rM   rM   rN   r     s    zClientRequest.update_host)r   rL   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 rM   )strip).0partrM   rM   rN   
<listcomp>  r   z0ClientRequest.update_version.<locals>.<listcomp>.r   r   z#Can not parse http version number: N)r   rY   splitr   r7   r   rk   r   )rn   r   vrM   rM   rN   r     s    
 zClientRequest.update_version)r_   rL   c                 C   s~   t  | _| jj}|dusJ || jtj< |s0dS t|ttt	frH|
 }|D ],\}}|tjv rj|| j|< qL| j|| qLdS )zUpdate request headers.N)r   r_   r\   Zhost_port_subcomponentr   ZHOSTr   dictr   r   r   ZHOST_ALLadd)rn   r_   r~   keyvaluerM   rM   rN   r     s    
zClientRequest.update_headers)r   rL   c                 C   s~   |d ur8t dd t|D | _| j }|| j n| j}| j D ]\}}||vrH|| j|< qHtj	|vrzt
| jtj	< d S )Nc                 s   s   | ]}|d fV  qd S rq   rM   )r   hdrrM   rM   rN   	<genexpr>  s   z4ClientRequest.update_auto_headers.<locals>.<genexpr>)r   sortedr   r_   copyextendDEFAULT_HEADERSr   r   Z
USER_AGENTr6   )rn   r   Zused_headersr   valrM   rM   rN   r     s    


z!ClientRequest.update_auto_headersr   rL   c                 C   s   |sdS t  }tj| jv r:|| jtjd | jtj= t|trN| }n|}|D ]H\}}t|t	r||j
t	 }||j
|j|j |||< qV|||< qV|jddd | jtj< dS )zUpdate request cookies header.Nr   ;)headersep)r   r   ZCOOKIEr_   loadrj   r   r   r   r   r   setr   coded_valueoutputr   )rn   r   cZiter_cookiesnamer   Zmrsl_valrM   rM   rN   r     s     





zClientRequest.update_cookies)r   rL   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   r_   rj   r   ZCONTENT_ENCODINGrk   r   rY   r   )rn   r   rM   rM   rN   r     s    z%ClientRequest.update_content_encodingc                 C   sz   | j tjd }d|v r,| jrvtdnJ| jrTtj| j v rFtdd| j tj< n"tj| j vrvtt	| j
| j tj< dS )z!Analyze transfer-encoding header.r   r   zDchunked can not be set if "Transfer-Encoding: chunked" header is setz6chunked can not be set if Content-Length header is setN)r_   rj   r   ZTRANSFER_ENCODINGlowerr   rk   CONTENT_LENGTHrY   rh   r   )rn   terM   rM   rN   r     s    z&ClientRequest.update_transfer_encoding)r   r   rL   c                 C   s   |du r| j }|du rd|rd| jjdurdt }tt t|| jj}W d   n1 sZ0    Y  |du rpdS t|t	j
std| | jtj< dS )zSet basic auth.Nz%BasicAuth() tuple is required instead)r   r\   r~   r1   
contextlibsuppressLookupErrorr0   r   r   r-   r   encoder_   r   ZAUTHORIZATION)rn   r   r   Z	netrc_objrM   rM   rN   r   4  s    ,zClientRequest.update_auth)r   rL   c                 C   s   |d u rd S t |tr| }ztjj|d d}W n tjyN   t| }Y n0 || _| jstj	| j
vr|j }d urt|| j
tj	< nd| _|j
sJ | j
}| j}|j
 D ]*\}}||v s|d ur||v rq|||< qd S )N)ZdispositionT)r   r*   r    ZPAYLOAD_REGISTRYrj   r  r   r   r   r  r_   sizerY   r   r   )rn   r   r  r_   Zskip_headersr   r   rM   rM   rN   r   D  s(    

z#ClientRequest.update_body_from_data)expectrL   c                 C   sJ   |rd| j tj< n$tj| j v r6| j tj  dkr6d}|rF| j | _d S )Nz100-continueT)r_   r   ZEXPECTr  r   create_future	_continue)rn   r  rM   rM   rN   r   c  s    
z$ClientRequest.update_expect_continue)r   r   r   rL   c                 C   sd   || _ |d u rd | _d | _d S |r6t|tjs6td|| _|d urZt|ttfsZt	|}|| _d S )Nz,proxy_auth must be None or BasicAuth() tuple)
r   r   r   r   r   r-   rk   r   r   r   )rn   r   r   r   rM   rM   rN   r   o  s    
zClientRequest.update_proxyrI   )r   connrL   c              
      sj  | j dur$| I dH  | j I dH  |j}|dus6J 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
y } zL|}|jdupt|tj }|rt|jd| j}t||| W Y d}~nxd}~0  tjy   |   Y nR tyN } z"t|td|| W Y d}~n d}~0 0 | I dH  |  dS )z-Support coroutines that yields bytes objects.NzCan not write request body for z4Failed to send bytes into the underlying connection )r  drainprotocolr   r   r    ZPayloadwriter   	bytearrayOSErrorerrnor   TimeoutErrorr#   r\   r4   CancelledErrorclose	Exceptionr"   	write_eofstart_timeout)rn   r   r  r  chunkZunderlying_excZreraised_excZexc_is_not_timeoutrM   rM   rN   write_bytes  sH    



 zClientRequest.write_bytes)r  rL   c                    sX  | j tjkr4| jj}|d us J | d| jj }n"| jrN|  sNt| j}n| jj	}|j
}|d ushJ t|| j| jrt| j| j | jnd | jrt| j| j | jnd d}| jr|| j | jd ur|  | j | jv r| jd u stj| jvrtj| jvrd| jtj< | j}tj| jvr^|jjrH|tkr^d| jtj< n|tkr^d| jtj< | j  d| d|j  d|j! }|"|| jI d H  | j#s| j$d us|j%r| &||}t'j(d	krt)j*|| jd
d}	n| j+|}	|	, rd }	n|	| _-n|.  |/  d }	| j0}
|
d us&J |
| j | j1|	| j$| j2| j3| j| j| j4d	| _5| j5S )N:)Zon_chunk_sentZon_headers_sentzapplication/octet-streamr   z
keep-alive z HTTP/r   )r      T)r   Zeager_start)r   continue100r   r   r   r   r   )6r]   r   ZMETH_CONNECTr\   Zhost_subcomponentr   r   r   rY   Zraw_path_qsr  r:   r   r   	functoolspartial_on_chunk_request_sent_on_headers_request_sentr   Zenable_compressionr   Zenable_chunkingPOST_METHODSr   CONTENT_TYPEr_   r   Z
CONNECTIONZ
_connectorZforce_closer9   r8   majorminorZwrite_headersr   r  Zwriting_pausedr%  r   version_infor   Taskcreate_taskdoner   r#  Zset_eofr   r   r   r   r   response)rn   r  Zconnect_hostpathr  r   r   Zstatus_linecorotaskr   rM   rM   rN   send  s    






 
zClientRequest.sendc                    sT   | j d urPz| j I d H  W n4 tjyN   tjdkrJt  }rJ| rJ Y n0 d S N)r      )r   r   r  r   r2  current_task
cancellingrn   r9  rM   rM   rN   r     s    

zClientRequest.closec                 C   s6   | j d ur2| j s| j   | j | j d | _ d S rq   )r   r   	is_closedcancelr   r   rr   rM   rM   rN   	terminate"  s
    


zClientRequest.terminate)r]   r\   r$  rL   c                    s$   | j D ]}||||I d H  qd S rq   )r   Zsend_request_chunk_sent)rn   r]   r\   r$  tracerM   rM   rN   r,  )  s    
z$ClientRequest._on_chunk_request_sentzCIMultiDict[str])r]   r\   r_   rL   c                    s$   | j D ]}||||I d H  qd S rq   )r   Zsend_request_headers)rn   r]   r\   r_   rC  rM   rM   rN   r-  -  s    
z&ClientRequest._on_headers_request_sent)N)F)F)TrV   rW   rX   r   ZMETH_GETZ	METH_HEADZMETH_OPTIONSZ
METH_TRACEr   Z
METH_PATCHZ	METH_POSTZMETH_PUTr.  unionZMETH_DELETEZALL_METHODSZACCEPTACCEPT_ENCODINGrO   r   r   r   rZ   r   r6  r   r  r   r   r   r9   rY   r   rA   r@   r   r?   r-   r7   r   r   r   AbstractEventLoopr   r,   rC   rG   r   rp   objectr   r   r   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   rB  r   r,  r-  rM   rM   rM   rN   rD      s   



O

1`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
 ed< dZed	 ed
< dZeed< dZed ed< dZee ed< dZed ed< dZeej ed< dZed ed< dZdZdZdd Z e!d ege
f ed< dZ"ed ed< e
e#ded e$e%e&d e'j(ddd
ddZ)dte*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/j.edd*d+d)Z/e0e#d#d,d-Z1e0e#d#d.d/Z2e0e#d#d0d1Z3e0e
d#d2d3Z4e0d4d#d5d6Z5e0ed#d7d8Z6e0e%d#d9d:Z7e0ee8 d#d;d<Z9e:fe;dd=d>d?Z<e
d#d@dAZ=e,ed d#dBdCZ>e0ed	 d#dDdEZ?e0dFd#dGdHZ@dd dIdJdKZAdd#dLdMZBe,eCd#dNdOZDdd#dPdQZEe;d#dRdSZFe,eCd#dTdUZGdd#dVdWZHdd#dXdYZIdd#dZd[ZJdd#d\d]ZKdd#d^d_ZLdd#d`daZMed#dbdcZNe
d#dddeZOduee
 e
e
dgdhdiZPdeQdjdkee
 eRee
 e;dldmdnZSd d#dodpZTeeUeV  eeV eeW ddqdrdsZXdS )vrE   Nr   statusreasoncontent_body_headersrM   )rE   ._history_raw_headersrI   _connection_cookieszasyncio.Future[bool]r  r   rH   r   TFc                  G   s   dS )Nutf-8rM   )r   rM   rM   rN   <lambda>R  r   zClientResponse.<lambda>_resolve_charsetr   _ClientResponse__writerzOptional[asyncio.Task[None]]rJ   )
r]   r\   r   r)  r   r   r   r   r   rL   c          
      C   s   t |tu sJ || _|| _|jr,|d n|| _|d ur@|| _|d urN|| _|| _	|d ur`|nt
 | _i | _|| _|| _|	d ur|	| _|	j| _| rttd| _d S )Nr   )rS   r   r]   	_real_urlr   r   _urlr   r  _request_infor/   r   _cacher   _loopr   rU  r   r   r   r   r   r   )
rn   r]   r\   r   r)  r   r   r   r   r   rM   rM   rN   rp   V  s$    zClientResponse.__init__r   c                 C   s
   d | _ d S rq   rV  r   rM   rM   rN   r   }  s    zClientResponse.__reset_writerrK   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.
        r\  rr   rM   rM   rN   r     s    zClientResponse._writerr   c                 C   sJ   | j dur| j | j || _ |du r*dS | r:d| _ n|| j dS )z'Set the writer task for streaming data.N)rV  r   _ClientResponse__reset_writerr5  r   r   rM   rM   rN   r     s    
c                 C   s   | j d u rt | _ | j S rq   )rR  r   rr   rM   rM   rN   r     s    
zClientResponse.cookiesr  c                 C   s
   || _ d S rq   )rR  )rn   r   rM   rM   rN   r     s    c                 C   s   | j S rq   )rX  rr   rM   rM   rN   r\     s    zClientResponse.urlc                 C   s   t jdtdd | jS )NzDeprecated, use .url #1654   r   )r   r   r   rX  rr   rM   rM   rN   url_obj  s    zClientResponse.url_objc                 C   s   | j S rq   )rW  rr   rM   rM   rN   r`     s    zClientResponse.real_urlc                 C   s   | j jd usJ | j jS rq   )rX  r~   rr   rM   rM   rN   r~     s    zClientResponse.hostr^   c                 C   s   | j S rq   )rN  rr   rM   rM   rN   r_     s    zClientResponse.headersc                 C   s   | j S rq   )rP  rr   rM   rM   rN   raw_headers  s    zClientResponse.raw_headersc                 C   s   | j S rq   )rY  rr   rM   rM   rN   r     s    zClientResponse.request_infoc                 C   sF   | j tj}|d u rd S t|\}}t|}t|}t|||S rq   )	rN  rj   r   ZCONTENT_DISPOSITIONr   parse_content_dispositionr   Zcontent_disposition_filenamerR   )rn   rawZdisposition_typeZ
params_dctr   rU   rM   rM   rN   content_disposition  s    
z"ClientResponse.content_disposition)	_warningsrL   c                 C   s|   | j r
d S | jd urx| j  |   | j rxd| i}|jd| tfi | | dd}| jrl| j|d< | j	| d S )NsourcezUnclosed response zUnclosed response)Zclient_responsemessagesource_traceback)
_closedrQ  release_cleanup_writerr[  r   r   ResourceWarningr   call_exception_handler)rn   rd  kwargscontextrM   rM   rN   __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StringIOrY   r\   rK  r  decodeprintr   rJ  r_   getvalue)rn   outZascii_encodable_urlZascii_encodable_reasonrM   rM   rN   __repr__  s"    
zClientResponse.__repr__c                 C   s   | j S rq   )rQ  rr   rM   rM   rN   
connection  s    zClientResponse.connectionc                 C   s   | j S )z2A sequence of of responses, if redirects occurred.)rO  rr   rM   rM   rN   history  s    zClientResponse.historyz/MultiDictProxy[MultiDictProxy[Union[str, URL]]]c                 C   s   d | jdg }|s"tt S t }td|D ]}td|}|d u rNq4| \}}|ddd  }t }|D ]:}	td|	tj	}|d u rqv| \}
}}}|
|
| qv|d|}
|
d	| j t| |
t|
t| q4t|S )
Nz, linkz	,(?=\s*<)z\s*<(.*)>(.*)r  r   z%^\s*(\S*)\s*=\s*(['\"]?)(.*?)(\2)\s*$relr\   )joinr_   getallr   r   rer   r   groupsMr   rj   r\   r   rY   )rn   Z	links_strlinksr   r   r\   
params_strr   r}  paramr   r   r   rM   rM   rN   r    s*    
zClientResponse.links)r{  rL   c           	         s  d| _ |j| _|| _| j z| j}| I dH \}}W nD tjy| } z*t| j	| j
|j|j|jd|W Y d}~n
d}~0 0 |jdk s|jdks|jdkrq| jdurt| jd d| _qW d   n1 s0    Y  || j |j| _|j| _|j| _|j| _|j| _|| _| jtjf  }rt }|D ]H}z|| W n2 tyx } zt d| W Y d}~n
d}~0 0 q4|| _!| S )	zStart response processing.FNrJ  rf  r_   d      e   Tz!Can not load response cookies: %s)"rh  r  	_protocolrQ  r   readr   ZHttpProcessingErrorr$   r   r|  coderf  r_   r  r5   Zon_eof_response_eofr   rJ  rK  rN  r`  rP  rL  r  r   Z
SET_COOKIEr   r  r   r;   warningrR  )	rn   r{  r  rf  r    excZcookie_hdrsr   r   rM   rM   rN   start  sL    
&&zClientResponse.startc                 C   sD   | j r
d S | jo| jj}|d ur*|jr*d S d| _ |   |   d S NT)rh  rQ  r  upgradedrj  _release_connection)rn   r  rM   rM   rN   r  N  s    zClientResponse._response_eofc                 C   s   | j S rq   )rh  rr   rM   rM   rN   closed[  s    zClientResponse.closedc                 C   sR   | j s|   d| _| jd u s(| j r,d S |   | jd urN| j  d | _d S r  )	_released_notify_contentrh  r[  r@  rj  rQ  r   rr   rM   rM   rN   r   _  s    

zClientResponse.closec                 C   s*   | j s|   d| _|   |   t S r  )r  r  rh  rj  r  r2   rr   rM   rM   rN   ri  l  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  )rJ  rr   rM   rM   rN   okv  s    zClientResponse.okc                 C   sB   | j s>| jd usJ | js"|   t| j| j| j| j| jdd S )Nr  )	r  rK  _in_contextri  r$   r   r|  rJ  r_   rr   rM   rM   rN   raise_for_status  s    zClientResponse.raise_for_statusc                    s>    j d ur: jd u r& j   d  _ n j fdd d S )Nc                    s      S rq   )r  )frr   rM   rN   rT    r   z4ClientResponse._release_connection.<locals>.<lambda>)rQ  rV  ri  r   rr   rM   rr   rN   r    s
    


z"ClientResponse._release_connectionc                    s\   | j d urPz| j I d H  W n4 tjyN   tjdkrJt  }rJ| rJ Y n0 |   d S r;  )rV  r   r  r   r2  r=  r>  r  r?  rM   rM   rN   _wait_released  s    

zClientResponse._wait_releasedc                 C   s   | j d ur| j   d | _d S rq   )rV  rA  r   rr   rM   rM   rN   rj    s    

zClientResponse._cleanup_writerc                 C   s*   | j }|r | d u r t|t d| _d S r  )rL  	exceptionr4   _CONNECTION_CLOSED_EXCEPTIONr  )rn   rL  rM   rM   rN   r    s    
zClientResponse._notify_contentc                    s\   | j d urPz| j I d H  W n4 tjyN   tjdkrJt  }rJ| rJ Y n0 |   d S r;  )rV  r   r  r   r2  r=  r>  ri  r?  rM   rM   rN   wait_for_close  s    

zClientResponse.wait_for_closec                    s   | j du rfz<| j I dH | _ | jD ]}|| j| j| j I dH  q$W qt tyb   |    Y qt0 n| j	rtt
d| jo| jj}|du s|js|  I dH  | j S )zRead response payload.NrI  )rM  rL  r  r   Zsend_response_chunk_receivedr]   r\   BaseExceptionr   r  r"   rQ  r  r  r  )rn   rC  r  rM   rM   rN   r    s     


zClientResponse.readc                 C   s   | j tjd }t|}|jd}|rft	t
t t|jW  d    S 1 s\0    Y  |jdkr|jdks|jdkrdS | jd u rtd| | | jS )Nr   charsetZapplicationjsonZrdaprS  z7Cannot compute fallback encoding of a not yet read body)r_   rj   r   r/  r  r   Zparse_mimetyperT   r  r  r  rk   codecslookupr
  rS   subtyperM  RuntimeErrorrU  )rn   ctypemimetypeencodingrM   rM   rN   get_encoding  s"    
*

zClientResponse.get_encodingstrict)r  errorsrL   c                    s8   | j du r|  I dH  |du r(|  }| j j||dS )z!Read response payload and decode.N)r  )rM  r  r  rv  )rn   r  r  rM   rM   rN   text  s
    
zClientResponse.textr   )r  loadscontent_type)r  r  r  rL   c                   s   | j du r|  I dH  |rX| jtjd }t||sXt| j	| j
| jd| | jd| j  }|sjdS |du rz|  }|||S )zRead and decodes JSON response.Nr   z3Attempt to decode JSON with unexpected mimetype: %sr  )rM  r  r_   rj   r   r/  r  r   r%   r   r|  rJ  r   r  rv  )rn   r  r  r  r  strippedrM   rM   rN   r    s$    



zClientResponse.jsonc                    s
   d| _ | S r  )r  rr   rM   rM   rN   
__aenter__  s    zClientResponse.__aenter__)exc_typeexc_valexc_tbrL   c                    s    d| _ |   |  I d H  d S )NF)r  ri  r  )rn   r  r  r  rM   rM   rN   	__aexit__  s    zClientResponse.__aexit__)N)Nr  )YrV   rW   rX   r   r   r7   rZ   rJ  r   rK  rY   rL  r<   rM  r   rN  r   rO  r   rP  rB   rQ  rR  r   r  r   r   StackSummaryr   rh  r  r  rU  r   rV  r   r,   rF   r   r   rF  rp   rG  r]  r   r   rH  r   r3   r\   r_  r`   r~   r_   r`  r   rR   rc  r   r   ro  rz  r{  r|  r  r  r  r   r  r   ri  r  r  r  r  rj  r  r  r  r  r  r=   r>   r  r  r   r  r	   r  rM   rM   rM   rN   rE   7  s   
'	#6
!
rE   )xr   r  r  r*  rt  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   attrZ	multidictr   r   r   r   Zyarlr   r   r   r   r   r   r    abcr!   Zclient_exceptionsr"   r#   r$   r%   r&   r'   Zcompression_utilsr)   Zformdatar*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   logr;   streamsr<   Ztypedefsr=   r>   r?   r@   rA   rB   r   rC   ImportErrorrG  __all__clientrH   Z	connectorrI   tracingrJ   compiler   r   rY   rO   srR   r[   rF   rG   r   rS   r   r   r   	frozensetr   r   r   rD   r  rE   rM   rM   rM   rN   <module>   s   8 4 	


 
7    9