� ��f�qc'@s�dZddlZddlZddlZddlZddlZddlZddlZddl 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 r�e-Z.YnXe/Z.dddd d d d d ddddddddddddddddddd d!d"d#d$gZ0e j1dd%�Z2e3a4d&e3d'e3d(e-e3e j5d)d�Z6d*d�Z7gZ8e3e3e3d+d!�Z9d,d"�Z:e j;d-e j<�Z=d.d/�Z>Gd0d�d�Z?Gd1d�d�Z@d2d�ZAGd3d�d�ZBGd4d�deB�ZCGd5d �d eB�ZDGd6d �d eB�ZEd7d8�ZFGd9d �d eB�ZGGd:d �d �ZHGd;d�deH�ZIGd<d�d�ZJGd=d�deJeB�ZKGd>d�deJeB�ZLejMZNGd?d�d�ZOGd@d�deBeO�ZPGdAd�deBeO�ZQGdBdC�dCeB�ZRGdDd�deR�ZSeTejUdE�rYGdFdG�dGeR�ZVe0jWdG�nGdHd �d eB�ZXGdId�deB�ZYdJdK�ZZdLdM�Z[GdNd�deB�Z\dOdP�Z]GdQd�deB�Z^GdRd�de^�Z_dSZ`ejadTkrddUlbmcZcmdZdndVd�ZcdWd�ZdiZeGdXd#�d#�ZfGdYd$�d$ef�Zge3ahdZd[�Zie3ajd\d]�Zke3ald^d_�Zme3and`da�ZoGdbdc�dc�Zpddde�Zqdfdg�Zrdhdi�Zse jtdjkr7ddklumvZvmwZwdldm�Zxdndo�Zydpdq�Zzdrd �Z{nNejadTkrydsdt�Z|dud �Z{dvdw�Z}dxdq�Zzn 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|r�ts'td��ntjtj�}|jtjO_tj|_|sc|rv|j ||�n |j �t d|dd�}t |�}n"tdkr�t �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.pyuurlopen�s    cCs |adS(N(u_opener(uopener((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuinstall_opener�scCs�t|�\}}tjt||���D}|j�}|dkrb| rbtjj|�|fS|rzt|d�}n(t j dd �}|j }t j|�|��||f} d } d} d} d} d|kr�t|d �} n|r|| | | �nx\|j| �}|s!Pn| t|�7} |j|�| d7} |r|| | | �qqWd QXWd QX| dkr�| | kr�td | | 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 urlretrieve�sD       "c CsWx4tD],}ytj|�Wqtk r2YqXqWtdd�=trSdandS(N(u_url_tempfilesuosuunlinkuEnvironmentErroru_openeruNone(u temp_file((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu urlcleanup�s    u:\d+$cCsY|j}t|�d}|dkr:|jdd�}ntjd|d�}|j�S(u�Return 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_host�s   u request_hostcBs |EeZdZd'id'd(d'dd�Zdd�Zdd�Zdd�Zd d �Z d d �Z d d�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd'd#d$�Zd%d&�Zd'S()uRequestc Cs�t|�|_t|j�\|_|_||_i|_d|_x*|j�D]\}}|j ||�qRWi|_ |dkr�t |�}n||_ ||_ ||_|j�dS(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|j��nt|�\|_|_|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�<dS(N(uheadersu capitalize(uselfukeyuval((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu add_headercsuRequest.add_headercCs||j|j�<dS(N(uunredirected_hdrsu capitalize(uselfukeyuval((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuadd_unredirected_headergsuRequest.add_unredirected_headercCs||jkp||jkS(N(uheadersuunredirected_hdrs(uselfu header_name((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu has_headerksuRequest.has_headercCs"|jj||jj||��S(N(uheadersugetuunredirected_hdrs(uselfu header_nameudefault((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu get_headeros uRequest.get_headercCs/|jj�}|j|j�t|j��S(N(uunredirected_hdrsucopyuupdateuheadersulistuitems(uselfuhdrs((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu header_itemstsuRequest.header_itemsNF(u__name__u __module__u __qualname__uNoneuFalseu__init__u_parseu get_methodu get_full_urluadd_datauhas_datauget_datauget_typeuget_hostu get_selectoruis_unverifiableuget_origin_req_hostu set_proxyu has_proxyu add_headeruadd_unredirected_headeru has_headeru get_headeru header_items(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuRequests*               cBst|EeZdZdd�Zdd�Zdd�Zdd�Zdej d d �Z dd d �Z d d�Z dS(uOpenerDirectorcCsMdt}d|fg|_g|_i|_i|_i|_i|_dS(NuPython-urllib/%su User-agent(u __version__u addheadersuhandlersu handle_openu handle_erroruprocess_responseuprocess_request(uselfuclient_version((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__zs     uOpenerDirector.__init__c Cs�t|d�s(tdt|���nd }xxt|�D]j}|d krSq;n|jd�}|d|�}||dd�}|jd�r |jd�|d}||dd�}yt|�}Wntk r�YnX|j j |i�} | |j |<n]|d kr(|}|j } n?|d krF|}|j } n!|d kr;|}|j } nq;| j|g�} | r�tj| |�n | j|�d}q;W|r�tj|j|�|j|�ndS(Nu add_parentu%expected BaseHandler instance, got %ruredirect_requestudo_openu proxy_openu_iuerroruopenuresponseurequestF(uredirect_requestudo_openu proxy_openT(uhasattru TypeErrorutypeuFalseudirufindu startswithuintu ValueErroru handle_errorugetu handle_openuprocess_responseuprocess_requestu setdefaultubisectuinsortuappenduTrueuhandlersu add_parent( uselfuhandleruaddedumethuiuprotocolu conditionujukindulookupuhandlers((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu add_handler�sJ          uOpenerDirector.add_handlercCsdS(N((uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuclose�suOpenerDirector.closec GsR|j|f�}x9|D]1}t||�}||�}|dk r|SqWdS(N(ugetugetattruNone( uselfuchainukindu meth_nameuargsuhandlersuhandlerufuncuresult((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu _call_chain�s    uOpenerDirector._call_chainc Cs�t|t�r!t||�}n|}|dk r?||_n||_|j}|d}x8|jj|g�D]!}t ||�}||�}qqW|j ||�} |d}x;|j j|g�D]$}t ||�}||| �} q�W| S(Nu_requestu _response( u isinstanceustruRequestuNoneudatautimeoututypeuprocess_requestugetugetattru_openuprocess_response( uselfufullurludatautimeouturequprotocolu meth_nameu processorumethuresponse((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuopen�s"      uOpenerDirector.opencCsp|j|jdd|�}|r%|S|j}|j|j||d|�}|rW|S|j|jdd|�S(Nudefaultu default_openu_openuunknownu unknown_open(u _call_chainu handle_openutype(uselfurequdatauresultuprotocol((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu_open�s   uOpenerDirector._opencGs�|d kr<|jd}|d}d|}d}|}n|j}|d}d}|||f|}|j|�}|r�|S|r�|dd f|}|j|�SdS( Nuhttpuhttpsiu http_error_%siu_erroriudefaultuhttp_error_default(uhttpuhttps(u handle_erroru _call_chain(uselfuprotouargsudictu meth_nameuhttp_erru orig_argsuresult((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuerror�s        uOpenerDirector.errorN( u__name__u __module__u __qualname__u__init__u add_handlerucloseu _call_chainuNoneusocketu_GLOBAL_DEFAULT_TIMEOUTuopenu_openuerror(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuOpenerDirectorys /  cGsFdd�}t�}ttttttttg}t t j d�rU|j t �nt�}xl|D]d}x[|D]S}||�r�t||�r�|j|�q�qrt||�rr|j|�qrqrWqeWx|D]}|j|�q�Wx|D]}|j|��q�Wx3|D]+}||�r1|�}n|j|�qW|S(u*Create an opener object from a list of handlers. The opener will use several default handlers, including support for HTTP, FTP and when applicable HTTPS. If any of the handlers passed as arguments are subclasses of the default handlers, the default handlers will not be used. cSst|t�pt|d�S(Nu __bases__(u isinstanceutypeuhasattr(uobj((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuisclasssubuild_opener.<locals>.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>|EeZdZdZdd�Zdd�Zdd�ZdS( u BaseHandleri�cCs ||_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|d�sdS|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|EeZdZdZdZdd�ZeZdS(uHTTPErrorProcessoruProcess HTTP error responses.i�cCsd|j|j|j�}}}d|ko7dkns`|jjd|||||�}n|S(Ni�i,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 |EeZdZdd�ZdS(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|EeZdZdZdZdd�Zdd�ZeZZZ dZ dS( uHTTPRedirectHandlerii c s�|j�}|dkr$|dkp9|dko9|dksZt|j||||��n|jdd �}d�t�fd d �|jj�D��}t|d|d|jdd�S(u�Return 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|])\}}|j��kr||fVqdS(N(ulower(u.0ukuv(uCONTENT_HEADERS(u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu <genexpr>ts u7HTTPRedirectHandler.redirect_request.<locals>.<genexpr>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 Cs�d|kr|d}nd|kr2|d}ndSt|�}|jdkrvt||d||f||��n|js�t|�}d|d <nt|�}t|j|�}|j||||||�}|dkr�dSt |d �r[|j } |_ | j |d �|j ks3t| �|jkrot|j||j|||��qoni} |_ |_ | j |d �d | |<|j�|j�|jj|d |j�S(Nulocationuuriuhttpuhttpsuftpuu+%s - Redirection to url '%s' is not allowedu/iu redirect_dictiiutimeout(uhttpuhttpsuftpu(uurlparseuschemeu HTTPErrorupathulistu urlunparseuurljoinufull_urluredirect_requestuNoneuhasattru redirect_dictugetu max_repeatsulenumax_redirectionsuinf_msgureaducloseuparentuopenutimeout( uselfurequfpucodeumsguheadersunewurluurlpartsunewuvisited((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_302s<              u"HTTPRedirectHandler.http_error_302uoThe HTTP server returned a redirect error that would lead to an infinite loop. The last 30x error message was: N( u__name__u __module__u __qualname__u max_repeatsumax_redirectionsuredirect_requestuhttp_error_302uhttp_error_301uhttp_error_303uhttp_error_307uinf_msg(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPRedirectHandlerUs  " 7c Cs�t|�\}}|jd�s0d}|}nY|jd�sRtd|��n|jdd�}|dkryd}n|d|�}t|�\}}|dk r�t|�\}}n d}}||||fS(u3Return (scheme, user, password, host/port) given a URL or an authority. If a URL is supplied, it must have an authority (host:port) component. According to RFC 3986, having an authority component means the URL must have two slashes after the scheme: >>> _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_proxy�s2     u _parse_proxycBs5|EeZdZdZddd�Zdd�ZdS(u ProxyHandleridc Cs�|dkrt�}nt|d�s3td��||_x@|j�D]2\}}t|d||||jdd��qIWdS(Nukeysuproxies must be a mappingu%s_opencSs||||�S(N((uruproxyutypeumeth((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu<lambda>su'ProxyHandler.__init__.<locals>.<lambda>(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|j�rRdS|r�|r�dt|�t|�f} tj| j��j d�} |j dd| �nt|�}|j ||�||ks�|dkr�dS|j j |d|j�SdS(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|EeZdZdd�Zdd�Zdd�Zd dd�Zd d �Zd S( uHTTPPasswordMgrcCs i|_dS(N(upasswd(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__1suHTTPPasswordMgr.__init__cs�t|t�r|g}n|�jkr:i�j|<nxGdD]?�t��fdd�|D��}||f�j||<qAWdS(Ncs"g|]}�j|���qS((u reduce_uri(u.0uu(u default_portuself(u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu <listcomp><s u0HTTPPasswordMgr.add_password.<locals>.<listcomp>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|j�D]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 Cs�t|�}|dr=|d}|d}|dp7d}nd }|}d}t|�\}}|r�|d kr�|d k r�idd6dd6j|�} | d k r�d || f}q�n||fS( u@Accept authority or URI and extract only the authority and path.iiiu/iPuhttpi�uhttpsu%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|d�kredSdS(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 |EeZdZdd�ZdS(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\|EeZdZejdej�Zd dd�Zdd�Z dd�Z 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_count�su*AbstractBasicAuthHandler.reset_retry_countc Cs1|j|d�}|jdkrBt|j�dd|d��n|jd7_|r-|j�d}|j�dkr�td|��q-tj j |�}|r-|j �\}}}|d kr�t j d td �n|j�dkr*|j|||�} | r#| jdkr#d|_n| Sq-ndS( Nii�ubasic 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_reqed�s*     u.AbstractBasicAuthHandler.http_error_auth_reqedcCs�|jj||�\}}|dk r�d||f}dtj|j��jd�}|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_auth�s "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&|EeZdZdZdd�ZdS(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_401�s    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.pyuHTTPBasicAuthHandler�scBs&|EeZdZdZdd�ZdS(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_407�s    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.pyuProxyBasicAuthHandler�scBsw|EeZdZddd�Zdd�Zdd�Zdd�Zd d �Zd d �Z d d�Z dd�Z 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_count�su+AbstractDigestAuthHandler.reset_retry_countcCs�|j|d�}|jdkr?t|jdd|d��n|jd7_|r�|j�d}|j�dkr�|j||�S|j�dkr�td|��q�ndS( Nii�udigest 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_reqed�su/AbstractDigestAuthHandler.http_error_auth_reqedcCs�|jdd�\}}ttdt|���}|j||�}|r�d|}|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|tj�f}|jd�td�}tj|�j�}|dd�S(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|�\}} |dkr�dS|jj||j�\} } | dkr�dS|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|dkrdd��n|dkr6dd��n�fdd�}�|fS(NuMD5cSstj|jd��j�S(Nuascii(uhashlibumd5uencodeu hexdigest(ux((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu<lambda>_su?AbstractDigestAuthHandler.get_algorithm_impls.<locals>.<lambda>uSHAcSstj|jd��j�S(Nuascii(uhashlibusha1uencodeu hexdigest(ux((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu<lambda>ascs�d||f�S(Nu%s:%s((usud(uH(u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu<lambda>cs((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.pyuAbstractDigestAuthHandler�s    < cBs2|EeZdZdZdZdZdd�ZdS(uHTTPDigestAuthHandleru�An authentication protocol defined by RFC 2069 Digest authentication improves on basic authentication because it does not transmit passwords in the clear. u Authorizationi�cCs9t|j�d}|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,|EeZdZdZdZdd�ZdS(uProxyDigestAuthHandleruProxy-Authorizationi�cCs/|j}|jd|||�}|j�|S(Nuproxy-authenticate(uhostuhttp_error_auth_reqedureset_retry_count(uselfurequfpucodeumsguheadersuhosturetry((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_407�s    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|EeZdZddd�Zdd�Zdd�Zdd �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_debuglevel�su'AbstractHTTPHandler.set_http_debuglevelc Cs�|j}|std��n|jdk r|j}t|t�rZd}t|��n|jd�s||jdd�n|jd�syt |�}WnCtk r�t|t j �r�t dt |�|f��nYqX|jddt|�|j�qn|}|j�rDt|j�\}}t|�\}} n|jd�sf|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}|std��n||d|j|�}t|j���jt�fdd�|jj�D���d�d<tdd��j�D���|jr�i}d}|�kr��|||<�|=n|j |jd |�ny&|j |j �|j |j ��Wn>tjk rU}z|j�t|��WYd d }~Xn/X|j�} |jr�|jj�d |_n|j�| _| j| _| S( u�Return 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 <genexpr>�s u.AbstractHTTPHandler.do_open.<locals>.<genexpr>ucloseu Connectioncss'|]\}}|j�|fVqdS(N(utitle(u.0unameuval((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu <genexpr>�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_open�s6 /    &      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.pyuAbstractHTTPHandler�s  (uAbstractHTTPHandlercBs)|EeZdZdd�ZejZdS(u HTTPHandlercCs|jtjj|�S(N(udo_openuhttpuclientuHTTPConnection(uselfureq((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu http_open�suHTTPHandler.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 HTTPHandler�s uHTTPSConnectioncBs>|EeZdZddddd�Zdd�ZejZdS(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|j�S(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|EeZdZddd�Zdd�Zdd�ZeZeZdS(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 |EeZdZdd�ZdS(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|||<q W|S(u>Parse list of key=value strings where keys are not duplicated.u=iiu"i����i����(usplit(uluparsedueltukuv((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuparse_keqv_list&s  uparse_keqv_listcCs�g}d}d}}x�|D]�}|r?||7}d}qn|r�|dkr]d}qn|dkrrd}n||7}qn|dkr�|j|�d}qn|dkr�d}n||7}qW|r�|j|�ndd�|D�S( 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|]}|j��qS((ustrip(u.0upart((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu <listcomp>Ys u#parse_http_list.<locals>.<listcomp>FT(uFalseuTrueuappend(usuresupartuescapeuquoteucur((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuparse_http_list0s4            uparse_http_listcBs>|EeZdZdd�ZdZdd�Zdd�ZdS(u FileHandlercCs�|j}|dd�dkrt|dd�dkrt|jrt|jdkrt|j|j�k r�td��q�n |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}tjdkrvy7ttjd�dtjtj��d�t_Wqvtjk rrtjd�ft_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|�}y�tj|�}|j}|jj |j dd�} |j |�d} |j d| p�d|| f�} |r�t|�\}} n| s�| rt|�|j�kr|r�d||} n d|} tt|d�| | �SWn1tk rP}zt|��WYdd}~XnXtd��dS( 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_gethostbyname�su_safe_gethostbynamecBs,|EeZdZdd�Zdd�ZdS(u FTPHandlerc"Cs�ddl}ddl}|j}|s6td��nt|�\}}|dkr`|j}n t|�}t|�\}}|r�t |�\}}nd}t |�}|p�d}|p�d}yt j |�}Wn4t j k r }zt|��WYdd}~XnXt|j�\} } | jd�} ttt | ��} | dd�| d} } | r�| d r�| dd�} ny|j||||| |j�} | r�dp�d}xM| D]E}t|�\}}|j�dkr�|dkr�|j�}q�q�W| j| |�\}}d}|j|j�d}|rV|d |7}n|dk r|dkr|d|7}ntj|�}t|||j�SWnQ|jk r�}z.td|�}|jt j!�d��WYdd}~XnXdS(Niuftp error: no host givenuu/iuIuDutypeuauAuiuduContent-type: %s uContent-length: %d u ftp error: %rii����i����(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_open�s\         !  uFTPHandler.ftp_openc Cst||||||dd�S(Nu persistentF(u ftpwrapperuFalse(uselfuuserupasswduhostuportudirsutimeout((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu connect_ftp�suFTPHandler.connect_ftpN(u__name__u __module__u __qualname__uftp_openu connect_ftp(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu FTPHandler�s 5cBs\|EeZdZdd�Zdd�Zdd�Zdd�Zd 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 setTimeout�suCacheFTPHandler.setTimeoutcCs ||_dS(N(u max_conns(uselfum((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu setMaxConns�suCacheFTPHandler.setMaxConnscCs�|||dj|�|f}||jkrJtj�|j|j|<n<t||||||�|j|<tj�|j|j|<|j�|j|S(Nu/(ujoinucacheutimeudelayutimeoutu ftpwrapperu check_cache(uselfuuserupasswduhostuportudirsutimeoutukey((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu connect_ftp�s uCacheFTPHandler.connect_ftpcCs tj�}|j|krxxZt|jj��D]@\}}||kr1|j|j�|j|=|j|=q1q1Wntt|jj���|_t |j�|j krxJt|jj��D]3\}}||jkr�|j|=|j|=Pq�q�Wtt|jj���|_ndS(N( utimeusoonestulistutimeoutuitemsucacheucloseuminuvaluesulenu max_conns(uselfutukuv((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu check_cache�s "  "  uCacheFTPHandler.check_cachecCsBx!|jj�D]}|j�qW|jj�|jj�dS(N(ucacheuvaluesucloseuclearutimeout(uselfuconn((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu clear_cache�s uCacheFTPHandler.clear_cacheN( u__name__u __module__u __qualname__u__init__u setTimeoutu setMaxConnsu connect_ftpu check_cacheu clear_cache(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuCacheFTPHandler�s     i unt(u url2pathnameu pathname2urlcCs t|�S(uOS-specific conversion from a relative URL of the 'file' scheme to a file system path; not recommended for general use.(uunquote(upathname((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu url2pathname scCs t|�S(uOS-specific conversion from a file system path to a relative URL of the 'file' scheme; not recommended for general use.(uquote(upathname((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu pathname2urlscBs8|EeZdZdZd)ZdeZd)dd�Zdd�Z dd�Z d d �Z d d �Z d)d d�Z d)dd�Zd)dd�Zd)d)d)dd�Zdd�Zd)dd�Zd)dd�Zdd�Zerdd�Zd)dd �Znd!d"�Zd#d$�Zd%d&�Zd)d'd(�Zd)S(*u URLopeneru,Class to open URLs. This is a class rather than just a subroutine because we may need more than one set of global protocol-specific options. Note -- this is a base class for those who don't want the automatic handling of errors type 302 (relocated) and 401 (authorization needed).uPython-urllib/%scKs�di|jjd6}tj|tdd�|dkrEt�}nt|d�s`td��||_ |j d�|_ |j d�|_ d |j fg|_g|_tj|_d|_t|_dS( NuW%(class)s style of invoking requests is deprecated. Use newer urlopen functions/methodsuclassu stackleveliukeysuproxies must be a mappingukey_fileu cert_fileu User-Agent(u __class__u__name__uwarningsuwarnuDeprecationWarninguNoneu getproxiesuhasattruAssertionErroruproxiesugetukey_fileu cert_fileuversionu addheadersu_URLopener__tempfilesuosuunlinku_URLopener__unlinku tempcacheuftpcache(uselfuproxiesux509umsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__,s      uURLopener.__init__cCs|j�dS(N(uclose(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__del__FsuURLopener.__del__cCs|j�dS(N(ucleanup(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyucloseIsuURLopener.closec Css|jrVx7|jD],}y|j|�Wqtk r>YqXqW|jdd�=n|jro|jj�ndS(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.addheadercCs�tt|��}t|dd�}|jrn||jkrn|j|\}}t|d�}t|||�St|�\}}|s�d}n||jkr�|j|}t|�\}} t| �\} } | |f}nd }d|} ||_ | j dd�} t || �sD|r1|j |||�S|j||�Sny9|d krft|| �|�St|| �||�SWn^tk r��YnJtjk r�} z'td| �jtj�d ��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_unknown�suURLopener.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_proxy�suURLopener.open_unknown_proxyc'Cs�tt|��}|jr5||jkr5|j|St|�\}}|dkr�| sf|dkr�yC|j|�}|j�}|j�tt |�d�|fSWq�t k r�} zWYdd} ~ Xq�Xn|j ||�}z�|j�} |r t |d�} n�ddl } t|�\} }t |p7d�\} }t |pOd�\}} t|pgd�\}} tjj|�d}| j|�\}}|jj|�tj|d�} z�|| f}|jdk r�||j|<nd }d }d}d}d | kr%t| d �}n|r>||||�nx\|j|�}|sZPn|t|�7}| j|�|d7}|rA||||�qAqAWd| j�XWd|j�X|dkr�||kr�td ||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.pyuretrieve�sl          uURLopener.retrievecCsd}d}t|t�r]t|�\}}|rTt|�\}}t|�}n|}n�|\}}t|�\}}t|�\} } | }d}| j�dkr�d}n^t| �\}} |r�t|�\}}n|r�d| || f}nt|�r|}n|s*t dd��n|r]t|�}t j |j ��j d�} nd} |r�t|�}t j |j ��j d�} nd} ||�} i}| r�d| |d<n| r�d| |d<n|r�||d <nd |d <x!|jD]\}}|||<qW|dk rLd |d <| jd|||�n| jd|d|�y| j�}Wn$tjjk r�td��YnXd|jko�dknr�t||jd||j�S|j||j|j|j|j|�SdS(u�Make an HTTP connection using connection_class. This is an internal method that should be called from open_http() or open_https(). Arguments: - connection_factory should take a host name and return an HTTPConnection instance. - url is the url to retrieval or a host, relative-path pair. - data is payload for a POST request or None. uhttpu %s://%s%su http erroru no host givenuasciiuBasic %suProxy-Authorizationu AuthorizationuHostucloseu Connectionu!application/x-www-form-urlencodedu Content-TypeuPOSTuGETuheadersu$http protocol error: bad status linei�i,uhttp:N(uNoneu isinstanceustru splithostu splituseruunquoteu splittypeuloweru proxy_bypassuIOErrorubase64u b64encodeuencodeudecodeu addheadersurequestu getresponseuhttpuclientu BadStatusLineuURLErrorustatusu addinfourlumsgu http_errorufpureason(uselfuconnection_factoryuurludatau user_passwdu proxy_passwduhostuselectorurealhostuurltypeurestu proxy_authuauthu http_connuheadersuheaderuvalueuresponse((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu_open_generic_http�sr       ! !       uURLopener._open_generic_httpcCs|jtjj||�S(uUse HTTP protocol.(u_open_generic_httpuhttpuclientuHTTPConnection(uselfuurludata((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu open_http-suURLopener.open_httpc Cs�d|}t||�rwt||�}|dkrO||||||�} n|||||||�} | rw| Sn|j|||||�S(u�Handle http errors. Derived class can override this, or provide specific handlers named http_error_DDD where DDD is the 3-digit error code.u http_error_%dN(uhasattrugetattruNoneuhttp_error_default( uselfuurlufpuerrcodeuerrmsguheadersudataunameumethoduresult((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu http_error1s  uURLopener.http_errorcCs&|j�t||||d��dS(u>Default 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|j�S(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_httpscCs�t|t�std��n|dd�dkru|dd�dkru|dd�j�dkrutd ��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_filecCs�ddl}ddl}t|�\}}t|�}ytj|�}Wn:tk r�}zt|j|j ��WYdd}~XnX|j } |j j |j dd�} |j|�d} |jd| p�d| | f�} |s'|} |dd�dkrd|} ntt|d �| | �St|�\}}| r�tj|�t�ft�kr�|} |dd�dkr�d|} n)|dd �d kr�td |��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_filecCs�t|t�std��nddl}t|�\}}|sQtd��nt|�\}}t|�\}}|r�t|�\}}nd}t |�}t |p�d�}t |p�d�}t j |�}|s�ddl }|j }n t|�}t|�\}} t |�}|jd�} | dd�| d} } | rk| d rk| dd�} n| r�| d r�d| d<n|||dj| �f} t|j�tkrxJ|jj�D]6} | | kr�|j| }|j| =|j�q�q�Wny9| |jkr:t||||| �|j| <n| sId}nd }xM| D]E}t|�\}}|j�d krV|dkrV|j�}qVqVW|j| j| |�\}}|jd|�d}d}|r�|d|7}n|dk r|dkr|d|7}ntj|�}t||d|�SWnKt �k r�}z(td|�j!t"j#�d��WYdd}~XnXdS(uUse FTP protocol.uCftp error: proxy support for ftp protocol currently not implementediNuftp error: no host givenuu/iuDuIutypeuauAuiuduftp:uContent-Type: %s uContent-Length: %d u ftp error %rii����i����(uauAuiuIuduD($u isinstanceustruURLErroru mimetypesu splithostu splitportu splituseru splitpasswduNoneuunquoteusocketu gethostbynameuftplibuFTP_PORTuintu splitattrusplitujoinulenuftpcacheu MAXFTPCACHEukeysucloseu ftpwrapperu splitvalueuloweruupperuretrfileu guess_typeuemailumessage_from_stringu addinfourlu ftperrorsuwith_tracebackusysuexc_info(uselfuurlu mimetypesuhostupathuportuuserupasswduftplibuattrsudirsufileukeyukuvutypeuattruvalueufpuretrlenumtypeuheadersuexp((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuopen_ftpysp          "   uURLopener.open_ftpc Cs�t|t�std��ny|jdd�\}}Wn!tk r]tdd��YnX|smd}n|jd�}|dkr�d ||d �kr�||dd �}|d |�}nd }g}|jd tj d tj tj����|jd|�|dkr>t j |j d��jd�}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_data�s6  " $   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�|EeZdZdZdd�Zdd�Zd!dd�Zdd �Zd!d d �Z d!d d �Z d!dd�Z d!d"dd�Z d!d"dd�Zd!dd�Zd!dd�Zd!dd�Zd!dd�Zddd�Zdd �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_default�su!FancyURLopener.http_error_defaultc Cs�|jd7_|jrm|j|jkrmt|d�rE|j}n |j}d|_|||dd|�S|j||||||�}d|_|S(u%Error 302 -- relocated (temporarily).iuhttp_error_500ii�u)Internal Server Error: Redirect Recursion(utriesumaxtriesuhasattruhttp_error_500uhttp_error_defaulturedirect_internal( uselfuurlufpuerrcodeuerrmsguheadersudataumethuresult((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_302�s       uFancyURLopener.http_error_302c Cs�d|kr|d}nd|kr2|d}ndS|j�t|jd||�}t|�}|jd kr�t|||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_internal�s       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�\} } | j�dkr�tj||||||�n|s�tj||||||�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�\} } | j�dkr�tj||||||�n|s�tj||||||�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| �\} } | jd�d} | | d�} |j| || �\} } | p�| s�dSdt| dd�t| 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| �\} } | jd�d} | | d�} |j| || �\} } | p�| s�dSdt| dd�t| 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 Cs�t|�\}}|jd�d}||d�}|j|||�\}}|pY|s`dSdt|dd�t|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 Cs�t|�\}}|jd�d}||d�}|j|||�\}}|pY|s`dSdt|dd�t|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_auth�s   u%FancyURLopener.retry_https_basic_authicCs�|d|j�}||jkrD|r6|j|=qD|j|Sn|j||�\}}|sh|r~||f|j|<n||fS(Nu@(uloweru auth_cacheuprompt_user_passwd(uselfuhosturealmu clear_cacheukeyuuserupasswd((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_user_passwd�s  uFancyURLopener.get_user_passwdc Cspddl}y@td||f�}|jd|||f�}||fSWntk rkt�dSYnXdS(u#Override this in a GUI environment!iNuEnter username for %s at %s: u#Enter password for %s in %s at %s: (NN(ugetpassuinputuKeyboardInterruptuprintuNone(uselfuhosturealmugetpassuuserupasswd((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuprompt_user_passwd�s   u!FancyURLopener.prompt_user_passwdNF(u__name__u __module__u __qualname__u__doc__u__init__uhttp_error_defaultuNoneuhttp_error_302uredirect_internaluhttp_error_301uhttp_error_303uhttp_error_307uFalseuhttp_error_401uhttp_error_407uretry_proxy_http_basic_authuretry_proxy_https_basic_authuretry_http_basic_authuretry_https_basic_authuget_user_passwduprompt_user_passwd(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuFancyURLopener�s$    cCs"tdkrtjd�antS(u8Return the IP address of the magic hostname 'localhost'.u localhostN(u _localhostuNoneusocketu gethostbyname(((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu localhost�s u localhostc Csgtdkrcy#ttjtj��d�aWqctjk r_ttjd�d�aYqcXntS(u,Return the IP addresses of the current host.iu localhostN(u _thishostuNoneutupleusocketugethostbyname_exu gethostnameugaierror(((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuthishost�s  #!uthishostcCs(tdkr$ddl}|jantS(u1Return the set of errors raised by the FTP class.iN(u _ftperrorsuNoneuftplibu all_errors(uftplib((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu ftperrors�s   u ftperrorscCs"tdkrtjd�antS(u%Return an empty email Message object.uN(u _noheadersuNoneuemailumessage_from_string(((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu noheaders�s u noheaderscBst|EeZdZdZdddd�Zdd�Zdd�Zdd �Z d d �Z d d �Z dd�Z dS(u ftpwrapperu;Class used by open_ftp() for cache of open FTP connections.cCsV||_||_||_||_||_||_d|_||_|j�dS(Ni( uuserupasswduhostuportudirsutimeouturefcountu keepaliveuinit(uselfuuserupasswduhostuportudirsutimeoutu persistent((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__�s        uftpwrapper.__init__cCs�ddl}d|_|j�|_|jj|j|j|j�|jj|j |j �dj |j �}|jj |�dS(Niu/(uftplibubusyuFTPuftpuconnectuhostuportutimeoutuloginuuserupasswdujoinudirsucwd(uselfuftplibu_target((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuinit�s  uftpwrapper.initc .Cs:ddl}|j�|dkr1d}d}nd|}d}y|jj|�Wn/|jk r�|j�|jj|�YnXd}|r0| r0y&d|}|jj|�\}}Wq0|jk r,}zGt |�dd�d krt d |�j t j �d ��nWYdd}~Xq0Xn|s�|jjd�|r�|jj�} zVy|jj|�Wn;|jk r�}zt d |�|�WYdd}~XnXWd|jj| �Xd |}nd }|jj|�\}}nd|_t|jd�|j�} |jd7_|j�| |fS(NiuduDuTYPE AiuTYPE uRETR iu550u ftp error: %riuLIST uLISTurb(uduD(uftplibu endtransferuftpuvoidcmdu all_errorsuinituNoneu ntransfercmdu error_permustruURLErroruwith_tracebackusysuexc_infoupwducwdubusyu addclosehookumakefileu file_closeurefcountuclose( uselfufileutypeuftplibucmduisdiruconnuretrlenureasonupwduftpobj((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretrfile�sN        ,*   uftpwrapper.retrfilecCs d|_dS(Ni(ubusy(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu endtransfer suftpwrapper.endtransfercCs)d|_|jdkr%|j�ndS(NiF(uFalseu keepaliveurefcountu real_close(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuclose s uftpwrapper.closecCsC|j�|jd8_|jdkr?|j r?|j�ndS(Nii(u endtransferurefcountu keepaliveu real_close(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu file_close% s uftpwrapper.file_closec Cs7|j�y|jj�Wnt�k r2YnXdS(N(u endtransferuftpucloseu ftperrors(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu real_close+ s  uftpwrapper.real_closeNT( u__name__u __module__u __qualname__u__doc__uNoneuTrueu__init__uinituretrfileu endtransferucloseu file_closeu real_close(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu ftpwrapper�s -   u ftpwrappercCs�i}x\tjj�D]K\}}|j�}|r|dd�dkr|||dd�<qqWdtjkr�|jdd�n|S(uReturn a dictionary of scheme -> proxy server URL mappings. Scan the environment for variables named <scheme>_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_METHODuhttpi����i����(uosuenvironuitemsulowerupopuNone(uproxiesunameuvalue((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyugetproxies_environment3 s  ugetproxies_environmentcCs�tjjdd�p'tjjdd�}|dkr:dSt|�\}}dd�|jd�D�}x6|D].}|ro|j|�s�|j|�rodSqoWd S( u�Test 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|]}|j��qS((ustrip(u.0uproxy((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu <listcomp>W s u,proxy_bypass_environment.<locals>.<listcomp>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 Cs�ddlm}t|�\}}dd�}d|krK|drKdSnd }x.|jdf�D]}|svqdntjd|�}|d k rk|d kr�ytj|�}||�}Wq�tj k r�wdYq�Xn||j d ��} |j d �} | d kr0d |j d �j d�d } 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.<locals>.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_sysconfcCst�S(u�Return 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!t�rt|�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_bypasscCst�pt�S(N(ugetproxies_environmentugetproxies_macosx_sysconf(((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu getproxies� scCsli}yddl}Wntk r.|SYnXy|j|jd�}|j|d�d}|r?t|j|d�d�}d|kr�x�|jd�D]M}|jdd�\}}tjd |�s�d ||f}n|||<q�Wq?|dd �d kr||d <q?d||d <d||d<d||d<n|j �Wnt t t fk rgYnX|S(uxReturn a dictionary of scheme -> 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_registrycCst�pt�S(u�Return 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 'Cs�yddl}Wntk r(dSYnXyK|j|jd�}|j|d�d}t|j|d�d�}Wntk r�dSYnX| s�| r�dSt|�\}}|g}y/tj |�}||kr�|j |�nWntj k rYnXy/tj |�}||kr/|j |�nWntj k rGYnX|j d�}x�|D]�} | dkr�d|kr�dSn| jdd �} | jd d �} | jd d�} x*|D]"} tj| | tj�r�dSq�Wq^WdS( Niu;Software\Microsoft\Windows\CurrentVersion\Internet Settingsu ProxyEnableu ProxyOverrideu;u<local>u.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!t�rt|�St|�SdS(u�Return 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.pyu<module>Ds�                p         $ ?  y� &h H*@ E  � n  +4 :8  ���    [   <   - 2