ž Ÿ/{Y ˜c@sÍdZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z m Z mZmZmZmZmZmZmZmZmZmZddlmZddlmZddlmZddlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-dd lm.Z.dd l/m0Z0dd l1m2Z2dd l3m4Z4ej5d ƒZ6ej5dej7ƒZ8ej5dƒZ9ej5dej7ƒj:Z;dj<ƒZ=ddddgZ>dZ?dd„Z@dd„ZAeBdd„ZCeBdd„ZDeBdd„ZEeBeeBdd„ZFeBd d!„ZGd"d#„ZHej5d$ej7ƒZIeHd%d&„ƒZJd'ejKdd(…ed)ƒdjKfZLGd*d+„d+eMƒZNGd,d-„d-eNƒZOGd.d„deƒZPej5d/ƒjQZRd0d1„ZSd2d3„ZTd4d5„ZUdd6d7„ZVd8d9„ZWGd:d;„d;eMƒZXGd<d=„d=e-j-ƒZYejZd>d?„Z[eVe?ƒe[ƒZ[d@dA„Z\dBdC„Z]dS(Du#PyPI and direct package downloadingiN(uwraps( u CHECKOUT_DISTu Distributionu BINARY_DISTunormalize_pathu SOURCE_DISTurequireu Environmentufind_distributionsu safe_nameu safe_versionu to_filenameu Requirementu DEVELOP_DIST(u ssl_support(ulog(uDistutilsError(uurllib2uhttplibuStringIOu HTTPErroruurlparseu urlunparseuunquoteu splituseru url2pathnameuname2codepointuunichruurljoinuurlsplitu urlunsplitu ConfigParser(u filterfalse(u translate(ustrip_fragment(uget_all_headersu^egg=([-A-Za-z0-9_.]+)$uhref\s*=\s*['"]?([^'"> ]+)u([^<]+) \s+\(md5\)u([-+.a-z0-9]{2,}):u.tar.gz .tar.bz2 .tar .zip .tgzu PackageIndexudistros_for_urluparse_bdist_wininstuinterpret_distro_nameicCs|jƒ}d\}}}|jdƒró|jdƒrR|dd…}d}qó|jddƒr|dd…}|dd…}d}qó|jd ƒrµ|dd…}d }qó|jd dƒró|dd…}|dd…}d }qón|||fS(u=Return (base,pyversion) or (None,None) for possible .exe nameu.exeu .win32.exeNi uwin32u .win32-pyiiiu.win-amd64.exeiu win-amd64u .win-amd64-pyi(NNNiöÿÿÿiðÿÿÿiùÿÿÿiüÿÿÿiðÿÿÿiòÿÿÿiìÿÿÿiùÿÿÿiüÿÿÿiìÿÿÿ(uloweruNoneuendswithu startswith(unameulowerubaseupy_veruplat((u1/tmp/pip-jy811g-build/setuptools/package_index.pyuparse_bdist_wininst.s$     cCsœt|ƒ\}}}}}}t|jdƒdƒ}|dkrk|dkrkt|jdƒdƒ}nd|kr’|jddƒ\}}n||fS( Nu/iusourceforge.netudownloadiu#iÿÿÿÿiþÿÿÿ(uurlparseuunquoteusplit(uurluschemeuserverupathu parametersuqueryufragmentubase((u1/tmp/pip-jy811g-build/setuptools/package_index.pyuegg_info_for_urlFs uegg_info_for_urlccsŠt|ƒ\}}xt|||ƒD] }|Vq%W|r†tj|ƒ}|r†x1t||jdƒ|dtƒD] }|VqqWq†ndS(uEYield egg or source distribution objects that might be found at a URLiu precedenceN(uegg_info_for_urludistros_for_locationu EGG_FRAGMENTumatchuinterpret_distro_nameugroupu CHECKOUT_DIST(uurlumetadataubaseufragmentudistumatch((u1/tmp/pip-jy811g-build/setuptools/package_index.pyudistros_for_urlNs "cCsê|jdƒr"|dd…}n|jdƒrSd|krStj|||ƒgS|jdƒrŸt|ƒ\}}}|dk rŸt||||t|ƒSnxDtD]<}|j|ƒr¦|dt|ƒ …}t|||ƒSq¦WgS(u:Yield egg or source distribution objects based on basenameu.egg.zipNiu.eggu-u.exeiüÿÿÿ( uendswithu Distributionu from_locationuparse_bdist_wininstuNoneuinterpret_distro_nameu BINARY_DISTu EXTENSIONSulen(ulocationubasenameumetadatauwin_baseupy_veruplatformuext((u1/tmp/pip-jy811g-build/setuptools/package_index.pyudistros_for_locationZs  udistros_for_locationcCs"tt|ƒtjj|ƒ|ƒS(uEYield possible egg or source distribution objects based on a filename(udistros_for_locationunormalize_pathuosupathubasename(ufilenameumetadata((u1/tmp/pip-jy811g-build/setuptools/package_index.pyudistros_for_filenameosudistros_for_filenamec csØ|jdƒ}|sdxLt|dd…ƒD]1\}}t|ƒdkr,|jdƒr,dSq,Wnxmtdt|ƒdƒD]R}t||dj|d|…ƒdj||d…ƒd|d|d |ƒVq~WdS( uØGenerate 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! u-iNiupy2.iu py_versionu precedenceuplatform(usplitu enumerateulenu startswithurangeu Distributionujoin( ulocationubasenameumetadatau py_versionu precedenceuplatformupartsuiup((u1/tmp/pip-jy811g-build/setuptools/package_index.pyuinterpret_distro_namevs#!  5 ccsŒtƒ}|j}|dkrMxgt|j|ƒD]}||ƒ|Vq1Wn;x8|D]0}||ƒ}||krT||ƒ|VqTqTWdS(uHList unique elements, preserving order. Remember all elements ever seen.N(usetuadduNoneu filterfalseu __contains__(uiterableukeyuseenuseen_adduelementuk((u1/tmp/pip-jy811g-build/setuptools/package_index.pyuunique_everseenšs         uunique_everseencs"tˆƒ‡fdd†ƒ}|S(us Wrap a function returning an iterable such that the resulting iterable only ever yields unique items. cstˆ||ŽƒS(N(uunique_everseen(uargsukwargs(ufunc(u1/tmp/pip-jy811g-build/setuptools/package_index.pyuwrapper°suunique_values..wrapper(uwraps(ufuncuwrapper((ufuncu1/tmp/pip-jy811g-build/setuptools/package_index.pyu unique_values«su unique_valuesu(<([^>]*\srel\s*=\s*['"]?([^'">]+)[^>]*)>ccsx¢tj|ƒD]‘}|jƒ\}}tttj|jƒjdƒƒƒ}d|ksgd|krx7t j|ƒD]#}t |t |j dƒƒƒVqwWqqWxddD]\}|j |ƒ}|d kr¬t j||ƒ}|rt |t |j dƒƒƒVqq¬q¬WdS( uEFind rel="homepage" and rel="download" links in `page`, yielding URLsu,uhomepageudownloadiu Home PageuDownload URLN(u Home PageuDownload URLiÿÿÿÿ(uRELufinditerugroupsusetumapustrustripulowerusplituHREFuurljoinu htmldecodeugroupufindusearch(uurlupageumatchutagurelurelsupos((u1/tmp/pip-jy811g-build/setuptools/package_index.pyufind_external_links¸s'(  ufind_external_linksuPython-urllib/%s setuptools/%siu setuptoolscBs>|EeZdZdZdd„Zdd„Zdd„ZdS( uContentCheckeruP A null content checker that defines the interface for checking content cCsdS(u3 Feed a block of data to the hash. N((uselfublock((u1/tmp/pip-jy811g-build/setuptools/package_index.pyufeedÒsuContentChecker.feedcCsdS(uC Check the hash. Return False if validation fails. T(uTrue(uself((u1/tmp/pip-jy811g-build/setuptools/package_index.pyuis_validØsuContentChecker.is_validcCsdS(uu Call reporter with information about the checker (hash name) substituted into the template. N((uselfureporterutemplate((u1/tmp/pip-jy811g-build/setuptools/package_index.pyureportÞsuContentChecker.reportN(u__name__u __module__u __qualname__u__doc__ufeeduis_validureport(u __locals__((u1/tmp/pip-jy811g-build/setuptools/package_index.pyuContentCheckerÎs  uContentCheckercBse|EeZdZejdƒZdd„Zedd„ƒZdd„Z dd „Z d d „Z d S( u HashCheckeruK(?Psha1|sha224|sha384|sha256|sha512|md5)=(?P[a-f0-9]+)cCs(||_tj|ƒ|_||_dS(N(u hash_nameuhashlibunewuhashuexpected(uselfu hash_nameuexpected((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu__init__ës uHashChecker.__init__cCsLt|ƒd}|stƒS|jj|ƒ}|s<tƒS||jƒS(u5Construct a (possibly null) ContentChecker from a URLiiÿÿÿÿ(uurlparseuContentCheckerupatternusearchu groupdict(uclsuurlufragmentumatch((u1/tmp/pip-jy811g-build/setuptools/package_index.pyufrom_urlðsuHashChecker.from_urlcCs|jj|ƒdS(N(uhashuupdate(uselfublock((u1/tmp/pip-jy811g-build/setuptools/package_index.pyufeedûsuHashChecker.feedcCs|jjƒ|jkS(N(uhashu hexdigestuexpected(uself((u1/tmp/pip-jy811g-build/setuptools/package_index.pyuis_validþsuHashChecker.is_validcCs||j}||ƒS(N(u hash_name(uselfureporterutemplateumsg((u1/tmp/pip-jy811g-build/setuptools/package_index.pyureports uHashChecker.reportN( u__name__u __module__u __qualname__ureucompileupatternu__init__u classmethodufrom_urlufeeduis_validureport(u __locals__((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu HashCheckerås    u HashCheckercsë|EeZdZdZddGdHdIdd„ZdJdd„ZdJdd „Z dJd d „Z d d „Z dd„Z dd„Z dd„ZdHdd„Zdd„ZdH‡fdd†Zdd„Zdd„Zdd„Zd d!„Zd"d#„ZdJdJdJdHd$d%„ZdJdJd&d'„Zd(d)„Zd*Zd+d,„Zd-d.„ZdHd/d0„Zd1d2„Zd3d4„Zd5d6„Z d7d8„Z!d9d:„Z"e#dJd;d<„ƒZ$d=d>„Z%d?d@„Z&dAdB„Z'dCdD„Z(dEdF„Z)‡S(Ku PackageIndexu;A distribution index that scans web pages for download URLsuhttps://pypi.python.org/simpleu*cOsÅtj|||Ž|dd|jdƒ …|_i|_i|_i|_tjdj t t |ƒƒƒj |_ g|_|rµtjrµ|s tjƒrµtj|ƒ|_n tj|_dS(Nu/u|(u Environmentu__init__uendswithu index_urlu scanned_urlsu fetched_urlsu package_pagesureucompileujoinumapu translateumatchuallowsuto_scanu ssl_supportu is_availableufind_ca_bundleu opener_foruopeneruurllib2uurlopen(uselfu index_urluhostsu ca_bundleu verify_ssluargsukw((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu__init__ s!   ' !uPackageIndex.__init__c CsU||jkr| rdSd|j|ks u.PackageIndex.scan_egg_link..ii( umapustrustripuopenuosupathujoinulenufind_distributionsulocationu SOURCE_DISTu precedenceuadd(uselfupathuentryulinesudist((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu scan_egg_linkjs"& uPackageIndex.scan_egg_linkc s‡fdd†}xRtj|ƒD]A}y&|t|t|jdƒƒƒƒWq"tk rbYq"Xq"W||ƒ\}}|rxyt||ƒD]h}t|ƒ\}} |jdƒrê| rê|rÚ|d||f7}qêˆj |ƒnˆj |ƒqWt j dd„|ƒSdSd S( u#Process the contents of a PyPI pagecsÁ|jˆjƒr½ttt|tˆjƒd…jdƒƒƒ}t|ƒdkr½d|dkr½t|dƒ}t|dƒ}dˆj j |j ƒiƒ|.scaniu.pyu #egg=%s-%scSsd|jdddƒS(Nu%siii(ugroup(um((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu˜su,PackageIndex.process_index..uN( uHREFufinditeruurljoinu htmldecodeugroupu ValueErrorufind_external_linksuegg_info_for_urluendswithuneed_version_infouscan_urluPYPI_MD5usub( uselfuurlupageuscanumatchupkguverunew_urlubaseufrag((uselfu1/tmp/pip-jy811g-build/setuptools/package_index.pyu process_indexss$&  uPackageIndex.process_indexcCs|jd|ƒdS(NuPPage at %s links to .py file(s) without version info; an index scan is required.(uscan_all(uselfuurl((u1/tmp/pip-jy811g-build/setuptools/package_index.pyuneed_version_infosuPackageIndex.need_version_infocGsO|j|jkr;|r+|j||Œn|jdƒn|j|jƒdS(Nu6Scanning index of all packages (this may take a while)(u index_urlu fetched_urlsuwarnuinfouscan_url(uselfumsguargs((u1/tmp/pip-jy811g-build/setuptools/package_index.pyuscan_all£s  uPackageIndex.scan_allcCs­|j|j|jdƒ|jj|jƒsN|j|j|jdƒn|jj|jƒss|j|ƒnx3t|jj|jfƒƒD]}|j|ƒq’WdS(Nu/( uscan_urlu index_urlu unsafe_nameu package_pagesugetukeyu project_nameunot_found_in_indexulist(uselfu requirementuurl((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu find_packages«s%uPackageIndex.find_packagescsk|jƒ|j|ƒx8||jD])}||kr;|S|jd||ƒq%Wtt|ƒj||ƒS(Nu%s does not match %s(uprescanu find_packagesukeyudebugusuperu PackageIndexuobtain(uselfu requirementu installerudist(u __class__(u1/tmp/pip-jy811g-build/setuptools/package_index.pyuobtainºs   uPackageIndex.obtaincCsi|j|jd|ƒ|jƒse|jƒtj|ƒtd|jjtj j |ƒfƒ‚ndS(u- checker is a ContentChecker uValidating %%s checksum for %su7%s validation failed for %s; possible download problem?N( ureportudebuguis_validucloseuosuunlinkuDistutilsErroruhashunameupathubasename(uselfucheckerufilenameutfp((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu check_hashÃs     uPackageIndex.check_hashcCsrxk|D]c}|jdksJt|ƒ sJ|jdƒsJtt|ƒƒrZ|j|ƒq|jj|ƒqWdS(u;Add `urls` to the list that will be prescanned for searchesufile:N(uto_scanuNoneu URL_SCHEMEu startswithulistudistros_for_urluscan_urluappend(uselfuurlsuurl((u1/tmp/pip-jy811g-build/setuptools/package_index.pyuadd_find_linksÒs  uPackageIndex.add_find_linkscCs2|jr%tt|j|jƒƒnd|_dS(u7Scan urls scheduled for prescanning (e.g. --find-links)N(uto_scanulistumapuscan_urluNone(uself((u1/tmp/pip-jy811g-build/setuptools/package_index.pyuprescanás uPackageIndex.prescancCsN||jr |jd}}n|jd}}|||jƒ|jƒdS(Nu#Couldn't retrieve index page for %ru3Couldn't find index page for %r (maybe misspelled?)(ukeyuinfouwarnu unsafe_nameuscan_all(uselfu requirementumethumsg((u1/tmp/pip-jy811g-build/setuptools/package_index.pyunot_found_in_indexçs   uPackageIndex.not_found_in_indexc Csìt|tƒsÐt|ƒ}|r||j|jdƒ||ƒ}t|ƒ\}}|jdƒrx|j|||ƒ}n|Stj j |ƒr’|Sytj |ƒ}WqÐt k rÌt d|fƒ‚YqÐXnt|j||ƒddƒS(uLocate 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. iu.pyu1Not a URL, existing file, or requirement spec: %rulocationN(u isinstanceu Requirementu URL_SCHEMEu _download_urlugroupuegg_info_for_urluendswithu gen_setupuosupathuexistsuparseu ValueErroruDistutilsErrorugetattrufetch_distributionuNone(uselfuspecutmpdiruschemeufoundubaseufragment((u1/tmp/pip-jy811g-build/setuptools/package_index.pyudownloadðs"  uPackageIndex.downloadc sNˆjd|ƒi‰d }d ‡‡‡‡fdd†}|rfˆjƒˆj|ƒ||ƒ}n|d k rŠ|p„|||ƒ}n|d kr¾ˆjd k r¾ˆjƒ||ƒ}n|d krí| ríˆj|ƒ||ƒ}n|d krˆjdˆrdpd|ƒn/ˆjd|ƒ|jdˆj|j|ƒƒSd S( u|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. uSearching for %scsœ|dkrˆ}nx€||jD]q}|jtkrnˆ rn|ˆkr#ˆjd|ƒdˆ|.findu2No local packages or download links found for %s%sua source distribution of uuBest match: %sulocationN( uinfouNoneuprescanu find_packagesuto_scanuwarnucloneudownloadulocation( uselfu requirementutmpdiru force_scanusourceu develop_oku local_indexudistufind((u develop_okuselfuskippedusourceu1/tmp/pip-jy811g-build/setuptools/package_index.pyufetch_distributions.       uPackageIndex.fetch_distributioncCs/|j||||ƒ}|dk r+|jSdS(u3Obtain 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(ufetch_distributionuNoneulocation(uselfu requirementutmpdiru force_scanusourceudist((u1/tmp/pip-jy811g-build/setuptools/package_index.pyufetch[s uPackageIndex.fetchc Csbtj|ƒ}|r=dd„t||jdƒdƒDƒp@g}t|ƒdkr3tjj|ƒ}tjj |ƒ|krÏtjj ||ƒ}ddl m }|||ƒsÏt j||ƒ|}qÏnttjj |dƒdƒ} | jd|dj|djtjj|ƒdfƒ| jƒ|S|rRtd ||fƒ‚n td ƒ‚dS( NcSsg|]}|jr|‘qS((uversion(u.0ud((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu ks u*PackageIndex.gen_setup..ii(usamefileusetup.pyuwuIfrom setuptools import setup setup(name=%r, version=%r, py_modules=[%r]) u†Can't unambiguously interpret project/version identifier %r; any dashes in the name or version should be escaped using underscores. %rupCan't process plain .py files without an '#egg=name-version' suffix to enable automatic setup script generation.(u EGG_FRAGMENTumatchuinterpret_distro_nameugroupuNoneulenuosupathubasenameudirnameujoinusetuptools.command.easy_installusamefileushutilucopy2uopenuwriteu project_nameuversionusplitextucloseuDistutilsError( uselfufilenameufragmentutmpdirumatchudistsubasenameudstusamefileufile((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu gen_setuphs4   uPackageIndex.gen_setupi c Cs•|jd|ƒd\}}}zHtj|ƒ}|jt|ƒƒ}t|tƒrwtd||j |j fƒ‚n|jƒ}d}|j } d } d|krät |dƒ} t tt| ƒƒ} |j|||| | ƒnt|dƒ}xY|j| ƒ} | rK|j| ƒ|j| ƒ|d7}|j|||| | ƒqöPqö|j|||ƒ|SWd|r}|jƒn|r|jƒnXdS( NuDownloading %suCan't download %s: %s %siiucontent-lengthuContent-Lengthuwb(NNNiÿÿÿÿ(uinfouNoneu HashCheckerufrom_urluopen_urlustrip_fragmentu isinstanceu HTTPErroruDistutilsErrorucodeumsgu dl_blocksizeuget_all_headersumaxumapuintu reporthookuopenureadufeeduwriteu check_hashuclose( uselfuurlufilenameufputfpuinfoucheckeruheadersublocknumubsusizeusizesublock((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu _download_to“s>       uPackageIndex._download_tocCsdS(N((uselfuurlufilenameublocknumublksizeusize((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu reporthook·suPackageIndex.reporthookc CsÚ|jdƒrt|ƒSyt||jƒSWn¦ttjfk r¨tjƒd}dj dd„|j Dƒƒ}|rŽ|j ||ƒnt d||fƒ‚Yn.t jk rÐtjƒd}|SYnt jk r)tjƒd}|r |j ||jƒnt d||jfƒ‚Yn­tjk r‚tjƒd}|re|j ||jƒnt d||jfƒ‚YnTtjk rÕtjƒd}|r»|j ||ƒnt d||fƒ‚YnXdS( Nufile:iu cSsg|]}t|ƒ‘qS((ustr(u.0uarg((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu Ás u)PackageIndex.open_url..u%s %suDownload error for %s: %su;%s returned a bad status line. The server might be down, %s(u startswithu local_openuopen_with_authuopeneru ValueErroruhttplibu InvalidURLusysuexc_infoujoinuargsuwarnuDistutilsErroruurllib2u HTTPErroruURLErrorureasonu BadStatusLineulineu HTTPException(uselfuurluwarninguvumsg((u1/tmp/pip-jy811g-build/setuptools/package_index.pyuopen_urlºs@ uPackageIndex.open_urlcCsBt|ƒ\}}|rLx7d|krH|jddƒjddƒ}qWnd}|jdƒrt|dd…}ntjj||ƒ}|dks¤|jd ƒr´|j||ƒS|d ksÏ|jd ƒrß|j||ƒS|jd ƒrþ|j ||ƒS|d krt t |ƒdƒS|j |dƒ|j||ƒSdS(Nu..u.u\u_u__downloaded__u.egg.zipiusvnusvn+ugitugit+uhg+ufileiiüÿÿÿT(uegg_info_for_urlureplaceuendswithuosupathujoinu startswithu _download_svnu _download_gitu _download_hgu url2pathnameuurlparseuurl_okuTrueu_attempt_download(uselfuschemeuurlutmpdirunameufragmentufilename((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu _download_urlâs$% uPackageIndex._download_urlcCs|j|dƒdS(NT(u process_urluTrue(uselfuurl((u1/tmp/pip-jy811g-build/setuptools/package_index.pyuscan_urlÿsuPackageIndex.scan_urlcCsK|j||ƒ}d|jddƒjƒkrC|j|||ƒS|SdS(Nuhtmlu content-typeu(u _download_tougetuloweru_download_html(uselfuurlufilenameuheaders((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu_attempt_downloadsuPackageIndex._attempt_downloadcCs‘t|ƒ}xW|D]O}|jƒrtjd|ƒr^|jƒtj|ƒ|j||ƒSPqqW|jƒtj|ƒtd|ƒ‚dS(Nu ([^- ]+ - )?Revision \d+:u���Unexpected HTML page found at ( ���u���openu���stripu���reu���searchu���closeu���osu���unlinku ���_download_svnu���DistutilsError(���u���selfu���urlu���headersu���filenameu���fileu���line(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���_download_html ��s����       u���PackageIndex._download_htmlc���������� ���C���s`��|�j��d�d�ƒ�d�}�d�}�|�j�ƒ��j�d�ƒ�r/d�|�k�r/t�|�ƒ�\�}�}�}�}�}�} �|� r/|�j�d�ƒ�r/d�|�d �d��…�k�r/|�d �d��…�j��d�d�ƒ�\�}�}�t�|�ƒ�\�} �} �| �r,d �| �k�rø�| �j��d �d�ƒ�\�} �} �d �| �| �f�}�n �d �| �}�| �}�t�|�|�|�|�|�| �f�ƒ�}�q,q/n��|��j�d �|�|�ƒ�t�j�d�|�|�|�f�ƒ�|�S(���Nu���#i���i����u����u���svn:u���@u���//u���/i���u���:u��� --username=%s --password=%su ��� --username=u'���Doing subversion checkout from %s to %su���svn checkout%s -q %s %s( ���u���splitu���loweru ���startswithu���urlparseu ���splituseru ���urlunparseu���infou���osu���system(���u���selfu���urlu���filenameu���credsu���schemeu���netlocu���pathu���pu���qu���fu���authu���hostu���useru���pw(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu ���_download_svn��s"����!,"  'u���PackageIndex._download_svnc�������������C���s™���t��|��ƒ�\�}�}�}�}�}�|�j�d�d�ƒ�d�}�|�j�d�d�ƒ�d�}�d��}�d�|�k�rt�|�j�d�d�ƒ�\�}�}�n��t�|�|�|�|�d�f�ƒ�}��|��|�f�S(���Nu���+i���u���#i����u���@u����iÿÿÿÿ(���u���urlsplitu���splitu���Noneu���rsplitu ���urlunsplit(���u���urlu ���pop_prefixu���schemeu���netlocu���pathu���queryu���fragu���rev(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���_vcs_split_rev_from_url,��s���� u$���PackageIndex._vcs_split_rev_from_urlc�������������C���s•���|�j��d�d�ƒ�d�}�|��j�|�d�d �ƒ\�}�}�|��j�d�|�|�ƒ�t�j�d�|�|�f�ƒ�|�d��k �r‘�|��j�d�|�ƒ�t�j�d�|�|�f�ƒ�n��|�S( ���Nu���#i���i����u ���pop_prefixu���Doing git clone from %s to %su���git clone --quiet %s %su���Checking out %su"���(cd %s && git checkout --quiet %s)T(���u���splitu���_vcs_split_rev_from_urlu���Trueu���infou���osu���systemu���None(���u���selfu���urlu���filenameu���rev(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu ���_download_git>��s����  u���PackageIndex._download_gitc�������������C���s•���|�j��d�d�ƒ�d�}�|��j�|�d�d �ƒ\�}�}�|��j�d�|�|�ƒ�t�j�d�|�|�f�ƒ�|�d��k �r‘�|��j�d�|�ƒ�t�j�d�|�|�f�ƒ�n��|�S( ���Nu���#i���i����u ���pop_prefixu���Doing hg clone from %s to %su���hg clone --quiet %s %su���Updating to %su���(cd %s && hg up -C -r %s >&-)T(���u���splitu���_vcs_split_rev_from_urlu���Trueu���infou���osu���systemu���None(���u���selfu���urlu���filenameu���rev(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu ���_download_hgN��s����  u���PackageIndex._download_hgc�������������G���s���t��j�|�|�Œ�d��S(���N(���u���logu���debug(���u���selfu���msgu���args(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���debug^��s����u���PackageIndex.debugc�������������G���s���t��j�|�|�Œ�d��S(���N(���u���logu���info(���u���selfu���msgu���args(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���infoa��s����u���PackageIndex.infoc�������������G���s���t��j�|�|�Œ�d��S(���N(���u���logu���warn(���u���selfu���msgu���args(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���warnd��s����u���PackageIndex.warn(���u���*NTF(*���u���__name__u ���__module__u ���__qualname__u���__doc__u���Noneu���Trueu���__init__u���Falseu ���process_urlu���process_filenameu���url_oku���scan_egg_linksu ���scan_egg_linku ���process_indexu���need_version_infou���scan_allu ���find_packagesu���obtainu ���check_hashu���add_find_linksu���prescanu���not_found_in_indexu���downloadu���fetch_distributionu���fetchu ���gen_setupu ���dl_blocksizeu ���_download_tou ���reporthooku���open_urlu ���_download_urlu���scan_urlu���_attempt_downloadu���_download_htmlu ���_download_svnu ���staticmethodu���_vcs_split_rev_from_urlu ���_download_gitu ���_download_hgu���debugu���infou���warn(���u ���__locals__(����(���u ���__class__u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu ���PackageIndex��sL��� 0  *      )A * $ (         u!���&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?c�������������C���s3���t��|��t�ƒ�s�|��S|��d�k�r)�t�|��ƒ�St�|��ƒ�S(���Niÿ���(���u ���isinstanceu���intu���unichru���chr(���u���c(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���uchrk��s ���� � u���uchrc�������������C���s‡���|��j��d�ƒ�}�|�j�d�ƒ�r:�t�|�d�d��…�d�ƒ�}�nC�|�j�d�ƒ�rb�t�|�d�d��…�ƒ�}�n�t�j�|�|��j��d�ƒ�ƒ�}�t�|�ƒ�S(���Ni���u���#xi���i���u���#i����(���u���groupu ���startswithu���intu���name2codepointu���getu���uchr(���u���matchu���what(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu ���decode_entityq��s����u ���decode_entityc�������������C���s ���t��t�|��ƒ�S(���u'���Decode HTML entities in the given text.(���u ���entity_subu ���decode_entity(���u���text(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu ���htmldecode{��s����u ���htmldecodec����������������s���‡��f�d�d�†��}�|�S(���Nc����������������s���‡��‡�f�d�d�†��}�|�S(���Nc����������� ������s?���t��j�ƒ��}�t��j�ˆ�ƒ�z�ˆ��|��|�Ž��SWd��t��j�|�ƒ�Xd��S(���N(���u���socketu���getdefaulttimeoutu���setdefaulttimeout(���u���argsu���kwargsu ���old_timeout(���u���funcu���timeout(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���_socket_timeout��s ����  u@���socket_timeout.<locals>._socket_timeout.<locals>._socket_timeout(����(���u���funcu���_socket_timeout(���u���timeout(���u���funcu1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���_socket_timeout€��s����u'���socket_timeout.<locals>._socket_timeout(����(���u���timeoutu���_socket_timeout(����(���u���timeoutu1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���socket_timeout��s���� u���socket_timeoutc�������������C���sC���t��|��ƒ�}�|�j�ƒ��}�t�j�|�ƒ�}�|�j�ƒ��}�|�j�d�d�ƒ�S(���uq�� 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 u��� u����(���u���unquoteu���encodeu���base64u ���encodestringu���decodeu���replace(���u���authu���auth_su ���auth_bytesu ���encoded_bytesu���encoded(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu ���_encode_auth‹��s ����   u ���_encode_authc�������������B���s>���|��Ee��Z�d��Z�d�Z�d�d�„��Z�d�d�„��Z�d�d�„��Z�d�S( ���u ���Credentialu:��� A username/password pair. Use like a namedtuple. c�������������C���s���|�|��_��|�|��_�d��S(���N(���u���usernameu���password(���u���selfu���usernameu���password(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���__init__¥��s���� u���Credential.__init__c�������������c���s���|��j��V|��j�Vd��S(���N(���u���usernameu���password(���u���self(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���__iter__©��s����u���Credential.__iter__c�������������C���s���d�t��|��ƒ�S(���Nu���%(username)s:%(password)s(���u���vars(���u���self(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���__str__­��s����u���Credential.__str__N(���u���__name__u ���__module__u ���__qualname__u���__doc__u���__init__u���__iter__u���__str__(���u ���__locals__(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu ���Credential¡��s���  u ���Credentialc�������������B���sJ���|��Ee��Z�d��Z�d�d�„��Z�e�d�d�„��ƒ�Z�d�d�„��Z�d�d�„��Z�d �S( ���u ���PyPIConfigc�������������C���su���t��j�d�d�d�g�d�ƒ�}�t�j�j�|��|�ƒ�t�j�j�t�j�j�d�ƒ�d�ƒ�}�t�j�j�|�ƒ�rq�|��j �|�ƒ�n��d�S(���u%��� Load from ~/.pypirc u���usernameu���passwordu ���repositoryu����u���~u���.pypircN( ���u���dictu���fromkeysu ���ConfigParseru���__init__u���osu���pathu���joinu ���expanduseru���existsu���read(���u���selfu���defaultsu���rc(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���__init__²��s ����!u���PyPIConfig.__init__c����������������s5���‡��f�d�d�†��ˆ��j��ƒ��Dƒ�}�t�t�ˆ��j�|�ƒ�ƒ�S(���Nc����������������s.���g��|��]$�}�ˆ��j��|�d��ƒ�j�ƒ��r�|�‘�q�S(���u ���repository(���u���getu���strip(���u���.0u���section(���u���self(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu ���<listcomp>À��s��� �u2���PyPIConfig.creds_by_repository.<locals>.<listcomp>(���u���sectionsu���dictu���mapu���_get_repo_cred(���u���selfu���sections_with_repositories(����(���u���selfu1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���creds_by_repository½��s����u���PyPIConfig.creds_by_repositoryc�������������C���sO���|��j��|�d�ƒ�j�ƒ��}�|�t�|��j��|�d�ƒ�j�ƒ��|��j��|�d�ƒ�j�ƒ��ƒ�f�S(���Nu ���repositoryu���usernameu���password(���u���getu���stripu ���Credential(���u���selfu���sectionu���repo(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���_get_repo_credÆ��s����u���PyPIConfig._get_repo_credc�������������C���s7���x0�|��j��j�ƒ��D]�\�}�}�|�j�|�ƒ�r�|�Sq�Wd�S(���uŒ��� If the URL indicated appears to be a repository defined in this config, return the credential for that repository. N(���u���creds_by_repositoryu���itemsu ���startswith(���u���selfu���urlu ���repositoryu���cred(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���find_credentialÍ��s����u���PyPIConfig.find_credentialN(���u���__name__u ���__module__u ���__qualname__u���__init__u���propertyu���creds_by_repositoryu���_get_repo_credu���find_credential(���u ���__locals__(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu ���PyPIConfig°��s���  u ���PyPIConfigc�������������C���s¡��t��|��ƒ�\�}�}�}�}�}�}�|�j�d�ƒ�r?�t�j�d�ƒ�‚�n��|�d �k�r`�t�|�ƒ�\�}�} �n�d �}�|�s¶�t�ƒ��j�|��ƒ�} �| �r¶�t�| �ƒ�}�| �j �|��f�} �t �j �d�| �ƒ�q¶�n��|�r d�t �|�ƒ�}�t �|�| �|�|�|�|�f�ƒ�} �t�j�| �ƒ�} �| �j�d�|�ƒ�n�t�j�|��ƒ�} �| �j�d�t�ƒ�|�| �ƒ�}�|�rt��|�j�ƒ�\�}�}�}�}�}�}�|�|�k�r|�| �k�rt �|�|�|�|�|�|�f�ƒ�|�_�qn��|�S( ���u4���Open a urllib2 request, handling HTTP authenticationu���:u���nonnumeric port: ''u���httpu���httpsu*���Authenticating as %s for %s (from .pypirc)u���Basic u ���Authorizationu ���User-Agent(���u���httpu���httpsN(���u���urlparseu���endswithu���httplibu ���InvalidURLu ���splituseru���Noneu ���PyPIConfigu���find_credentialu���stru���usernameu���logu���infou ���_encode_authu ���urlunparseu���urllib2u���Requestu ���add_headeru ���user_agentu���url(���u���urlu���openeru���schemeu���netlocu���pathu���paramsu���queryu���fragu���authu���hostu���credu���infou���new_urlu���requestu���fpu���s2u���h2u���path2u���param2u���query2u���frag2(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu���open_with_auth×��s2����   !'u���open_with_authc�������������C���s���|��S(���N(����(���u���url(����(����u1���/tmp/pip-jy811g-build/setuptools/package_index.pyu ���fix_sf_url��s����u ���fix_sf_urlc�������������C���su��t��|��ƒ�\�}�}�}�}�}�}�t�|�ƒ�}�t�j�j�|�ƒ�rI�t�j�|��ƒ�S|�j�d�ƒ�r=t�j�j�|�ƒ�r=g��}�x»�t�j �|�ƒ�D]�} �| �d�k�rÊ�t �t�j�j �|�| �ƒ�d�ƒ�} �| �j �ƒ��} �| �j �ƒ��Pn.�t�j�j�t�j�j �|�| �ƒ�ƒ�rø�| �d�7} �n��|�j�d�| �| �f�ƒ�q€�Wd�|��d�d�j �|�ƒ�} �d�\�} �} �n�d�\�} �} �} �i�d �d�6}�t�|��| �| �|�t�| �ƒ�ƒ�S(���u7���Read a local path, with special support for directoriesu���/u ���index.htmlu���ru���<a href=%r>%s</a>u���<html><head><title>%su%su iÈuOKi”uPath not foundu Not foundu text/htmlu content-type(iÈuOK(i”uPath not foundu Not found(uurlparseu url2pathnameuosupathuisfileuurllib2uurlopenuendswithuisdirulistdiruopenujoinureaducloseuappendu HTTPErroruStringIO(uurluschemeuserverupathuparamuqueryufragufilenameufilesufufpubodyustatusumessageuheaders((u1/tmp/pip-jy811g-build/setuptools/package_index.pyu local_opens*  !   !  u local_open(^u__doc__usysuosureushutilusocketubase64uhashlibu functoolsuwrapsu pkg_resourcesu CHECKOUT_DISTu Distributionu BINARY_DISTunormalize_pathu SOURCE_DISTurequireu Environmentufind_distributionsu safe_nameu safe_versionu to_filenameu Requirementu DEVELOP_DISTu setuptoolsu ssl_supportu distutilsulogudistutils.errorsuDistutilsErrorusetuptools.compatuurllib2uhttplibuStringIOu HTTPErroruurlparseu urlunparseuunquoteu splituseru url2pathnameuname2codepointuunichruurljoinuurlsplitu urlunsplitu ConfigParseru filterfalseufnmatchu translateusetuptools.py26compatustrip_fragmentusetuptools.py27compatuget_all_headersucompileu EGG_FRAGMENTuIuHREFuPYPI_MD5umatchu URL_SCHEMEusplitu EXTENSIONSu__all__u_SOCKET_TIMEOUTuparse_bdist_wininstuegg_info_for_urluNoneudistros_for_urludistros_for_locationudistros_for_filenameuinterpret_distro_nameuunique_everseenu unique_valuesuRELufind_external_linksuversionu user_agentuobjectuContentCheckeru HashCheckeru PackageIndexusubu entity_subuuchru decode_entityu htmldecodeusocket_timeoutu _encode_authu Credentialu PyPIConfiguurlopenuopen_with_authu fix_sf_urlu local_open(((u1/tmp/pip-jy811g-build/setuptools/package_index.pyusp       Xd       " '!ÿÿe   '+