Viewing File: /opt/alt/python35/lib/python3.5/site-packages/setuptools/__pycache__/package_index.cpython-35.pyc



\#
@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
yddlmZWn"e
k
rddlmZYnXddlmZddlmZmZmZmZddlZddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#ddlm$Z$dd	l%m&Z&dd
l'm(Z(ddl)m*Z*ddl+m,Z,dd
l-m.Z.ej/dZ0ej/dej1Z2ej/dZ3ej/dej1j4Z5dj6Z7ddddgZ8dZ9dZ:e:j;dej<dddeZ=ddZ>ddZ?dd Z@dd!dZAdd"d#ZBdd$d%ZCdedd&dZDdd'd(ZEd)d*ZFej/d+ej1ZGeFd,d-ZHGd.d/d/eIZJGd0d1d1eJZKGd2ddeZLej/d3jMZNd4d5ZOd6d7ZPd8d9ZQdd:d;ZRd<d=ZSGd>d?d?eIZTGd@dAdAejUZVejWjXdBdCZYeRe9eYZYdDdEZZdFdGZ[dS)Hz#PyPI and direct package downloadingN)wraps)	splituser)six)urllibhttp_clientconfigparsermap)
CHECKOUT_DISTDistributionBINARY_DISTnormalize_pathSOURCE_DISTEnvironmentfind_distributions	safe_namesafe_versionto_filenameRequirementDEVELOP_DIST)ssl_support)log)DistutilsError)	translate)strip_fragment)get_all_headersz^egg=([-A-Za-z0-9_.+!]+)$zhref\s*=\s*['"]?([^'"> ]+)z<a href="([^"#]+)">([^<]+)</a>
\s+\(<a (?:title="MD5 hash"
\s+)href="[^?]+\?:action=show_md5&amp;digest=([0-9a-f]{32})">md5</a>\)z([-+.a-z0-9]{2,}):z.tar.gz .tar.bz2 .tar .zip .tgzPackageIndexdistros_for_urlparse_bdist_wininstinterpret_distro_namez<setuptools/{setuptools.__version__} Python-urllib/{py_major}Zpy_major
setuptoolscCs=ytj|SWn%tk
r8td|fYnXdS)Nz1Not a URL, existing file, or requirement spec: %r)rparse
ValueErrorr)specr%/package_index.pyparse_requirement_arg6s

r'cCs|j}d\}}}|jdr|jdrR|dd}d}n|jddr|dd}|dd}d}n`|jd
r|dd}d}n8|jd
dr|dd}|dd}d}|||fS)z=Return (base,pyversion) or (None,None) for possible .exe nameNz.exez
.win32.exe
win32z	.win32-pyz.win-amd64.exez	win-amd64z
.win-amd64-py)NNNiiiiiiir/i)lowerendswith
startswith)namer0basepy_verZplatr%r%r&r?s$			c	Cstjj|}|\}}}}}}tjj|jdd}|dkr|dkrtjj|jdd}d|kr|jdd\}}||fS)	N/zsourceforge.netdownload#)rr"urlparseunquotesplit)	urlpartsschemeserverpathZ
parametersqueryfragmentr4r%r%r&egg_info_for_urlWsrGccst|\}}xt|||D]}|Vq%W|rtj|}|rx.t||jd|dtD]}|VqqWdS)zEYield egg or source distribution objects that might be found at a URLr7
precedenceN)rGdistros_for_locationEGG_FRAGMENTmatchrgroupr	)r@metadatar4rFdistrKr%r%r&rbs	"cCs|jdr|dd}|jdrPd|krPtj|||gS|jdrt|\}}}|dk	rt||||t|SxDtD]<}|j|r|dt|}t|||SqWgS)z:Yield egg or source distribution objects based on basenamez.egg.zipNr,z.egg-z.exer/)r1r
Z
from_locationrrr
EXTENSIONSlen)locationbasenamerMZwin_baser5platformextr%r%r&rIps
rIcCs"tt|tjj||S)zEYield possible egg or source distribution objects based on a filename)rIrosrDrS)filenamerMr%r%r&distros_for_filenamesrXccs|jd}|r=tdd|ddDr=dSxmtdt|dD]R}t||dj|d|dj||dd|d|d	|VqWWdS)
zGenerate alternative interpretations of a source distro name

    Note: if `location` is a filesystem filename, you should call
    ``pkg_resources.normalize_path()`` on it before passing it to this
    routine!
    rOcss!|]}tjd|VqdS)z	py\d\.\d$N)rerK).0pr%r%r&	<genexpr>sz(interpret_distro_name.<locals>.<genexpr>r9Nr7
py_versionrHrT)r?anyrangerQr
join)rRrSrMr]rHrTrAr[r%r%r&rs* 5ccst}|j}|dkrSxjtjj|j|D]}|||Vq7Wn8x5|D]-}||}||krZ|||VqZWdS)zHList unique elements, preserving order. Remember all elements ever seen.N)setaddrmovesfilterfalse__contains__)iterablekeyseenZseen_addelementkr%r%r&unique_everseens		


rkcs"tfdd}|S)zs
    Wrap a function returning an iterable such that the resulting iterable
    only ever yields unique items.
    cst||S)N)rk)argskwargs)funcr%r&wrapperszunique_values.<locals>.wrapper)r)rnror%)rnr&
unique_valuessrpz(<([^>]*\srel\s*=\s*['"]?([^'">]+)[^>]*)>ccsxtj|D]}|j\}}tttj|jjd}d|ksgd|krx:t	j|D])}t
jj|t
|jdVqwWqWxddD]\}|j|}|d	krt	j||}|rt
jj|t
|jdVqWdS)
zEFind rel="homepage" and rel="download" links in `page`, yielding URLs,Zhomepager8r7
<th>Home Page<th>Download URLN)rrrsr;)RELfinditergroupsrarstrstripr0r?HREFrr"urljoin
htmldecoderLfindsearch)r@pagerKtagZrelZrelsposr%r%r&find_external_linkss'+
rc@s:eZdZdZddZddZddZdS)	ContentCheckerzP
    A null content checker that defines the interface for checking content
    cCsdS)z3
        Feed a block of data to the hash.
        Nr%)selfblockr%r%r&feedszContentChecker.feedcCsdS)zC
        Check the hash. Return False if validation fails.
        Tr%)rr%r%r&is_validszContentChecker.is_validcCsdS)zu
        Call reporter with information about the checker (hash name)
        substituted into the template.
        Nr%)rreportertemplater%r%r&reportszContentChecker.reportN)__name__
__module____qualname____doc__rrrr%r%r%r&rsrc@saeZdZejdZddZeddZddZ	dd	Z
d
dZdS)
HashCheckerzK(?P<hash_name>sha1|sha224|sha384|sha256|sha512|md5)=(?P<expected>[a-f0-9]+)cCs(||_tj||_||_dS)N)	hash_namehashlibnewhashexpected)rrrr%r%r&__init__s	zHashChecker.__init__cCsRtjj|d}|s#tS|jj|}|sBtS||jS)z5Construct a (possibly null) ContentChecker from a URLr7r;)rr"r=rpatternr}	groupdict)clsr@rFrKr%r%r&from_urlszHashChecker.from_urlcCs|jj|dS)N)rupdate)rrr%r%r&rszHashChecker.feedcCs|jj|jkS)N)r	hexdigestr)rr%r%r&rszHashChecker.is_validcCs||j}||S)N)r)rrrmsgr%r%r&rs
zHashChecker.reportN)rrrrYcompilerrclassmethodrrrrr%r%r%r&rs	rcseZdZdZddJddddZdd	d
ZdddZdd
dZddZddZ	ddZ
ddZdddZddZ
dfddZddZdd Zd!d"Zd#d$Zd%d&Zddddd'd(Zddd)d*Zd+d,Zd-Zd.d/Zd0d1Zdd2d3Zd4d5Zd6d7Zd8d9Zd:d;Zd<d=Ze dd>d?Z!d@dAZ"dBdCZ#dDdEZ$dFdGZ%dHdIZ&S)Krz;A distribution index that scans web pages for download URLszhttps://pypi.python.org/simple*NTcOstj||||dd|jd|_i|_i|_i|_tjdj	t
t|j|_
g|_|otjo|ptj}|rtj||_ntjj|_dS)Nr6|)rrr1	index_urlscanned_urlsfetched_urls
package_pagesrYrr`rrrKallowsto_scanrZis_availableZfind_ca_bundleZ
opener_foropenerrrequesturlopen)rrZhostsZ	ca_bundleZ
verify_sslrlkwZuse_sslr%r%r&r$s!			'		zPackageIndex.__init__FcCs^||jkr|rdSd|j|<t|sD|j|dStt|}|r|j|sodS|jd||s|s||jkrtt|j	|dS|j|sd|j|<dS|j
d|d|j|<d}|j|||}|dkrdSd|j|j<d|j
jddjkr]|jdS|j}|j}t|tst|tjjrd	}n|j
jd
pd	}|j|d}|jxHtj|D]7}	tjj|t|	jd}
|j|
qW|j |j!rZt"|d
ddkrZ|j#||}dS)z<Evaluate a URL as a possible download, and maybe retrieve itNTzFound link: %sz
Reading %sz<Download error on %s: %%s -- Some packages may not be found!htmlzcontent-typezlatin-1charsetignorer7codei)$r
URL_SCHEMEprocess_filenamelistrurl_okdebugrrrbinfoopen_urlr@headersgetr0closeread
isinstancerwrerror	HTTPErrorZ	get_paramdecoderyrur"rzr{rLprocess_urlr2rgetattr
process_index)rr@Zretrievediststmplfr4r~rrKlinkr%r%r&r9sP



!
		
$*zPackageIndex.process_urlcCstjj|s&|jd|dStjj|r|rtjj|}x6tj|D]%}|jtjj||dqaWt	|}|r|j
d|tt|j
|dS)Nz
Not found: %sTz	Found: %s)rVrDexistswarnisdirrealpathlistdirrr`rXrrrrb)rfnnestedrDitemrr%r%r&rks#zPackageIndex.process_filenamecCst|}|o*|jdjdk}|sR|jtjj|drVdSd}|rut||n|j||dS)Nr7fileTzN
Note: Bypassing %s (disallowed host; see http://bit.ly/1dg9ijs for details).
)	rrLr0rrr"r=rr)rr@fatalsis_filerr%r%r&r{s!%zPackageIndex.url_okcCsEttjj|}dd|D}ttj|j|dS)Ncss@|]6}tj|D] }|jdr||fVqqdS)z	.egg-linkN)rVrr1)rZrDentryr%r%r&r\sz.PackageIndex.scan_egg_links.<locals>.<genexpr>)filterrVrDrr	itertoolsstarmap
scan_egg_link)rZsearch_pathdirsZ	egg_linksr%r%r&scan_egg_linkss	
zPackageIndex.scan_egg_linksc
Csttjj||(}ttdttj|}WdQRXt	|dkr\dS|\}}xQt
tjj||D]4}tjj|||_t|_
|j|qWdS)Nr9)openrVrDr`rrrrwrxrQrrRr
rHrb)rrDrZ	raw_lineslinesZegg_pathZ
setup_pathrNr%r%r&rs("	zPackageIndex.scan_egg_linkc

sfdd}xXtj|D]G}y,|tjj|t|jdWq"tk
rhYq"Xq"W||\}}|rxvt||D]e}t	|\}}	|j
dr|	r|r|d||f7}n
j|j|qWt
jdd|SdSd	S)
z#Process the contents of a PyPI pagecs|jjrtttjj|tjdjd}t|dkrd|dkrt	|d}t
|d}djj|j
i|<t|t|fSdS)Nr6r9r:r7rT)NN)r2rrrrr"r>rQr?rrr
setdefaultr0r)rrApkgver)rr%r&scans1"z(PackageIndex.process_index.<locals>.scanr7z.pyz
#egg=%s-%scSsd|jdddS)Nz<a href="%s#md5=%s">%s</a>r7r r9)rL)mr%r%r&<lambda>sz,PackageIndex.process_index.<locals>.<lambda>rN)ryrurr"rzr{rLr#rrGr1need_version_infoscan_urlPYPI_MD5sub)
rr@r~rrKrrnew_urlr4fragr%)rr&rs$,
	
zPackageIndex.process_indexcCs|jd|dS)NzPPage at %s links to .py file(s) without version info; an index scan is required.)scan_all)rr@r%r%r&rszPackageIndex.need_version_infocGsI|j|jkr5|r(|j|||jd|j|jdS)Nz6Scanning index of all packages (this may take a while))rrrrr)rrrlr%r%r&rszPackageIndex.scan_allcCs|j|j|jd|jj|jsK|j|j|jd|jj|jsm|j|x3t|jj|jfD]}|j|qWdS)Nr6)	rrunsafe_namerrrgproject_namenot_found_in_indexr)rrequirementr@r%r%r&
find_packagess
%zPackageIndex.find_packagescsk|j|j|x8||jD])}||kr;|S|jd||q%Wtt|j||S)Nz%s does not match %s)prescanrrgrsuperrobtain)rrZ	installerrN)	__class__r%r&rs

zPackageIndex.obtaincCsf|j|jd||jsb|jtj|td|jjtj	j
|fdS)z-
        checker is a ContentChecker
        zValidating %%s checksum for %sz7%s validation failed for %s; possible download problem?N)rrrrrVunlinkrrr3rDrS)rcheckerrWtfpr%r%r&
check_hashs

zPackageIndex.check_hashcCsrxk|D]c}|jdksJt|sJ|jdsJtt|rZ|j|q|jj|qWdS)z;Add `urls` to the list that will be prescanned for searchesNzfile:)rrr2rrrappend)rZurlsr@r%r%r&add_find_linkss

zPackageIndex.add_find_linkscCs/|jr"tt|j|jd|_dS)z7Scan urls scheduled for prescanning (e.g. --find-links)N)rrrr)rr%r%r&rs	zPackageIndex.prescancCsN||jr |jd}}n|jd}}|||j|jdS)Nz#Couldn't retrieve index page for %rz3Couldn't find index page for %r (maybe misspelled?))rgrrrr)rrmethrr%r%r&rs

zPackageIndex.not_found_in_indexcCst|tst|}|ry|j|jd||}t|\}}|jdru|j|||}|Stj	j
|r|St|}t|j
||ddS)aLocate and/or download `spec` to `tmpdir`, returning a local path

        `spec` may be a ``Requirement`` object, or a string containing a URL,
        an existing local filename, or a project/version requirement spec
        (i.e. the string form of a ``Requirement`` object).  If it is the URL
        of a .py file with an unambiguous ``#egg=name-version`` tag (i.e., one
        that escapes ``-`` as ``_`` throughout), a trivial ``setup.py`` is
        automatically created alongside the downloaded file.

        If `spec` is a ``Requirement`` object or a string containing a
        project/version requirement spec, this method returns the location of
        a matching distribution (possibly after downloading it to `tmpdir`).
        If `spec` is a locally existing file or directory name, it is simply
        returned unchanged.  If `spec` is a URL, it is downloaded to a subpath
        of `tmpdir`, and the local filename is returned.  Various errors may be
        raised if a problem occurs during downloading.
        r7z.pyrRN)rrr
_download_urlrLrGr1	gen_setuprVrDrr'rfetch_distribution)rr$tmpdirrBfoundr4rFr%r%r&r8 szPackageIndex.downloadc	s:jd|id}dfdd}|rfjj|||}|r|dk	r|||}|dkrjdk	rj||}|dkr|rj|||}|dkrjdrdp	d|n#jd||jd	|jSdS)
a|Obtain a distribution suitable for fulfilling `requirement`

        `requirement` must be a ``pkg_resources.Requirement`` instance.
        If necessary, or if the `force_scan` flag is set, the requirement is
        searched for in the (online) package index as well as the locally
        installed packages.  If a distribution matching `requirement` is found,
        the returned distribution's ``location`` is the value you would have
        gotten from calling the ``download()`` method with the matching
        distribution's URL or filename.  If no matching distribution is found,
        ``None`` is returned.

        If the `source` flag is set, only source distributions and source
        checkout links will be considered.  Unless the `develop_ok` flag is
        set, development and system eggs (i.e., those using the ``.egg-info``
        format) will be ignored.
        zSearching for %sNcs|dkr}x||jD]}|jtkrere|kr jd|d|<q ||kr |jtksr j|j|_tj	j
|jr |Sq WdS)Nz&Skipping development or system egg: %sr7)rgrHrrr
r8rRdownload_locationrVrDr)ZreqenvrN)
develop_okrskippedsourcerr%r&r|[s
"z-PackageIndex.fetch_distribution.<locals>.findz:No local packages or working download links found for %s%sza source distribution of rzBest match: %srR)rrrrrZcloner)	rrr
force_scanrrZlocal_indexrNr|r%)rrrrrr&rBs0!




zPackageIndex.fetch_distributioncCs/|j||||}|dk	r+|jSdS)a3Obtain a file suitable for fulfilling `requirement`

        DEPRECATED; use the ``fetch_distribution()`` method now instead.  For
        backward compatibility, this routine is identical but returns the
        ``location`` of the downloaded distribution instead of a distribution
        object.
        N)rrR)rrrrrrNr%r%r&fetchszPackageIndex.fetchc

Cs\tj|}|r=ddt||jddDp@g}t|dkr-tjj|}tjj||krtjj	||}ddl
m}|||stj
|||}ttjj	|dd?}	|	jd|dj|djtjj|dfWdQRX|S|rLtd	||fntd
dS)NcSsg|]}|jr|qSr%)version)rZdr%r%r&
<listcomp>s	z*PackageIndex.gen_setup.<locals>.<listcomp>r7r)samefilezsetup.pywzIfrom setuptools import setup
setup(name=%r, version=%r, py_modules=[%r])
zCan't unambiguously interpret project/version identifier %r; any dashes in the name or version should be escaped using underscores. %rzpCan't process plain .py files without an '#egg=name-version' suffix to enable automatic setup script generation.)rJrKrrLrQrVrDrSdirnamer`Zsetuptools.command.easy_installrshutilcopy2rwriterrsplitextr)
rrWrFrrKrrSdstrrr%r%r&rs2	!"zPackageIndex.gen_setupi c
Cs|jd|d\}}zStj|}|jt|}t|tjjrwt	d||j
|jf|j}d}|j}d	}	d|krt
|d}
ttt|
}	|j|||||	t|dw}xZ|j|}|rK|j||j||d7}|j|||||	qPqW|j|||WdQRX|SWd|r|jXdS)
NzDownloading %szCan't download %s: %s %srr7zcontent-lengthzContent-Lengthwb)NNr;)rrrrrrrrrrrrdl_blocksizermaxrint
reporthookrrrrrr)
rr@rWfprrrblocknumZbssizeZsizesrrr%r%r&_download_tos:	


zPackageIndex._download_tocCsdS)Nr%)rr@rWrZblksizerr%r%r&rszPackageIndex.reporthookcCs|jdrt|Syt||jSWnttjfk
r}zSdjdd|jD}|r|j	||nt
d||fWYdd}~XnItjj
k
r}z	|SWYdd}~Xntjjk
r8}z:|r
|j	||jnt
d||jfWYdd}~Xntjk
r}z:|ri|j	||jnt
d||jfWYdd}~Xn`tjtjfk
r}z4|r|j	||nt
d||fWYdd}~XnXdS)Nzfile: cSsg|]}t|qSr%)rw)rZargr%r%r&rs	z)PackageIndex.open_url.<locals>.<listcomp>z%s %szDownload error for %s: %sz;%s returned a bad status line. The server might be down, %s)r2
local_openopen_with_authrr#r
InvalidURLr`rlrrrrrURLErrorreasonZ
BadStatusLinelineZ
HTTPExceptionsocket)rr@warningvrr%r%r&rs6
(%%zPackageIndex.open_urlcCsKt|\}}|rLx7d|krH|jddjdd}qWnd}|jdrq|dd}tjj||}|dks|jd	r|j||S|d
ks|jdr|j||S|jdr|j	||S|d
kr't
jjt
j
j|dS|j|d|j||SdS)Nz...\_Z__downloaded__z.egg.zipr,Zsvnzsvn+Zgitzgit+zhg+rr9Tr/)rGreplacer1rVrDr`r2
_download_svn
_download_git_download_hgrrurl2pathnamer"r=r_attempt_download)rrBr@rr3rFrWr%r%r&r
s$% zPackageIndex._download_urlcCs|j|ddS)NT)r)rr@r%r%r&r'szPackageIndex.scan_urlcCsK|j||}d|jddjkrC|j|||S|SdS)Nrzcontent-typer)rrr0_download_html)rr@rWrr%r%r&r**szPackageIndex._attempt_downloadcCst|}xT|D]L}|jrtjd|r^|jtj||j||SPqW|jtj|td|dS)Nz <title>([^- ]+ - )?Revision \d+:zUnexpected HTML page found at )	rrxrYr}rrVrr&r)rr@rrWrrr%r%r&r+1s




zPackageIndex._download_htmlcCsi|jddd}d}|jjdr8d|kr8tjj|\}}}}}}	|r8|jdr8d|d	dkr8|d	djdd\}}t|\}
}|
r8d
|
kr|
jd
d\}}
d||
f}n
d|
}|}||||||	f}tjj|}|jd
||t	j
d|||f|S)Nr:r7rrzsvn:@z//r6r9:z --username=%s --password=%sz --username=z'Doing subversion checkout from %s to %szsvn checkout%s -q %s %s)r?r0r2rr"r=r
urlunparserrVsystem)rr@rWZcredsrBnetlocrDr[qrauthhostuserZpwrAr%r%r&r&@s$!$,"
zPackageIndex._download_svncCstjj|\}}}}}|jddd}|jddd}d}d|krw|jdd\}}tjj||||df}||fS)N+r7r:rr,rr;)rr"Zurlsplitr?rsplitZ
urlunsplit)r@
pop_prefixrBr0rDrErrevr%r%r&_vcs_split_rev_from_urlUs!!z$PackageIndex._vcs_split_rev_from_urlcCs|jddd}|j|dd\}}|jd||tjd||f|dk	r|jd|tjd	||f|S)
Nr:r7rr7TzDoing git clone from %s to %szgit clone --quiet %s %szChecking out %sz"(cd %s && git checkout --quiet %s))r?r9rrVr/)rr@rWr8r%r%r&r'gs	zPackageIndex._download_gitcCs|jddd}|j|dd\}}|jd||tjd||f|dk	r|jd|tjd	||f|S)
Nr:r7rr7TzDoing hg clone from %s to %szhg clone --quiet %s %szUpdating to %sz(cd %s && hg up -C -r %s >&-))r?r9rrVr/)rr@rWr8r%r%r&r(ws	zPackageIndex._download_hgcGstj||dS)N)rr)rrrlr%r%r&rszPackageIndex.debugcGstj||dS)N)rr)rrrlr%r%r&rszPackageIndex.infocGstj||dS)N)rr)rrrlr%r%r&rszPackageIndex.warn)r)'rrrrrrrrrrrrrrrrrrrr8rrrrrrrrrr*r+r&staticmethodr9r'r(rrrr%r%)rr&r!sL2
+			#D
)$#z!&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?cCs6t|ts|S|dkr,tj|St|S)N)rrrunichrchr)cr%r%r&uchrs

r?cCs|jd}|jdr:t|ddd}nL|jdrbt|dd}n$tjjjj||jd}t|S)Nr7z#xr9r*r:r)	rLr2rrrcZ
html_entitiesZname2codepointrr?)rKZwhatr%r%r&
decode_entitys$r@cCs
tt|S)z'Decode HTML entities in the given text.)
entity_subr@)textr%r%r&r{sr{csfdd}|S)Ncsfdd}|S)Ncs?tj}tjz||SWdtj|XdS)N)rgetdefaulttimeoutsetdefaulttimeout)rlrmZold_timeout)rntimeoutr%r&_socket_timeouts

z@socket_timeout.<locals>._socket_timeout.<locals>._socket_timeoutr%)rnrF)rE)rnr&rFsz'socket_timeout.<locals>._socket_timeoutr%)rErFr%)rEr&socket_timeoutsrGcCsItjj|}|j}tj|}|j}|jddS)aq
    A function compatible with Python 2.3-3.3 that will encode
    auth from a URL suitable for an HTTP header.
    >>> str(_encode_auth('username%3Apassword'))
    'dXNlcm5hbWU6cGFzc3dvcmQ='

    Long auth strings should not cause a newline to be inserted.
    >>> long_auth = 'username:' + 'password'*10
    >>> chr(10) in str(_encode_auth(long_auth))
    False
    
r)rr"r>encodebase64Zencodestringrr%)r2Zauth_sZ
auth_bytesZ
encoded_bytesencodedr%r%r&_encode_auths
rLc@s:eZdZdZddZddZddZdS)	
Credentialz:
    A username/password pair. Use like a namedtuple.
    cCs||_||_dS)N)usernamepassword)rrNrOr%r%r&rs	zCredential.__init__ccs|jV|jVdS)N)rNrO)rr%r%r&__iter__szCredential.__iter__cCsdt|S)Nz%(username)s:%(password)s)vars)rr%r%r&__str__szCredential.__str__N)rrrrrrPrRr%r%r%r&rMsrMc@sFeZdZddZeddZddZddZd	S)

PyPIConfigcCsrtjdddgd}tjj||tjjtjjdd}tjj	|rn|j
|dS)z%
        Load from ~/.pypirc
        rNrO
repositoryr~z.pypircN)dictfromkeysrRawConfigParserrrVrDr`
expanduserrr)rZdefaultsrcr%r%r&rs
!zPyPIConfig.__init__cs5fddjD}ttj|S)Ncs.g|]$}j|djr|qS)rT)rrx)rZsection)rr%r&rs	z2PyPIConfig.creds_by_repository.<locals>.<listcomp>)ZsectionsrVr_get_repo_cred)rZsections_with_repositoriesr%)rr&creds_by_repositoryszPyPIConfig.creds_by_repositorycCsO|j|dj}|t|j|dj|j|djfS)NrTrNrO)rrxrM)rr[Zrepor%r%r&r\szPyPIConfig._get_repo_credcCs7x0|jjD]\}}|j|r|SqWdS)z
        If the URL indicated appears to be a repository defined in this
        config, return the credential for that repository.
        N)r]itemsr2)rr@rTcredr%r%r&find_credentialszPyPIConfig.find_credentialN)rrrrpropertyr]r\r`r%r%r%r&rSs	rScCstjj|\}}}}}}|jdrBtjd|d
krct|\}}	nd}|stj|}
|
rt	|
}|
j
|f}tjd||rdt
|}||	||||f}tjj|}
tjj|
}|jd|ntjj|}|jd	t||}|rtjj|j\}}}}}}||kr||	kr||||||f}tjj||_|S)z4Open a urllib2 request, handling HTTP authenticationr-znonnumeric port: ''httphttpsNz*Authenticating as %s for %s (from .pypirc)zBasic Z
Authorizationz
User-Agent)rbrc)rr"r=r1rrrrSr`rwrNrrrLr.rZRequestZ
add_header
user_agentr@)r@rrBr0rDZparamsrErr2r3r_rrArrrs2Zh2Zpath2Zparam2Zquery2Zfrag2r%r%r&rs6$'rcCs|S)Nr%)r@r%r%r&
fix_sf_url<srfcCstjj|\}}}}}}tjj|}tjj|rXtjj|S|j	drNtjj
|rNg}xtj|D]}	tjj||	}
|	dkrt
|
d}|j}WdQRXPntjj
|
r|	d7}	|jdjd|	qWd}
|
jd|d	d
j|}d\}}nd\}}}ddi}tj|}tjj|||||S)z7Read a local path, with special support for directoriesr6z
index.htmlrNz<a href="{name}">{name}</a>r3zB<html><head><title>{url}</title></head><body>{files}</body></html>r@filesrHOKPath not found	Not foundzcontent-typez	text/html)rirj)rkrlrm)rr"r=rr)rVrDisfilerr1rrr`rrrformatrStringIOrr)r@rBrCrDZparamrErrWrhrfilepathrZbodyrstatusmessagerZbody_streamr%r%r&r@s,$!
!r)\rsysrVrYr	rrJrr	functoolsrZurllib.parserImportErrorurllib2Zsetuptools.externrZsetuptools.extern.six.movesrrrrr!Z
pkg_resourcesr	r
rrr
rrrrrrrrZ	distutilsrZdistutils.errorsrfnmatchrZsetuptools.py26compatrZsetuptools.py27compatrrrJIryrrKrr?rP__all__Z_SOCKET_TIMEOUTZ_tmplrorrdr'rrGrrIrXrrkrprtrobjectrrrrrAr?r@r{rGrLrMrXrSrrrrfrr%r%r%r&<module>s~
"R			%	"
!t&.
Back to Directory File Manager