File "request.cpython-35.opt-2.pyc"

Full Path: /home/attunedd/public_html/byp/izo/con7ext_sym404/rintoar.txt/opt/alt/python35/lib64/python3.5/urllib/__pycache__/request.cpython-35.opt-2.pyc
File size: 64.94 KB
MIME-type: text/x-bytecode.python
Charset: 8 bit



]{)@sddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlmZmZmZddlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(ddl)m*Z*m+Z+yddl,Z,Wne-k
rdZ.YnXdZ.ddd	d
ddd
ddddddddddddddddddd d!d"d#d$d%d&d'g!Z/ej0dd(Z1da2de
j3d)dd*dd+dd,dd-dZ4d.dZ5gZ6dddd/d$Z7d0d%Z8e	j9d1e	j:Z;d2d3Z<Gd4ddZ=Gd5ddZ>d6d Z?Gd7d	d	Z@Gd8dde@ZAGd9d
d
e@ZBGd:dde@ZCd;d<ZDGd=d
d
e@ZEGd>ddZFGd?ddeFZGGd@ddeGZHGdAddZIGdBddeIe@ZJGdCddeIe@ZKejLZMGdDddZNGdEdde@eNZOGdFdde@eNZPGdGdHdHe@ZQGdIddeQZReSejTdJrGdKdLdLeQZUe/jVdLGdMdde@ZWGdNdde@ZXdOdPZYdQdRZZGdSdde@Z[dTdUZ\GdVdde@Z]GdWdde]Z^GdXdde@Z_dYZ`ejadZkrZdd[lbmcZcmdZdnd\d"Zcd]d!ZdiZeGd^d&d&ZfGd_d'd'efZgdahd`daZidajdbdcZkdaldddeZmdandfdgZoGdhdidiZpdjdkZqddldmZrdndoZsejtdpkr{ddqlumvZvmwZwdrdsZxdtduZydvdwZzdxd#Z{nNejadZkrdydzZ|d{d#Z{d|d}Z}d~dwZzneqZ{erZzdS)N)URLError	HTTPErrorContentTooShortError)urlparseurlspliturljoinunwrapquoteunquote	splittype	splithost	splitport	splitusersplitpasswd	splitattr
splitquery
splitvaluesplittagto_bytesunquote_to_bytes
urlunparse)
addinfourladdclosehookFTRequestOpenerDirectorBaseHandlerHTTPDefaultErrorHandlerHTTPRedirectHandlerHTTPCookieProcessorProxyHandlerHTTPPasswordMgrHTTPPasswordMgrWithDefaultRealmHTTPPasswordMgrWithPriorAuthAbstractBasicAuthHandlerHTTPBasicAuthHandlerProxyBasicAuthHandlerAbstractDigestAuthHandlerHTTPDigestAuthHandlerProxyDigestAuthHandlerHTTPHandlerFileHandler
FTPHandlerCacheFTPHandlerDataHandlerUnknownHandlerHTTPErrorProcessorurlopeninstall_openerbuild_openerpathname2urlurl2pathname
getproxiesurlretrieve
urlcleanup	URLopenerFancyURLopenercafilecapath	cadefaultcontextc	Cs|s|s|r{|dk	r*tdts<tdtjtjjd|d|}td|}t|}nF|rtd|}t|}n"tdkrta}nt}|j	|||S)NzDYou can't pass both context and any of cafile, capath, and cadefaultzSSL support not availabler;r<r>)

ValueError	_have_sslsslZcreate_default_contextZPurposeZSERVER_AUTHHTTPSHandlerr2_openeropen)	urldatatimeoutr;r<r=r>Z
https_handleropenerrI,/opt/alt/python35/lib64/python3.5/request.pyr0s$		cCs
|adS)N)rC)rHrIrIrJr1scCst|\}}tjt||:}|j}|dkrb|rbtjj||fS|rzt|d}n(t	j
dd}|j}tj
||||f}	d}
d
}d}d}
d	|krt|d
}|r||
|
|xW|j|
}|sP|t|7}|j||
d7}
|r||
|
|qWWdQRXWdQRX|dkr||krtd||f|	|	S)NfilewbdeleteFirzcontent-lengthzContent-Lengthz1retrieval incomplete: got only %i out of %i bytesi )r
contextlibclosingr0infoospathnormpathrDtempfileNamedTemporaryFilename_url_tempfilesappendintreadlenwriter)rEfilename
reporthookrFZurl_typerUfpheaderstfpresultbssizer]blocknumblockrIrIrJr6sD	


"cCsTx4tD],}ytj|Wqtk
r2YqXqWtdd=trPdadS)N)rZrTunlinkOSErrorrC)Z	temp_filerIrIrJr7s

	
z:\d+$cCsV|j}t|d}|dkr7|jdd}tjd|d}|jS)NrOHost)full_urlr
get_header_cut_port_resublower)requestrEhostrIrIrJrequest_hosts	ruc@s*eZdZdidddddZeddZejddZejddZed	d
Zejdd
Zejdd
Zd
dZ	ddZ
ddZddZddZ
ddZddZddZdddZdd Zd!d"ZdS)#rNFc	Cs||_i|_i|_d|_||_d|_x*|jD]\}}|j||qCW|dkr{t|}||_	||_
|r||_dS)N)rnrcunredirected_hdrs_datarF_tunnel_hostitems
add_headerruorigin_req_hostunverifiablemethod)	selfrErFrcr{r|r}keyvaluerIrIrJ__init__
s								zRequest.__init__cCs&|jrdj|j|jS|jS)Nz{}#{})fragmentformat	_full_url)r~rIrIrJrns	zRequest.full_urlcCs8t||_t|j\|_|_|jdS)N)rrrr_parse)r~rErIrIrJrn"scCsd|_d|_d|_dS)Nrl)rrselector)r~rIrIrJrn)s		cCs|jS)N)rw)r~rIrIrJrF/szRequest.datacCs8||jkr4||_|jdr4|jddS)NzContent-length)rw
has_header
remove_header)r~rFrIrIrJrF3s	cCs
d|_dS)N)rF)r~rIrIrJrF=scCsqt|j\|_}|jdkr:td|jt|\|_|_|jrmt|j|_dS)Nzunknown url type: %r)	rrtyper?rnrrtrr
)r~restrIrIrJrAs	zRequest._parsecCs+|jdk	rdnd}t|d|S)NPOSTGETr})rFgetattr)r~Zdefault_methodrIrIrJ
get_methodIszRequest.get_methodcCs|jS)N)rn)r~rIrIrJget_full_urlNszRequest.get_full_urlcCsJ|jdkr(|jr(|j|_n||_|j|_||_dS)Nhttps)rrxrtrnr)r~rtrrIrIrJ	set_proxyQs
	zRequest.set_proxycCs|j|jkS)N)rrn)r~rIrIrJ	has_proxyYszRequest.has_proxycCs||j|j<dS)N)rc
capitalize)r~rvalrIrIrJrz\szRequest.add_headercCs||j|j<dS)N)rvr)r~rrrIrIrJadd_unredirected_header`szRequest.add_unredirected_headercCs||jkp||jkS)N)rcrv)r~header_namerIrIrJrdszRequest.has_headercCs"|jj||jj||S)N)rcgetrv)r~rdefaultrIrIrJrohs	zRequest.get_headercCs*|jj|d|jj|ddS)N)rcpoprv)r~rrIrIrJrmszRequest.remove_headercCs/|jj}|j|jt|jS)N)rvcopyupdaterclistry)r~hdrsrIrIrJheader_itemsqszRequest.header_items)__name__
__module____qualname__rpropertyrnsetterdeleterrFrrrrrrzrrrorrrIrIrIrJrs(
c@speZdZddZddZddZddZd	ejd
dZ	d	dd
Z
ddZd	S)rcCsMdt}d|fg|_g|_i|_i|_i|_i|_dS)NzPython-urllib/%sz
User-agent)__version__
addheadershandlershandle_openhandle_errorprocess_responseprocess_request)r~Zclient_versionrIrIrJrws
				zOpenerDirector.__init__cCst|ds%tdt|d}xut|D]g}|dkrMq8|jd}|d|}||dd}|jd	r|jd|d}||dd}yt|}Wntk
rYnX|jj	|i}	|	|j|<n]|d
kr"|}|j
}	n?|dkr@|}|j}	n!|dkr8|}|j}	nq8|	j
|g}
|
rtj|
|n
|
j|d
}q8W|rtj|j||j|dS)N
add_parentz%expected BaseHandler instance, got %rFredirect_requestdo_open
proxy_open_rOerrorrDresponsersT)rrr)hasattr	TypeErrorrdirfind
startswithr\r?rrrrr
setdefaultbisectZinsortr[rr)r~handlerZaddedmethiprotocolZ	conditionjkindlookuprrIrIrJadd_handlersJ


zOpenerDirector.add_handlercCsdS)NrI)r~rIrIrJcloseszOpenerDirector.closec	GsR|j|f}x9|D]1}t||}||}|dk	r|SqWdS)N)rr)	r~chainr	meth_nameargsrrfuncrerIrIrJ_call_chains
zOpenerDirector._call_chainNc
Cst|tr!t||}n|}|dk	r<||_||_|j}|d}x8|jj|gD]!}t||}||}qnW|j	||}	|d}x;|j
j|gD]$}t||}|||	}	qW|	S)NZ_requestZ	_response)
isinstancestrrrFrGrrrr_openr)
r~fullurlrFrGreqrrZ	processorrrrIrIrJrDs"			

zOpenerDirector.opencCsp|j|jdd|}|r%|S|j}|j|j||d|}|rW|S|j|jdd|S)NrZdefault_openrunknownunknown_open)rrr)r~rrFrerrIrIrJrs	
zOpenerDirector._opencGs|d
kr<|jd}|d}d|}d}|}n|j}|d}d}|||f|}|j|}|r|S|r|dd	f|}|j|SdS)Nhttprz
http_error_%srO_errorrrhttp_error_default)rr)rr)r~protordictrZhttp_errZ	orig_argsrerIrIrJrs 


		
zOpenerDirector.error)rrrrrrrsocket_GLOBAL_DEFAULT_TIMEOUTrDrrrIrIrIrJrvs/c	Gs7t}ttttttttt	g	}t
tjdrI|j
tt}xi|D]a}xX|D]P}t|trt||r|j|qft||rf|j|qfWqYWx|D]}|j|qWx|D]}|j|qWx3|D]+}t|tr"|}|j|qW|S)NHTTPSConnection)rrr.r)rrr+r*r/r-rrclientr[rBsetrr
issubclassaddremover)rrHZdefault_classesskipklasscheckhrIrIrJr2s0					
	




	c@s:eZdZdZddZddZddZdS)	ricCs
||_dS)N)parent)r~rrIrIrJr+szBaseHandler.add_parentcCsdS)NrI)r~rIrIrJr.szBaseHandler.closecCs#t|dsdS|j|jkS)N
handler_orderT)rr)r~otherrIrIrJ__lt__2szBaseHandler.__lt__N)rrrrrrrrIrIrIrJr(sc@s(eZdZdZddZeZdS)r/icCsa|j|j|j}}}d|ko7dkns]|jjd|||||}|S)Ni,r)codemsgrSrr)r~rsrrrrrIrIrJ
http_response?s
 	z HTTPErrorProcessor.http_responseN)rrrrrhttps_responserIrIrIrJr/;sc@seZdZddZdS)rcCst|j||||dS)N)rrn)r~rrbrrrrIrIrJrMsz*HTTPDefaultErrorHandler.http_error_defaultN)rrrrrIrIrIrJrLsc@sHeZdZdZdZddZddZeZZZ	dZ
dS)	r
c	s|j}|dkr$|dkp9|dko9|dksWt|j|||||jdd	}dtfdd
|jjD}t|d|d|jddS)N-./3rHEADr z%20content-lengthcontent-typec3s3|])\}}|jkr||fVqdS)N)rr).0kv)CONTENT_HEADERSrIrJ	<genexpr>ss	z7HTTPRedirectHandler.redirect_request.<locals>.<genexpr>rcr{r|T)rrrr)rr)rrr)rr)	rrrnreplacerrcryrr{)	r~rrbrrrcnewurlmZ
newheadersrI)rrJrXs
(		z$HTTPRedirectHandler.redirect_requestc
Csd|kr|d}nd|kr2|d}ndSt|}|jdkrst||d||f|||jr|jrt|}d|d	<t|}t|d
ddtj	}t
|j|}|j||||||}|dkrdSt
|d
rw|j}	|_|	j|d|jksRt|	|jkrt|j||j|||ni}	|_|_|	j|dd|	|<|j|j|jj|d|jS)Nlocationurirrftprlz+%s - Redirection to url '%s' is not allowed/rencodingz
iso-8859-1safe
redirect_dictrrOrG)rrrrl)rschemerrUZnetlocrrr	stringpunctuationrrnrrrrmax_repeatsr^max_redirectionsinf_msgr]rrrDrG)
r~rrbrrrcrurlpartsnewZvisitedrIrIrJhttp_error_302~s@





z"HTTPRedirectHandler.http_error_302zoThe HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
N)rrrrrrrhttp_error_301http_error_303http_error_307rrIrIrIrJrPs&<c	Cst|\}}|jds0d}|}nS|jdsOtd||jdd}|dkrsd}|d|}t|\}}|dk	rt|\}}n
d}}||||fS)Nrz//zproxy URL with no authority: %rrrOrP)rrr?rrr)	proxyrZr_scheme	authorityendZuserinfohostportuserpasswordrIrIrJ_parse_proxys	
rc@s1eZdZdZdddZddZdS)rdNc	Cse|dkrt}||_x@|jD]2\}}t|d||||jddq+WdS)Nz%s_opencSs||||S)NrI)rrrrrIrIrJ<lambda>sz'ProxyHandler.__init__.<locals>.<lambda>)r5proxiesrysetattrr)r~rrrErIrIrJrs		
zProxyHandler.__init__cCs|j}t|\}}}}|dkr3|}|jrOt|jrOdS|r|rdt|t|f}	tj|	jjd}
|j	dd|
t|}|j
||||ks|dkrdS|jj|d|j
SdS)Nz%s:%sasciizProxy-authorizationzBasic rrG)rrrtproxy_bypassr
base64	b64encodeencodedecoderzrrrDrG)r~rrrZ	orig_typeZ
proxy_typerrrZ	user_passZcredsrIrIrJrs 	zProxyHandler.proxy_open)rrrrrrrIrIrIrJrs
c@sOeZdZddZddZddZddd	Zd
dZdS)
r cCs
i|_dS)N)passwd)r~rIrIrJr
szHTTPPasswordMgr.__init__cst|tr|g}|jkr4ij|<xGdD]?tfdd|D}||fj||<q;WdS)NTFcs"g|]}j|qSrI)
reduce_uri)ru)default_portr~rIrJ
<listcomp>s	z0HTTPPasswordMgr.add_password.<locals>.<listcomp>)TF)rrr!tuple)r~realmrrr!reduced_urirI)r$r~rJadd_password
s	

zHTTPPasswordMgr.add_passwordc	Cs|jj|i}xddD]\}|j||}xA|jD]3\}}x$|D]}|j||rT|SqTWqAWqWdS)NTF)TF)NN)r!rr"ry	is_suburi)	r~r'authuriZdomainsr$reduced_authuriZurisZauthinforrIrIrJfind_user_passwords

z"HTTPPasswordMgr.find_user_passwordTc
Cst|}|dr=|d}|d}|dp7d}nd}|}d}t|\}}|r|dkr|dk	rddddij|}	|	dk	rd	||	f}||fS)
NrOrrrrPriz%s:%d)rr
r)
r~rr$partsrrrUrtportZdportrIrIrJr""s 


	zHTTPPasswordMgr.reduce_uricCsi||krdS|d|dkr(dStj|d|df}t|t|dkredSdS)NTrFrO)	posixpathcommonprefixr^)r~basetestcommonrIrIrJr*9szHTTPPasswordMgr.is_suburiN)rrrrr)r-r"r*rIrIrIrJr s

c@seZdZddZdS)r!cCsDtj|||\}}|dk	r1||fStj|d|S)N)r r-)r~r'r+rrrIrIrJr-Js

z2HTTPPasswordMgrWithDefaultRealm.find_user_passwordN)rrrr-rIrIrIrJr!HscsReZdZfddZdfddZdddZdd	ZS)
r"cs i|_tj||dS)N)
authenticatedsuperr)r~rkwargs)	__class__rIrJrTs	z%HTTPPasswordMgrWithPriorAuth.__init__FcsR|j|||dk	r5tjd|||tj||||dS)N)update_authenticatedr7r))r~r'rrr!is_authenticated)r9rIrJr)Xsz)HTTPPasswordMgrWithPriorAuth.add_passwordcCs]t|tr|g}x>dD]6}x-|D]%}|j||}||j|<q,WqWdS)NTF)TF)rrr"r6)r~rr;r$r#r(rIrIrJr:_s	

z1HTTPPasswordMgrWithPriorAuth.update_authenticatedcCsXxQdD]I}|j||}x.|jD]#}|j||r)|j|Sq)WqWdS)NTF)TF)r"r6r*)r~r+r$r,rrIrIrJr;is

z-HTTPPasswordMgrWithPriorAuth.is_authenticated)rrrrr)r:r;rIrI)r9rJr"Rs
c@speZdZejdejZdddZddZddZ	d	d
Z
ddZe
ZeZ
dS)
r#z1(?:.*,)*[ 	]*([^ 	]+)[ 	]+realm=(["']?)([^"']*)\2NcCs1|dkrt}||_|jj|_dS)N)r r!r))r~Zpassword_mgrrIrIrJrs		z!AbstractBasicAuthHandler.__init__c	Cs|j|d}|r|jd}|jdkrMtd|nqtjj|}|r|j\}}}|dkrtj	dt
d|jdkr|j|||SdS)	NrbasiczDAbstractBasicAuthHandler does not support the following scheme: '%s'"'zBasic Auth Realm was unquotedr)r=r>)rsplitrrr?r#rxsearchgroupswarningswarnUserWarningretry_http_basic_auth)	r~authreqrtrrcrmor	r'rIrIrJhttp_error_auth_reqeds
	
z.AbstractBasicAuthHandler.http_error_auth_reqedcCs|jj||\}}|dk	rd||f}dtj|jjd}|j|jd|krxdS|j|j||j	j
|d|jSdSdS)Nz%s:%szBasic rrG)r!r-rrrr roauth_headerrrrDrG)r~rtrr'rpwrawauthrIrIrJrFs"z.AbstractBasicAuthHandler.retry_http_basic_authcCst|jds)|jj|jr-|S|jds|jjd|j\}}dj||j}tj	|j
}|jddj|j|S)Nr;
Authorizationz{0}:{1}zBasic {})
rr!r;rnrr-rrrZstandard_b64encoder rstrip)r~rrr!ZcredentialsZauth_strrIrIrJhttp_requests	z%AbstractBasicAuthHandler.http_requestcCsdt|jdr`d|jko,dknrJ|jj|jdn|jj|jd|S)Nr;ri,TF)rr!rr:rn)r~rrrIrIrJrs
z&AbstractBasicAuthHandler.http_response)rrrrecompileIr@rrIrFrPr
https_requestrrIrIrIrJr#qs	
c@s"eZdZdZddZdS)r$rNcCs%|j}|jd|||}|S)Nzwww-authenticate)rnrI)r~rrbrrrcrErrIrIrJhttp_error_401s		z#HTTPBasicAuthHandler.http_error_401N)rrrrJrUrIrIrIrJr$sc@s"eZdZdZddZdS)r%zProxy-authorizationcCs%|j}|jd|||}|S)Nzproxy-authenticate)rtrI)r~rrbrrrcrrrIrIrJhttp_error_407s		z$ProxyBasicAuthHandler.http_error_407N)rrrrJrVrIrIrIrJr%sc@sseZdZdddZddZddZdd	Zd
dZdd
ZddZ	ddZ
dS)r&NcCsL|dkrt}||_|jj|_d|_d|_d|_dS)Nr)r r!r)retriednonce_count
last_nonce)r~r!rIrIrJrs				z"AbstractDigestAuthHandler.__init__cCs
d|_dS)Nr)rW)r~rIrIrJreset_retry_countsz+AbstractDigestAuthHandler.reset_retry_countcCs|j|d}|jdkr?t|jdd|dn|jd7_|r|jd}|jdkr|j||S|jdkrtd|dS)	Nizdigest auth failedrOrdigestr<zEAbstractDigestAuthHandler does not support the following scheme: '%s')rrWrrnr?rrretry_http_digest_authr?)r~rJrtrrcrGrrIrIrJrIsz/AbstractDigestAuthHandler.http_error_auth_reqedcCs|jdd\}}ttdt|}|j||}|rd|}|jj|jd|krwdS|j|j||j	j
|d|j}|SdS)NrrOz	Digest %srG)r?parse_keqv_listfilterparse_http_listget_authorizationrcrrJrrrDrG)r~rrMtokenZ	challengechalZauth_valZresprIrIrJr]
s
z0AbstractDigestAuthHandler.retry_http_digest_authcCsXd|j|tjf}|jdtd}tj|j}|ddS)Nz	%s:%s:%s:rrN)rXtimectimer_randombyteshashlibsha1	hexdigest)r~noncesbdigrIrIrJ
get_cnoncesz$AbstractDigestAuthHandler.get_cnoncecCsVyK|d}|d}|jd}|jdd}|jdd}Wntk
rcdSYnX|j|\}}	|dkrdS|jj||j\}
}|
dkrdS|jdk	r|j|j|}nd}d|
||f}
d|j|j	f}|d	kr||j
kr=|jd
7_nd
|_||_
d|j}|j|}d||||||f}|	||
|}nD|dkr|	||
d|||f}nt
d
|d|
|||j	|f}|r|d|7}|r*|d|7}|d|7}|rR|d||f7}|S)Nr'rkqop	algorithmMD5opaquez%s:%s:%sz%s:%srMrOz%08xz%s:%s:%s:%s:%szqop '%s' is not supported.z>username="%s", realm="%s", nonce="%s", uri="%s", response="%s"z
, opaque="%s"z
, digest="%s"z, algorithm="%s"z, qop=auth, nc=%s, cnonce="%s")rKeyErrorget_algorithm_implsr!r-rnrFget_entity_digestrrrYrXror)r~rrcr'rkrprqrsHKDrrKZentdigZA1ZA2ZncvalueZcnonceZnoncebitZrespdigr3rIrIrJra!sV


	
		
(
z+AbstractDigestAuthHandler.get_authorizationcsb|dkrddn+|dkr6ddntd|fdd}|fS)NrrcSstj|jdjS)Nr)rhmd5rrj)xrIrIrJr`sz?AbstractDigestAuthHandler.get_algorithm_impls.<locals>.<lambda>ZSHAcSstj|jdjS)Nr)rhrirrj)rzrIrIrJrbsz.Unsupported digest authentication algorithm %rcsd||fS)Nz%s:%srI)rld)rwrIrJrgs)r?)r~rqrxrI)rwrJru]s
z-AbstractDigestAuthHandler.get_algorithm_implscCsdS)NrI)r~rFrcrIrIrJrvjsz+AbstractDigestAuthHandler.get_entity_digest)rrrrrZrIr]rorarurvrIrIrIrJr&s	<
c@s(eZdZdZdZddZdS)r'rNicCs9t|jd}|jd|||}|j|S)NrOzwww-authenticate)rrnrIrZ)r~rrbrrrcrtretryrIrIrJrUys
	
z$HTTPDigestAuthHandler.http_error_401N)rrrrJrrUrIrIrIrJr'osc@s(eZdZdZdZddZdS)r(zProxy-AuthorizationicCs/|j}|jd|||}|j|S)Nzproxy-authenticate)rtrIrZ)r~rrbrrrcrtr|rIrIrJrVs
		
z%ProxyDigestAuthHandler.http_error_407N)rrrrJrrVrIrIrIrJr(sc@sCeZdZdddZddZddZdd	Zd
S)AbstractHTTPHandlerrcCs
||_dS)N)_debuglevel)r~
debuglevelrIrIrJrszAbstractHTTPHandler.__init__cCs
||_dS)N)r~)r~levelrIrIrJset_http_debuglevelsz'AbstractHTTPHandler.set_http_debuglevelc
Cs|j}|std|jdk	r|j}t|trTd}t||jdss|jdd|jdsyt|}Wn@tk
rt|t	j
rtdt||fYn"X|jddt
||j|}|jr/t|j\}}t|\}}	|jdsN|jd|xE|jjD]7\}
}|
j}
|j|
s[|j|
|q[W|S)	Nz
no host givenzLPOST data should be bytes or an iterable of bytes. It cannot be of type str.zContent-typez!application/x-www-form-urlencodedzContent-lengthzBContent-Length should be specified for iterable data of type %r %rz%drm)rtrrFrrrrr
memoryviewcollectionsIterabler?rr^itemsizerrrrrrr)r~rsrtrFrZmvZsel_hostrZselZsel_pathrYrrIrIrJdo_request_sB		
	zAbstractHTTPHandler.do_request_c
s|j}|std||d|j|}|j|jt|jjtfdd|jj	Ddd<tddj	D|j
ri}d}|kr|||<|=|j|j
d	|yjy&|j|j
|j|jWn1tk
rR}zt|WYdd}~XnX|j}	Wn|jYnX|jr|jjd|_|j|	_|	j|	_|	S)
Nz
no host givenrGc3s-|]#\}}|kr||fVqdS)NrI)rrr)rcrIrJrs	z.AbstractHTTPHandler.do_open.<locals>.<genexpr>r
Connectioncss'|]\}}|j|fVqdS)N)title)rrYrrIrIrJrszProxy-Authorizationrc)rtrrGZset_debuglevelr~rrvrrcryrxZ
set_tunnelrsrrrFrkgetresponsersockrrEreasonr)
r~Z
http_classrZhttp_conn_argsrtrZtunnel_headersZproxy_auth_hdrerrrrI)rcrJrs>	/
	&
	
	zAbstractHTTPHandler.do_openN)rrrrrrrrIrIrIrJr}s(r}c@s%eZdZddZejZdS)r)cCs|jtjj|S)N)rrrHTTPConnection)r~rrIrIrJ	http_openszHTTPHandler.http_openN)rrrrr}rrPrIrIrIrJr)src@s:eZdZdddddZddZejZdS)rBrNcCs&tj||||_||_dS)N)r}r_context_check_hostname)r~rr>check_hostnamerIrIrJr
s	zHTTPSHandler.__init__cCs(|jtjj|d|jd|jS)Nr>r)rrrrrr)r~rrIrIrJ
https_openszHTTPSHandler.https_open)rrrrrr}rrTrIrIrIrJrBsrBc@sCeZdZdddZddZddZeZeZdS)rNcCs4ddl}|dkr'|jj}||_dS)Nr)Zhttp.cookiejar	cookiejarZ	CookieJar)r~rrrIrIrJrszHTTPCookieProcessor.__init__cCs|jj||S)N)rZadd_cookie_header)r~rsrIrIrJrPsz HTTPCookieProcessor.http_requestcCs|jj|||S)N)rZextract_cookies)r~rsrrIrIrJr"sz!HTTPCookieProcessor.http_response)rrrrrPrrTrrIrIrIrJrs
c@seZdZddZdS)r.cCs|j}td|dS)Nzunknown url type: %s)rr)r~rrrIrIrJr*s	zUnknownHandler.unknown_openN)rrrrrIrIrIrJr.)scCsmi}x`|D]X}|jdd\}}|ddkr[|ddkr[|dd}|||<q
W|S)N=rOrr=rPrP)r?)lZparsedZeltrrrIrIrJr^.s
 r^cCsg}d}d}}x|D]}|r<||7}d}q|ry|dkrZd}qn|dkrld}||7}q|dkr|j|d}q|dkrd}||7}qW|r|j|dd|DS)	NrlF\Tr=,cSsg|]}|jqSrI)rO)rpartrIrIrJr%as	z#parse_http_list.<locals>.<listcomp>)r[)rlresrescaper	ZcurrIrIrJr`8s4	





r`c@s:eZdZddZdZddZddZdS)r*cCs|j}|dddkrq|dddkrq|jrq|jdkrq|j|jkr~tdn
|j|SdS)Nrz//r:r	localhostz-file:// scheme is supported only on localhost)rrt	get_namesropen_local_file)r~rrErIrIrJ	file_openes	5zFileHandler.file_openNcCsztjdkrsy7ttjddtjtjdt_Wn*tjk
rrtjdft_YnXtjS)Nrr)r*namesr&rgethostbyname_exgethostnamegaierror
gethostbyname)r~rIrIrJrps$zFileHandler.get_namescCs^ddl}ddl}|j}|j}t|}ytj|}|j}|jj	|j
dd}	|j|d}
|jd|
pd||	f}|rt
|\}}|s|rt||jkr|rd||}
n
d|}
tt|d||
SWn1tk
rM}zt|WYdd}~XnXtddS)	NrusegmtTz6Content-type: %s
Content-length: %d
Last-modified: %s
z
text/plainzfile://rbzfile not on local host)email.utils	mimetypesrtrr4rTstatst_sizeutils
formatdatest_mtime
guess_typemessage_from_stringr
_safe_gethostbynamerrrDrkr)r~remailrrtr`Z	localfilestatsrgmodifiedmtypercr0ZorigurlexprIrIrJr{s0			
zFileHandler.open_local_file)rrrrrrrrIrIrIrJr*cs
cCs1ytj|SWntjk
r,dSYnXdS)N)rrr)rtrIrIrJrsrc@s(eZdZddZddZdS)r+cCsddl}ddl}|j}|s3tdt|\}}|dkr]|j}nt|}t|\}}|rt|\}}nd}t	|}|pd}|pd}yt
j|}Wn1tk
r}zt|WYdd}~XnXt
|j\}	}
|	jd}ttt	|}|dd|d}}|r||dr||dd}y|j||||||j}
|rdpd}xJ|
D]B}t|\}}|jdkr|dkr|j}qW|
j||\}}d}|j|jd}|rG|d
|7}|dk	rm|dkrm|d|7}tj|}t|||jSWnQ|jk
r}z.td|}|jtj dWYdd}~XnXdS)Nrzftp error: no host givenrlrrOrSDraArr{zContent-type: %s
zContent-length: %d
z
ftp error: %rrrPrP)rrrrSr{r)!ftplibrrtrr
FTP_PORTr\rrr
rrrkrrr?rmapconnect_ftprGrrrupperretrfilerrnrrr
all_errorswith_tracebacksysexc_info)r~rrrrtr0rr!rrUattrsdirsrKZfwrattrrrbretrlenrcrrexcrIrIrJftp_opens\	!
zFTPHandler.ftp_openc	Cst||||||ddS)N
persistentF)
ftpwrapper)r~rr!rtr0rrGrIrIrJrszFTPHandler.connect_ftpN)rrrrrrIrIrIrJr+s5c@sXeZdZddZddZddZddZd	d
ZddZd
S)r,cCs1i|_i|_d|_d|_d|_dS)Nr<rd)cacherGsoonestdelay	max_conns)r~rIrIrJrs
				zCacheFTPHandler.__init__cCs
||_dS)N)r)r~trIrIrJ
setTimeoutszCacheFTPHandler.setTimeoutcCs
||_dS)N)r)r~rrIrIrJsetMaxConnsszCacheFTPHandler.setMaxConnscCs|||dj||f}||jkrJtj|j|j|<n<t|||||||j|<tj|j|j|<|j|j|S)Nr)joinrrerrGrcheck_cache)r~rr!rtr0rrGrrIrIrJrs
zCacheFTPHandler.connect_ftpcCstj}|j|krrxTt|jjD]=\}}||kr1|j|j|j|=|j|=q1Wtt|jj|_t	|j|j
krxGt|jjD]0\}}||jkr|j|=|j|=PqWtt|jj|_dS)N)rerrrGryrrminvaluesr^r)r~rrrrIrIrJrs"
"

zCacheFTPHandler.check_cachecCsBx!|jjD]}|jqW|jj|jjdS)N)rrrclearrG)r~connrIrIrJclear_caches
zCacheFTPHandler.clear_cacheN)	rrrrrrrrrrIrIrIrJr,sc@seZdZddZdS)r-cCs|j}|jdd\}}|jdd\}}t|}|jdrstj|}|dd}|sd}tjd|t|f}t	t
j|||S)	N:rOrz;base64ztext/plain;charset=US-ASCIIz$Content-type: %s
Content-length: %d
i)rnr?rendswithrdecodebytesrrr^rioBytesIO)r~rrErrFZ	mediatypercrIrIrJ	data_opens
		zDataHandler.data_openN)rrrrrIrIrIrJr-srnt)r4r3cCs
t|S)N)r
)pathnamerIrIrJr42scCs
t|S)N)r	)rrIrIrJr37sc@s+eZdZdZdeZdddZddZddZd	d
Z	ddZ
dd
dZdddZdddZ
dddddZddZdddZdddZddZerddZddd Zd!d"Zd#d$Zd%d&Zdd'd(ZdS))r8NzPython-urllib/%scKsdd|jji}tj|tdd|dkrAt}||_|jd|_|jd|_	d|j
fd
g|_g|_t
j|_d|_t|_dS)NzW%(class)s style of invoking requests is deprecated. Use newer urlopen functions/methodsclass
stacklevelr:key_file	cert_filez
User-AgentAccept*/*)rr)r9rrCrDDeprecationWarningr5rrrrversionr_URLopener__tempfilesrTrj_URLopener__unlink	tempcacheftpcache)r~rZx509rrIrIrJrMs				zURLopener.__init__cCs|jdS)N)r)r~rIrIrJ__del__gszURLopener.__del__cCs|jdS)N)cleanup)r~rIrIrJrjszURLopener.closecCsm|jrSx7|jD],}y|j|Wqtk
r>YqXqW|jdd=|jri|jjdS)N)rrrkrr)r~rKrIrIrJrms	
		zURLopener.cleanupcGs|jj|dS)N)rr[)r~rrIrIrJ	addheader{szURLopener.addheadercCstt|}t|dd}|jrn||jkrn|j|\}}t|d}t|||St|\}}|sd}||jkr|j|}t|\}}	t|	\}
}|
|f}nd}d|}||_	|j
dd}t||s"|dkrK|r;|j|||S|j
||Sy9|dkrmt|||St||||SWnattfk
rYnGtk
r}
z'td	|
jtjd
WYdd}
~
XnXdS)Nrz%/:=&?~#+!$,;'@()*[]|rrKZopen_-rrzsocket errorr)rrr	rrDrrrrrrropen_unknown_proxyopen_unknownrrrrkrrr)r~rrFr`rcrburltyperEr	proxyhostrtrrYrrIrIrJrDs<

	zURLopener.opencCs(t|\}}tdd|dS)Nz	url errorzunknown url type)rrk)r~rrFrrErIrIrJrszURLopener.open_unknowncCs,t|\}}tdd||dS)Nz	url errorzinvalid proxy for %s)rrk)r~rrrFrrErIrIrJrszURLopener.open_unknown_proxyc Cstt|}|jr5||jkr5|j|St|\}}|dkr|sf|dkryC|j|}|j}|jtt|d|fSWn%t	k
r}	zWYdd}	~	XnX|j
||}z|j}
|r
t
|d}nddl}t|\}
}t|p4d\}
}t|pLd\}}
t
|pdd\}}
tjj|d}|j|\}}|jj|tj|d}z||
f}|jdk	r||j|<d}d}d}d}d|
krt|
d	}|r2||||xW|j|}|sKP|t|7}|j||d7}|r5||||q5WWd|jXWd|jX|dkr||krtd
||f||S)
NrKrOrLrrlirNzcontent-lengthzContent-Lengthz1retrieval incomplete: got only %i out of %i bytesi rP)rrrrrrSrr4rrkrDrWrrrTrUsplitextmkstemprr[fdopenr\r]r^r_r)r~rEr`rarFrZurl1rbrrrcrdrWZgarbagerUsuffixfdrerfrgr]rhrirIrIrJretrievesl



zURLopener.retrievecCsd}d}t|trZt|\}}|rQt|\}}t|}|}n|\}}t|\}}t|\}	}
|
}d}|	jdkrd}nUt|
\}}
|rt|\}}|rd|	||
f}t|r|}|stdd|rNt|}t	j
|jjd}nd}|rt|}t	j
|jjd}nd}||}
i}|rd||d<|rd||d<|r||d	<d
|d<x!|j
D]\}}|||<qW|dk	r4d|d
<|
jd|||n|
jd|d|y|
j}Wn$tjjk
rtdYnXd|jkodknrt||jd||jS|j||j|j|j|j|SdS)Nrz	%s://%s%sz
http errorz
no host givenrzBasic %szProxy-AuthorizationrNrmrrz!application/x-www-form-urlencodedzContent-Typerrrcz$http protocol error: bad status lineri,zhttp:)rrrrr
rrrrrkrrrr rrsrrrZ
BadStatusLinerstatusrr
http_errorrbr)r~Zconnection_factoryrErFZuser_passwdZproxy_passwdrtrZrealhostrrZ
proxy_authrMZ	http_connrcheaderrrrIrIrJ_open_generic_httpsr
		!!



	zURLopener._open_generic_httpcCs|jtjj||S)N)rrrr)r~rErFrIrIrJ	open_httpNszURLopener.open_httpc
Csd|}t||rtt||}|dkrO||||||}	n|||||||}	|	rt|	S|j|||||S)Nz
http_error_%d)rrr)
r~rErberrcodeerrmsgrcrFrYr}rerIrIrJrRs
zURLopener.http_errorcCs&|jt||||ddS)N)rr)r~rErbrrrcrIrIrJrbs
zURLopener.http_error_defaultcCs"tjj|d|jd|jS)Nrr)rrrrr)r~rtrIrIrJ_https_connectionhs	zURLopener._https_connectioncCs|j|j||S)N)rr)r~rErFrIrIrJ
open_httpsmszURLopener.open_httpscCst|tstd|dddkrr|dddkrr|ddjdkrrtdn
|j|SdS)	NzEfile error: proxy support for file protocol currently not implementedrz//r:rz
localhost/z-file:// scheme is supported only on localhost)rrrrrr?r)r~rErIrIrJ	open_fileqs
HzURLopener.open_filecCsddl}ddl}t|\}}t|}ytj|}Wn:tk
r}zt|j|j	WYdd}~XnX|j
}	|jj|j
dd}
|j|d}|jd|pd|	|
f}|s$|}
|dddkrd|}
tt|d	||
St|\}}|rtj|tftkr|}
|dddkrd|}
n&|dd
dkrtd|tt|d	||
Std
dS)NrrTz6Content-Type: %s
Content-Length: %d
Last-modified: %s
z
text/plainrOrzfile://rrz./zAlocal file url may start with / or file:. Unknown url of type: %sz#local file error: not on local host)rrrr4rTrrkrstrerrorr`rrrrrrrrDr
rrrthishostr?)r~rErrrtrKZ	localnamerergrrrcZurlfiler0rIrIrJrzs:(	
"
zURLopener.open_local_filecCsst|tstdddl}t|\}}|sKtdt|\}}t|\}}|rt|\}}nd}t|}t|pd}t|pd}t	j
|}|sddl}|j}nt
|}t|\}}	t|}|jd}
|
dd|
d}
}|
rb|
drb|
dd}
|
r}|
dr}d|
d<|||dj|
f}t|jtkrxDt|jD]3}
|
|kr|j|
}|j|
=|jqWy-||jkr%t|||||
|j|<|s4d}nd}xJ|	D]B}t|\}}|jd	krA|dkrA|j}qAW|j|j||\}}|jd|d}d}|r|d|7}|dk	r|dkr|d|7}tj|}t||d|SWnKtk
rn}z(td|j t!j"dWYdd}~XnXdS)NzCftp error: proxy support for ftp protocol currently not implementedrzftp error: no host givenrlrrOrrSrrrrr{zftp:zContent-Type: %s
zContent-Length: %d
zftp error %rrrPrP)rrrrSr{r)#rrrrrr
rrr
rrrrr\rr?rr^rMAXFTPCACHErrrrrrrrrrrr	ftperrorsrrr)r~rErrtrUr0rr!rrrrKrrrrrrrbrrrcrrIrIrJopen_ftpsp


	
zURLopener.open_ftpc	Cst|tstdy|jdd\}}Wn!tk
rZtddYnX|sgd}|jd}|dkrd	||dkr||dd}|d|}nd
}g}|jdtj	dtj
tj|jd
||dkr8tj|j
djd}nt|}|jdt||jd
|j|dj|}tj|}tj|}t|||S)NzEdata error: proxy support for data protocol currently not implementedrrOz
data errorzbad data URLztext/plain;charset=US-ASCII;rrrlzDate: %sz%a, %d %b %Y %H:%M:%S GMTzContent-type: %srrzlatin-1zContent-Length: %d
)rrrr?r?rkrfindr[restrftimegmtimerrrr r
r^rrrrStringIOr)	r~rErFrZsemirrrcfrIrIrJ	open_datas6
"$

zURLopener.open_data)rrrrrrrrrrrrDrrrrrrrr@rrrrrrrIrIrIrJr8@s,
$B\	 :c@seZdZddZddZdddZdd	Zdd
dZddd
ZdddZ	ddddZ
ddddZdddZdddZ
dddZdddZdddZd d!ZdS)"r9cOs2tj|||i|_d|_d|_dS)Nrr)r8r
auth_cachetriesmaxtries)r~rr8rIrIrJrs		zFancyURLopener.__init__cCst||d||S)Nzhttp:)r)r~rErbrrrcrIrIrJrsz!FancyURLopener.http_error_defaultNc	
Cs|jd7_z{|jrg|j|jkrgt|drH|j}n	|j}|||dd|S|j||||||}|SWdd|_XdS)NrOhttp_error_500iz)Internal Server Error: Redirect Recursionr)rrrrrredirect_internal)	r~rErbrrrcrFrrerIrIrJrs	zFancyURLopener.http_error_302c	Csd|kr|d}nd|kr2|d}ndS|jt|jd||}t|}|jd	krt|||d||||j|S)
Nrrrrrrrlz( Redirection to url '%s' is not allowed.)rrrrl)rrrrrrrD)	r~rErbrrrcrFrr	rIrIrJrs


	z FancyURLopener.redirect_internalcCs|j||||||S)N)r)r~rErbrrrcrFrIrIrJr9szFancyURLopener.http_error_301cCs|j||||||S)N)r)r~rErbrrrcrFrIrIrJr
=szFancyURLopener.http_error_303cCsE|dkr(|j||||||S|j|||||SdS)N)rr)r~rErbrrrcrFrIrIrJrAszFancyURLopener.http_error_307Fc
Csd|kr(tj|||||||d}tjd|}	|	sftj|||||||	j\}
}|
jdkrtj|||||||stj||||||d|jd}|dkrt||||St|||||SdS)Nzwww-authenticatez![ 	]*([^ 	]+)[ 	]+realm="([^"]*)"r<Zretry__basic_auth)r8rrQmatchrBrrrr)
r~rErbrrrcrFr|stuffrrr'rYrIrIrJrUHs&



zFancyURLopener.http_error_401c
Csd|kr(tj|||||||d}tjd|}	|	sftj|||||||	j\}
}|
jdkrtj|||||||stj||||||d|jd}|dkrt||||St|||||SdS)Nzproxy-authenticatez![ 	]*([^ 	]+)[ 	]+realm="([^"]*)"r<Zretry_proxy_r)r8rrQrrBrrrr)
r~rErbrrrcrFr|rrrr'rYrIrIrJrVas&



zFancyURLopener.http_error_407cCst|\}}d||}|jd}t|\}}	t|	\}	}
|	jdd}|	|d}	|j|	||\}}
|p|
sdSdt|ddt|
dd|	f}	d|	|
|jd<|dkr|j|S|j||SdS)Nzhttp://r@rOz%s:%s@%srrl)rrrrget_user_passwdr	rD)r~rEr'rFrtrrrrr
proxyselectorrrr!rIrIrJretry_proxy_http_basic_authzs 

z*FancyURLopener.retry_proxy_http_basic_authcCst|\}}d||}|jd}t|\}}	t|	\}	}
|	jdd}|	|d}	|j|	||\}}
|p|
sdSdt|ddt|
dd|	f}	d|	|
|jd<|dkr|j|S|j||SdS)Nzhttps://rrrOz%s:%s@%srrl)rrrrrr	rD)r~rEr'rFrtrrrrrrrrr!rIrIrJretry_proxy_https_basic_auths 

z+FancyURLopener.retry_proxy_https_basic_authc
Cst|\}}|jdd}||d}|j|||\}}|pY|s`dSdt|ddt|dd|f}d||}	|dkr|j|	S|j|	|SdS)NrrOz%s:%s@%srrlzhttp://)rrrr	rD)
r~rEr'rFrtrrrr!rrIrIrJrFs
z$FancyURLopener.retry_http_basic_authc
Cst|\}}|jdd}||d}|j|||\}}|pY|s`dSdt|ddt|dd|f}d||}	|dkr|j|	S|j|	|SdS)NrrOz%s:%s@%srrlzhttps://)rrrr	rD)
r~rEr'rFrtrrrr!rrIrIrJretry_https_basic_auths
z%FancyURLopener.retry_https_basic_authrcCs|d|j}||jkrA|r6|j|=n|j|S|j||\}}|se|rx||f|j|<||fS)Nr)rrrprompt_user_passwd)r~rtr'rrrr!rIrIrJrs
zFancyURLopener.get_user_passwdcCspddl}y@td||f}|jd|||f}||fSWntk
rktdSYnXdS)NrzEnter username for %s at %s: z#Enter password for %s in %s at %s: )NN)getpassinputKeyboardInterruptprint)r~rtr'r$rr!rIrIrJr#s	
z!FancyURLopener.prompt_user_passwd)rrrrrrrrr
rrUrVr r!rFr"rr#rIrIrIrJr9s"cCstdkrtjdatS)Nr)
_localhostrrrIrIrIrJrsrcCsdtdkr`y#ttjtjdaWn.tjk
r_ttjddaYnXtS)Nrr)	_thishostr&rrrrrIrIrIrJrs#rcCs%tdkr!ddl}|jatS)Nr)
_ftperrorsrr)rrIrIrJrs	rcCstdkrtjdatS)Nrl)
_noheadersrrrIrIrIrJ	noheaderssr,c@sjeZdZddddZddZddZd	d
ZddZd
dZddZ	dS)rNTc	Csr||_||_||_||_||_||_d|_||_y|jWn|j	YnXdS)Nr)
rr!rtr0rrGrefcount	keepaliveinitr)r~rr!rtr0rrGrrIrIrJrs								
zftpwrapper.__init__cCsddl}d|_|j|_|jj|j|j|j|jj|j	|j
dj|j}|jj
|dS)Nrr)rbusyZFTPrconnectrtr0rGZloginrr!rrcwd)r~r_targetrIrIrJr/	s	zftpwrapper.initc-Cs1ddl}|j|dkr1d}d}nd|}d}y|jj|Wn/|jk
r|j|jj|YnXd}|r*|r*y&d|}|jj|\}}Wng|jk
r)}zDt|ddd	krt	d
|j
tjdWYdd}~XnX|s|jjd|r|jj
}	zVy|jj|Wn;|jk
r}zt	d
||WYdd}~XnXWd|jj|	Xd|}nd
}|jj|\}}d|_t|jd|j}
|jd7_|j|
|fS)Nrr{rzTYPE ArOzTYPE zRETR r:Z550z
ftp error: %rrzLIST LISTr)r{r)rendtransferrZvoidcmdrr/ZntransfercmdZ
error_permrrrrrpwdr2r0rmakefile
file_closer-r)r~rKrrcmdisdirrrrr6ZftpobjrIrIrJr	sN
	



&*
	
zftpwrapper.retrfilecCs
d|_dS)Nr)r0)r~rIrIrJr5D	szftpwrapper.endtransfercCs&d|_|jdkr"|jdS)NFr)r.r-
real_close)r~rIrIrJrG	s	zftpwrapper.closecCs@|j|jd8_|jdkr<|jr<|jdS)NrOr)r5r-r.r;)r~rIrIrJr8L	s
zftpwrapper.file_closecCs7|jy|jjWntk
r2YnXdS)N)r5rrr)r~rIrIrJr;R	s

zftpwrapper.real_close)
rrrrr/rr5rr8r;rIrIrIrJrs	-rcCsi}xYtjjD]H\}}|j}|r|dddkr|||dd<qWdtjkr|jddxvtjjD]e\}}|dddkr|j}|r|||dd<q|j|dd	dqW|S)
N_proxyZREQUEST_METHODriiiii)rTenvironryrrr)rrYrrIrIrJgetproxies_environmentZ	s	r?c
Cs|dkrt}y|d}Wntk
r;dSYnX|dkrLdSt|\}}dd|jdD}xp|D]h}|r|jd}tj|}d	|}tj||tjstj||tjrdSqWdS)
Nnor*rOcSsg|]}|jqSrI)rO)rrrIrIrJr%	s	z,proxy_bypass_environment.<locals>.<listcomp>r.z
(.+\.)?%s$)	r?rtr
r?lstriprQrrrS)rtrZno_proxyhostonlyr0Z
no_proxy_listrYpatternrIrIrJproxy_bypass_environmenty	s&	
	

rFc
Cszddlm}t|\}}dd}d|krH|drHdSd}x%|jdfD]}|spqatjd	|}|dk	r_|dkrytj|}||}Wntk
rwaYnX||jd
}	|jd}
|
dkr$d|jd
j	dd
}
nt
|
d
d}
d
|
}
||
?|	|
?krrdSqa|||radSqaWdS)Nr)fnmatchcSs|jd}ttt|}t|dkrV|ddddgdd}|dd>|dd>B|dd>B|d	BS)
NrBrrrOrdrrNr:)r?rrr\r^)ZipAddrr/rIrIrJip2num	s
 z,_proxy_bypass_macosx_sysconf.<locals>.ip2numrBZexclude_simpleT
exceptionsz(\d+(?:\.\d+)*)(/\d+)?rOrrN F)rGr
rrQrrrrkgroupcountr\)rtproxy_settingsrGrDr0rIZhostIPrrr3maskrIrIrJ_proxy_bypass_macosx_sysconf	s:

#
rPdarwin)_get_proxy_settings_get_proxiescCst}t||S)N)rRrP)rtrNrIrIrJproxy_bypass_macosx_sysconf	s	rTcCstS)N)rSrIrIrIrJgetproxies_macosx_sysconf	srUcCs*t}|rt||St|SdS)N)r?rFrT)rtrrIrIrJr	s	
rcCstptS)N)r?rUrIrIrIrJr5	scCsfi}yddl}Wntk
r.|SYnXy|j|jd}|j|dd}|r9t|j|dd}d|krx|jdD]J}|jdd\}}tjd|sd	||f}|||<qWnM|dd
dkr||d<n*d
||d<d||d<d||d<|j	Wnt
ttfk
raYnX|S)Nrz;Software\Microsoft\Windows\CurrentVersion\Internet SettingsProxyEnableZProxyServerrr
rOz^([^/:]+)://z%s://%sr[zhttp:rz	http://%sz
https://%srzftp://%sr)
winregImportErrorOpenKeyHKEY_CURRENT_USERQueryValueExrr?rQrZCloserkr?r)rrWinternetSettingsproxyEnableZproxyServerpraddressrIrIrJgetproxies_registry	s8
			

r`cCstptS)N)r?r`rIrIrIrJr5(
sc&Csyddl}Wntk
r(dSYnXyK|j|jd}|j|dd}t|j|dd}Wntk
rdSYnX|s|rdSt|\}}|g}y,tj	|}||kr|j
|Wntk
rYnXy,tj|}||kr&|j
|Wntk
r;YnX|jd}x|D]}	|	dkrtd|krtdS|	j
dd	}	|	j
d
d}	|	j
dd}	x*|D]"}
tj|	|
tjrdSqWqRWdS)
Nrz;Software\Microsoft\Windows\CurrentVersion\Internet SettingsrVZ
ProxyOverrider
z<local>rBrOz\.rAz.*?)rWrXrYrZr[rrkr
rrr[getfqdnr?rrQrrS)rtrWr\r]Z
proxyOverrideZrawHostr0addrZfqdnr4rrIrIrJproxy_bypass_registry1
sR
			

		



rdcCs*t}|rt||St|SdS)N)r?rFrd)rtrrIrIrJrc
s	
)~rrrrhZhttp.clientrrrTr1rQrrrrerrWrQrCZurllib.errorrrrZurllib.parserrrrr	r
rrr
rrrrrrrrrZurllib.responserrrArXr@__all__rrrCrr0r1rZr6r7rRASCIIrprurrr2rr/rrrrr r!r"r#r$r%urandomrgr&r'r(r}r)rrrBr[rr.r^r`r*rr+r,r-r
rYZ
nturl2pathr4r3rr8r9r(rr)rr*rr+r,rr?rFrPplatformZ_scproxyrRrSrTrUrr5r`rdrIrIrIrJ<module>Tsv
					!?n$q*@
P	r


+3:5!

_#<

-	2