B
    ind                 @   s  U d 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
 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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* dd
l+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ ddlAmBZBmCZCmDZDmEZEmFZF ddlGmHZH ddlImJZJmKZKmLZLmMZM ddlNmOZO ddlPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZY ddl)mZZZm[Z[m\Z\m]Z] ddl^m_Z_m`Z`maZambZb ddlcmdZd ddlemfZfmgZg ddlhmiZimjZjmkZkmlZlmmZm dZnyddlompZp W n eqk
rX   erZpY nX ejsddddG dd dZtetddZueiet evd< edZwG d d! d!ZxG d"d# d#eeeewf eew ZyG d$d% d%eyeC ZzG d&d' d'eyeH Z{G d(d) d)Z|dddddddd*ddd+ddddeXde)j}dddd,e~emeee~e~f  eeeel eee~  eeS eeee~ ee eee eeem eeS eeterf eek e[eeJ ee eej e|d-d.d/ZdS )0zHTTP Client for asyncio.    N)suppress)SimpleNamespaceTracebackType)Any	AwaitableCallable	Coroutine	FrozenSet	GeneratorGenericIterableListMappingOptionalSetTupleTypeTypeVarUnion)CIMultiDict	MultiDictMultiDictProxyistr)URL   )hdrshttppayload)AbstractCookieJar)ClientConnectionErrorClientConnectorCertificateErrorClientConnectorErrorClientConnectorSSLErrorClientErrorClientHttpProxyErrorClientOSErrorClientPayloadErrorClientProxyConnectionErrorClientResponseErrorClientSSLErrorContentTypeError
InvalidURLServerConnectionErrorServerDisconnectedErrorServerFingerprintMismatchServerTimeoutErrorTooManyRedirectsWSServerHandshakeError)ClientRequestClientResponseFingerprintRequestInfo_merge_ssl_params)ClientWebSocketResponse)BaseConnectorNamedPipeConnectorTCPConnectorUnixConnector)	CookieJar)	DEBUGPY_36	BasicAuthTimeoutHandleceil_timeoutget_env_proxy_for_urlget_running_loopsentinelstrip_auth_from_url)WS_KEYHttpVersionWebSocketReaderWebSocketWriter)WSHandshakeError	WSMessage
ws_ext_genws_ext_parse)FlowControlDataQueue)TraceTraceConfig)FinalJSONEncoderLooseCookiesLooseHeadersStrOrURL)r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r8   r:   r;   r9   r7   ClientSessionClientTimeoutrequest)
SSLContextT)Zauto_attribsfrozenslotsc               @   sN   e Zd ZU dZee ed< dZee ed< dZee ed< dZ	ee ed< dS )rW   Ntotalconnect	sock_readsock_connect)
__name__
__module____qualname__r\   r   float__annotations__r]   r^   r_    re   re   2/tmp/pip-unpacked-wheel-fdo6ttx3/aiohttp/client.pyrW      s   
rW   i,  )r\   DEFAULT_TIMEOUT_RetTypec                   sT  e Zd ZdZedddddddd	d
dddddddddddddgZdZdZdddddddej	e
eeejdddededdddddee ee eej ee ee eee  ee eee
 ee ee eee eeee e!f ee  ee!e"f eeeee#e$  e%ddddZ&ed  dd d!d"Z'e(r8ee)dd# fd$d%Z*e+fe)dd&d'd(Z,eee)d)d*d+d,Z-ee.d-d.d/Z/ddddddddd0dddddddedddddddd1eeee0eef  e)e)ee ee eee  ee ee%ee ee eee eee ee ee"e!f ee ee1 ee2 eee2ee3f  ee ee4 ee% ed2d3d4Z5e6j7d5d6dddddddddddddddd7d8d9eeee e ee  eeee  ee ee ee0eef  ee ee ee ee2ede3f ee ee1 ee2 ee e%e%d:d;d<d=Z8e6j7d5d6dddddddddddddddd7d8d9eeee e ee  eeee  ee ee ee0eef  ee ee ee ee2ede3f ee ee1 ee2 ee e%e%ed;d>d?Z9ee d@dAdBdCZ:ddDeee)d)dEdFdGZ;ddDeee)d)dEdHdIZ<ddDeee)d)dEdJdKZ=ddLee)e)d)dMdNdOZ>ddLee)e)d)dMdPdQZ?ddLee)e)d)dMdRdSZ@ee)d)dTdUdVZAddWdXdYZBeCedWdZd[ZDeCee dWd\d]ZEeCedWd^d_ZFeCeGe%e%f dWd`daZHeCedWdbdcZIeIjJeddddedcZIeCejdWdfdgZKeCe"dWdhdiZLeCd@dWdjdkZMeCeNeO dWdldmZPeCee dWdndoZQeCedWdpdqZReCedWdrdsZSeCeeeTegeUd f f dWdtduZVeCedWdvdwZWeCedWdxdyZXeCe#e$ dWdzd{ZYddWd|d}ZZddWd~dZ[eee\  ee\ ee] ddddZ^d dWddZ_eee\  ee\ ee] ddddZ`  ZaS )rV   z/First-class interface for making HTTP requests.	_base_url_source_traceback
_connectorrequote_redirect_url_loop_cookie_jar_connector_owner_default_auth_version_json_serialize_requote_redirect_url_timeout_raise_for_status_auto_decompress
_trust_env_default_headers_skip_auto_headers_request_class_response_class_ws_response_class_trace_configs_read_bufsizeNTFi   )	connectorloopcookiesheadersskip_auto_headersauthjson_serializerequest_classresponse_classws_response_classversion
cookie_jarconnector_ownerraise_for_statusread_timeoutconn_timeouttimeoutauto_decompress	trust_envrl   trace_configsread_bufsize)base_urlr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rl   r   r   returnc            C   s  |d kr|d k	r|j }t|}|d ks0t|tr8|| _n"t|| _| j | jksZtd|d krlt|d}|j |k	r~td|| _ |	 rt
td| _|d krt|d}|| _|d k	r| j| || _|| _|| _|| _|| _|tkrRt| _|tk	r$tjdtdd tj| j|d| _|d k	r|tj| j|d	| _tjd
tdd n*|| _|tk	rjtd|d k	r|td|| _ || _!|| _"|| _#|| _$|rt%|}nt% }|| _&|d k	rt'dd |D | _(nt' | _(|	| _)|
| _*|| _+|pg | _,x| j,D ]}|-  qW d S )Nz2Only absolute URLs without path part are supported)r   z0Session and connector has to use same event loopr   z8read_timeout is deprecated, use timeout argument instead   )
stacklevel)r\   )r]   z8conn_timeout is deprecated, use timeout argument insteadzGread_timeout and timeout parameters conflict, please setup timeout.readzJconn_timeout and timeout parameters conflict, please setup timeout.connectc             s   s   | ]}t |V  qd S )N)r   ).0ire   re   rf   	<genexpr>0  s    z)ClientSession.__init__.<locals>.<genexpr>).rm   rC   
isinstancer   ri   originAssertionErrorr:   RuntimeErrorZ	get_debug	tracebackextract_stacksys	_getframerj   r<   rn   update_cookiesrk   ro   rp   rq   rr   rD   rg   rt   warningswarnDeprecationWarningattrZevolve
ValueErrorru   rv   rw   rs   r~   r   rx   	frozensetry   rz   r{   r|   r}   freeze)selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rl   r   r   real_headerstrace_configre   re   rf   __init__   s    











zClientSession.__init__)clsr   c             C   s   t jd| jtdd d S )Nz6Inheritance class {} from ClientSession is discouragedr   )r   )r   r   formatr`   r   )r   re   re   rf   __init_subclass__<  s
    zClientSession.__init_subclass__)namevalr   c                s2   || j kr tjd|tdd t || d S )Nz8Setting custom ClientSession.{} attribute is discouragedr   )r   )ATTRSr   r   r   r   super__setattr__)r   r   r   )	__class__re   rf   r   F  s    
zClientSession.__setattr__)	_warningsr   c             C   s\   | j sXtrd| i}ni }|jd| tf| | dd}| jd k	rL| j|d< | j| d S )NsourcezUnclosed client session zUnclosed client session)Zclient_sessionmessageZsource_traceback)closedr>   r   ResourceWarningrj   rm   Zcall_exception_handler)r   r   kwargscontextre   re   rf   __del__P  s    



zClientSession.__del___RequestContextManager)methodurlr   r   c             K   s   t | j||f|S )zPerform HTTP request.)r   _request)r   r   r   r   re   re   rf   rX   ^  s    zClientSession.request)
str_or_urlr   c             C   s>   t |}| jd kr|S | s*|jds.t| j|S d S )N/)r   ri   is_absolutepath
startswithr   join)r   r   r   re   re   rf   
_build_urld  s
    
zClientSession._build_url
   )paramsdatajsonr   r   r   r   allow_redirectsmax_redirectscompresschunked	expect100r   read_until_eofproxy
proxy_authr   
verify_sslfingerprintssl_contextsslproxy_headerstrace_request_ctxr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c      3         st   j rtdt||||}|d k	r6|d k	r6tdn|d k	rNtj| jd}t|tsl|d k	rlt	
dt d}g } j} |} |}y |}W n, tk
r } zt||W d d }~X Y nX t j} |d k	rx|D ]}!| t|! qW |d k	r>yt|}W n. tk
r< } zt||W d d }~X Y nX |tkrP j}"nt|tsht|d}"n|}"t j|"j}#|# }$|d kr j} fdd jD }%x(|%D ] }&|&||||I d H  qW |#  }'y&|' xt!|\}}(|	r
|(r
td	|	d kr|(}	|	d kr( j"}	|d k	rP|	d k	rPt#j$|krPtd
 j%&|})|d k	rt' }*|*(| |*&|}+|+r|))|+ |d k	rt|}n( j*rt+t, t-|\}}W d Q R X  j.||||| ||)|	|||| j j/|||' |||%d},yPt0|"j14 I d H .  j2d k	s*t3 j2j1|,|%|"dI d H }-W d Q I d H R X W n6 t4j5k
r }. zt6d7||.W d d }.~.X Y nX |-j8d k	st3|-j9d k	st3|-j9j:|'|; dk| j<|"j=|d ypyJ|,>|-I d H }/y|/|-I d H  W n  t?k
r   |/@   Y nX W n  t?k
r<   |-@   Y nX W nb tAk
rX    Y nL tBk
r }. z,|.jCd krt|.t4j5r tD|.jE |.W d d }.~.X Y nX  j%(|/jF|/jG |/jHdkrl|
rlx*|%D ]"}&|&I|||||/I d H  qW |d7 }|J|/ |r2||kr2|/@  tK|d jLtM||/jHdkrL|/jNt#jOksf|/jHdkr|/jNt#jPkrt#jQ}d }|Rt#jSr|Tt#jS |/jURt#jVp|/jURt#jW}0|0d krP n|/X  yt|0 jY d}1W n. tk
r  } zt|0|W d d }~X Y nX |1jZ}2|2dkr$|/@  tdn|2s4|[|1}1|\ |1\ krXd }	|Tt#j$d  |1}d }|/X  qP qW W d Q R X |d kr j]}|r|/^  |$d k	r|/j_d k	r|/j_`|$ja n|$a  tM||/_bx*|%D ]"}&|&c|||||/I d H  qW |/S  t?k
rn } zL|#@  |$r0|$a  d }$x*|%D ]"}&|&d|||||I d H  q6W  W d d }~X Y nX d S )NzSession is closedz9data and json parameters can not be used at the same time)dumpszChunk size is deprecated #1615r   )r\   c                s    g | ]}t  ||jd qS ))r   )rO   Ztrace_config_ctx)r   r   )r   r   re   rf   
<listcomp>  s   z*ClientSession._request.<locals>.<listcomp>z<Cannot combine AUTH argument with credentials encoded in URLzTCannot combine AUTHORIZATION header with AUTH argument or credentials encoded in URL)r   r   r   r   r   r   r   r   r   r   r   r   r   r   timersessionr   r   traces)r   r   zConnection timeout to host {}HEAD)r   Zskip_payloadr   r   r   r   )i-  i.  i/  i3  i4  r   i/  )i-  i.  )encoded)r   https z"Can redirect only to http or https)er   r   r6   r   r   ZJsonPayloadrr   r   boolr   r   r   rq   _prepare_headersr   r+   setry   addr   r   rD   rt   rW   r@   rm   r\   startr~   r}   Zsend_request_startZupdate_queryr   rE   rp   r   ZAUTHORIZATIONrn   Zfilter_cookiesr<   r   loadrw   r   LookupErrorrB   rz   r{   rA   r]   rk   r   asyncioTimeoutErrorr/   r   	transportprotocolZset_response_paramsupperrv   r^   sendBaseExceptioncloser#   OSErrorerrnor%   argsr   r   statusZsend_request_redirectappendr0   request_infotupler   	METH_HEAD	METH_POSTMETH_GETgetCONTENT_LENGTHpopr   ZLOCATIONURIreleasers   schemer   r   ru   r   
connectionZadd_callbackcancelZ_historyZsend_request_endZsend_request_exception)3r   r   r   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	redirectshistoryr   r   eZskip_headersr   Zreal_timeouttmhandler   tracer   Zauth_from_urlZall_cookiesZtmp_cookie_jarZreq_cookiesreqconnexcrespZr_url
parsed_urlr  re   )r   r   rf   r   l  s|   #








 










&












zClientSession._requestre   g      $@r   i  @ )r   	protocolsr   receive_timeout	autocloseautoping	heartbeatr   r   r   r   r   r   r   r   r   r   r   r   max_msg_size_WSRequestContextManager)r   r   r  r   r  r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r  r   c            C   s8   t | j|||||||||	|
|||||||||||dS )zInitiate websocket connection.)r   r  r   r  r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r  )r  _ws_connect)r   r   r   r  r   r  r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r  re   re   rf   
ws_connect  s.    zClientSession.ws_connectc      *         sP  |d krt  }nt |}tjdtjdtjdi}x | D ]\}}||| q8W tt	
d}| |tj< |rd||tj< |
d k	r|
|tj< |rt|d}||tj< t||||}| j||||d|	||||d
I d H }y&|jd	krt|j|jd
|j|jd|jtjd dkr<t|j|jd|j|jd|jtjd dkrpt|j|jd|j|jd|jtjd}tt|t   }||krt|j|jd|j|jdd }|rtj|jkrdd |jtj  dD } x| D ]}!|!|kr|!}P qW d}"|r|jtj}#|#ryt!|#\}}"W nF t"k
r }$ z&t|j|j|$j#d |j|jd|$W d d }$~$X Y nX nd}d}"|j$}%|%d k	st%|%j&}&|&d k	st%|%j'}'|'d k	st%t(|&d| j)d}(|&*t+|(||( t,|&|'d||"d})W n  t-k
r&   |.   Y n&X | j/|(|)|||||| j)||||"dS d S )NZ	websocketupgradeZ13   ,)r   F)r   r   r   r   r   r   r   r   e   zInvalid response status)r   r   r   r   zInvalid upgrade headerzInvalid connection headerzInvalid challenge responsec             S   s   g | ]}|  qS re   )strip)r   protore   re   rf   r   E  s   z-ClientSession._ws_connect.<locals>.<listcomp>r   i   )r   T)Zuse_maskr   
notakeover)r  r  r   Zclient_notakeover)0r   r   UPGRADEZ
CONNECTIONZSEC_WEBSOCKET_VERSIONitems
setdefaultbase64	b64encodeosurandomdecodeZSEC_WEBSOCKET_KEYr   ZSEC_WEBSOCKET_PROTOCOLZORIGINrL   ZSEC_WEBSOCKET_EXTENSIONSr6   rX   r   r1   r   r  r   r   lowerZSEC_WEBSOCKET_ACCEPThashlibsha1rF   digestsplitrM   rJ   r   r  r   r   r   rN   rm   
set_parserrH   rI   r   r   r|   )*r   r   r   r  r   r  r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r  r   default_headerskeyvalueZsec_keyZextstrr  Zr_keymatchr   Zresp_protocolsr  r   Zcompress_hdrsr  r  Z
conn_protor   readerwriterre   re   rf   r    s    










zClientSession._ws_connectzCIMultiDict[str])r   r   c             C   sl   t | j}|rht|ttfs$t |}t }x<| D ]0\}}||krR||| q4|||< || q4W |S )z3Add default headers and transform it to CIMultiDict)r   rx   r   r   r   r   r"  r   )r   r   resultZadded_namesr0  r1  re   re   rf   r     s    
zClientSession._prepare_headers)r   )r   r   r   r   c            K   s   t | jtj|fd|i|S )zPerform HTTP GET request.r   )r   r   r   r   )r   r   r   r   re   re   rf   r     s    zClientSession.getc            K   s   t | jtj|fd|i|S )zPerform HTTP OPTIONS request.r   )r   r   r   ZMETH_OPTIONS)r   r   r   r   re   re   rf   options  s    zClientSession.optionsc            K   s   t | jtj|fd|i|S )zPerform HTTP HEAD request.r   )r   r   r   r   )r   r   r   r   re   re   rf   head  s    zClientSession.head)r   )r   r   r   r   c            K   s   t | jtj|fd|i|S )zPerform HTTP POST request.r   )r   r   r   r   )r   r   r   r   re   re   rf   post  s    zClientSession.postc            K   s   t | jtj|fd|i|S )zPerform HTTP PUT request.r   )r   r   r   ZMETH_PUT)r   r   r   r   re   re   rf   put  s    zClientSession.putc            K   s   t | jtj|fd|i|S )zPerform HTTP PATCH request.r   )r   r   r   Z
METH_PATCH)r   r   r   r   re   re   rf   patch  s    zClientSession.patch)r   r   r   c             K   s   t | jtj|f|S )zPerform HTTP DELETE request.)r   r   r   ZMETH_DELETE)r   r   r   re   re   rf   delete  s    zClientSession.delete)r   c                s0   | j s,| jdk	r&| jr&| j I dH  d| _dS )zMClose underlying connector.

        Release all acquired resources.
        N)r   rk   ro   r   )r   re   re   rf   r     s    zClientSession.closec             C   s   | j dkp| j jS )z@Is client session closed.

        A readonly property.
        N)rk   r   )r   re   re   rf   r     s    zClientSession.closedc             C   s   | j S )z(Connector instance used for the session.)rk   )r   re   re   rf   r     s    zClientSession.connectorc             C   s   | j S )zThe session cookies.)rn   )r   re   re   rf   r     s    zClientSession.cookie_jarc             C   s   | j S )z"The session HTTP protocol version.)rq   )r   re   re   rf   r     s    zClientSession.versionc             C   s   | j S )z)Do URL requoting on redirection handling.)rs   )r   re   re   rf   rl     s    z"ClientSession.requote_redirect_url)r   r   c             C   s   t jdtdd || _dS )z)Do URL requoting on redirection handling.z=session.requote_redirect_url modification is deprecated #2778r   )r   N)r   r   r   rs   )r   r   re   re   rf   rl     s
    c             C   s   t jdtdd | jS )zSession's loop.z"client.loop property is deprecatedr   )r   )r   r   r   rm   )r   re   re   rf   r     s    zClientSession.loopc             C   s   | j S )zTimeout for the session.)rt   )r   re   re   rf   r     s    zClientSession.timeoutc             C   s   | j S )z*The default headers of the client session.)rx   )r   re   re   rf   r   
  s    zClientSession.headersc             C   s   | j S )z2Headers for which autogeneration should be skipped)ry   )r   re   re   rf   r     s    zClientSession.skip_auto_headersc             C   s   | j S )z2An object that represents HTTP Basic Authorization)rp   )r   re   re   rf   r     s    zClientSession.authc             C   s   | j S )zJson serializer callable)rr   )r   re   re   rf   r     s    zClientSession.json_serializec             C   s   | j S )z-Should connector be closed on session closing)ro   )r   re   re   rf   r     s    zClientSession.connector_ownerc             C   s   | j S )zGShould `ClientResponse.raise_for_status()` be called for each response.)ru   )r   re   re   rf   r   #  s    zClientSession.raise_for_statusc             C   s   | j S )z7Should the body response be automatically decompressed.)rv   )r   re   re   rf   r   *  s    zClientSession.auto_decompressc             C   s   | j S )z
        Should proxies information from environment or netrc be trusted.

        Information is from HTTP_PROXY / HTTPS_PROXY environment variables
        or ~/.netrc file if present.
        )rw   )r   re   re   rf   r   /  s    zClientSession.trust_envc             C   s   | j S )z7A list of TraceConfig instances used for client tracing)r}   )r   re   re   rf   r   9  s    zClientSession.trace_configsc             C   s
   d| _ dS )zwDetach connector from session without closing the former.

        Session is switched to closed state anyway.
        N)rk   )r   re   re   rf   detach>  s    zClientSession.detachc             C   s   t dd S )NzUse async with instead)	TypeError)r   re   re   rf   	__enter__E  s    zClientSession.__enter__)exc_typeexc_valexc_tbr   c             C   s   d S )Nre   )r   r?  r@  rA  re   re   rf   __exit__H  s    zClientSession.__exit__c                s   | S )Nre   )r   re   re   rf   
__aenter__Q  s    zClientSession.__aenter__c                s   |   I d H  d S )N)r   )r   r?  r@  rA  re   re   rf   	__aexit__T  s    zClientSession.__aexit__)N)br`   ra   rb   __doc__r   r   rj   rk   r   r   r2   r3   r7   r   HttpVersion11rD   r   rU   r8   r   AbstractEventLooprS   rT   r   strr?   rR   r   rG   r   r   r   rc   objectrW   r   rP   intr   r   r=   r   r   r   r   rX   r   r   r   bytesrY   r4   r   r   r   r   r  r  r   r   r6  r7  r8  r9  r:  r;  r   propertyr   r   r   r   r   rl   setterr   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   r<  r>  r   r   rB  rC  rD  __classcell__re   re   )r   rf   rV      sv  ]
  x x 		
	&	

rV   c               @   s   e Zd ZdZeddef ddddZddddd	Zeddd
dZ	ddddZ
eedef dddZeedef dddZedddZdS )_BaseRequestContextManager)_coro_respzasyncio.Future[Any]N)coror   c             C   s
   || _ d S )N)rP  )r   rR  re   re   rf   r   a  s    z#_BaseRequestContextManager.__init__)argr   c             C   s   | j |S )N)rP  r   )r   rS  re   re   rf   r   d  s    z_BaseRequestContextManager.sendc             C   s   | j | d S )N)rP  throw)r   rS  re   re   rf   rT  g  s    z _BaseRequestContextManager.throw)r   c             C   s
   | j  S )N)rP  r   )r   re   re   rf   r   j  s    z _BaseRequestContextManager.closec             C   s   | j  }|S )N)rP  	__await__)r   retre   re   rf   rU  m  s    
z$_BaseRequestContextManager.__await__c             C   s   |   S )N)rU  )r   re   re   rf   __iter__q  s    z#_BaseRequestContextManager.__iter__c                s   | j I d H | _| jS )N)rP  rQ  )r   re   re   rf   rC  t  s    z%_BaseRequestContextManager.__aenter__)r`   ra   rb   	__slots__r   rh   r   r   r   rT  r   r
   r   rU  rW  rC  re   re   re   rf   rO  ]  s   rO  c               @   s4   e Zd ZdZeee  ee ee ddddZdS )r   re   N)r?  r  tbr   c                s   | j   d S )N)rQ  r  )r   r?  r  rY  re   re   rf   rD  |  s    z _RequestContextManager.__aexit__)	r`   ra   rb   rX  r   r   r   r   rD  re   re   re   rf   r   y  s
   
r   c               @   s4   e Zd ZdZeee  ee ee ddddZdS )r  re   N)r?  r  rY  r   c                s   | j  I d H  d S )N)rQ  r   )r   r?  r  rY  re   re   rf   rD    s    z"_WSRequestContextManager.__aexit__)	r`   ra   rb   rX  r   r   r   r   rD  re   re   re   rf   r    s
   
r  c               @   s^   e Zd ZdZeddef eddddZeddd	Ze	e
e  e	e e	e dd
ddZdS )_SessionRequestContextManager)rP  rQ  _sessionzasyncio.Future[Any]N)rR  r   r   c             C   s   || _ d | _|| _d S )N)rP  rQ  r[  )r   rR  r   re   re   rf   r     s    z&_SessionRequestContextManager.__init__)r   c                sD   y| j I d H | _W n& tk
r8   | j I d H   Y nX | jS d S )N)rP  rQ  r   r[  r   )r   re   re   rf   rC    s    z(_SessionRequestContextManager.__aenter__)r?  r  rY  r   c                s,   | j d k	st| j   | j I d H  d S )N)rQ  r   r   r[  )r   r?  r  rY  re   re   rf   rD    s    
z'_SessionRequestContextManager.__aexit__)r`   ra   rb   rX  r   r3   rV   r   rC  r   r   r   r   rD  re   re   re   rf   rZ    s   
rZ  r   F)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   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   sd   d}|dkrd}t |dd}t||||||d}t|j| |||||||||	|
|||||||d|S )a  Constructs and sends a request.

    Returns response object.
    method - HTTP method
    url - request url
    params - (optional) Dictionary or bytes to be sent in the query
      string of the new request
    data - (optional) Dictionary, bytes, or file-like object to
      send in the body of the request
    json - (optional) Any json compatible python object
    headers - (optional) Dictionary of HTTP Headers to send with
      the request
    cookies - (optional) Dict object to send with the request
    auth - (optional) BasicAuth named tuple represent HTTP Basic Auth
    auth - aiohttp.helpers.BasicAuth
    allow_redirects - (optional) If set to False, do not follow
      redirects
    version - Request HTTP version.
    compress - Set to True if request has to be compressed
       with deflate encoding.
    chunked - Set to chunk size for chunked transfer encoding.
    expect100 - Expect 100-continue response from server.
    connector - BaseConnector sub-class instance to support
       connection pooling.
    read_until_eof - Read response until eof if response
       does not have Content-Length header.
    loop - Optional event loop.
    timeout - Optional ClientTimeout settings structure, 5min
       total timeout by default.
    Usage::
      >>> import aiohttp
      >>> resp = await aiohttp.request('GET', 'http://python.org/')
      >>> resp
      <ClientResponse(python.org/) [200]>
      >>> data = await resp.read()
    FNT)r   Zforce_close)r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r:   rV   rZ  r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   re   re   rf   rX     s@    >rX   )rE  r   r$  r*  r   r&  r   r   r   
contextlibr   typesr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Z	multidictr   r   r   r   Zyarlr   r   r   r   r   abcr   Zclient_exceptionsr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   Zclient_reqrepr2   r3   r4   r5   r6   Z	client_wsr7   r   r8   r9   r:   r;   	cookiejarr<   Zhelpersr=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   Zhttp_websocketrJ   rK   rL   rM   ZstreamsrN   tracingrO   rP   ZtypedefsrQ   rR   rS   rT   rU   __all__r   rY   ImportErrorrI  srW   rg   rd   rh   rV   rO  r   r  rZ  rF  rH  r   rJ  rG  rX   re   re   re   rf   <module>   s   HT,&
       @ %~