ž 7’ReÓc@sËdZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z m Z ddl mZmZmZmZmZddlmZmZddlmZmZmZddlmZmZdd lmZmZm Z dd l!m"Z"m#Z#m$Z$dd l%m&Z&d gZ'd Z(idgd6Z)Gdd „d e*ƒZ+Gdd„de*ƒZ,Gdd„de*ƒZ-Gdd„de*ƒZ.e.e ƒZ/dd„Z0dd„Z1dS(u!Routines related to PyPI, indexesiN(ulogger(uInfunormalize_nameusplitextu is_prerelease(uDistributionNotFounduBestVersionAlreadyInstalleduInstallationErroruInvalidWheelFilenameuUnsupportedWheel(uurlparseu url2pathname(u PipSessionu url_to_pathu path_to_url(uWheelu wheel_ext(usupported_tagsusupported_tags_noarchu get_platform(uhtml5liburequestsu pkg_resources(uSSLErroru PackageFinderulast.pypi.python.orguhttpsuhttpc Bs |EeZdZdZd"ggd#d#d#d!dd„Zdd„Zdd„Z dd „Z d d „Z d d „Z dd„Z dd„ZejdƒZejdejƒZejdƒZdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!S($u PackageFinderuŸThis finds packages. This is meant to match easy_install's technique for looking for packages, by reading pages and looking for appropriate links c CsÒ||_||_g|_tƒ|_tƒ|_||_tdd„|Dƒƒ|_tdd„|Dƒƒ|_ |j|j O_||_ d|_ d|_ ||_||_d|_| pÈtƒ|_dS(Ncss|]}t|ƒVqdS(N(unormalize_name(u.0un((u"/tmp/pip-zej_zi-build/pip/index.pyu 4su)PackageFinder.__init__..css|]}t|ƒVqdS(N(unormalize_name(u.0un((u"/tmp/pip-zej_zi-build/pip/index.pyu 8sF(u find_linksu index_urlsudependency_linksu PageCacheucacheusetu logged_linksu use_wheeluallow_externaluallow_unverifieduallow_all_externaluFalseuneed_warn_externaluneed_warn_unverifieduallow_all_prereleasesuprocess_dependency_linksu_have_warned_dependency_linksu PipSessionusession( uselfu find_linksu index_urlsu use_wheeluallow_externaluallow_unverifieduallow_all_externaluallow_all_prereleasesuprocess_dependency_linksusession((u"/tmp/pip-zej_zi-build/pip/index.pyu__init__&s"            uPackageFinder.__init__cCsE|jrA|js.tjddƒd|_n|jj|ƒndS(Nu1.6upDependency Links processing has been deprecated with an accelerated time schedule and will be removed in pip 1.6T(uprocess_dependency_linksu_have_warned_dependency_linksuloggeru deprecateduTrueudependency_linksuextend(uselfulinks((u"/tmp/pip-zej_zi-build/pip/index.pyuadd_dependency_linksSs   u"PackageFinder.add_dependency_linksc sJg‰g‰‡‡fdd†}x|D]}tjj|ƒ}|jdƒ}||jk}|sj|r/|ry|}n t|ƒ}|råtjj|ƒråtjj|ƒ}xztj|ƒD]}|tjj ||ƒƒq¿Wq<|r tjj|ƒr ˆj |ƒq<tjj |ƒr<||ƒq<q(ˆj |ƒq(WˆˆfS(ut Sort locations into "files" (archives) and "urls", and return a pair of lists (files,urls) csLt|ƒ}tj|ddƒddkr;ˆj|ƒn ˆj|ƒdS(Nustrictiu text/htmlF(u path_to_urlu mimetypesu guess_typeuFalseuappend(upathuurl(ufilesuurls(u"/tmp/pip-zej_zi-build/pip/index.pyu sort_pathks u0PackageFinder._sort_locations..sort_pathufile:( uosupathuexistsu startswithu find_linksu url_to_pathuisdirurealpathulistdirujoinuappenduisfile( uselfu locationsu sort_pathuurlu is_local_pathu is_file_urlu is_find_linkupathuitem((ufilesuurlsu"/tmp/pip-zej_zi-build/pip/index.pyu_sort_locationsbs*     uPackageFinder._sort_locationscCs¢|\}}}|jršttƒ}|tkr9d}nW|jtkr‰t|jƒ}|jƒsyt d|jƒ‚n|j ƒ }n| }||fS|SdS(uL Function used to generate link sort key for link tuples. The greater the return value, the more preferred it is. If not finding wheels, then sorted by version only. If finding wheels, then the sort order is by version, then: 1. existing installs 2. wheels ordered via Wheel.support_index_min() 3. source archives Note: it was considered to embed this logic into the Link comparison operators, but then different sdist links with the same version, would have to be considered equal iuB%s is not a supported wheel for this platform. It can't be sorted.N( u use_wheelulenusupported_tagsuINSTALLED_VERSIONuextu wheel_extuWheelufilenameu supporteduUnsupportedWheelusupport_index_min(uselfu link_tupleuparsed_versionulinku_u support_numupriuwheel((u"/tmp/pip-zej_zi-build/pip/index.pyu_link_sort_keyŠs       uPackageFinder._link_sort_keycCst|d|jddƒS(uí Bring the latest version (and wheels) to the front, but maintain the existing ordering as secondary. See the docstring for `_link_sort_key` for details. This function is isolated for easier unit testing. ukeyureverseT(usortedu_link_sort_keyuTrue(uselfuapplicable_versions((u"/tmp/pip-zej_zi-build/pip/index.pyu_sort_versions§suPackageFinder._sort_versionscs ‡fdd†‰|j‰d}|jržtˆ|jdƒdd2ƒ}|j||ƒ}|dkrž|jt|jddd2ƒˆ|ƒp•|j‰qžnˆdk rЇfdd†|jDƒ|j}nt|jƒ}xH|j D]=}ˆdk ré|dk rét j |j |ƒg|}qéqéW|j |ƒ\}}|j |jƒ\} } |j| ƒdd„|Dƒ}|jdd„| Dƒƒtjd |ƒxü|D]ô} tjd | ƒtjt| ƒƒ} | jtkr©t| j} t| ƒd kr3| | j| d| jf}tjd |ƒqt| ƒd krz| | jd j | ƒ| jf}tjd|ƒq| | jf}tjd|ƒq©q©Wg}|j|jdd„|jDƒ|jjƒƒƒg}xy|j||ƒD]e}tjd|j ƒtjd7_z)|j|j|j|jjƒƒƒWdtjd8_XqòWt|jdd„|jDƒ|jjƒƒƒ}|r¼tjdd j dd„|Dƒƒƒnt|jdd„|Dƒ|jjƒƒƒ}| rj| rj| rj| rjtj d|ƒ|j!r7tjd|jƒn|j"rWtjd|jƒnt#d|ƒ‚ng}|j$dk r |j$j%t&|j$j'fg}n|rà|j(dd2ƒtjdd j dd„|Dƒƒƒn|||||}g}xÃ|D]»\}}}||j)kr]tjd||dj d d„|j)j*DƒƒfƒqnKt+|ƒr¨|j,px|j- r¨|t&k r¨tjd!||fƒqq¨n|j.|||fƒqW|j/|ƒ}t0d"d„|Dƒƒ}| rN|rN|dd t&kr%tjd#|j$j'ƒn%tjd$|j$j'|ddfƒdS|sÍtj d%|d j d&d„|Dƒƒfƒ|j!rštjd'ƒn|j"rºtjd|jƒnt#d(|ƒ‚n|dd t&kr-tjd)|j$j'd j d*d„|d d…Dƒƒpd+fƒt1‚nt|ƒd krwtjd,|ddd j d-d„|Dƒƒfƒn|dd }|j2dk rµ|j2 rµtjd.|jƒn|j3dk rå|j3 råtjd/|jƒn|j4rtj5d0d1|jƒn|S(3Ncs2tj|ˆƒ}|jdƒs.|d}n|S(Nu/(u posixpathujoinuendswith(uurluloc(uurl_name(u"/tmp/pip-zej_zi-build/pip/index.pyumkurl_pypi_url±s u6PackageFinder.find_requirement..mkurl_pypi_urliutrustedcsg|]}ˆ|ƒ‘qS(((u.0uurl(umkurl_pypi_url(u"/tmp/pip-zej_zi-build/pip/index.pyu Ès u2PackageFinder.find_requirement..cSs"g|]}t|ddƒ‘qS(utrustedT(uLinkuTrue(u.0uurl((u"/tmp/pip-zej_zi-build/pip/index.pyu ×s cSsg|]}t|ƒ‘qS((uLink(u.0uurl((u"/tmp/pip-zej_zi-build/pip/index.pyu Ús u#URLs to search for versions for %s:u* %siuS%s uses an insecure transport scheme (%s). Consider using %s if %s has it availableu, uc%s uses an insecure transport scheme (%s). Consider using one of %s if %s has any of them availableu*%s uses an insecure transport scheme (%s).cSs%g|]}t|dddƒ‘qS(u-futrustedT(uLinkuTrue(u.0uurl((u"/tmp/pip-zej_zi-build/pip/index.pyu ús uAnalyzing links from page %sicSsg|]}t|ƒ‘qS((uLink(u.0uurl((u"/tmp/pip-zej_zi-build/pip/index.pyu s udependency_links found: %scSs"g|]\}}}|j‘qS((uurl(u.0uparsedulinkuversion((u"/tmp/pip-zej_zi-build/pip/index.pyu s cSsg|]}t|ƒ‘qS((uLink(u.0uurl((u"/tmp/pip-zej_zi-build/pip/index.pyu s u<Could not find any downloads that satisfy the requirement %suMSome externally hosted files were ignored (use --allow-external %s to allow).uWSome insecure and unverifiable files were ignored (use --allow-unverified %s to allow).u$No distributions at all found for %sureverseuLocal files found: %scSs(g|]\}}}t|jƒ‘qS((u url_to_pathuurl(u.0uparsedulinkuversion((u"/tmp/pip-zej_zi-build/pip/index.pyu s u-Ignoring link %s, version %s doesn't match %su,cSsg|]}dj|ƒ‘qS(u(ujoin(u.0us((u"/tmp/pip-zej_zi-build/pip/index.pyu "s uCIgnoring link %s, version %s is a pre-release (use --pre to allow).cSs+g|]!\}}}|tkr|‘qS((uINSTALLED_VERSION(u.0uparsed_versionulinkuversion((u"/tmp/pip-zej_zi-build/pip/index.pyu ,s uLExisting installed version (%s) is most up-to-date and satisfies requirementuUExisting installed version (%s) satisfies requirement (most up-to-date version is %s)uNCould not find a version that satisfies the requirement %s (from versions: %s)cSsg|]\}}}|‘qS(((u.0uparsed_versionulinkuversion((u"/tmp/pip-zej_zi-build/pip/index.pyu 7s uJSome externally hosted files were ignored (use --allow-external to allow).u,No distributions matching the version for %su=Installed version (%s) is most up-to-date (past versions: %s)cSsg|]\}}}|‘qS(((u.0uparsed_versionulinkuversion((u"/tmp/pip-zej_zi-build/pip/index.pyu Fs unoneu)Using version %s (newest of versions: %s)cSsg|]\}}}|‘qS(((u.0uparsed_versionulinkuversion((u"/tmp/pip-zej_zi-build/pip/index.pyu Js u2%s an externally hosted file and may be unreliableu,%s is potentially insecure and unverifiable.u1.7ua%s discovered using a deprecated method of parsing, in the future it will no longer be discoveredT(6uurl_nameuNoneu index_urlsuLinkuTrueu _get_pageu_find_url_nameu find_linksulistuabsolute_versionsu posixpathujoinuurlu_sort_locationsudependency_linksuextenduloggerudebuguurlparseustruschemeuINSECURE_SCHEMESulenunetlocuwarnu_package_versionsunameuloweru _get_pagesuindentulinksuinfoufataluneed_warn_externaluneed_warn_unverifieduDistributionNotFoundu satisfied_byuparsed_versionuINSTALLED_VERSIONuversionusorturequspecsu is_prereleaseuallow_all_prereleasesu prereleasesuappendu_sort_versionsubooluBestVersionAlreadyInstalleduinternalu verifiableu_deprecated_regexu deprecated(uselfurequupgradeumain_index_urlupageu locationsuversionufile_locationsu url_locationsu _flocationsu _ulocationsulocationuparsedusecure_schemesuctxufound_versionsu page_versionsudependency_versionsu file_versionsuinstalled_versionu all_versionsuapplicable_versionsuparsed_versionulinkuexisting_applicableuselected_version((umkurl_pypi_urluurl_nameu"/tmp/pip-zej_zi-build/pip/index.pyufind_requirement¯sö   7 #          &) (* %    !* -      $    :  /     uPackageFinder.find_requirementcCsÆ|jjdƒs$|jd7_n|j||ƒ}|dkrWtjd|ƒdSt|jƒ}xY|jD]N}t j |j j dƒƒ}|t|ƒkrptj d||fƒ|SqpWdS(uŒFinds the true URL name of a package, when the given name isn't quite correct. This is usually used to implement case-insensitivity.u/uCannot fetch index base URL %sNu!Real name of requirement %s is %s(uurluendswithu _get_pageuNoneuloggerufatalunormalize_nameuurl_nameulinksu posixpathubasenameupathurstripunotify(uselfu index_urluurl_nameurequpageu norm_nameulinkubase((u"/tmp/pip-zej_zi-build/pip/index.pyu_find_url_namebs uPackageFinder._find_url_namec cs7t|ƒ}tƒ}x|r2|jdƒ}||kr?qn|j|ƒ|j||ƒ}|dkrpqn|Vx·|jƒD]©}t|jƒj ƒ}||j krÖ|j rÖd|_ tjd|ƒq‚n|jdk r|j r||jkrtjd|ƒd|_q‚n|j|ƒq‚WqWdS(u“ Yields (page, page_url) from the given locations, skipping locations that have errors, and adding download/homepage links iu@Not searching %s for files because external urls are disallowed.u_Not searching %s for urls, it is an untrusted link and cannot produce safe or verifiable files.NT(ulistusetupopuaddu _get_pageuNoneu rel_linksunormalize_nameunameuloweruallow_externaluallow_all_externaluTrueuneed_warn_externaluloggerudebugutrusteduallow_unverifieduneed_warn_unverifieduappend( uselfu locationsurequ all_locationsuseenulocationupageulinku normalized((u"/tmp/pip-zej_zi-build/pip/index.pyu _get_pagesus6            uPackageFinder._get_pagesu #egg=([^&]*)u([a-z0-9_.]+)-([a-z0-9_.-]+)u-py([123]\.?[0-9]?)$cCsqgg}}tƒ}xP|D]H}||kr|j|ƒ|jrU|j|ƒqe|j|ƒqqW||S(ugReturns elements of links in order, non-egg links first, egg links second, while eliminating duplicates(usetuaddu egg_fragmentuappend(uselfulinksueggsuno_eggsuseenulink((u"/tmp/pip-zej_zi-build/pip/index.pyu _sort_links¢s      uPackageFinder._sort_linksccs@x9|j|ƒD](}x|j||ƒD] }|Vq)WqWdS(N(u _sort_linksu_link_package_versions(uselfulinksu search_nameulinkuv((u"/tmp/pip-zej_zi-build/pip/index.pyu_package_versions¯suPackageFinder._package_versionscCsd}|jr|tfS|S(Nu.tar.gzu.tar.bz2u.taru.tgzu.zip(u.tar.gzu.tar.bz2u.taru.tgzu.zip(u use_wheelu wheel_ext(uselfu extensions((u"/tmp/pip-zej_zi-build/pip/index.pyu_known_extensions´s  uPackageFinder._known_extensionsc Cstƒ}d}|jr$|j}nN|jƒ\}}|ss||jkrotjd|ƒ|jj|ƒngS|jdƒrŸ|dd…}d|}n||j ƒkrî||jkrêtjd||fƒ|jj|ƒngSd|j kr@|dkr@||jkr<tjd|ƒ|jj|ƒngS|t krryt |j ƒ}Wn'tk rˆtjd |ƒgSYnX|jjƒ|jƒkr¿tjd ||fƒgS|jƒsàtjd |ƒgSt|d dƒ}|jd ƒ rf|jdƒ rf|dk rftj|jƒjjdƒrf|jdtƒsftjd|ƒgSn|j}n|s|j|||ƒ}n|dkr·tjd ||fƒgS|jdk r|j rt|ƒjƒ|jkr|j rtjd|ƒd|_gS|j dk re|j ret|ƒjƒ|j!kretjd|ƒd|_"gS|j#j$|ƒ} | rÓ|d| j%ƒ…}| j&dƒ} | t'jdd…krÓtjd|ƒgSntjd||fƒt(j)|ƒ||fgS(uâ Return an iterable of triples (pkg_resources_version_key, link, python_version) that can be extracted from the given link. Meant to be overridden by subclasses, not called by clients. uSkipping link %s; not a fileu.tarNiu,Skipping link %s; unknown archive format: %sumacosx10u.zipuSkipping link %s; macosx10 oneu1Skipping %s because the wheel filename is invalidu-Skipping link %s; wrong project name (not %s)u9Skipping %s because it is not compatible with this Pythonu comes_fromuwinumacosxupypi.python.orgutagsuOSkipping %s because it is a pypi-hosted binary Wheel on an unsupported platformu,Skipping %s because it is externally hosted.u<Skipping %s because it is an insecure and unverifiable file.iiu/Skipping %s because Python version is incorrectuFound link %s, version: %siüÿÿÿT(*u get_platformuNoneu egg_fragmentusplitextu logged_linksuloggerudebuguadduendswithu_known_extensionsupathu wheel_extuWheelufilenameuInvalidWheelFilenameunameuloweru supportedugetattru startswithuurlparseuurlunetlocusupported_tags_noarchuversionu_egg_info_matchesuinternalunormalize_nameuallow_externaluallow_all_externaluTrueuneed_warn_externalu verifiableuallow_unverifieduneed_warn_unverifiedu_py_version_reusearchustartugroupusysu pkg_resourcesu parse_version( uselfulinku search_nameuplatformuversionuegg_infouextuwheelu comes_fromumatchu py_version((u"/tmp/pip-zej_zi-build/pip/index.pyu_link_package_versionsºsœ                    u$PackageFinder._link_package_versionscCs˜|jj|ƒ}|s-tjd|ƒdS|jdƒjƒ}|jddƒ}|jƒd}|j|ƒr|jdƒt |ƒd…SdSdS(Nu%Could not parse version from link: %siu_u-( u _egg_info_reusearchuloggerudebuguNoneugroupulowerureplaceu startswithulen(uselfuegg_infou search_nameulinkumatchunameulook_for((u"/tmp/pip-zej_zi-build/pip/index.pyu_egg_info_matches&suPackageFinder._egg_info_matchescCs"tj||d|jd|jƒS(Nucacheusession(uHTMLPageuget_pageucacheusession(uselfulinkureq((u"/tmp/pip-zej_zi-build/pip/index.pyu _get_page5s uPackageFinder._get_pageNTF(u__name__u __module__u __qualname__u__doc__uTrueuFalseuNoneu__init__uadd_dependency_linksu_sort_locationsu_link_sort_keyu_sort_versionsufind_requirementu_find_url_nameu _get_pagesureucompileu_egg_fragment_reuIu _egg_info_reu_py_version_reu _sort_linksu_package_versionsu_known_extensionsu_link_package_versionsu_egg_info_matchesu _get_page(u __locals__((u"/tmp/pip-zej_zi-build/pip/index.pyu PackageFinders( *  (   ³  )   l cBsw|EeZdZdZdZdd„Zdd„Zdd„Zd d „Zdd d „Z d d„Z dd„Z dS(u PageCacheuCache of HTML pagesicCsi|_i|_i|_dS(N(u _failuresu_pagesu _archives(uself((u"/tmp/pip-zej_zi-build/pip/index.pyu__init__As  uPageCache.__init__cCs|jj|dƒ|jkS(Ni(u _failuresugetu failure_limit(uselfuurl((u"/tmp/pip-zej_zi-build/pip/index.pyutoo_many_failuresFsuPageCache.too_many_failurescCs|jj|ƒS(N(u_pagesuget(uselfuurl((u"/tmp/pip-zej_zi-build/pip/index.pyuget_pageIsuPageCache.get_pagecCs|jj|dƒS(NF(u _archivesugetuFalse(uselfuurl((u"/tmp/pip-zej_zi-build/pip/index.pyu is_archiveLsuPageCache.is_archivecCs||j|\s*home\s*pageu\s*download\s+urlu(href=(?:"([^"]*)"|'([^']*)'|([^>\s\n]*))cCsC||_tj|jddƒ|_||_||_||_dS(NunamespaceHTMLElementsF(ucontentuhtml5libuparseuFalseuparseduurluheadersutrusted(uselfucontentuurluheadersutrusted((u"/tmp/pip-zej_zi-build/pip/index.pyu__init__bs    uHTMLPage.__init__cCs|jS(N(uurl(uself((u"/tmp/pip-zej_zi-build/pip/index.pyu__str__isuHTMLPage.__str__cCs\|dkrtƒ}n|j}|jddƒd}|j|ƒrJdSddlm}xT|jD]I}|jƒj |ƒrd|t |ƒdkrdt j dt ƒƒdSqdW|dk rß|j|ƒ} | dk rß| Sny|r­|dk r |j|ƒr dSn|j} x—ddd d d gD]}} | j| ƒr)|j|d |ƒ} | jƒj d ƒrlPq¦t j d|| fƒ|dk rŸ|j|ƒndSq)q)Wnt j d|ƒtj|ƒ\}} }}}}|dkrEtjjt|ƒƒrE|jdƒs|d7}ntj|dƒ}t j d|ƒn|j|did d6ƒ}|jƒ|jjddƒ} | jƒj d ƒsÌt j d|| fƒ|dk rÈ|j|ƒndS||j|j|jd|jƒ} Wn8tj k r[}zE|j!j"dkr!dnd}|j#||||d|d|ƒWYdd}~Xnýtj$k r¢}z%|j#||d||d|ƒWYdd}~Xn¶tj%k rÒ|j#||d|d|ƒYn†t&k r+}z:d|}|j#||||d|ddd t j'ƒWYdd}~Xn-X|dk rT|j(||jg| ƒn| SdS(!Nu#ii(u VcsSupportu+:u&Cannot look at %(scheme)s URL %(link)su.taru.tar.gzu.tar.bz2u.tgzu.zipusessionu text/htmlu,Skipping page %s because of Content-Type: %suGetting page %sufileu/u index.htmlu# file: URL is directory, getting %suheadersuAcceptu Content-Typeuunknownutrustedi”iucacheuleveluconnection error: %su timed outu6There was a problem confirming the ssl certificate: %sumeth()uNoneu PipSessionuurlusplitutoo_many_failuresupip.vcsu VcsSupportuschemesuloweru startswithulenuloggerudebugulocalsuget_pageu is_archiveufilenameuendswithu_get_content_typeuset_is_archiveuurlparseuosupathuisdiru url2pathnameuurljoinugeturaise_for_statusuheadersutextutrustedurequestsu HTTPErroruresponseu status_codeu _handle_failuConnectionErroruTimeoutuSSLErrorunotifyuadd_page(uclsulinkurequcacheu skip_archivesusessionuurlu VcsSupportuschemeuinstufilenameubad_extu content_typeunetlocupathuparamsuqueryufragmenturespuexculevelureason((u"/tmp/pip-zej_zi-build/pip/index.pyuget_pagels†   +       !$    (4  uHTMLPage.get_pageicCsb|dkrtj}n|d||ƒ|d|j|fƒ|dk r^|j||ƒndS(NuCould not fetch URL %s: %su7Will skip URL %s when looking for download links for %s(uNoneuloggeruinfouurluadd_page_failure(urequlinkureasonuurlucacheulevelumeth((u"/tmp/pip-zej_zi-build/pip/index.pyu _handle_failÈs   uHTMLPage._handle_failcCsx|dkrtƒ}ntj|ƒ\}}}}}|d krFdS|j|dd ƒ}|jƒ|jjddƒS( u;Get the Content-Type of the given url, using a HEAD requestuhttpuhttpsuftpuftpsuuallow_redirectsu Content-TypeN(uhttpuhttpsuftpuftpsT( uNoneu PipSessionuurlparseuurlsplituheaduTrueuraise_for_statusuheadersuget(uurlusessionuschemeunetlocupathuqueryufragmenturesp((u"/tmp/pip-zej_zi-build/pip/index.pyu_get_content_typeÔs    uHTMLPage._get_content_typec Cs‘t|dƒsŠd}dd„|jjdƒDƒ}|r~y t|djddƒƒ}Wq~ttfk rzd}Yq~Xn||_n|jS(Nu _api_versioncSs4g|]*}|jddƒjƒdkr|‘qS(unameuu api-version(ugetulower(u.0ux((u"/tmp/pip-zej_zi-build/pip/index.pyu ês u(HTMLPage.api_version..u.//metaiuvalue( uhasattruNoneuparsedufindalluintugetu TypeErroru ValueErroru _api_version(uselfu _api_versionumetas((u"/tmp/pip-zej_zi-build/pip/index.pyu api_versionås  uHTMLPage.api_versioncCsgt|dƒs`|jjdƒ}|dk rQ|jdƒrQ|jdƒ|_q`|j|_n|jS(Nu _base_urlu.//baseuhref(uhasattruparsedufinduNoneugetu _base_urluurl(uselfubase((u"/tmp/pip-zej_zi-build/pip/index.pyubase_urlôs uHTMLPage.base_urlccsÅx¾|jjdƒD]ª}|jdƒr|jdƒ}|jtj|j|ƒƒ}d}|jr¦|jdkr¦t |jdƒod|jdƒj ƒkƒ}nt ||d|ƒVqqWdS(uYields all links in the pageu.//auhrefiureluinternalN( uparsedufindallugetu clean_linkuurlparseuurljoinubase_urluNoneu api_versionuboolusplituLink(uselfuanchoruhrefuurluinternal((u"/tmp/pip-zej_zi-build/pip/index.pyulinksþs!uHTMLPage.linksccs<x|jƒD] }|Vq Wx|jƒD] }|Vq)WdS(N(uexplicit_rel_linksuscraped_rel_links(uselfuurl((u"/tmp/pip-zej_zi-build/pip/index.pyu rel_linkss uHTMLPage.rel_linksuhomepageudownloadccs·t|ƒ}x¤|jjdƒD]}|jdƒr|jdƒrt|jdƒjƒƒ}||@r¯|jdƒ}|jtj|j|ƒƒ}t ||ddƒVq¯qqWdS(u)Yields all links with the given relationsu.//aureluhrefutrustedNF( usetuparsedufindallugetusplitu clean_linkuurlparseuurljoinubase_urluLinkuFalse(uselfurelsuanchoru found_relsuhrefuurl((u"/tmp/pip-zej_zi-build/pip/index.pyuexplicit_rel_linkss  uHTMLPage.explicit_rel_linksc csÝxÖ|j|jfD]Â}|j|jƒ}|s7qn|jj|jd|jƒƒ}|sdqn|jdƒpŽ|jdƒpŽ|jdƒ}|sqn|jtj |j |ƒƒ}t ||ddddƒVqWdS( Nuposiiiutrustedu_deprecated_regexFT(u _homepage_reu _download_reusearchucontentu_href_reuendugroupu clean_linkuurlparseuurljoinubase_urluLinkuFalseuTrue(uselfuregexumatchu href_matchuurl((u"/tmp/pip-zej_zi-build/pip/index.pyuscraped_rel_links&s!-uHTMLPage.scraped_rel_linksu[^a-z0-9$&+,/:;=?@.#%_\\|-]cCs|jjdd„|ƒS(u¨Makes sure a link is fully encoded. That is, if a ' ' shows up in the link, it will be rewritten to %20 (while not over-quoting % or other characters).cSsdt|jdƒƒS(Nu%%%2xi(uordugroup(umatch((u"/tmp/pip-zej_zi-build/pip/index.pyu<su%HTMLPage.clean_link..(u _clean_reusub(uselfuurl((u"/tmp/pip-zej_zi-build/pip/index.pyu clean_link7s uHTMLPage.clean_linkNT(uhomepageudownload(u__name__u __module__u __qualname__u__doc__ureucompileuIu _homepage_reu _download_reuSu_href_reuNoneu__init__u__str__u classmethoduTrueuget_pageu staticmethodu _handle_failu_get_content_typeupropertyu api_versionubase_urlulinksu rel_linksuexplicit_rel_linksuscraped_rel_linksu _clean_reu clean_link(u __locals__((u"/tmp/pip-zej_zi-build/pip/index.pyuHTMLPageZs( [    uHTMLPagecBsv|EeZdZd-d-d-d.dd„Zdd„Zdd„Zdd„Zd d „Z d d „Z d d„Z dd„Z dd„Z dd„Zedd„ƒZedd„ƒZedd„ƒZdd„Zedd„ƒZedd „ƒZejd!ƒZed"d#„ƒZejd$ƒZed%d&„ƒZed'd(„ƒZed)d*„ƒZed+d,„ƒZd-S(/uLinkcCs1||_||_||_||_||_dS(N(uurlu comes_fromuinternalutrustedu_deprecated_regex(uselfuurlu comes_fromuinternalutrustedu_deprecated_regex((u"/tmp/pip-zej_zi-build/pip/index.pyu__init__As     u Link.__init__cCs.|jrd|j|jfSt|jƒSdS(Nu %s (from %s)(u comes_fromuurlustr(uself((u"/tmp/pip-zej_zi-build/pip/index.pyu__str__Is u Link.__str__cCsd|S(Nu ((uself((u"/tmp/pip-zej_zi-build/pip/index.pyu__repr__Osu Link.__repr__cCs|j|jkS(N(uurl(uselfuother((u"/tmp/pip-zej_zi-build/pip/index.pyu__eq__Rsu Link.__eq__cCs|j|jkS(N(uurl(uselfuother((u"/tmp/pip-zej_zi-build/pip/index.pyu__ne__Usu Link.__ne__cCs|j|jkS(N(uurl(uselfuother((u"/tmp/pip-zej_zi-build/pip/index.pyu__lt__Xsu Link.__lt__cCs|j|jkS(N(uurl(uselfuother((u"/tmp/pip-zej_zi-build/pip/index.pyu__le__[su Link.__le__cCs|j|jkS(N(uurl(uselfuother((u"/tmp/pip-zej_zi-build/pip/index.pyu__gt__^su Link.__gt__cCs|j|jkS(N(uurl(uselfuother((u"/tmp/pip-zej_zi-build/pip/index.pyu__ge__asu Link.__ge__cCs t|jƒS(N(uhashuurl(uself((u"/tmp/pip-zej_zi-build/pip/index.pyu__hash__dsu Link.__hash__cCs\tj|jƒ\}}}}}tj|jdƒƒp<|}|sXtd|jƒ‚|S(Nu/uURL %r produced no filename(uurlparseuurlsplituurlu posixpathubasenameurstripuAssertionError(uselfu_unetlocupathuname((u"/tmp/pip-zej_zi-build/pip/index.pyufilenamegs!u Link.filenamecCstj|jƒdS(Ni(uurlparseuurlsplituurl(uself((u"/tmp/pip-zej_zi-build/pip/index.pyuschemensu Link.schemecCstj|jƒdS(Ni(uurlparseuurlsplituurl(uself((u"/tmp/pip-zej_zi-build/pip/index.pyupathrsu Link.pathcCsttj|jjdƒƒƒS(Nu/(usplitextu posixpathubasenameupathurstrip(uself((u"/tmp/pip-zej_zi-build/pip/index.pyusplitextvsu Link.splitextcCs|jƒdS(Ni(usplitext(uself((u"/tmp/pip-zej_zi-build/pip/index.pyuextysuLink.extcCs=tj|jƒ\}}}}}tj||||dfƒS(N(uurlparseuurlsplituurlu urlunsplituNone(uselfuschemeunetlocupathuqueryufragment((u"/tmp/pip-zej_zi-build/pip/index.pyuurl_without_fragment}s!uLink.url_without_fragmentu #egg=([^&]*)cCs,|jj|jƒ}|sdS|jdƒS(Ni(u_egg_fragment_reusearchuurluNoneugroup(uselfumatch((u"/tmp/pip-zej_zi-build/pip/index.pyu egg_fragment„suLink.egg_fragmentu2(sha1|sha224|sha384|sha256|sha512|md5)=([a-f0-9]+)cCs,|jj|jƒ}|r(|jdƒSdS(Ni(u_hash_reusearchuurlugroupuNone(uselfumatch((u"/tmp/pip-zej_zi-build/pip/index.pyuhashs u Link.hashcCs,|jj|jƒ}|r(|jdƒSdS(Ni(u_hash_reusearchuurlugroupuNone(uselfumatch((u"/tmp/pip-zej_zi-build/pip/index.pyu hash_name”s uLink.hash_namecCs0tj|jjddƒdjddƒdƒS(Nu#iiu?(u posixpathubasenameuurlusplit(uself((u"/tmp/pip-zej_zi-build/pip/index.pyushow_url›su Link.show_urlcCsº|jpt|jddƒ}|dk r¦|r¦y%t|jddƒ}t|ƒ}Wnttfk rud}YnX|dksŽ|dkr’dS|jrŸdSdSn|dk r¶dSdS(uˆ Returns True if this link can be verified after download, False if it cannot, and None if we cannot determine. utrustedu api_versioniNTF( utrustedugetattru comes_fromuNoneuintu ValueErroru TypeErroruhashuTrueuFalse(uselfutrustedu api_version((u"/tmp/pip-zej_zi-build/pip/index.pyu verifiableŸs   uLink.verifiableNF(u__name__u __module__u __qualname__uNoneuFalseu__init__u__str__u__repr__u__eq__u__ne__u__lt__u__le__u__gt__u__ge__u__hash__upropertyufilenameuschemeupathusplitextuextuurl_without_fragmentureucompileu_egg_fragment_reu egg_fragmentu_hash_reuhashu hash_nameushow_urlu verifiable(u __locals__((u"/tmp/pip-zej_zi-build/pip/index.pyuLink?s0           uLinkcCs;t|ƒ}|j}|s1t|jƒd}nt|ƒS(uPGet a requirement from the URL, if possible. This looks for #egg in the URLi(uLinku egg_fragmentusplitextufilenameupackage_to_requirement(uurlulinkuegg_info((u"/tmp/pip-zej_zi-build/pip/index.pyuget_requirement_from_urlÈs   uget_requirement_from_urlcCsatjd|ƒ}|r9|jdƒ}|jdƒ}n |}d}|rYd||fS|SdS(u)Translate a name like Foo-1.2 to Foo==1.3u^(.*?)-(dev|\d.*)iiuu%s==%sN(ureusearchugroup(u package_nameumatchunameuversion((u"/tmp/pip-zej_zi-build/pip/index.pyupackage_to_requirementÒsupackage_to_requirement(2u__doc__usysuosureu mimetypesu posixpathupip.loguloggerupip.utiluInfunormalize_nameusplitextu is_prereleaseupip.exceptionsuDistributionNotFounduBestVersionAlreadyInstalleduInstallationErroruInvalidWheelFilenameuUnsupportedWheelupip.backwardcompatuurlparseu url2pathnameu pip.downloadu PipSessionu url_to_pathu path_to_urlu pip.wheeluWheelu wheel_extupip.pep425tagsusupported_tagsusupported_tags_noarchu get_platformu pip._vendoruhtml5liburequestsu pkg_resourcesupip._vendor.requests.exceptionsuSSLErroru__all__uDEFAULT_MIRROR_HOSTNAMEuINSECURE_SCHEMESuobjectu PackageFinderu PageCacheuHTMLPageuLinkuINSTALLED_VERSIONuget_requirement_from_urlupackage_to_requirement(((u"/tmp/pip-zej_zi-build/pip/index.pyus6     "(  ÿÿå†