Viewing File: /opt/alt/python35/lib64/python3.5/site-packages/aiohttp/__pycache__/connector.cpython-35.pyc



ZB@sddlZddlZddlZddlZddlZddlmZddlmZddl	m
Z
ddlmZm
Z
ddlmZddlmZmZdd	lmZmZmZmZmZmZmZmZmZdd
lmZddlm Z m!Z!m"Z"ddlm#Z#m$Z$m%Z%m&Z&dd
l'm(Z(ddl)m*Z*yddl+Z+Wne,k
rdZ+YnXdddfZ-GdddZ.GdddZ/GdddZ0GdddZ1Gddde0Z2Gddde0Z3dS)N)defaultdict)suppress)SimpleCookie)cycleislice)	monotonic)hdrshelpers)	ClientConnectionErrorClientConnectorCertificateErrorClientConnectorErrorClientConnectorSSLErrorClientHttpProxyErrorClientProxyConnectionErrorServerFingerprintMismatchcertificate_errors
ssl_errors)ResponseHandler)
ClientRequestFingerprint_merge_ssl_params)PY_36
is_ip_addressnoopsentinel)EventResultOrError)DefaultResolver
BaseConnectorTCPConnector
UnixConnectorc@seZdZdZdZddZddZeddZe	dd	Z
e	d
dZe	dd
Ze	ddZ
ddZddZddZddZddZe	ddZdS)
ConnectionNcCsX||_||_||_||_g|_|jrTtjtj	d|_
dS)Nr)_key
_connector_loop	_protocol
_callbacks	get_debug	traceback
extract_stacksys	_getframe_source_traceback)self	connectorkeyprotocolloopr2
/connector.py__init__)s					zConnection.__init__cCsdj|jS)NzConnection<{}>)formatr")r-r2r2r3__repr__3szConnection.__repr__cCs|jdk	rtr$d|i}ni}|jdj|t||jjrYdS|jj|j	|jddd|ddi}|j
dk	r|j
|d<|jj|dS)	NsourcezUnclosed connection {!r}should_closeTZclient_connectionmessagezUnclosed connectionsource_traceback)r%rwarnr5ResourceWarningr$	is_closedr#_releaser"r,call_exception_handler)r-	_warningskwargscontextr2r2r3__del__6s 	
zConnection.__del__cCs|jS)N)r$)r-r2r2r3r1KszConnection.loopcCs
|jjS)N)r%	transport)r-r2r2r3rDOszConnection.transportcCs|jS)N)r%)r-r2r2r3r0SszConnection.protocolcCs
|jjS)N)r%writer)r-r2r2r3rEWszConnection.writercCs |dk	r|jj|dS)N)r&append)r-callbackr2r2r3add_callback[szConnection.add_callbackc
CsM|jddg}|_x)|D]!}tt|WdQRXq$WdS)N)r&r	Exception)r-Z	callbackscbr2r2r3_notify_release_s

zConnection._notify_releasecCsE|j|jdk	rA|jj|j|jddd|_dS)Nr8T)rKr%r#r>r")r-r2r2r3closefs

	zConnection.closecCsK|j|jdk	rG|jj|j|jd|jjd|_dS)Nr8)rKr%r#r>r"r8)r-r2r2r3releasens
	
zConnection.releasecCs9|j|jdk	r,|jj|jd|_dS)N)rKr%r#_release_acquired)r-r2r2r3detachws
zConnection.detachcCs|jdkp|jjS)N)r%is_connected)r-r2r2r3closed~szConnection.closed)__name__
__module____qualname__r,
_transportr4r6warningsrCpropertyr1rDr0rErHrKrLrMrOrQr2r2r2r3r!$s
	r!c@s"eZdZdZddZdS)_TransportPlaceholderz0 placeholder for BaseConnector.connect function cCsdS)Nr2)r-r2r2r3rLsz_TransportPlaceholder.closeN)rRrSrT__doc__rLr2r2r2r3rXsrXc@sKeZdZdZdZdZdZdedddd	d
dddd
dddZe	ddZ
ddZddZe
ddZe
ddZe
ddZddZddZd d!Zd"d#Ze
d$d%Zdd&d'Zd(d)Zd*d+Zd,d-Zd.dd/d0Zdd1d2ZdS)3raBase connector class.

    keepalive_timeout - (optional) Keep-alive timeout.
    force_close - Set to True to force close and do reconnect
        after each request (and between redirects).
    limit - The total number of simultaneous connections.
    limit_per_host - Number of simultaneous connections to one host.
    enable_cleanup_closed - Enables clean-up closed ssl transports.
                            Disabled by default.
    loop - Optional event loop.
    TNg@keepalive_timeoutforce_closeFlimitdlimit_per_hostrenable_cleanup_closedr1cCs>|r-|dk	r?|tk	r?tdn|tkr?d}|dkrWtj}d|_|jrtjtj	d|_
i|_||_||_
t|_tt|_||_||_tt|_||_tjtd||_t|_d|_d|_||_g|_ |j!dS)Nz6keepalive_timeout cannot be set if force_close is Trueg.@Frr1)"r
ValueErrorasyncioZget_event_loop_closedr'r(r)r*r+r,_conns_limit_limit_per_hostset	_acquiredr_acquired_per_host_keepalive_timeout_force_closelist_waitersr$	functoolspartialr_factoryrZcookies_cleanup_handle_cleanup_closed_handle_cleanup_closed_disabled_cleanup_closed_transports_cleanup_closed)r-rZr[r\r^r_r1r2r2r3r4s6									
	zBaseConnector.__init__cCs|jr
dS|jsdSdd|jjD}|jtrUd|i}ni}|jdj|t|d|d|ddi}|jdk	r|j|d	<|j	j
|dS)
NcSsg|]}t|qSr2)repr).0cr2r2r3
<listcomp>s	z)BaseConnector.__del__.<locals>.<listcomp>r7zUnclosed connector {!r}r.connectionsr9zUnclosed connectorr:)rbrcvaluesrLrr;r5r<r,r$r?)r-r@connsrArBr2r2r3rCs$		

zBaseConnector.__del__cCs|S)Nr2)r-r2r2r3	__enter__szBaseConnector.__enter__cGs|jdS)N)rL)r-excr2r2r3__exit__szBaseConnector.__exit__cCs|jS)z1Ultimately close connection on releasing if True.)rj)r-r2r2r3r[szBaseConnector.force_closecCs|jS)zThe total number for simultaneous connections.

        If limit is 0 the connector has no limit.
        The default limit size is 100.
        )rd)r-r2r2r3r\szBaseConnector.limitcCs|jS)zThe limit_per_host for simultaneous connections
        to the same endpoint.

        Endpoints are the same if they are have equal
        (host, port, is_ssl) triple.

        )re)r-r2r2r3r^s	zBaseConnector.limit_per_hostcCs*|jr|jj|jj}|j}|jri}||}x|jjD]\}}g}xv|D]n\}}	|jrp|	|dkr|j}
|dr|j	r|j
j|
qp|j||	fqpW|rW|||<qWW||_|jr&tj
|d||j|_dS)zCleanup unused transports.rr_cleanupN)rpcancelr$timerircitemsrPrLrrrsrFr
weakref_handle)r-Znowtimeoutrydeadliner/r{aliveprotoZuse_timerDr2r2r3rs.	
		
	
		zBaseConnector._cleanupcCsD|j}||krdS||}|j||s@|j|=dS)N)rhremove)r-r/valZacquired_per_hostr{r2r2r3_drop_acquired_per_hosts	

z%BaseConnector._drop_acquired_per_hostcCsw|jr|jjx'|jD]}|dk	r |jq Wg|_|jsstj|d|j|j|_dS)z}Double confirmation for transport close.
        Some broken ssl servers may leave socket open without proper close.
        Nrt)	rqrrsabortrrr
r_cleanup_closed_periodr$)r-rDr2r2r3rt(s	
		zBaseConnector._cleanup_closedcCs-|jr
dSd|_z|jjr/tS|jrE|jj|jr[|jjx8|jjD]'}x|D]\}}|j	qxWqkWx|j
D]}|j	qWx'|jD]}|dk	r|jqWWd|jj
|j
j
|jj
d|_|jj
d|_XdS)zClose all opened transports.NT)rbr$r=rrprrqrcrzrLrgrsrclearrl)r-datart0rDr2r2r3rL:s0			
	



	
zBaseConnector.closecCs|jS)z;Is connector closed.

        A readonly property.
        )rb)r-r2r2r3rQ`szBaseConnector.closedcs|j}|jrn|jt|j}|jr|dkr||jkr|jt|jj|}n@|jr||jkr|jt|jj|}nd}|dkr]|jj}|j	|}|j
||r	x|D]}|jIdHqWz
|IdHWd|j||s6|j	|=X|r]x|D]}|j
IdHqDW|j|}|dkrt}	|jj|	|j|j|	|rx|D]}|jIdHqWzy=|j|d|IdH}|jr
|jtdWnVtk
rc||j	kr\x/|j	|D] }
|
js8|
jdPq8WYnXWd|js|jj|	|j||	X|rxF|D]}|jIdHqWn&|rx|D]}|jIdHqW|jj||j|j|t||||jS)z'Get from pool or create new connection.rrNtraceszConnector is closed.)connection_keyrdlenrgrerhgetr$Z
create_futurerlrFZsend_connection_queued_startrZsend_connection_queued_end_getrXaddZsend_connection_create_start_create_connectionrbrLr
BaseExceptiondone
set_resultrZsend_connection_create_endZsend_connection_reuseconnr!)r-reqrr/Z	availableZfutwaiterstracerZplaceholderwaiterr2r2r3connecthsx				





	
	


	

zBaseConnector.connectcCsy|j|}Wntk
r)dSYnX|jj}x|r|j\}}|jr<|||jkr|j}|dr|jr|j	j
|q<|s|j|=|Sq<W|j|=dS)Nrr)rcKeyErrorr$rpoprPrirLrrrsrF)r-r/r{t1rrrDr2r2r3rs"
		

zBaseConnector._getcCs|jrp|jt|jdkrx|jjD]4\}}|r5|djsh|djdPq5WnQ|jrxE|jjD]4\}}|r|djs|djdPqWdS)Nr)rdrrgrlrrrre)r-r/rr2r2r3_release_waiters		zBaseConnector._release_waitercCsT|jr
dSy$|jj||j||Wntk
rEYnX|jdS)N)rbrgrrrr)r-r/rr2r2r3rNs	
zBaseConnector._release_acquiredr8cCs|jr
dS|j|||jr,d}|s;|jrn|j}|dr|jr|jj|n{|jj	|}|dkrg}|j|<|j||j
jf|jdkrt
j|d|j|j
|_dS)NTrrr)rbrNrjr8rLrrrsrFrcrr$rrpr
rri)r-r/r0r8rDr{r2r2r3r>s 		zBaseConnector._releasecs
tdS)N)NotImplementedError)r-rrr2r2r3rsz BaseConnector._create_connection)rRrSrTrYrbr,rrr4rVrCr|r~rWr[r\r^rrrtrLrQrrrrNr>rr2r2r2r3rs0	)	 	&Xc@sgeZdZdddZddZddZdd	Zd
dZdd
ZddZ	dS)_DNSCacheTableNcCsi|_i|_||_dS)N)	_addrs_rr_timestamps_ttl)r-ttlr2r2r3r4s		z_DNSCacheTable.__init__cCs
||jkS)N)r)r-hostr2r2r3__contains__!sz_DNSCacheTable.__contains__cCs<t|t|f|j|<|jr8t|j|<dS)N)rrrrrr)r-raddrsr2r2r3r$s	z_DNSCacheTable.addcCs3|jj|d|jr/|jj|ddS)N)rrrr)r-rr2r2r3r*s	z_DNSCacheTable.removecCs|jj|jjdS)N)rrr)r-r2r2r3r0s
z_DNSCacheTable.clearcCs6|j|\}}tt||}t||S)N)rrkrnext)r-rr1lengthrr2r2r3
next_addrs4s
z_DNSCacheTable.next_addrscCs.|jdkrdS|j||jtkS)NF)rrr)r-rr2r2r3expired;sz_DNSCacheTable.expired)
rRrSrTr4rrrrrrr2r2r2r3rsrc!sZeZdZdZddddddddd	d
ddddd
ddddedddddd
ddddfddZfddZeddZeddZ	dddd Z
dd!d"Zdd#d$Ze
ejdd%d&Zd'd(Zd)d*Zd+ed,d-Zd+ed.dd/d0Zdd1d2ZS)3ra/TCP connector.

    verify_ssl - Set to True to check ssl certifications.
    fingerprint - Pass the binary sha256
        digest of the expected certificate in DER format to verify
        that the certificate the server presents matches. See also
        https://en.wikipedia.org/wiki/Transport_Layer_Security#Certificate_pinning
    resolver - Enable DNS lookups and use this
        resolver
    use_dns_cache - Use memory cache for DNS lookups.
    ttl_dns_cache - Max seconds having cached a DNS entry, None forever.
    family - socket address family
    local_addr - local tuple of (host, port) to bind socket to

    keepalive_timeout - (optional) Keep-alive timeout.
    force_close - Set to True to force close and do reconnect
        after each request (and between redirects).
    limit - The total number of simultaneous connections.
    limit_per_host - Number of simultaneous connections to one host.
    enable_cleanup_closed - Enables clean-up closed ssl transports.
                            Disabled by default.
    loop - Optional event loop.
    
verify_sslTfingerprintN
use_dns_cache
ttl_dns_cache
familyrssl_contextssl
local_addrresolverrZr[Fr\r]r^r_r1c
stjd|
d|d|d|
d|d|t|||||_|	dkrgtd|j}	|	|_||_td||_	i|_
||_||_dS)NrZr[r\r^r_r1r)
superr4r_sslrr$	_resolver_use_dns_cacher
_cached_hosts_throttle_dns_events_family_local_addr)r-rrrrrrrrrrZr[r\r^r_r1)	__class__r2r3r4[s				zTCPConnector.__init__cs5x!|jjD]}|jqWtjdS)zClose all ongoing DNS calls.N)rrzrrrL)r-Zev)rr2r3rLsszTCPConnector.closecCs|jS)zSocket family like AF_INET.)r)r-r2r2r3rzszTCPConnector.familycCs|jS)z%True if local DNS caching is enabled.)r)r-r2r2r3rszTCPConnector.use_dns_cachecCsi|dk	r1|dk	r1|jj||fn4|dk	sI|dk	rXtdn
|jjdS)z8Remove specified host/port or clear all dns local cache.Nz5either both host and port or none of them are allowed)rrr`r)r-rportr2r2r3clear_dns_caches
zTCPConnector.clear_dns_cachec	st|r:d|d|d|d|jddddigS|js|rlx |D]}|j|IdHqPW|jj||d|jIdH}|rx |D]}|j|IdHqW|S||f}||jkr#|jj|r#|rx |D]}|j	|IdHqW|jj
|S||jkrt|r[x |D]}|j	|IdHq?W|j|jIdHnH|rx |D]}|j
|IdHqWt|j|j|<zy|rx |D]}|j|IdHqWtj|jj||d|jd|jIdH}|r@x |D]}|j|IdHq$W|jj|||j|jWn?tk
r}z|j|jd	|WYdd}~XnXWd|jj|X|jj
|S)
Nhostnamerrrrrflagsr1r})rrrZsend_dns_resolvehost_startrZresolveZsend_dns_resolvehost_endrrZsend_dns_cache_hitrrwaitZsend_dns_cache_missrr$raZshieldrrfrr)	r-rrrrresr/rer2r2r3
_resolve_hosts^	
	





zTCPConnector._resolve_hostcsP|jr,|j|ddIdH\}}n |j|ddIdH\}}|S)zcCreate connection.

        Has same keyword arguments as BaseEventLoop.create_connection.
        rN)proxy_create_proxy_connection_create_direct_connection)r-rr_rr2r2r3rs	zTCPConnector._create_connectioncCsj|rtjStjtj}|jtjO_|jtjO_|jtjO_|j|SdS)N)	rZcreate_default_context
SSLContextZPROTOCOL_SSLv23ZoptionsZOP_NO_SSLv2ZOP_NO_SSLv3ZOP_NO_COMPRESSIONZset_default_verify_paths)Zverified
sslcontextr2r2r3_make_ssl_contexts

zTCPConnector._make_ssl_contextcCs|jrtdkr$td|j}t|tjrC|S|dk	r\|jdS|j}t|tjr{|S|dk	r|jdS|jdSdSdS)a*Logic to get the correct SSL context

        0. if req.ssl is false, return None

        1. if ssl_context is specified in req, use it
        2. if _ssl_context is specified in self, use it
        3. otherwise:
            1. if verify_ssl is not specified in req, use self.ssl_context
               (will generate a default context according to self.verify_ssl)
            2. if verify_ssl is True in req, generate a default SSL context
            3. if verify_ssl is False in req, generate a SSL context that
               won't verify
        NzSSL is not supported.FT)is_sslrRuntimeError
isinstancerrr)r-rrr2r2r3_get_ssl_contexts	
	

zTCPConnector._get_ssl_contextcCs<|j}t|tr|S|j}t|tr8|SdS)N)rrrr)r-rZretr2r2r3_get_fingerprints		zTCPConnector._get_fingerprintclient_errorcsy|jj||IdHSWntk
rX}zt|j||WYdd}~Xnstk
r}zt|j||WYdd}~Xn:tk
r}z||j||WYdd}~XnXdS)N)r$create_connectionrrrrrOSError)r-rrargsrAr}r2r2r3_wrap_create_connections$'z$TCPConnector._wrap_create_connectionrc-s|j|}|j|}y*|j|jj|jd|IdH}Wn:tk
r}zt|j||WYdd}~XnXd}xM|D]?}	|	d}
|	d}yv|j	|j
|
|d|d|	dd|	dd|	dd|r|	d	ndd
|jd|d|IdH\}}
Wn.tk
rR}z|}wWYdd}~XnX|jr|ry|j
|WnQtk
r}z1|j|js|jj||}wWYdd}~XnX||
fSW|dS)
Nrrrrrrrserver_hostnamerrrr)rrrurlZraw_hostrrr
rrrorrcheckrrLrrrsrF)r-rrrrrZhostsr}last_excZhinforrZtransprr2r2r3r)sF		(


	
	z&TCPConnector._create_direct_connectionc si}|jdk	r|j}|jtj|tj<ttj|jd|d|jd|jd|j	}|j
|dtIdH\}}|jjtj
d}|dk	r|js||jtj<n||jtj<|jr}|j|}tj|_|j|_|j|j|j	f}	t||	||j}
|j|
}zy|j|
dIdH}Wn)tk
r|j|
jYnXd|
_d|
_z||jdkrt|j|j d|jd	|j!d|j|j"d
dd}
|
dkrt#d|
j$}
Wd|jX|j%|j&d|d
|
d|jd|IdH\}}Wd|jX||fS)Nheadersauthr1rrTcoder9socketdefaultz)Transport does not expose socket instancesockrr)'Z
proxy_headersrr	ZHOSTrZMETH_GETrZ
proxy_authr$rrrrZ
AUTHORIZATIONrZPROXY_AUTHORIZATIONrZMETH_CONNECTmethodrrrr!sendstartrrLr%rUstatusrZrequest_infohistoryreasonZget_extra_inforduprro)r-rrrZ	proxy_reqrDrrrr/connZ
proxy_respZrespZrawsockr2r2r3rYsh			



							z%TCPConnector._create_proxy_connection)rRrSrTrYrr4rLrWrrrrrstaticmethodrm	lru_cacherrrr
rrrr2r2)rr3rBs.
E!	.csXeZdZdZdedddfddZedd	Zdd
dZS)r aUnix socket connector.

    path - Unix socket path.
    keepalive_timeout - (optional) Keep-alive timeout.
    force_close - Set to True to force close and do reconnect
        after each request (and between redirects).
    limit - The total number of simultaneous connections.
    limit_per_host - Number of simultaneous connections to one host.
    loop - Optional event loop.
    Fr]rNcs8tjd|d|d|d|d|||_dS)Nr[rZr\r^r1)rr4_path)r-pathr[rZr\r^r1)rr2r3r4szUnixConnector.__init__cCs|jS)zPath to unix socket.)r)r-r2r2r3rszUnixConnector.pathcsky*|jj|j|jIdH\}}Wn:tk
rf}zt|j||WYdd}~XnX|S)N)r$Zcreate_unix_connectionrorrr
r)r-rrrrr}r2r2r3rs	!(z UnixConnector._create_connection)	rRrSrTrYrr4rWrrr2r2)rr3r s

)4rarmr*r(rVcollectionsr
contextlibrZhttp.cookiesr	itertoolsrrrrr	r
Zclient_exceptionsrrr
rrrrrrZclient_protorZ
client_reqreprrrrrrrZlocksrrrrImportError__all__r!rXrrrr r2r2r2r3<module>s:@"
_(d
Back to Directory File Manager