fqc'@sdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlmZmZmZddlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'ddl(m)Z)m*Z*yddl+Z+Wne,k re-Z.YnXe/Z.dddd d d d d ddddddddddddddddddd d!d"d#d$gZ0e j1dd%Z2e3a4d&e3d'e3d(e-e3e j5d)dZ6d*dZ7gZ8e3e3e3d+d!Z9d,d"Z:e j;d-e j<Z=d.d/Z>Gd0ddZ?Gd1ddZ@d2dZAGd3ddZBGd4ddeBZCGd5d d eBZDGd6d d eBZEd7d8ZFGd9d d eBZGGd:d d ZHGd;ddeHZIGd<ddZJGd=ddeJeBZKGd>ddeJeBZLejMZNGd?ddZOGd@ddeBeOZPGdAddeBeOZQGdBdCdCeBZRGdDddeRZSeTejUdErYGdFdGdGeRZVe0jWdGnGdHd d eBZXGdIddeBZYdJdKZZdLdMZ[GdNddeBZ\dOdPZ]GdQddeBZ^GdRdde^Z_dSZ`ejadTkrddUlbmcZcmdZdndVdZcdWdZdiZeGdXd#d#ZfGdYd$d$efZge3ahdZd[Zie3ajd\d]Zke3ald^d_Zme3and`daZoGdbdcdcZpdddeZqdfdgZrdhdiZse jtdjkr7ddklumvZvmwZwdldmZxdndoZydpdqZzdrd Z{nNejadTkrydsdtZ|dud Z{dvdwZ}dxdqZzn eqZ{erZzdS(yu 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/') iN(uURLErroru HTTPErroruContentTooShortError(uurlparseuurlsplituurljoinuunwrapuquoteuunquoteu splittypeu splithostu splitportu splituseru splitpasswdu splitattru splitqueryu splitvalueusplittaguto_bytesu urlunparse(u addinfourlu addclosehookuRequestuOpenerDirectoru BaseHandleruHTTPDefaultErrorHandleruHTTPRedirectHandleruHTTPCookieProcessoru ProxyHandleruHTTPPasswordMgruHTTPPasswordMgrWithDefaultRealmuAbstractBasicAuthHandleruHTTPBasicAuthHandleruProxyBasicAuthHandleruAbstractDigestAuthHandleruHTTPDigestAuthHandleruProxyDigestAuthHandleru HTTPHandleru FileHandleru FTPHandleruCacheFTPHandleruUnknownHandleruHTTPErrorProcessoruurlopenuinstall_openeru build_openeru pathname2urlu url2pathnameu getproxiesu urlretrieveu urlcleanupu URLopeneruFancyURLopeneriucafileucapathu cadefaultc Cs|s|s|rts'tdntjtj}|jtjO_tj|_|sc|rv|j ||n |j t d|dd}t |}n"tdkrt a}nt}|j|||S(NuSSL support not availableucontextucheck_hostnameT(u _have_sslu ValueErrorusslu SSLContextuPROTOCOL_SSLv23uoptionsu OP_NO_SSLv2u CERT_REQUIREDu verify_modeuload_verify_locationsuset_default_verify_pathsu HTTPSHandleruTrueu build_openeru_openeruNoneuopen( uurludatautimeoutucafileucapathu cadefaultucontextu https_handleruopener((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuurlopens    cCs |adS(N(u_opener(uopener((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuinstall_openerscCst|\}}tjt||D}|j}|dkrb| rbtjj||fS|rzt|d}n(t j dd }|j }t j||||f} d } d} d} d} d|krt|d } n|r|| | | nx\|j| }|s!Pn| t|7} |j|| d7} |r|| | | qqWd 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. ufileuwbudeleteiiiiucontent-lengthuContent-LengthNu1retrieval incomplete: got only %i out of %i bytesFi i(u splittypeu contextlibuclosinguurlopenuinfouosupathunormpathuopenutempfileuNamedTemporaryFileuFalseunameu_url_tempfilesuappenduintureadulenuwriteuContentTooShortError(uurlufilenameu reporthookudatauurl_typeupathufpuheadersutfpuresultubsusizeureadublocknumublock((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu urlretrievesD       "c CsWx4tD],}ytj|Wqtk r2YqXqWtdd=trSdandS(N(u_url_tempfilesuosuunlinkuEnvironmentErroru_openeruNone(u temp_file((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu urlcleanups    u:\d+$cCsY|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(ufull_urluurlparseu get_headeru _cut_port_reusubulower(urequestuurluhost((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu request_hosts   u request_hostcBs |EeZdZd'id'd(d'ddZddZddZddZd d Z d d Z d dZ ddZ ddZ ddZddZddZddZddZddZdd Zd!d"Zd'd#d$Zd%d&Zd'S()uRequestc Cst||_t|j\|_|_||_i|_d|_x*|jD]\}}|j ||qRWi|_ |dkrt |}n||_ ||_ ||_|jdS(N(uunwrapufull_urlusplittagufragmentudatauheadersuNoneu _tunnel_hostuitemsu add_headeruunredirected_hdrsu request_hostuorigin_req_hostu unverifiableumethodu_parse( uselfuurludatauheadersuorigin_req_hostu unverifiableumethodukeyuvalue((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__s        uRequest.__init__cCswt|j\|_}|jdkr=td|jnt|\|_|_|jrst|j|_ndS(Nuunknown url type: %r( u splittypeufull_urlutypeuNoneu ValueErroru splithostuhostuselectoruunquote(uselfurest((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu_parses  uRequest._parsecCs1|jdk r|jS|jdk r)dSdSdS(u3Return a string indicating the HTTP request method.uPOSTuGETN(umethoduNoneudata(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu get_methods uRequest.get_methodcCs(|jrd|j|jfS|jSdS(Nu%s#%s(ufragmentufull_url(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu get_full_url&s uRequest.get_full_urlcCs)d}tj|tdd||_dS(Nu&Request.add_data method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarningudata(uselfudataumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuadd_data.suRequest.add_datacCs)d}tj|tdd|jdk S(Nu&Request.has_data method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarningudatauNone(uselfumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhas_data3suRequest.has_datacCs#d}tj|tdd|jS(Nu&Request.get_data method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarningudata(uselfumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_data8suRequest.get_datacCs#d}tj|tdd|jS(Nu&Request.get_type method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarningutype(uselfumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_type=suRequest.get_typecCs#d}tj|tdd|jS(Nu&Request.get_host method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarninguhost(uselfumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_hostBsuRequest.get_hostcCs#d}tj|tdd|jS(Nu*Request.get_selector method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarninguselector(uselfumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu get_selectorGsuRequest.get_selectorcCs#d}tj|tdd|jS(Nu-Request.is_unverifiable method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarningu unverifiable(uselfumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuis_unverifiableLsuRequest.is_unverifiablecCs#d}tj|tdd|jS(Nu1Request.get_origin_req_host method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarninguorigin_req_host(uselfumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_origin_req_hostQsuRequest.get_origin_req_hostcCsJ|jdkr(|j r(|j|_n||_|j|_||_dS(Nuhttps(utypeu _tunnel_hostuhostufull_urluselector(uselfuhostutype((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu set_proxyXs   uRequest.set_proxycCs|j|jkS(N(uselectorufull_url(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu has_proxy`suRequest.has_proxycCs||j|j.isclassuHTTPSConnection(uOpenerDirectoru ProxyHandleruUnknownHandleru HTTPHandleruHTTPDefaultErrorHandleruHTTPRedirectHandleru FTPHandleru FileHandleruHTTPErrorProcessoruhasattruhttpuclientuappendu HTTPSHandlerusetu issubclassuaddu isinstanceuremoveu add_handler(uhandlersuisclassuopenerudefault_classesuskipuklassucheckuh((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu build_openers0            cBs>|EeZdZdZddZddZddZdS( u BaseHandlericCs ||_dS(N(uparent(uselfuparent((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu add_parent0suBaseHandler.add_parentcCsdS(N((uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuclose3suBaseHandler.closecCs#t|dsdS|j|jkS(Nu handler_orderT(uhasattruTrueu handler_order(uselfuother((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__lt__7suBaseHandler.__lt__N(u__name__u __module__u __qualname__u handler_orderu add_parentucloseu__lt__(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu BaseHandler-s  cBs2|EeZdZdZdZddZeZdS(uHTTPErrorProcessoruProcess HTTP error responses.icCsd|j|j|j}}}d|ko7dkns`|jjd|||||}n|S(Nii,uhttp(ucodeumsguinfouparentuerror(uselfurequesturesponseucodeumsguhdrs((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu http_responseDs   u HTTPErrorProcessor.http_responseN(u__name__u __module__u __qualname__u__doc__u handler_orderu http_responseuhttps_response(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPErrorProcessor@s cBs |EeZdZddZdS(uHTTPDefaultErrorHandlercCst|j||||dS(N(u HTTPErrorufull_url(uselfurequfpucodeumsguhdrs((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_defaultRsu*HTTPDefaultErrorHandler.http_error_defaultN(u__name__u __module__u __qualname__uhttp_error_default(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPDefaultErrorHandlerQscBsL|EeZdZdZdZddZddZeZZZ dZ dS( uHTTPRedirectHandlerii c s|j}|dkr$|dkp9|dko9|dksZt|j||||n|jdd }dtfd d |jjD}t|d|d|jddS(uReturn a Request or None in response to a redirect. This is called by the http_error_30x methods when a redirection response is received. If a redirection should take place, return a new Request to allow http_error_30x to perform the redirect. Otherwise, raise HTTPError if no-one else should try to handle this url. Return None if you can't but another Handler might. i-i.i/i3uGETuHEADuPOSTu u%20ucontent-lengthu content-typec3s3|])\}}|jkr||fVqdS(N(ulower(u.0ukuv(uCONTENT_HEADERS(u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu ts u7HTTPRedirectHandler.redirect_request..uheadersuorigin_req_hostu unverifiable(i-i.i/i3(uGETuHEAD(i-i.i/(ucontent-lengthu content-typeT( u get_methodu HTTPErrorufull_urlureplaceudictuheadersuitemsuRequestuorigin_req_hostuTrue( uselfurequfpucodeumsguheadersunewurlumu newheaders((uCONTENT_HEADERSu3/opt/alt/python33/lib64/python3.3/urllib/request.pyuredirect_request]s (  u$HTTPRedirectHandler.redirect_requestc Csd|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: %riiNi(u splittypeu startswithuNoneu ValueErrorufindu splituseru splitpasswd( uproxyuschemeur_schemeu authorityuenduuserinfouhostportuuserupassword((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu _parse_proxys2     u _parse_proxycBs5|EeZdZdZdddZddZdS(u ProxyHandleridc Cs|dkrt}nt|ds3td||_x@|jD]2\}}t|d||||jddqIWdS(Nukeysuproxies must be a mappingu%s_opencSs||||S(N((uruproxyutypeumeth((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyusu'ProxyHandler.__init__..(uNoneu getproxiesuhasattruAssertionErroruproxiesuitemsusetattru proxy_open(uselfuproxiesutypeuurl((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__ s    uProxyHandler.__init__c Cs|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 uhttpsutimeout(utypeu _parse_proxyuNoneuhostu proxy_bypassuunquoteubase64u b64encodeuencodeudecodeu add_headeru set_proxyuparentuopenutimeout( uselfurequproxyutypeu orig_typeu proxy_typeuuserupassworduhostportu user_passucreds((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu proxy_opens       uProxyHandler.proxy_openN(u__name__u __module__u __qualname__u handler_orderuNoneu__init__u proxy_open(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu ProxyHandlers cBsS|EeZdZddZddZddZd ddZd d Zd S( uHTTPPasswordMgrcCs i|_dS(N(upasswd(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__1suHTTPPasswordMgr.__init__cst|tr|g}n|jkr:ij|<s u0HTTPPasswordMgr.add_password..TF(TF(u isinstanceustrupasswduTrueuFalseutuple(uselfurealmuuriuuserupasswdu reduced_uri((u default_portuselfu3/opt/alt/python33/lib64/python3.3/urllib/request.pyu add_password4s  uHTTPPasswordMgr.add_passwordc Cs|jj|i}xddD]\}|j||}xA|jD]3\}}x$|D]}|j||rT|SqTWqAWqWdS(NTF(TF(NN(upasswdugetuTrueuFalseu reduce_uriuitemsu is_suburiuNone( uselfurealmuauthuriudomainsu default_portureduced_authuriuurisuauthinfouuri((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyufind_user_password?s  u"HTTPPasswordMgr.find_user_passwordc Cst|}|dr=|d}|d}|dp7d}nd }|}d}t|\}}|r|d kr|d k ridd6dd6j|} | d k rd || f}qn||fS( u@Accept authority or URI and extract only the authority and path.iiiu/iPuhttpiuhttpsu%s:%dN(uurlsplituNoneu splitportuget( uselfuuriu default_portupartsuschemeu authorityupathuhostuportudport((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu reduce_uriIs         uHTTPPasswordMgr.reduce_uricCsi||krdS|d|dkr(dStj|d|df}t|t|dkredSdS(ucCheck if test is below base in a URI tree Both args must be URIs in reduced form. iiTF(uTrueuFalseu posixpathu commonprefixulen(uselfubaseutestucommon((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu is_suburi`s uHTTPPasswordMgr.is_suburiNT( u__name__u __module__u __qualname__u__init__u add_passwordufind_user_passworduTrueu reduce_uriu is_suburi(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPPasswordMgr/s   cBs |EeZdZddZdS(uHTTPPasswordMgrWithDefaultRealmcCsDtj|||\}}|dk r1||fStj|d|S(N(uHTTPPasswordMgrufind_user_passworduNone(uselfurealmuauthuriuuserupassword((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyufind_user_passwordqs    u2HTTPPasswordMgrWithDefaultRealm.find_user_passwordN(u__name__u __module__u __qualname__ufind_user_password(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPPasswordMgrWithDefaultRealmoscBs\|EeZdZejdejZd ddZddZ ddZ dd Z d S( uAbstractBasicAuthHandleru1(?:.*,)*[ ]*([^ ]+)[ ]+realm=(["']?)([^"']*)\2cCs=|dkrt}n||_|jj|_d|_dS(Ni(uNoneuHTTPPasswordMgrupasswdu add_passworduretried(uselfu password_mgr((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__s    u!AbstractBasicAuthHandler.__init__cCs d|_dS(Ni(uretried(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyureset_retry_countsu*AbstractBasicAuthHandler.reset_retry_countc Cs1|j|d}|jdkrBt|jdd|dn|jd7_|r-|jd}|jdkrtd|q-tj j |}|r-|j \}}}|d krt j d td n|jdkr*|j|||} | r#| jdkr#d|_n| Sq-ndS( Niiubasic auth failediiubasicuDAbstractBasicAuthHandler does not support the following scheme: '%s'u"u'uBasic Auth Realm was unquotedi(u"u'(ugetuNoneuretriedu HTTPErroru get_full_urlusplituloweru ValueErroruAbstractBasicAuthHandlerurxusearchugroupsuwarningsuwarnu UserWarninguretry_http_basic_authucode( uselfuauthrequhosturequheadersuschemeumouquoteurealmuresponse((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_auth_reqeds*     u.AbstractBasicAuthHandler.http_error_auth_reqedcCs|jj||\}}|dk rd||f}dtj|jjd}|jj|j d|kr{dS|j |j ||j j |d|j SdSdS(Nu%s:%suBasic uasciiutimeout(upasswdufind_user_passworduNoneubase64u b64encodeuencodeudecodeuheadersugetu auth_headeruadd_unredirected_headeruparentuopenutimeout(uselfuhosturequrealmuuserupwurawuauth((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretry_http_basic_auths "u.AbstractBasicAuthHandler.retry_http_basic_authN( u__name__u __module__u __qualname__ureucompileuIurxuNoneu__init__ureset_retry_countuhttp_error_auth_reqeduretry_http_basic_auth(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuAbstractBasicAuthHandlerys     cBs&|EeZdZdZddZdS(uHTTPBasicAuthHandleru AuthorizationcCs/|j}|jd|||}|j|S(Nuwww-authenticate(ufull_urluhttp_error_auth_reqedureset_retry_count(uselfurequfpucodeumsguheadersuurluresponse((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_401s    u#HTTPBasicAuthHandler.http_error_401N(u__name__u __module__u __qualname__u auth_headeruhttp_error_401(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPBasicAuthHandlerscBs&|EeZdZdZddZdS(uProxyBasicAuthHandleruProxy-authorizationcCs/|j}|jd|||}|j|S(Nuproxy-authenticate(uhostuhttp_error_auth_reqedureset_retry_count(uselfurequfpucodeumsguheadersu authorityuresponse((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_407s    u$ProxyBasicAuthHandler.http_error_407N(u__name__u __module__u __qualname__u auth_headeruhttp_error_407(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuProxyBasicAuthHandlerscBsw|EeZdZdddZddZddZddZd d Zd d Z d dZ ddZ dS(uAbstractDigestAuthHandlercCsO|dkrt}n||_|jj|_d|_d|_d|_dS(Ni(uNoneuHTTPPasswordMgrupasswdu add_passworduretriedu nonce_countu last_nonce(uselfupasswd((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__s     u"AbstractDigestAuthHandler.__init__cCs d|_dS(Ni(uretried(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyureset_retry_countsu+AbstractDigestAuthHandler.reset_retry_countcCs|j|d}|jdkr?t|jdd|dn|jd7_|r|jd}|jdkr|j||S|jdkrtd|qndS( Niiudigest auth failediiudigestubasicuEAbstractDigestAuthHandler does not support the following scheme: '%s'( ugetuNoneuretriedu HTTPErrorufull_urlusplituloweruretry_http_digest_authu ValueError(uselfu auth_headeruhosturequheadersuauthrequscheme((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_auth_reqedsu/AbstractDigestAuthHandler.http_error_auth_reqedcCs|jdd\}}ttdt|}|j||}|rd|}|jj|jd|krwdS|j |j||j j |d|j }|SdS(Nu iu Digest %sutimeout( usplituparse_keqv_listufilteruNoneuparse_http_listuget_authorizationuheadersugetu auth_headeruadd_unredirected_headeruparentuopenutimeout(uselfurequauthutokenu challengeuchaluauth_valuresp((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretry_http_digest_auth s u0AbstractDigestAuthHandler.retry_http_digest_authcCsXd|j|tjf}|jdtd}tj|j}|ddS(Nu %s:%s:%s:uasciiii(u nonce_countutimeuctimeuencodeu _randombytesuhashlibusha1u hexdigest(uselfunonceusubudig((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu get_cnoncesu$AbstractDigestAuthHandler.get_cnoncecCs_yK|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=|j d 7_ nd |_ ||_ d |j }|j |}d ||||||f}| || |}nD|dkr| || d|||f}ntd |d| |||j |f}|r|d|7}n| r0|d| 7}n|d|7}|r[|d||f7}n|S(Nurealmunonceuqopu algorithmuMD5uopaqueu%s:%s:%su%s:%suauthiu%08xu%s:%s:%s:%s:%suqop '%s' is not supported.u>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"(ugetuNoneuKeyErroruget_algorithm_implsupasswdufind_user_passwordufull_urludatauget_entity_digestu get_methoduselectoru last_nonceu nonce_countu get_cnonceuURLError(uselfurequchalurealmunonceuqopu algorithmuopaqueuHuKDuuserupwuentdiguA1uA2uncvalueucnonceunoncebiturespdigubase((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_authorization sV             ( u+AbstractDigestAuthHandler.get_authorizationcsR|dkrddn|dkr6ddnfdd}|fS(NuMD5cSstj|jdjS(Nuascii(uhashlibumd5uencodeu hexdigest(ux((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu_su?AbstractDigestAuthHandler.get_algorithm_impls..uSHAcSstj|jdjS(Nuascii(uhashlibusha1uencodeu hexdigest(ux((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuascsd||fS(Nu%s:%s((usud(uH(u3/opt/alt/python33/lib64/python3.3/urllib/request.pyucs((uselfu algorithmuKD((uHu3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_algorithm_impls\s   u-AbstractDigestAuthHandler.get_algorithm_implscCsdS(N(uNone(uselfudatauchal((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_entity_digestfsu+AbstractDigestAuthHandler.get_entity_digestN( u__name__u __module__u __qualname__uNoneu__init__ureset_retry_countuhttp_error_auth_reqeduretry_http_digest_authu get_cnonceuget_authorizationuget_algorithm_implsuget_entity_digest(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuAbstractDigestAuthHandlers    < cBs2|EeZdZdZdZdZddZdS(uHTTPDigestAuthHandleruAn authentication protocol defined by RFC 2069 Digest authentication improves on basic authentication because it does not transmit passwords in the clear. u AuthorizationicCs9t|jd}|jd|||}|j|S(Niuwww-authenticate(uurlparseufull_urluhttp_error_auth_reqedureset_retry_count(uselfurequfpucodeumsguheadersuhosturetry((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_401us   u$HTTPDigestAuthHandler.http_error_401N(u__name__u __module__u __qualname__u__doc__u auth_headeru handler_orderuhttp_error_401(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPDigestAuthHandlerkscBs,|EeZdZdZdZddZdS(uProxyDigestAuthHandleruProxy-AuthorizationicCs/|j}|jd|||}|j|S(Nuproxy-authenticate(uhostuhttp_error_auth_reqedureset_retry_count(uselfurequfpucodeumsguheadersuhosturetry((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_407s    u%ProxyDigestAuthHandler.http_error_407N(u__name__u __module__u __qualname__u auth_headeru handler_orderuhttp_error_407(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuProxyDigestAuthHandler}scBsG|EeZdZdddZddZddZdd Zd S( uAbstractHTTPHandlericCs ||_dS(N(u _debuglevel(uselfu debuglevel((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__suAbstractHTTPHandler.__init__cCs ||_dS(N(u _debuglevel(uselfulevel((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuset_http_debuglevelsu'AbstractHTTPHandler.set_http_debuglevelc Cs|j}|stdn|jdk r|j}t|trZd}t|n|jds||jddn|jdsyt |}WnCtk rt|t j rt dt ||fnYqX|jddt||jqn|}|jrDt|j\}}t|\}} n|jdsf|jd|nxH|jjD]:\} } | j} |j| ss|j| | qsqsW|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(uhostuURLErrorudatauNoneu isinstanceustru TypeErroru has_headeruadd_unredirected_headeru memoryviewu collectionsuIterableu ValueErrorutypeulenuitemsizeu has_proxyu splittypeuselectoru splithostuparentu addheadersu capitalize( uselfurequestuhostudataumsgumvusel_hostuschemeuselusel_pathunameuvalue((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu do_request_sB     !  uAbstractHTTPHandler.do_request_c  s|j}|stdn||d|j|}t|jjtfdd|jjDddtjk rU}z|jt|WYd d }~Xn/X|j} |jr|jjd |_n|j| _| j| _| S( uReturn an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. u no host givenutimeoutc3s-|]#\}}|kr||fVqdS(N((u.0ukuv(uheaders(u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu s u.AbstractHTTPHandler.do_open..ucloseu Connectioncss'|]\}}|j|fVqdS(N(utitle(u.0unameuval((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu suProxy-AuthorizationuheadersN(uhostuURLErrorutimeoutudictuunredirected_hdrsuupdateuheadersuitemsu _tunnel_hostu set_tunnelurequestu get_methoduselectorudatausocketuerrorucloseu getresponseusockuNoneu get_full_urluurlureasonumsg( uselfu http_classurequhttp_conn_argsuhostuhutunnel_headersuproxy_auth_hdruerrur((uheadersu3/opt/alt/python33/lib64/python3.3/urllib/request.pyudo_opens6 /    &      uAbstractHTTPHandler.do_openN(u__name__u __module__u __qualname__u__init__uset_http_debuglevelu do_request_udo_open(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuAbstractHTTPHandlers  (uAbstractHTTPHandlercBs)|EeZdZddZejZdS(u HTTPHandlercCs|jtjj|S(N(udo_openuhttpuclientuHTTPConnection(uselfureq((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu http_opensuHTTPHandler.http_openN(u__name__u __module__u __qualname__u http_openuAbstractHTTPHandleru do_request_u http_request(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu HTTPHandlers uHTTPSConnectioncBs>|EeZdZdddddZddZejZdS(u HTTPSHandlericCs&tj||||_||_dS(N(uAbstractHTTPHandleru__init__u_contextu_check_hostname(uselfu debuglevelucontextucheck_hostname((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__s uHTTPSHandler.__init__cCs(|jtjj|d|jd|jS(Nucontextucheck_hostname(udo_openuhttpuclientuHTTPSConnectionu_contextu_check_hostname(uselfureq((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu https_opensuHTTPSHandler.https_openN( u__name__u __module__u __qualname__uNoneu__init__u https_openuAbstractHTTPHandleru do_request_u https_request(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu HTTPSHandlers u HTTPSHandlercBsG|EeZdZdddZddZddZeZeZdS(uHTTPCookieProcessorcCs7ddl}|dkr*|jj}n||_dS(Ni(uhttp.cookiejaruNoneu cookiejaru CookieJar(uselfu cookiejaruhttp((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__s  uHTTPCookieProcessor.__init__cCs|jj||S(N(u cookiejaruadd_cookie_header(uselfurequest((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu http_requestsu HTTPCookieProcessor.http_requestcCs|jj|||S(N(u cookiejaruextract_cookies(uselfurequesturesponse((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu http_responsesu!HTTPCookieProcessor.http_responseN( u__name__u __module__u __qualname__uNoneu__init__u http_requestu http_responseu https_requestuhttps_response(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPCookieProcessors   cBs |EeZdZddZdS(uUnknownHandlercCs|j}td|dS(Nuunknown url type: %s(utypeuURLError(uselfurequtype((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu unknown_open"s uUnknownHandler.unknown_openN(u__name__u __module__u __qualname__u unknown_open(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuUnknownHandler!scCspi}xc|D][}|jdd\}}|ddkr^|ddkr^|dd}n|||Parse list of key=value strings where keys are not duplicated.u=iiu"ii(usplit(uluparsedueltukuv((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuparse_keqv_list&s  uparse_keqv_listcCsg}d}d}}x|D]}|r?||7}d}qn|r|dkr]d}qn|dkrrd}n||7}qn|dkr|j|d}qn|dkrd}n||7}qW|r|j|ndd|DS( 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,cSsg|]}|jqS((ustrip(u.0upart((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu Ys u#parse_http_list..FT(uFalseuTrueuappend(usuresupartuescapeuquoteucur((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuparse_http_list0s4            uparse_http_listcBs>|EeZdZddZdZddZddZdS(u FileHandlercCs|j}|dddkrt|dddkrt|jrt|jdkrt|j|jk rtdqn |j|SdS(Niu//iu/u localhostu-file:// scheme is supported only on localhost(uselectoruhostu get_namesuURLErroruopen_local_file(uselfurequurl((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu file_open]s  5uFileHandler.file_openc Cs}tjdkrvy7ttjddtjtjdt_Wqvtjk rrtjdft_YqvXntjS(Nu localhosti( u FileHandlerunamesuNoneutupleusocketugethostbyname_exu gethostnameugaierroru gethostbyname(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu get_nameshs$uFileHandler.get_namescCsaddl}ddl}|j}|j}t|}ytj|}|j}|jj |j dd} |j |d} |j d| pd|| f} |rt|\}} n| s| rt||jkr|rd||} n d|} tt|d| | SWn1tk rP}zt|WYdd}~XnXtddS( Niuusegmtu6Content-type: %s Content-length: %d Last-modified: %s u text/plainufile://urbufile not on local hostT(u email.utilsu mimetypesuhostuselectoru url2pathnameuosustatust_sizeuutilsu formatdateust_mtimeuTrueu guess_typeumessage_from_stringu splitportu_safe_gethostbynameu get_namesu addinfourluopenuOSErroruURLError(uselfurequemailu mimetypesuhostufilenameu localfileustatsusizeumodifiedumtypeuheadersuportuorigurluexp((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuopen_local_filess0       uFileHandler.open_local_fileN(u__name__u __module__u __qualname__u file_openuNoneunamesu get_namesuopen_local_file(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu FileHandler[s  c Cs1ytj|SWntjk r,dSYnXdS(N(usocketu gethostbynameugaierroruNone(uhost((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu_safe_gethostbynamesu_safe_gethostbynamecBs,|EeZdZddZddZdS(u FTPHandlerc"Csddl}ddl}|j}|s6tdnt|\}}|dkr`|j}n t|}t|\}}|rt |\}}nd}t |}|pd}|pd}yt j |}Wn4t j k r }zt|WYdd}~XnXt|j\} } | jd} ttt | } | dd| d} } | r| d r| dd} ny|j||||| |j} | rdpd}xM| D]E}t|\}}|jdkr|dkr|j}qqW| j| |\}}d}|j|jd}|rV|d |7}n|dk r|dkr|d|7}ntj|}t|||jSWnQ|jk r}z.td|}|jt j!dWYdd}~XnXdS(Niuftp error: no host givenuu/iuIuDutypeuauAuiuduContent-type: %s uContent-length: %d u ftp error: %riii(uauAuiuIuduD("uftplibu mimetypesuhostuURLErroru splitportuNoneuFTP_PORTuintu splituseru splitpasswduunquoteusocketu gethostbynameuerroru splitattruselectorusplitulistumapu connect_ftputimeoutu splitvalueuloweruupperuretrfileu guess_typeufull_urluemailumessage_from_stringu addinfourlu all_errorsuwith_tracebackusysuexc_info(uselfurequftplibu mimetypesuhostuportuuserupasswdumsgupathuattrsudirsufileufwutypeuattruvalueufpuretrlenuheadersumtypeuexpuexc((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuftp_opens\         !  uFTPHandler.ftp_openc Cst||||||ddS(Nu persistentF(u ftpwrapperuFalse(uselfuuserupasswduhostuportudirsutimeout((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu connect_ftpsuFTPHandler.connect_ftpN(u__name__u __module__u __qualname__uftp_openu connect_ftp(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu FTPHandlers 5cBs\|EeZdZddZddZddZddZd d Zd d Zd S(uCacheFTPHandlercCs1i|_i|_d|_d|_d|_dS(Nii<i(ucacheutimeoutusoonestudelayu max_conns(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__s     uCacheFTPHandler.__init__cCs ||_dS(N(udelay(uselfut((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu setTimeoutsuCacheFTPHandler.setTimeoutcCs ||_dS(N(u max_conns(uselfum((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu setMaxConnssuCacheFTPHandler.setMaxConnscCs|||dj||f}||jkrJtj|j|j|YqXqW|jdd=n|jro|jjndS(N(u_URLopener__tempfilesu_URLopener__unlinkuOSErroru tempcacheuclear(uselfufile((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyucleanupLs    uURLopener.cleanupcGs|jj|dS(udAdd a header to be used by the HTTP interface only e.g. u.addheader('Accept', 'sound/basic')N(u addheadersuappend(uselfuargs((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu addheaderZsuURLopener.addheadercCstt|}t|dd}|jrn||jkrn|j|\}}t|d}t|||St|\}}|sd}n||jkr|j|}t|\}} t| \} } | |f}nd }d|} ||_ | j dd} t || sD|r1|j |||S|j||Sny9|d krft|| |St|| ||SWn^tk rYnJtjk r} z'td| jtjd WYd d } ~ XnXd S( u6Use URLopener().open(file) instead of open(file, 'r').usafeu%/:=&?~#+!$,;'@()*[]|urbufileuopen_u-u_u socket erroriN(uunwraputo_bytesuquoteu tempcacheuopenu addinfourlu splittypeuproxiesu splithostuNoneutypeureplaceuhasattruopen_unknown_proxyu open_unknownugetattru HTTPErrorusocketuerroruIOErroruwith_tracebackusysuexc_info(uselfufullurludataufilenameuheadersufpuurltypeuurluproxyu proxyhostuhostuselectorunameumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuopen`s<      uURLopener.opencCs(t|\}}tdd|dS(u/Overridable interface to open unknown URL type.u url erroruunknown url typeN(u splittypeuIOError(uselfufullurludatautypeuurl((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu open_unknownsuURLopener.open_unknowncCs,t|\}}tdd||dS(u/Overridable interface to open unknown URL type.u url erroruinvalid proxy for %sN(u splittypeuIOError(uselfuproxyufullurludatautypeuurl((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuopen_unknown_proxysuURLopener.open_unknown_proxyc'Cstt|}|jr5||jkr5|j|St|\}}|dkr| sf|dkryC|j|}|j}|jtt |d|fSWqt k r} zWYdd} ~ XqXn|j ||}z|j} |r t |d} nddl } t|\} }t |p7d\} }t |pOd\}} t|pgd\}} tjj|d}| j|\}}|jj|tj|d} z|| f}|jdk r||j|||||nx\|j|}|sZPn|t|7}| j||d7}|rA||||qAqAWd| jXWd|jX|dkr||krtd ||f|n|S(utretrieve(url) returns (filename, headers) for a local object or (tempfilename, headers) for a remote object.ufileiNuwbiuiiucontent-lengthuContent-Lengthu1retrieval incomplete: got only %i out of %i bytesi i(uunwraputo_bytesu tempcacheu splittypeuNoneuopen_local_fileuinfoucloseu url2pathnameu splithostuIOErroruopenutempfileu splitqueryu splitattruosupathusplitextumkstempu_URLopener__tempfilesuappendufdopenuintureadulenuwriteuContentTooShortError(uselfuurlufilenameu reporthookudatautypeuurl1ufpuhdrsumsguheadersutfputempfileugarbageupathusuffixufduresultubsusizeureadublocknumublock((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretrievesl          uURLopener.retrievecCsd}d}t|tr]t|\}}|rTt|\}}t|}n|}n|\}}t|\}}t|\} } | }d}| jdkrd}n^t| \}} |rt|\}}n|rd| || f}nt|r|}n|s*t ddn|r]t|}t j |j j d} nd} |rt|}t j |j j d} nd} ||} i}| rd| |dDefault error handler: close the connection and raise IOError.N(ucloseu HTTPErroruNone(uselfuurlufpuerrcodeuerrmsguheaders((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_defaultAs uURLopener.http_error_defaultcCs"tjj|d|jd|jS(Nukey_fileu cert_file(uhttpuclientuHTTPSConnectionukey_fileu cert_file(uselfuhost((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu_https_connectionGs uURLopener._https_connectioncCs|j|j||S(uUse HTTPS protocol.(u_open_generic_httpu_https_connection(uselfuurludata((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu open_httpsLsuURLopener.open_httpscCst|tstdn|dddkru|dddkru|ddjdkrutd n |j|SdS( u/Use local file or FTP depending on form of URL.uEfile error: proxy support for file protocol currently not implementedNiu//iu/i u localhost/u-file:// scheme is supported only on localhost(u isinstanceustruURLErroruloweru ValueErroruopen_local_file(uselfuurl((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu open_filePs HuURLopener.open_filecCsddl}ddl}t|\}}t|}ytj|}Wn:tk r}zt|j|j WYdd}~XnX|j } |j j |j dd} |j|d} |jd| pd| | f} |s'|} |dddkrd|} ntt|d | | St|\}}| rtj|tftkr|} |dddkrd|} n)|dd d krtd |ntt|d | | Std dS(uUse local file.iNuusegmtu6Content-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 hostT(u email.utilsu mimetypesu splithostu url2pathnameuosustatuOSErroruURLErrorustrerrorufilenameust_sizeuutilsu formatdateust_mtimeuTrueu guess_typeumessage_from_stringu addinfourluopenu splitportusocketu gethostbynameu localhostuthishostu ValueError(uselfuurluemailu mimetypesuhostufileu localnameustatsueusizeumodifiedumtypeuheadersuurlfileuport((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuopen_local_fileYs:   (  " uURLopener.open_local_filecCst|tstdnddl}t|\}}|sQtdnt|\}}t|\}}|rt|\}}nd}t |}t |pd}t |pd}t j |}|sddl }|j }n t|}t|\}} t |}|jd} | dd| d} } | rk| d rk| dd} n| r| d rd| dt j |j djd}n t|}|jdt||jd |j|dj|}tj|}tj|}t|||S(uUse "data" URL.uEdata error: proxy support for data protocol currently not implementedu,iu data erroru bad data URLutext/plain;charset=US-ASCIIu;iu=NuuDate: %su%a, %d %b %Y %H:%M:%S GMTuContent-type: %subase64uasciiulatin-1uContent-Length: %du (u isinstanceustruURLErrorusplitu ValueErroruIOErrorurfinduappendutimeustrftimeugmtimeubase64u decodebytesuencodeudecodeuunquoteulenujoinuemailumessage_from_stringuiouStringIOu addinfourl( uselfuurludatautypeusemiuencodingumsguheadersuf((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu open_datas6  " $   uURLopener.open_dataN(u__name__u __module__u __qualname__u__doc__uNoneu_URLopener__tempfilesu __version__uversionu__init__u__del__ucloseucleanupu addheaderuopenu open_unknownuopen_unknown_proxyuretrieveu_open_generic_httpu open_httpu http_erroruhttp_error_defaultu _have_sslu_https_connectionu open_httpsu open_fileuopen_local_fileuopen_ftpu open_data(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu URLopeners.     $B \   :cBs|EeZdZdZddZddZd!ddZdd Zd!d d Z d!d d Z d!ddZ d!d"ddZ d!d"ddZd!ddZd!ddZd!ddZd!ddZdddZdd Zd!S(#uFancyURLopeneru?Derived class with handlers for errors we can handle (perhaps).cOs2tj|||i|_d|_d|_dS(Nii (u URLopeneru__init__u auth_cacheutriesumaxtries(uselfuargsukwargs((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__s  uFancyURLopener.__init__cCst||d||S(u3Default error handling -- don't raise an exception.uhttp:(u addinfourl(uselfuurlufpuerrcodeuerrmsguheaders((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_defaultsu!FancyURLopener.http_error_defaultc Cs|jd7_|jrm|j|jkrmt|drE|j}n |j}d|_|||dd|S|j||||||}d|_|S(u%Error 302 -- relocated (temporarily).iuhttp_error_500iiu)Internal Server Error: Redirect Recursion(utriesumaxtriesuhasattruhttp_error_500uhttp_error_defaulturedirect_internal( uselfuurlufpuerrcodeuerrmsguheadersudataumethuresult((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_302s       uFancyURLopener.http_error_302c Csd|kr|d}nd|kr2|d}ndS|jt|jd||}t|}|jd krt|||d|||n|j|S( Nulocationuuriu:uhttpuhttpsuftpuu( Redirection to url '%s' is not allowed.(uhttpuhttpsuftpu(ucloseuurljoinutypeuurlparseuschemeu HTTPErroruopen( uselfuurlufpuerrcodeuerrmsguheadersudataunewurluurlparts((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuredirect_internals       u FancyURLopener.redirect_internalcCs|j||||||S(u*Error 301 -- also relocated (permanently).(uhttp_error_302(uselfuurlufpuerrcodeuerrmsguheadersudata((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_301suFancyURLopener.http_error_301cCs|j||||||S(u;Error 303 -- also relocated (essentially identical to 302).(uhttp_error_302(uselfuurlufpuerrcodeuerrmsguheadersudata((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_303suFancyURLopener.http_error_303cCsE|dkr(|j||||||S|j|||||SdS(u1Error 307 -- relocated, but turn POST into error.N(uNoneuhttp_error_302uhttp_error_default(uselfuurlufpuerrcodeuerrmsguheadersudata((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_307s uFancyURLopener.http_error_307c Cs$d|kr+tj||||||n|d}tjd|} | sltj||||||n| j\} } | jdkrtj||||||n|stj||||||nd|jd} |dkrt|| || St|| || |SdS(u_Error 401 -- authentication required. This function supports Basic authentication only.uwww-authenticateu![ ]*([^ ]+)[ ]+realm="([^"]*)"ubasicuretry_u _basic_authN( u URLopeneruhttp_error_defaultureumatchugroupsulowerutypeuNoneugetattr( uselfuurlufpuerrcodeuerrmsguheadersudatauretryustuffumatchuschemeurealmuname((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_401%s&    uFancyURLopener.http_error_401c Cs$d|kr+tj||||||n|d}tjd|} | sltj||||||n| j\} } | jdkrtj||||||n|stj||||||nd|jd} |dkrt|| || St|| || |SdS(ueError 407 -- proxy authentication required. This function supports Basic authentication only.uproxy-authenticateu![ ]*([^ ]+)[ ]+realm="([^"]*)"ubasicu retry_proxy_u _basic_authN( u URLopeneruhttp_error_defaultureumatchugroupsulowerutypeuNoneugetattr( uselfuurlufpuerrcodeuerrmsguheadersudatauretryustuffumatchuschemeurealmuname((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_407>s&    uFancyURLopener.http_error_407cCs t|\}}d||}|jd}t|\}} t| \} } | jdd} | | d} |j| || \} } | p| sdSdt| ddt| dd| f} d| | |jd<|dkr|j|S|j||SdS(Nuhttp://uhttpu@iu%s:%s@%susafeu(u splithostuproxiesu splittypeufinduget_user_passwduNoneuquoteuopen(uselfuurlurealmudatauhostuselectorunewurluproxyuurltypeu proxyhostu proxyselectoruiuuserupasswd((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretry_proxy_http_basic_authWs     u*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(Nuhttps://uhttpsu@iu%s:%s@%susafeu(u splithostuproxiesu splittypeufinduget_user_passwduNoneuquoteuopen(uselfuurlurealmudatauhostuselectorunewurluproxyuurltypeu proxyhostu proxyselectoruiuuserupasswd((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretry_proxy_https_basic_authis     u+FancyURLopener.retry_proxy_https_basic_authc Cst|\}}|jdd}||d}|j|||\}}|pY|s`dSdt|ddt|dd|f}d||} |dkr|j| S|j| |SdS(Nu@iu%s:%s@%susafeuuhttp://(u splithostufinduget_user_passwduNoneuquoteuopen( uselfuurlurealmudatauhostuselectoruiuuserupasswdunewurl((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretry_http_basic_auth{s   u$FancyURLopener.retry_http_basic_authc Cst|\}}|jdd}||d}|j|||\}}|pY|s`dSdt|ddt|dd|f}d||} |dkr|j| S|j| |SdS(Nu@iu%s:%s@%susafeuuhttps://(u splithostufinduget_user_passwduNoneuquoteuopen( uselfuurlurealmudatauhostuselectoruiuuserupasswdunewurl((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretry_https_basic_auths   u%FancyURLopener.retry_https_basic_authicCs|d|j}||jkrD|r6|j|=qD|j|Sn|j||\}}|sh|r~||f|j| 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. iNu_proxyuREQUEST_METHODuhttpii(uosuenvironuitemsulowerupopuNone(uproxiesunameuvalue((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyugetproxies_environment3 s  ugetproxies_environmentcCstjjddp'tjjdd}|dkr:dSt|\}}dd|jdD}x6|D].}|ro|j|s|j|rodSqoWd S( 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*icSsg|]}|jqS((ustrip(u.0uproxy((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu W s u,proxy_bypass_environment..u,i(uosuenvironugetu splitportusplituendswith(uhostuno_proxyuhostonlyuportu no_proxy_listuname((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuproxy_bypass_environmentJ s*  $uproxy_bypass_environmentc Csddlm}t|\}}dd}d|krK|drKdSnd }x.|jdfD]}|svqdntjd|}|d k rk|d krytj|}||}Wqtj k rwdYqXn||j d } |j d } | d kr0d |j d j dd } nt | d d } d | } || ?| | ?kr~dSqd|||rddSqdWdS(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(ufnmatchcSs|jd}ttt|}t|dkrY|ddddgdd}n|dd>|dd>B|dd>B|d BS( Nu.iiiiiiii(usplitulistumapuintulen(uipAddruparts((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuip2numq s #u,_proxy_bypass_macosx_sysconf..ip2numu.uexclude_simpleu exceptionsu(\d+(?:\.\d+)*)(/\d+)?iiiNi TF(ufnmatchu splitportuTrueuNoneugetureumatchusocketu gethostbynameuerrorugroupucountuintuFalse( uhostuproxy_settingsufnmatchuhostonlyuportuip2numuhostIPuvalueumubaseumask((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu_proxy_bypass_macosx_sysconfa s:        # u_proxy_bypass_macosx_sysconfudarwin(u_get_proxy_settingsu _get_proxiescCst}t||S(N(u_get_proxy_settingsu_proxy_bypass_macosx_sysconf(uhostuproxy_settings((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuproxy_bypass_macosx_sysconf s uproxy_bypass_macosx_sysconfcCstS(uReturn a dictionary of scheme -> proxy server URL mappings. This function uses the MacOSX framework SystemConfiguration to fetch the proxy information. (u _get_proxies(((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyugetproxies_macosx_sysconf sugetproxies_macosx_sysconfcCs!trt|St|SdS(N(ugetproxies_environmentuproxy_bypass_environmentuproxy_bypass_macosx_sysconf(uhost((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu proxy_bypass s  u proxy_bypasscCstptS(N(ugetproxies_environmentugetproxies_macosx_sysconf(((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu getproxies scCsli}yddl}Wntk r.|SYnXy|j|jd}|j|dd}|r?t|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( uwinregu ImportErroruOpenKeyuHKEY_CURRENT_USERu QueryValueExustrusplitureumatchuCloseu WindowsErroru ValueErroru TypeError(uproxiesuwinreguinternetSettingsu proxyEnableu proxyServerupuprotocoluaddress((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyugetproxies_registry s8         ugetproxies_registrycCstptS(uReturn a dictionary of scheme -> proxy server URL mappings. Returns settings gathered from the environment, if specified, or the registry. (ugetproxies_environmentugetproxies_registry(((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu getproxies sc 'Csyddl}Wntk r(dSYnXyK|j|jd}|j|dd}t|j|dd}Wntk rdSYnX| s| rdSt|\}}|g}y/tj |}||kr|j |nWntj k rYnXy/tj |}||kr/|j |nWntj k rGYnX|j d}x|D]} | dkrd|krdSn| jdd } | jd d } | jd d} x*|D]"} tj| | tjrdSqWq^WdS( Niu;Software\Microsoft\Windows\CurrentVersion\Internet Settingsu ProxyEnableu ProxyOverrideu;uu.iu\.u*u.*u?(uwinregu ImportErroruOpenKeyuHKEY_CURRENT_USERu QueryValueExustru WindowsErroru splitportusocketu gethostbynameuappenduerrorugetfqdnusplitureplaceureumatchuI( uhostuwinreguinternetSettingsu proxyEnableu proxyOverrideurawHostuportuaddrufqdnutestuval((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuproxy_bypass_registry sR                 uproxy_bypass_registrycCs!trt|St|SdS(uReturn a dictionary of scheme -> proxy server URL mappings. Returns settings gathered from the environment, if specified, or the registry. N(ugetproxies_environmentuproxy_bypass_environmentuproxy_bypass_registry(uhost((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu proxy_bypass! s  (~u__doc__ubase64ubisectuemailuhashlibu http.clientuhttpuiouosu posixpathureusocketusysutimeu collectionsutempfileu contextlibuwarningsu urllib.erroruURLErroru HTTPErroruContentTooShortErroru urllib.parseuurlparseuurlsplituurljoinuunwrapuquoteuunquoteu splittypeu splithostu splitportu splituseru splitpasswdu splitattru splitqueryu splitvalueusplittaguto_bytesu urlunparseuurllib.responseu addinfourlu addclosehookusslu ImportErroruFalseu _have_ssluTrueu__all__uversionu __version__uNoneu_openeru_GLOBAL_DEFAULT_TIMEOUTuurlopenuinstall_openeru_url_tempfilesu urlretrieveu urlcleanupucompileuASCIIu _cut_port_reu request_hostuRequestuOpenerDirectoru build_openeru BaseHandleruHTTPErrorProcessoruHTTPDefaultErrorHandleruHTTPRedirectHandleru _parse_proxyu ProxyHandleruHTTPPasswordMgruHTTPPasswordMgrWithDefaultRealmuAbstractBasicAuthHandleruHTTPBasicAuthHandleruProxyBasicAuthHandleruurandomu _randombytesuAbstractDigestAuthHandleruHTTPDigestAuthHandleruProxyDigestAuthHandleruAbstractHTTPHandleru HTTPHandleruhasattruclientu HTTPSHandleruappenduHTTPCookieProcessoruUnknownHandleruparse_keqv_listuparse_http_listu FileHandleru_safe_gethostbynameu FTPHandleruCacheFTPHandleru MAXFTPCACHEunameu nturl2pathu url2pathnameu pathname2urluftpcacheu URLopeneruFancyURLopeneru _localhostu localhostu _thishostuthishostu _ftperrorsu ftperrorsu _noheadersu noheadersu ftpwrapperugetproxies_environmentuproxy_bypass_environmentu_proxy_bypass_macosx_sysconfuplatformu_scproxyu_get_proxy_settingsu _get_proxiesuproxy_bypass_macosx_sysconfugetproxies_macosx_sysconfu proxy_bypassu getproxiesugetproxies_registryuproxy_bypass_registry(((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuDs                p         $ ?  y &h H*@ E   n  +4 :8      [   <   - 2