ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ A[c@`sdZddlmZmZmZmZddlmZmZm Z m Z m Z m Z m Z mZddlmZmZmZddlZddlZddlZddlZddlmZddlmZdd lmZmZmZdd 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/m0Z0m1Z1dd l2m3Z3m4Z4ddl5Z5ddl6Z6ddl7Z7ddl8Z8ddl9Z9ddl:Z:ddl;Z;ddl<Z<ddl=Z=ddl>Z>ddl?Z?y ddl@Z@dd l@mAZAWneBk r-eCZDnXeEZDd ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+gZFe:jGd, ZHeIaJeIe9jKd-ZLd.ZMgZNeIeIeId/ZOd0ZPere8jQd1e8jRZSne8jQd1ZSd2ZTd3eUfd4YZVd5eUfd6YZWd7ZXd8eUfd9YZYd:eYfd;YZZd<eYfd=YZ[d>eYfd?YZ\d@Z]dAeYfdBYZ^dCeUfdDYZ_dEe_fdFYZ`dGeUfdHYZadIeaeYfdJYZbdKeaeYfdLYZce6jdZedMeUfdNYZfdOeYeffdPYZgdQeYeffdRYZhdSeYfdTYZidUeifdVYZjekedWrdXeifdYYZleFjmdZnd[eYfd\YZnd]eYfd^YZod_Zpd`ZqdaeYfdbYZrdcZsddeYfdeYZtdfetfdgYZudhZve6jwdikrddjlxmyZymzZzndkZydlZziZ{dmeUfdnYZ|doe|fdpYZ}eIa~dqZeIadrZeIadsZeIadtZdueUfdvYZdwZdxZdyZe:jdzkrdd{lmZmZd|Zd}Zd~ZdZnBe6jwdikrdZdZdZdZn eZeZdS(u Ported using Python-Future from the Python 3.3 standard library. An extensible library for opening URLs using a variety of protocols The simplest way to use this module is to call the urlopen function, which accepts a string containing a URL or a Request object (described below). It opens the URL and returns the results as file-like object; the returned object has some extra methods described below. The OpenerDirector manages a collection of Handler objects that do all the actual work. Each Handler implements a particular protocol or option. The OpenerDirector is a composite object that invokes the Handlers needed to open the requested URL. For example, the HTTPHandler performs HTTP GET and POST requests and deals with non-error returns. The HTTPRedirectHandler automatically deals with HTTP 301, 302, 303 and 307 redirect errors, and the HTTPDigestAuthHandler deals with digest authentication. urlopen(url, data=None) -- Basic usage is the same as original urllib. pass the url and optionally data to post to an HTTP URL, and get a file-like object back. One difference is that you can also pass a Request instance instead of URL. Raises a URLError (subclass of IOError); for HTTP errors, raises an HTTPError, which can also be treated as a valid response. build_opener -- Function that creates a new OpenerDirector instance. Will install the default handlers. Accepts one or more Handlers as arguments, either instances or Handler classes that it will instantiate. If one of the argument is a subclass of the default handler, the argument will be installed instead of the default. install_opener -- Installs a new opener as the default opener. objects of interest: OpenerDirector -- Sets up the User Agent as the Python-urllib client and manages the Handler classes, while dealing with requests and responses. Request -- An object that encapsulates the state of a request. The state can be as simple as the URL. It can also include extra HTTP headers, e.g. a User-Agent. BaseHandler -- internals: BaseHandler and parent _call_chain conventions Example usage: import urllib.request # set up authentication info authinfo = urllib.request.HTTPBasicAuthHandler() authinfo.add_password(realm='PDQ Application', uri='https://mahler:8092/site-updates.py', user='klem', passwd='geheim$parole') proxy_support = urllib.request.ProxyHandler({"http" : "http://ahad-haam:3128"}) # build a new opener that adds authentication and caching FTP handlers opener = urllib.request.build_opener(proxy_support, authinfo, urllib.request.CacheFTPHandler) # install it urllib.request.install_opener(opener) f = urllib.request.urlopen('http://www.python.org/') i(tabsolute_importtdivisiontprint_functiontunicode_literals(tbytestdicttfiltertinputtinttmaptopentstr(tPY2tPY3traise_with_tracebackN(temail(tclienti(tURLErrort HTTPErrortContentTooShortError(turlparseturlsplitturljointunwraptquotetunquotet splittypet splithostt splitportt splitusert splitpasswdt splitattrt splitqueryt splitvaluetsplittagtto_bytest urlunparse(t addinfourlt addclosehook(t SSLContextuRequestuOpenerDirectoru BaseHandleruHTTPDefaultErrorHandleruHTTPRedirectHandleruHTTPCookieProcessoru ProxyHandleruHTTPPasswordMgruHTTPPasswordMgrWithDefaultRealmuAbstractBasicAuthHandleruHTTPBasicAuthHandleruProxyBasicAuthHandleruAbstractDigestAuthHandleruHTTPDigestAuthHandleruProxyDigestAuthHandleru HTTPHandleru FileHandleru FTPHandleruCacheFTPHandleruUnknownHandleruHTTPErrorProcessoruurlopenuinstall_openeru build_openeru pathname2urlu url2pathnameu getproxiesu urlretrieveu urlcleanupu URLopeneruFancyURLopeneric K`sKd|kr |d}|d=nt}d|krF|d}|d=nd}d|krl|d}|d=nd}|s|s|rtstdntjtj}|jtjO_tj |_ |s|r|j ||n |j t d|dt}t|} n"tdkr2ta} nt} | j|||S(Nu cadefaultucapathucafileuSSL support not availabletcontexttcheck_hostname(tFalsetNonet _have_sslt ValueErrortsslR'tPROTOCOL_SSLv23toptionst OP_NO_SSLv2t CERT_REQUIREDt verify_modetload_verify_locationstset_default_verify_pathst HTTPSHandlertTruet build_openert_openerR ( turltdatattimeoutt _3to2kwargst cadefaulttcapathtcafileR(t https_handlertopener((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyturlopens6       cC`s |adS(N(R9(RB((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytinstall_openersc C`st|\}}tjt||K}|j}|dkrb| rbtjj||fS|rzt|d}n(t j dt }|j }t j||||f} d } d} d} d} d|krt|d } n|r|| | | nxctrj|j| }|s'Pn| t|7} |j|| d 7} |r|| | | qqWWd QXWd QX| dkr| | krtd | | f| n| S(uW Retrieve a URL into a temporary location on disk. Requires a URL argument. If a filename is passed, it is used as the temporary file location. The reporthook argument should be a callable that accepts a block number, a read size, and the total file size of the URL target. The data argument should be valid URL encoded data. If a filename is passed and the URL points to a local resource, the result is a copy from local file to new file. Returns a tuple containing the path to the newly created data file as well as the resulting HTTPMessage object. ufileuwbtdeleteiiiiucontent-lengthuContent-LengthiNu1retrieval incomplete: got only %i out of %i bytesi (Rt contextlibtclosingRCtinfotostpathtnormpathR ttempfiletNamedTemporaryFileR*tnamet_url_tempfilestappendRR7treadtlentwriteR(R:tfilenamet reporthookR;turl_typeRJtfptheadersttfptresulttbstsizeRQtblocknumtblock((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt urlretrievesD        #cC`sMx3tD]+}ytj|Wqtk r1qXqWt2trIdandS(N(RORItunlinktEnvironmentErrorR9R+(t temp_file((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt urlcleanups  u:\d+$cC`sY|j}t|d}|dkr:|jdd}ntjd|d}|jS(uReturn request-host, as defined by RFC 2965. Variation from RFC: returned value is lowercased, for convenient comparison. iuuHost(tfull_urlRt get_headert _cut_port_retsubtlower(trequestR:thost((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt request_hosts   tRequestcB`seZdideddZdZdZdZdZdZ dZ dZ dZ d Z d Zd Zd Zd ZdZdZdZddZdZRS(c C`st||_t|j\|_|_||_i|_d|_x*|jD]\}}|j ||qRWi|_ |dkrt |}n||_ ||_ ||_|jdS(N(RRdR"tfragmentR;RXR+t _tunnel_hosttitemst add_headertunredirected_hdrsRktorigin_req_hostt unverifiabletmethodt_parse( tselfR:R;RXRrRsRttkeytvalue((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt__init__s        cC`swt|j\|_}|jdkr=td|jnt|\|_|_|jrst|j|_ndS(Nuunknown url type: %r( RRdttypeR+R-RRjtselectorR(Rvtrest((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRu(s  cC`s1|jdk r|jS|jdk r)dSdSdS(u3Return a string indicating the HTTP request method.uPOSTuGETN(RtR+R;(Rv((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt get_method0s cC`s(|jrd|j|jfS|jSdS(Nu%s#%s(RmRd(Rv((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt get_full_url9s cC`s)d}tj|tdd||_dS(Nu&Request.add_data method is deprecated.t stackleveli(twarningstwarntDeprecationWarningR;(RvR;tmsg((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytadd_dataAscC`s)d}tj|tdd|jdk S(Nu&Request.has_data method is deprecated.Ri(RRRR;R+(RvR((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pythas_dataFscC`s#d}tj|tdd|jS(Nu&Request.get_data method is deprecated.Ri(RRRR;(RvR((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytget_dataKscC`s#d}tj|tdd|jS(Nu&Request.get_type method is deprecated.Ri(RRRRz(RvR((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytget_typePscC`s#d}tj|tdd|jS(Nu&Request.get_host method is deprecated.Ri(RRRRj(RvR((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytget_hostUscC`s#d}tj|tdd|jS(Nu*Request.get_selector method is deprecated.Ri(RRRR{(RvR((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt get_selectorZscC`s#d}tj|tdd|jS(Nu-Request.is_unverifiable method is deprecated.Ri(RRRRs(RvR((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytis_unverifiable_scC`s#d}tj|tdd|jS(Nu1Request.get_origin_req_host method is deprecated.Ri(RRRRr(RvR((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytget_origin_req_hostdscC`sJ|jdkr(|j r(|j|_n||_|j|_||_dS(Nuhttps(RzRnRjRdR{(RvRjRz((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt set_proxyks   cC`s|j|jkS(N(R{Rd(Rv((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt has_proxysscC`s||j|js RXRrRs(i-i.i/i3(uGETuHEAD(i-i.i/(ucontent-lengthu content-type( R}RRdtreplaceRRXRoRlRrR7( RvRRWRRRXtnewurltmt newheaders((RsP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytredirect_requestvs %  c C`sd|kr|d}nd|kr2|d}ndSt|}|jdkrvt||d||f||n|jst|}d|d >> _parse_proxy('file:/ftp.example.com/') Traceback (most recent call last): ValueError: proxy URL with no authority: 'file:/ftp.example.com/' The first three items of the returned tuple may be None. Examples of authority parsing: >>> _parse_proxy('proxy.example.com') (None, None, None, 'proxy.example.com') >>> _parse_proxy('proxy.example.com:3128') (None, None, None, 'proxy.example.com:3128') The authority component may optionally include userinfo (assumed to be username:password): >>> _parse_proxy('joe:password@proxy.example.com') (None, 'joe', 'password', 'proxy.example.com') >>> _parse_proxy('joe:password@proxy.example.com:3128') (None, 'joe', 'password', 'proxy.example.com:3128') Same examples, but with URLs instead: >>> _parse_proxy('http://proxy.example.com/') ('http', None, None, 'proxy.example.com') >>> _parse_proxy('http://proxy.example.com:3128/') ('http', None, None, 'proxy.example.com:3128') >>> _parse_proxy('http://joe:password@proxy.example.com/') ('http', 'joe', 'password', 'proxy.example.com') >>> _parse_proxy('http://joe:password@proxy.example.com:3128') ('http', 'joe', 'password', 'proxy.example.com:3128') Everything after the authority is ignored: >>> _parse_proxy('ftp://joe:password@proxy.example.com/rubbish:3128') ('ftp', 'joe', 'password', 'proxy.example.com') Test for no trailing '/' case: >>> _parse_proxy('http://joe:password@proxy.example.com') ('http', 'joe', 'password', 'proxy.example.com') u/u//uproxy URL with no authority: %riiN(RRR+R-RRR( tproxyRtr_schemet authoritytendtuserinfothostporttusertpassword((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt _parse_proxys2      RcB`s#eZdZddZdZRS(idcC`se|dkrt}n||_x=|jD]/\}}t|d||||jdq.WdS(Nu%s_opencS`s||||S(N((trRRzR((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt)s(R+t getproxiestproxiesRotsetattrt proxy_open(RvR RzR:((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRy"s     c C`s|j}t|\}}}}|dkr6|}n|jrRt|jrRdS|r|rdt|t|f} tj| jj d} |j dd| nt|}|j ||||ks|dkrdS|j j |d|jSdS(Nu%s:%suasciiuProxy-authorizationuBasic uhttpsR<(RzRR+Rjt proxy_bypassRtbase64t b64encodetencodeRRpRRR R<( RvRRRzt orig_typet proxy_typeRRRt user_passtcreds((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyR ,s       N(RRRR+RyR (((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRs tHTTPPasswordMgrcB`s8eZdZdZdZedZdZRS(cC`s i|_dS(N(tpasswd(Rv((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRyJscC`st|tr|g}n||jkr:i|j|username="%s", realm="%s", nonce="%s", uri="%s", response="%s"u , opaque="%s"u , digest="%s"u, algorithm="%s"u, qop=auth, nc=%s, cnonce="%s"(RR+tKeyErrortget_algorithm_implsRR&RdR;tget_entity_digestR}R{RJRIR^R(RvRRQRRZtqopt algorithmtopaquetHtKDRR>tentdigtA1tA2tncvaluetcnoncetnoncebittrespdigR,((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRN9sV            ( c`sI|dkrdn|dkr0dnfd}|fS(NuMD5cS`stj|jdjS(Nuascii(RWtmd5RRY(tx((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyR xtuSHAcS`stj|jdjS(Nuascii(RWRXRRY(Ro((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyR zRpc`sd||fS(Nu%s:%s((R[td(Re(sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyR |Rp((RvRcRf((ResP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyR`us     cC`sdS(N(R+(RvR;RQ((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRasN( RRR+RyR3R<RKR^RNR`Ra(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRHs   < tHTTPDigestAuthHandlercB`s#eZdZdZdZdZRS(uAn authentication protocol defined by RFC 2069 Digest authentication improves on basic authentication because it does not transmit passwords in the clear. u AuthorizationicC`s9t|jd}|jd|||}|j|S(Niuwww-authenticate(RRdR<R3(RvRRWRRRXRjtretry((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyREs   (RRRR=RRE(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRrstProxyDigestAuthHandlercB`seZdZdZdZRS(uProxy-AuthorizationicC`s/|j}|jd|||}|j|S(Nuproxy-authenticate(RjR<R3(RvRRWRRRXRjRs((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRGs    (RRR=RRG(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRtstAbstractHTTPHandlercB`s/eZddZdZdZdZRS(icC`s ||_dS(N(t _debuglevel(Rvt debuglevel((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRyscC`s ||_dS(N(Rv(Rvtlevel((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytset_http_debuglevelsc C`s|j}|stdn|jdk rA|j}t|trZd}t|n|jds||jddn|jdsAd}yQt rt|t j rt ||j }nt |}t ||j }WnBtk r&t|tjr;tdt||fq;q>X|jdd|qAn|}|jr}t|j\}} t| \}} n|jds|jd|nxH|jjD]:\} } | j} |j| s|j| | qqW|S( Nu no host givenuLPOST data should be bytes or an iterable of bytes. It cannot be of type str.u Content-typeu!application/x-www-form-urlencodeduContent-lengthuBContent-Length should be specified for iterable data of type %r %ru%duHost(RjRR;R+RR RRRR tarrayRRtitemsizet memoryviewt collectionstIterableR-RzRRR{RRRR( RvRiRjR;RR\tmvtsel_hostRtseltsel_pathRNRx((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt do_request_sJ        c  `s|j}|stdn||d|j|}t|jjtfd|jjDdds ucloseu Connectioncs`s'|]\}}|j|fVqdS(N(ttitle(RRNR((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pys suProxy-AuthorizationRXN(RjRR<RRqRRXRoRnt set_tunnelRiR}R{R;RRRt getresponsetsockR+R~R:treasonR( Rvt http_classRthttp_conn_argsRjRttunnel_headerstproxy_auth_hdrterrR((RXsP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytdo_opens6 ,    &      (RRRyRyRR(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRus   3RcB`seZdZejZRS(cC`s|jtj|S(N(RRtHTTPConnection(RvR((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt http_opens(RRRRuRt http_request(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRs uHTTPSConnectionR6cB`s,eZddddZdZejZRS(icC`s&tj||||_||_dS(N(RuRyt_contextt_check_hostname(RvRwR(R)((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRy's cC`s%|jtj|d|jd|jS(NR(R)(RRtHTTPSConnectionRR(RvR((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt https_open,sN(RRR+RyRRuRt https_request(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyR6%s u HTTPSHandlertHTTPCookieProcessorcB`s2eZddZdZdZeZeZRS(cC`s=ddljjj}|dkr0|j}n||_dS(Ni(tfuture.backports.http.cookiejart backportsthttpt cookiejarR+t CookieJar(RvRthttp_cookiejar((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRy5s cC`s|jj||S(N(Rtadd_cookie_header(RvRi((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyR;scC`s|jj|||S(N(Rtextract_cookies(RvRiR((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyR?sN(RRR+RyRRRR(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyR4s    RcB`seZdZRS(cC`s|j}td|dS(Nuunknown url type: %s(RzR(RvRRz((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt unknown_openGs (RRR(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRFscC`smi}x`|D]X}|jdd\}}|ddkr[|ddkr[|dd!}n|||Parse list of key=value strings where keys are not duplicated.u=iiu"i(R4(tltparsedteltRR((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRLKs  cC`sg}d}t}}x|D]}|r?||7}t}qn|r|dkr]t}qn|dkrrt}n||7}qn|dkr|j|d}qn|dkrt}n||7}qW|r|j|ng|D]}|j^qS(upParse lists as described by RFC 2068 Section 2. In particular, parse comma-separated lists where the elements of the list may include quoted-strings. A quoted-string could contain a comma. A non-quoted string could have quotes in the middle. Neither commas nor quotes count if they are escaped. Only double-quotes count, not single-quotes. uu\u"u,(R*R7RPtstrip(R[trestparttescapeRtcur((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRMUs4            RcB`s)eZdZdZdZdZRS(cC`s||j}|d dkrk|dd!dkrk|jrk|jdkrk|j|jk rxtdqxn |j|SdS(Niu//iu/u localhostu-file:// scheme is supported only on localhost(R{Rjt get_namesRtopen_local_file(RvRR:((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt file_opens  ,cC`s|tjdkruy7ttjddtjtjdt_Wqutjk rqtjdft_quXntjS(Nu localhosti( RtnamesR+RRtgethostbyname_ext gethostnametgaierrort gethostbyname(Rv((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRs$cC`sUddljjj}ddl}|j}|j}t|}ytj |}|j }|j |j dt } |j|d} tjd| pd|| f} |rt|\}} n| s| r"t||jkr"|rd||} n d|} tt|d| | SWntk rD}t|nXtddS(Nitusegmtu6Content-type: %s Content-length: %d Last-modified: %s u text/plainufile://urbufile not on local host(tfuture.backports.email.utilsRRtutilst mimetypesRjR{t url2pathnameRItstattst_sizet formatdatetst_mtimeR7t guess_typetmessage_from_stringRt_safe_gethostbynameRR%R tOSErrorR(RvRt email_utilsRRjRTt localfiletstatsR\tmodifiedtmtypeRXR(torigurltexp((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRs0      N(RRRR+RRR(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRs  cC`s-ytj|SWntjk r(dSXdS(N(RRRR+(Rj((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRsRcB`seZdZdZRS(cC`sddl}ddl}|j}|s6tdnt|\}}|dkr`|j}n t|}t|\}}|rt |\}}nd}t |}|pd}|pd}yt j |}Wn"t j k r}t|nXt|j\} } | jd} ttt | } | d | d} } | rg| d rg| d} ny|j||||| |j} | rdpd}xM| D]E}t|\}}|jd kr|dkr|j}qqW| j| |\}}d}|j|jd}|r8|d|7}n|dk ra|dkra|d|7}ntj|}t|||jSWn0|jk r}td|}t|nXdS(Niuftp error: no host givenuu/iiuIuDutypeuauAuiuduContent-type: %s uContent-length: %d u ftp error: %r(uauAuiuIuduD( tftplibRRjRRR+tFTP_PORTRRRRRRRRR{R4RR t connect_ftpR<R!RhtuppertretrfileRRdRRR%t all_errorsR(RvRRRRjR(RRRRJtattrstdirstfiletfwRztattrRxRWtretrlenRXRRtexc((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytftp_opens\          !  c C`st||||||dtS(Nt persistent(t ftpwrapperR*(RvRRRjR(RR<((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRs(RRRR(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRs 5tCacheFTPHandlercB`s>eZdZdZdZdZdZdZRS(cC`s1i|_i|_d|_d|_d|_dS(Nii<i(tcacheR<tsoonesttdelayt max_conns(Rv((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRys     cC`s ||_dS(N(R(Rvtt((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt setTimeoutscC`s ||_dS(N(R(RvR((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt setMaxConnsscC`s|||dj||f}||jkrJtj|j|j|Default error handler: close the connection and raise IOError.N(RRR+(RvR:RWR RRX((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRfs cC`stj|d|jd|jS(NRR(RRRR(RvRj((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt_https_connectionls  cC`s|j|j||S(uUse HTTPS protocol.(R R(RvR:R;((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt open_httpsqscC`szt|tstdn|d dkri|dd!dkri|dd!jdkritdn |j|Sd S( u/Use local file or FTP depending on form of URL.uEfile error: proxy support for file protocol currently not implementediu//iu/i u localhost/u-file:// scheme is supported only on localhostN(RR RRhR-R(RvR:((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt open_fileus <cC`sddljjj}ddl}t|\}}t|}ytj|}Wn(t k r|}t |j |j nX|j } |j|jdt} |j|d} tjd| pd| | f} |s|} |d dkrd|} ntt|d | | St|\}}| rtj|tftkr|} |d dkrsd|} n#|d d krtd |ntt|d | | St d dS(uUse local file.iNRu6Content-Type: %s Content-Length: %d Last-modified: %s u text/plainiu/ufile://urbiu./uAlocal file url may start with / or file:. Unknown url of type: %su#local file error: not on local host(RRRRRRRRIRRRtstrerrorRTRRRR7RRR%R RRRt localhosttthishostR-(RvR:RRRjRt localnameRteR\RRRXturlfileR(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyR~s:    " cC`sdt|tstdnddl}t|\}}|sQtdnt|\}}t|\}}|rt|\}}nd}t |}t |pd}t |pd}t j |}|sddl }|j }n t|}t|\}} t |}|jd} | d | d} } | r_| d r_| d} n| r}| d r}d| dR=t real_close(Rv((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRH s cC`sC|j|jd8_|jdkr?|j r?|jndS(Nii(RGR=R>RR(Rv((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRNM s cC`s6|jy|jjWntk r1nXdS(N(RGRBRR(Rv((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRRS s  N( RRRR+R7RyR?RRGRRNRR(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRs 0   cC`s]i}xPtjjD]?\}}|j}|r|ddkr|||d proxy server URL mappings. Scan the environment for variables named _proxy; this seems to be the standard convention. If you need a different way, you can pass a proxies dictionary to the [Fancy]URLopener constructor. iu_proxy(RItenvironRoRh(R RNRx((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytgetproxies_environment[ s  cC`stjjddp'tjjdd}|dkr:dSt|\}}g|jdD]}|j^q\}x6|D].}|r{|j|s|j|r{dSq{WdS(uTest if proxies should not be used for a particular host. Checks the environment for a variable named no_proxy, which should be a list of DNS suffixes separated by commas, or '*' for all hosts. uno_proxyuuNO_PROXYu*iu,i(RIRSRRR4Rtendswith(Rjtno_proxythostonlyR(Rt no_proxy_listRN((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytproxy_bypass_environmentk s* ( $c C`s|ddlm}t|\}}d}d|krH|drHtSnd }x'|jdd D]}|ssqantjd|}|d k ra|d krytj|}||}Wqtj k rqaqXn||j d} |j d } | d kr,d |j dj dd} nt | d} d | } || ?| | ?krttSqa|||ratSqaWt S(uj Return True iff this host shouldn't be accessed using a proxy This function uses the MacOSX framework SystemConfiguration to fetch the proxy information. proxy_settings come from _scproxy._get_proxy_settings or get mocked ie: { 'exclude_simple': bool, 'exceptions': ['foo.bar', '*.bar.com', '127.0.0.1', '10.1', '10.0/16'] } i(tfnmatchcS`s|jd}ttt|}t|dkrS|ddddgd }n|dd>|dd>B|dd>B|d BS( Nu.iiiiiiii(R4RR RRR(tipAddrR'((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytip2num s u.uexclude_simpleu exceptionsu(\d+(?:\.\d+)*)(/\d+)?iiii N((RZRR7R+RRAR-RRRtgrouptcountRR*( Rjtproxy_settingsRZRWR(R\thostIPRxRR,tmask((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyt_proxy_bypass_macosx_sysconf s:        # udarwin(t_get_proxy_settingst _get_proxiescC`st}t||S(N(RcRb(RjR_((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytproxy_bypass_macosx_sysconf s cC`stS(uReturn a dictionary of scheme -> proxy server URL mappings. This function uses the MacOSX framework SystemConfiguration to fetch the proxy information. (Rd(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytgetproxies_macosx_sysconf scC`s!trt|St|SdS(N(RTRYRe(Rj((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyR s  cC`stptS(N(RTRf(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyR  scC`sai}yddl}Wntk r*|SXy|j|jd}|j|dd}|r5t|j|dd}d|krx|jdD]M}|jdd\}}tjd |sd ||f}n||| proxy server URL mappings. Win32 uses the registry to store proxies. iNu;Software\Microsoft\Windows\CurrentVersion\Internet Settingsu ProxyEnableu ProxyServeru=u;iu ^([^/:]+)://u%s://%siuhttp:uhttpu http://%su https://%suhttpsuftp://%suftp( twinregt ImportErrortOpenKeytHKEY_CURRENT_USERt QueryValueExR R4RAR-tCloset WindowsErrorR-R(R RgtinternetSettingst proxyEnablet proxyServertpRtaddress((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytgetproxies_registry s8        cC`stptS(uReturn a dictionary of scheme -> proxy server URL mappings. Returns settings gathered from the environment, if specified, or the registry. (RTRs(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyR  sc C`syddl}Wntk r$dSXyK|j|jd}|j|dd}t|j|dd}Wntk rdSX| s| rdSt|\}}|g}y/tj |}||kr|j |nWntj k rnXy/tj |}||kr&|j |nWntj k r=nX|j d}x|D]} | dkryd|krydSn| jdd } | jd d } | jd d} x*|D]"} tj| | tjrdSqWqTWdS( Niu;Software\Microsoft\Windows\CurrentVersion\Internet Settingsu ProxyEnableu ProxyOverrideu;uu.iu\.u*u.*u?(RgRhRiRjRkR RmRRRRPRtgetfqdnR4RRAR-RC( RjRgRnRot proxyOverridetrawHostR(taddrtfqdnR-R((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytproxy_bypass_registry sR               cC`s!trt|St|SdS(uReturn a dictionary of scheme -> proxy server URL mappings. Returns settings gathered from the environment, if specified, or the registry. N(RTRYRy(Rj((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pyRB s  (Rt __future__RRRRtfuture.builtinsRRRRRR R R t future.utilsR R RRRRWRztfuture.backportsRtfuture.backports.httpRRRRRRtparseRRRRRRRRRRRRR R!R"R#R$RR%R&R RIR*RARtsysRTR}RLRFRR.R'RhR*R,R7t__all__RRR+R9RRCRDROR_RcRBtASCIIRfRktobjectRlRR8RRRRRRRR/R0RDRFturandomRVRHRrRtRuRRR6RPRRRLRMRRRRRRNt nturl2pathRRRRR&R8RR9RR:RR;R<RRTRYRbtplatformt_scproxyRcRdReRfRR RsRy(((sP/opt/alt/python27/lib/python2.7/site-packages/future/backports/urllib/request.pytGs":    p                       ?  y &h H*@ E   z  +4 :8      ^   <    - 2