£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>

7Reӝ  c               @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l m Z d d l m	 Z	 m
 Z
 m Z m Z d d l m Z m Z m Z m Z m Z d d l m Z m Z d d l m Z m Z m Z d d l m Z m Z d d	 l m Z m Z m  Z  d d
 l! m" Z" m# Z# m$ Z$ d d l% m& Z& d g Z' d Z( i d g d 6Z) Gd d   d e*  Z+ Gd d   d e*  Z, Gd d   d e*  Z- Gd d   d e*  Z. e. e	  Z/ d d   Z0 d d   Z1 d S(   u!   Routines related to PyPI, indexesi    N(   u   logger(   u   Infu   normalize_nameu   splitextu   is_prerelease(   u   DistributionNotFoundu   BestVersionAlreadyInstalledu   InstallationErroru   InvalidWheelFilenameu   UnsupportedWheel(   u   urlparseu   url2pathname(   u
   PipSessionu   url_to_pathu   path_to_url(   u   Wheelu	   wheel_ext(   u   supported_tagsu   supported_tags_noarchu   get_platform(   u   html5libu   requestsu   pkg_resources(   u   SSLErroru   PackageFinderu   last.pypi.python.orgu   httpsu   httpc          	   B   s
  |  Ee  Z d  Z d Z d" g  g  d# d# d# d! d d  Z d d   Z d d   Z	 d d	   Z
 d
 d   Z d d   Z d d   Z d d   Z e j d  Z e j d e j  Z e j d  Z d d   Z d d   Z d d   Z d d   Z d d   Z d d    Z d! 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
       
      C   s   | |  _  | |  _ g  |  _ t   |  _ t   |  _ | |  _ t d d   | D  |  _ t d d   | D  |  _	 |  j |  j	 O_ | |  _
 d |  _ d |  _ | |  _ | |  _ d |  _ |	 p t   |  _ d  S(   Nc             s   s   |  ] } t  |  Vq d  S(   N(   u   normalize_name(   u   .0u   n(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu	   <genexpr>4   s    u)   PackageFinder.__init__.<locals>.<genexpr>c             s   s   |  ] } t  |  Vq d  S(   N(   u   normalize_name(   u   .0u   n(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu	   <genexpr>8   s    F(   u
   find_linksu
   index_urlsu   dependency_linksu	   PageCacheu   cacheu   setu   logged_linksu	   use_wheelu   allow_externalu   allow_unverifiedu   allow_all_externalu   Falseu   need_warn_externalu   need_warn_unverifiedu   allow_all_prereleasesu   process_dependency_linksu   _have_warned_dependency_linksu
   PipSessionu   session(
   u   selfu
   find_linksu
   index_urlsu	   use_wheelu   allow_externalu   allow_unverifiedu   allow_all_externalu   allow_all_prereleasesu   process_dependency_linksu   session(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   __init__&   s"    										u   PackageFinder.__init__c             C   sE   |  j  rA |  j s. t j d d  d |  _ n  |  j j |  n  d  S(   Nu   1.6up   Dependency Links processing has been deprecated with an accelerated time schedule and will be removed in pip 1.6T(   u   process_dependency_linksu   _have_warned_dependency_linksu   loggeru
   deprecatedu   Trueu   dependency_linksu   extend(   u   selfu   links(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   add_dependency_linksS   s    		u"   PackageFinder.add_dependency_linksc       	         sJ  g    g      f d d   } x| D]} t  j j |  } | j d  } | |  j k } | sj | r/| ry | } n t |  } | r t  j j |  r t  j j |  } xz t  j |  D] } | t  j j	 | |   q Wq<| rt  j j |  r j
 |  q<t  j j |  r<| |  q<q(  j
 |  q( W   f S(   ut   
        Sort locations into "files" (archives) and "urls", and return
        a pair of lists (files,urls)
        c                sL   t  |   } t j | d d d d k r;  j |  n   j |  d  S(   Nu   stricti    u	   text/htmlF(   u   path_to_urlu	   mimetypesu
   guess_typeu   Falseu   append(   u   pathu   url(   u   filesu   urls(    u"   /tmp/pip-zej_zi-build/pip/index.pyu	   sort_pathk   s    u0   PackageFinder._sort_locations.<locals>.sort_pathu   file:(   u   osu   pathu   existsu
   startswithu
   find_linksu   url_to_pathu   isdiru   realpathu   listdiru   joinu   appendu   isfile(	   u   selfu	   locationsu	   sort_pathu   urlu   is_local_pathu   is_file_urlu   is_find_linku   pathu   item(    (   u   filesu   urlsu"   /tmp/pip-zej_zi-build/pip/index.pyu   _sort_locationsb   s*    	 u   PackageFinder._sort_locationsc             C   s   | \ } } } |  j  r t t  } | t k r9 d } nW | j t k r t | j  } | j   sy t	 d | j   n  | j
   } n | } | | f S| Sd S(   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
        i   uB   %s is not a supported wheel for this platform. It can't be sorted.N(   u	   use_wheelu   lenu   supported_tagsu   INSTALLED_VERSIONu   extu	   wheel_extu   Wheelu   filenameu	   supportedu   UnsupportedWheelu   support_index_min(   u   selfu
   link_tupleu   parsed_versionu   linku   _u   support_numu   priu   wheel(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   _link_sort_key   s    		
u   PackageFinder._link_sort_keyc             C   s   t  | d |  j d d 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.
        u   keyu   reverseT(   u   sortedu   _link_sort_keyu   True(   u   selfu   applicable_versions(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   _sort_versions   s    u   PackageFinder._sort_versionsc                s   f d d     | j   d  } |  j r t   |  j d  d d2 } |  j | |  } | d  k r |  j t |  j d d d2  |  p | j   q n   d  k	 r   f d d   |  j D |  j } n t |  j  } xH | j	 D]= }  d  k	 r | d  k	 r t
 j | j |  g | } q q W|  j |  \ } } |  j |  j  \ }	 }
 | j |	  d d   | D } | j d d   |
 D  t j d	 |  x | D] } t j d
 |  t j t |   } | j t k rt | j } t |  d k r3| | j | d | j f } t j d |  qt |  d k rz| | j d j |  | j f } t j d |  q| | j f } t j d |  qqWg  } | j |  j d d   |  j D | j j     g  } xy |  j | |  D]e } t j d | j  t j d 7_ z) | j |  j | j | j j     Wd  t j d 8_ XqWt |  j d d   |  j D | j j     } | rt j d d j d d   | D   n  t |  j d d   | D | j j     } | rj| rj| rj| rjt j  d |  |  j! r7t j d | j  n  |  j" rWt j d | j  n  t# d |   n  g  } | j$ d  k	 r| j$ j% t& | j$ j' f g } n  | r| j( d d2  t j d d j d d   | D   n  | | | | | } g  } x | D] \ } } } | | j) k r]t j d | | d j d  d   | j) j* D  f  qnK t+ |  r|  j, px| j- r| t& k	 rt j d! | | f  qqn  | j. | | | f  qW|  j/ |  } t0 d" d   | D  } | rN| rN| d d t& k r%t j d# | j$ j'  n% t j d$ | j$ j' | d d f  d  S| st j  d% | d j d& d   | D  f  |  j! rt j d'  n  |  j" rt j d | j  n  t# d( |   n  | d d t& k r-t j d) | j$ j' d j d* d   | d d   D  pd+ f  t1  n  t |  d k rwt j d, | d d d j d- d   | D  f  n  | d d } | j2 d  k	 r| j2 rt j d. | j  n  | j3 d  k	 r| j3 rt j d/ | j  n  | j4 rt j5 d0 d1 | j  n  | S(3   Nc                s2   t  j |     } | j d  s. | d } n  | S(   Nu   /(   u	   posixpathu   joinu   endswith(   u   urlu   loc(   u   url_name(    u"   /tmp/pip-zej_zi-build/pip/index.pyu   mkurl_pypi_url   s    u6   PackageFinder.find_requirement.<locals>.mkurl_pypi_urli    u   trustedc                s   g  |  ] }   |   q S(    (    (   u   .0u   url(   u   mkurl_pypi_url(    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   <listcomp>   s   	u2   PackageFinder.find_requirement.<locals>.<listcomp>c             S   s"   g  |  ] } t  | d  d  q S(   u   trustedT(   u   Linku   True(   u   .0u   url(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   <listcomp>   s   	 c             S   s   g  |  ] } t  |   q S(    (   u   Link(   u   .0u   url(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   <listcomp>   s   	 u#   URLs to search for versions for %s:u   * %si   uS   %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).c             S   s%   g  |  ] } t  | d  d d  q S(   u   -fu   trustedT(   u   Linku   True(   u   .0u   url(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   <listcomp>   s   	 u   Analyzing links from page %si   c             S   s   g  |  ] } t  |   q S(    (   u   Link(   u   .0u   url(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   <listcomp>  s   	 u   dependency_links found: %sc             S   s"   g  |  ] \ } } } | j   q S(    (   u   url(   u   .0u   parsedu   linku   version(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   <listcomp>  s   	 c             S   s   g  |  ] } t  |   q S(    (   u   Link(   u   .0u   url(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   <listcomp>  s   	 u<   Could not find any downloads that satisfy the requirement %suM   Some externally hosted files were ignored (use --allow-external %s to allow).uW   Some insecure and unverifiable files were ignored (use --allow-unverified %s to allow).u$   No distributions at all found for %su   reverseu   Local files found: %sc             S   s(   g  |  ] \ } } } t  | j   q S(    (   u   url_to_pathu   url(   u   .0u   parsedu   linku   version(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   <listcomp>  s   	 u-   Ignoring link %s, version %s doesn't match %su   ,c             S   s   g  |  ] } d  j  |   q S(   u    (   u   join(   u   .0u   s(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   <listcomp>"  s   	 uC   Ignoring link %s, version %s is a pre-release (use --pre to allow).c             S   s+   g  |  ]! \ } } } | t  k r |  q S(    (   u   INSTALLED_VERSION(   u   .0u   parsed_versionu   linku   version(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   <listcomp>,  s   	 uL   Existing installed version (%s) is most up-to-date and satisfies requirementuU   Existing installed version (%s) satisfies requirement (most up-to-date version is %s)uN   Could not find a version that satisfies the requirement %s (from versions: %s)c             S   s   g  |  ] \ } } } |  q S(    (    (   u   .0u   parsed_versionu   linku   version(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   <listcomp>7  s   	 uJ   Some 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)c             S   s   g  |  ] \ } } } |  q S(    (    (   u   .0u   parsed_versionu   linku   version(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   <listcomp>F  s   	 u   noneu)   Using version %s (newest of versions: %s)c             S   s   g  |  ] \ } } } |  q S(    (    (   u   .0u   parsed_versionu   linku   version(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   <listcomp>J  s   	 u2   %s an externally hosted file and may be unreliableu,   %s is potentially insecure and unverifiable.u   1.7ua   %s discovered using a deprecated method of parsing, in the future it will no longer be discoveredT(6   u   url_nameu   Noneu
   index_urlsu   Linku   Trueu	   _get_pageu   _find_url_nameu
   find_linksu   listu   absolute_versionsu	   posixpathu   joinu   urlu   _sort_locationsu   dependency_linksu   extendu   loggeru   debugu   urlparseu   stru   schemeu   INSECURE_SCHEMESu   lenu   netlocu   warnu   _package_versionsu   nameu   loweru
   _get_pagesu   indentu   linksu   infou   fatalu   need_warn_externalu   need_warn_unverifiedu   DistributionNotFoundu   satisfied_byu   parsed_versionu   INSTALLED_VERSIONu   versionu   sortu   requ   specsu   is_prereleaseu   allow_all_prereleasesu   prereleasesu   appendu   _sort_versionsu   boolu   BestVersionAlreadyInstalledu   internalu
   verifiableu   _deprecated_regexu
   deprecated(   u   selfu   requ   upgradeu   main_index_urlu   pageu	   locationsu   versionu   file_locationsu   url_locationsu   _flocationsu   _ulocationsu   locationu   parsedu   secure_schemesu   ctxu   found_versionsu   page_versionsu   dependency_versionsu   file_versionsu   installed_versionu   all_versionsu   applicable_versionsu   parsed_versionu   linku   existing_applicableu   selected_version(    (   u   mkurl_pypi_urlu   url_nameu"   /tmp/pip-zej_zi-build/pip/index.pyu   find_requirement   s    
		7#			&)	(*	%				!*	-				$				:		/
	
		u   PackageFinder.find_requirementc             C   s   | j  j d  s$ | j  d 7_  n  |  j | |  } | d k rW t j d |  d St | j  } xY | j D]N } t	 j
 | j j d   } | t |  k rp t j d | | f  | Sqp Wd S(   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   /u   Cannot fetch index base URL %sNu!   Real name of requirement %s is %s(   u   urlu   endswithu	   _get_pageu   Noneu   loggeru   fatalu   normalize_nameu   url_nameu   linksu	   posixpathu   basenameu   pathu   rstripu   notify(   u   selfu	   index_urlu   url_nameu   requ   pageu	   norm_nameu   linku   base(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   _find_url_nameb  s    u   PackageFinder._find_url_namec       	      c   s7  t  |  } t   } x| r2| j d  } | | k r? q n  | j |  |  j | |  } | d k rp q n  | Vx | j   D] } t | j  j	   } | |  j
 k r |  j r d |  _ t j d |  q n  | j d k	 r| j r| |  j k rt j d |  d |  _ q n  | j |  q Wq Wd S(   u   
        Yields (page, page_url) from the given locations, skipping
        locations that have errors, and adding download/homepage links
        i    u@   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(   u   listu   setu   popu   addu	   _get_pageu   Noneu	   rel_linksu   normalize_nameu   nameu   loweru   allow_externalu   allow_all_externalu   Trueu   need_warn_externalu   loggeru   debugu   trustedu   allow_unverifiedu   need_warn_unverifiedu   append(	   u   selfu	   locationsu   requ   all_locationsu   seenu   locationu   pageu   linku
   normalized(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   _get_pagesu  s6    		
		
		u   PackageFinder._get_pagesu   #egg=([^&]*)u   ([a-z0-9_.]+)-([a-z0-9_.-]+)u   -py([123]\.?[0-9]?)$c             C   sq   g  g  } } t    } xP | D]H } | | k r | j |  | j rU | j |  qe | j |  q q W| | S(   ug   Returns elements of links in order, non-egg links first, egg links second, while eliminating duplicates(   u   setu   addu   egg_fragmentu   append(   u   selfu   linksu   eggsu   no_eggsu   seenu   link(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   _sort_links  s    		u   PackageFinder._sort_linksc             c   s@   x9 |  j  |  D]( } x |  j | |  D] } | Vq) Wq Wd  S(   N(   u   _sort_linksu   _link_package_versions(   u   selfu   linksu   search_nameu   linku   v(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   _package_versions  s    u   PackageFinder._package_versionsc             C   s   d } |  j  r | t f S| S(   Nu   .tar.gzu   .tar.bz2u   .taru   .tgzu   .zip(   u   .tar.gzu   .tar.bz2u   .taru   .tgzu   .zip(   u	   use_wheelu	   wheel_ext(   u   selfu
   extensions(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   _known_extensions  s    	u   PackageFinder._known_extensionsc             C   s  t    } d } | j r$ | j } nN| j   \ } } | ss | |  j k ro t j d |  |  j j |  n  g  S| j d  r | d d  } d | } n  | |  j	   k r | |  j k r t j d | | f  |  j j |  n  g  Sd | j
 k r@| d k r@| |  j k r<t j d |  |  j j |  n  g  S| t k rry t | j  } Wn' t k
 rt j d	 |  g  SYn X| j j   | j   k rt j d
 | | f  g  S| j   st j d |  g  St | d d  } | j d  rf| j d  rf| d k	 rft j | j  j j d  rf| j d t  sft j d |  g  Sn  | j } n  | s|  j | | |  } n  | d k rt j d
 | | f  g  S| j d k	 r| j rt |  j   |  j k r|  j rt j d |  d |  _ g  S| j  d k	 re| j  ret |  j   |  j! k ret j d |  d |  _" g  S|  j# j$ |  }	 |	 r| d |	 j%    } |	 j& d  }
 |
 t' j d d  k rt j d |  g  Sn  t j d | | f  t( j) |  | | f g S(   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.
        u   Skipping link %s; not a fileu   .tarNi   u,   Skipping link %s; unknown archive format: %su   macosx10u   .zipu   Skipping link %s; macosx10 oneu1   Skipping %s because the wheel filename is invalidu-   Skipping link %s; wrong project name (not %s)u9   Skipping %s because it is not compatible with this Pythonu
   comes_fromu   winu   macosxu   pypi.python.orgu   tagsuO   Skipping %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.i   i   u/   Skipping %s because Python version is incorrectu   Found link %s, version: %siT(*   u   get_platformu   Noneu   egg_fragmentu   splitextu   logged_linksu   loggeru   debugu   addu   endswithu   _known_extensionsu   pathu	   wheel_extu   Wheelu   filenameu   InvalidWheelFilenameu   nameu   loweru	   supportedu   getattru
   startswithu   urlparseu   urlu   netlocu   supported_tags_noarchu   versionu   _egg_info_matchesu   internalu   normalize_nameu   allow_externalu   allow_all_externalu   Trueu   need_warn_externalu
   verifiableu   allow_unverifiedu   need_warn_unverifiedu   _py_version_reu   searchu   startu   groupu   sysu   pkg_resourcesu   parse_version(   u   selfu   linku   search_nameu   platformu   versionu   egg_infou   extu   wheelu
   comes_fromu   matchu
   py_version(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   _link_package_versions  s    				

	
		u$   PackageFinder._link_package_versionsc             C   s   |  j  j |  } | s- t j d |  d  S| j d  j   } | j d d  } | j   d } | j |  r | j d  t	 |  d   Sd  Sd  S(   Nu%   Could not parse version from link: %si    u   _u   -(
   u   _egg_info_reu   searchu   loggeru   debugu   Noneu   groupu   loweru   replaceu
   startswithu   len(   u   selfu   egg_infou   search_nameu   linku   matchu   nameu   look_for(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   _egg_info_matches&  s    u   PackageFinder._egg_info_matchesc             C   s"   t  j | | d |  j d |  j S(   Nu   cacheu   session(   u   HTMLPageu   get_pageu   cacheu   session(   u   selfu   linku   req(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu	   _get_page5  s    	u   PackageFinder._get_pageNTF(   u   __name__u
   __module__u   __qualname__u   __doc__u   Trueu   Falseu   Noneu   __init__u   add_dependency_linksu   _sort_locationsu   _link_sort_keyu   _sort_versionsu   find_requirementu   _find_url_nameu
   _get_pagesu   reu   compileu   _egg_fragment_reu   Iu   _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   PackageFinder   s(   	*()lc             B   sw   |  Ee  Z d  Z d Z d Z d d   Z d d   Z d d   Z d	 d
   Z d d d  Z
 d d   Z d d   Z d S(   u	   PageCacheu   Cache of HTML pagesi   c             C   s   i  |  _  i  |  _ i  |  _ d  S(   N(   u	   _failuresu   _pagesu	   _archives(   u   self(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   __init__A  s    		u   PageCache.__init__c             C   s   |  j  j | d  |  j k S(   Ni    (   u	   _failuresu   getu   failure_limit(   u   selfu   url(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   too_many_failuresF  s    u   PageCache.too_many_failuresc             C   s   |  j  j |  S(   N(   u   _pagesu   get(   u   selfu   url(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   get_pageI  s    u   PageCache.get_pagec             C   s   |  j  j | d  S(   NF(   u	   _archivesu   getu   False(   u   selfu   url(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   is_archiveL  s    u   PageCache.is_archivec             C   s   | |  j  | <d  S(   N(   u	   _archives(   u   selfu   urlu   value(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   set_is_archiveO  s    u   PageCache.set_is_archivec             C   s$   |  j  j | d  | |  j  | <d  S(   Ni    (   u	   _failuresu   get(   u   selfu   urlu   level(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   add_page_failureR  s    u   PageCache.add_page_failurec             C   s"   x | D] } | |  j  | <q Wd  S(   N(   u   _pages(   u   selfu   urlsu   pageu   url(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   add_pageU  s    u   PageCache.add_pageNT(   u   __name__u
   __module__u   __qualname__u   __doc__u   failure_limitu   __init__u   too_many_failuresu   get_pageu
   is_archiveu   Trueu   set_is_archiveu   add_page_failureu   add_page(   u
   __locals__(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu	   PageCache<  s   u	   PageCachec             B   sG  |  Ee  Z d  Z d Z e j d e j  Z e j d e j  Z e j d e j e j	 B Z
 d! d! d d  Z d d   Z e d! d" d! d	 d
   Z e d! d d! d d   Z e d! d d   Z e d d    Z e d d    Z e d d    Z d d   Z d# d d  Z d d   Z e j d e j  Z d d    Z d! S($   u   HTMLPageu'   Represents one page, along with its URLu   <th>\s*home\s*pageu   <th>\s*download\s+urlu(   href=(?:"([^"]*)"|'([^']*)'|([^>\s\n]*))c             C   sC   | |  _  t j |  j  d d |  _ | |  _ | |  _ | |  _ d  S(   Nu   namespaceHTMLElementsF(   u   contentu   html5libu   parseu   Falseu   parsedu   urlu   headersu   trusted(   u   selfu   contentu   urlu   headersu   trusted(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   __init__b  s
    			u   HTMLPage.__init__c             C   s   |  j  S(   N(   u   url(   u   self(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   __str__i  s    u   HTMLPage.__str__c             C   s\  | d  k r t   } n  | j } | j d d  d } | j |  rJ d  Sd d l m } xT | j D]I } | j   j	 |  rd | t
 |  d k rd t j d t    d  Sqd W| d  k	 r | j |  }	 |	 d  k	 r |	 Sn  y| r| d  k	 r
| j |  r
d  Sn  | j }
 x d d d	 d
 d g D]} } |
 j |  r)|  j | d | } | j   j	 d  rlPqt j d | | f  | d  k	 r| j |  n  d  Sq)q)Wn  t j d |  t j |  \ } } } } } } | d k rEt j j t |   rE| j d  s| d 7} n  t j | d  } t j d |  n  | j | d i d d 6} | j   | j j d d  } | j   j	 d  st j d | | f  | d  k	 r| j |  n  d  S|  | j | j | j d | j }	 Wn8t j  k
 r[} zE | j! j" d k r!d n d } |  j# | | | | d | d | WYd  d  } ~ Xn t j$ k
 r} z% |  j# | | d | | d | WYd  d  } ~ Xn t j% k
 r|  j# | | d | d | Yn t& k
 r+} z: d | } |  j# | | | | d | d d d  t j' WYd  d  } ~ Xn- X| d  k	 rT| j( | | j g |	  n  |	 Sd  S(!   Nu   #i   i    (   u
   VcsSupportu   +:u&   Cannot look at %(scheme)s URL %(link)su   .taru   .tar.gzu   .tar.bz2u   .tgzu   .zipu   sessionu	   text/htmlu,   Skipping page %s because of Content-Type: %su   Getting page %su   fileu   /u
   index.htmlu#    file: URL is directory, getting %su   headersu   Acceptu   Content-Typeu   unknownu   trustedi  i   u   cacheu   levelu   connection error: %su	   timed outu6   There was a problem confirming the ssl certificate: %su   meth()   u   Noneu
   PipSessionu   urlu   splitu   too_many_failuresu   pip.vcsu
   VcsSupportu   schemesu   loweru
   startswithu   lenu   loggeru   debugu   localsu   get_pageu
   is_archiveu   filenameu   endswithu   _get_content_typeu   set_is_archiveu   urlparseu   osu   pathu   isdiru   url2pathnameu   urljoinu   getu   raise_for_statusu   headersu   textu   trustedu   requestsu	   HTTPErroru   responseu   status_codeu   _handle_failu   ConnectionErroru   Timeoutu   SSLErroru   notifyu   add_page(   u   clsu   linku   requ   cacheu   skip_archivesu   sessionu   urlu
   VcsSupportu   schemeu   instu   filenameu   bad_extu   content_typeu   netlocu   pathu   paramsu   queryu   fragmentu   respu   excu   levelu   reason(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   get_pagel  s    	+		!$
		(4 u   HTMLPage.get_pagei   c             C   sb   | d  k r t j } n  | d | |  | d | j |  f  | d  k	 r^ | j | |  n  d  S(   Nu   Could not fetch URL %s: %su7   Will skip URL %s when looking for download links for %s(   u   Noneu   loggeru   infou   urlu   add_page_failure(   u   requ   linku   reasonu   urlu   cacheu   levelu   meth(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   _handle_fail  s    u   HTMLPage._handle_failc             C   sx   | d k r t   } n  t j |   \ } } } } } | d	 k rF d S| j |  d d
 } | j   | j j d d  S(   u;   Get the Content-Type of the given url, using a HEAD requestu   httpu   httpsu   ftpu   ftpsu    u   allow_redirectsu   Content-TypeN(   u   httpu   httpsu   ftpu   ftpsT(	   u   Noneu
   PipSessionu   urlparseu   urlsplitu   headu   Trueu   raise_for_statusu   headersu   get(   u   urlu   sessionu   schemeu   netlocu   pathu   queryu   fragmentu   resp(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   _get_content_type  s    
u   HTMLPage._get_content_typec             C   s   t  |  d  s d  } d d   |  j j d  D } | r~ y  t | d j d d    } Wq~ t t f k
 rz d  } Yq~ Xn  | |  _ n  |  j S(   Nu   _api_versionc             S   s4   g  |  ]* } | j  d  d  j   d k r |  q S(   u   nameu    u   api-version(   u   getu   lower(   u   .0u   x(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   <listcomp>  s   	 u(   HTMLPage.api_version.<locals>.<listcomp>u   .//metai    u   value(	   u   hasattru   Noneu   parsedu   findallu   intu   getu	   TypeErroru
   ValueErroru   _api_version(   u   selfu   _api_versionu   metas(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   api_version  s     u   HTMLPage.api_versionc             C   sg   t  |  d  s` |  j j d  } | d  k	 rQ | j d  rQ | j d  |  _ q` |  j |  _ n  |  j S(   Nu	   _base_urlu   .//baseu   href(   u   hasattru   parsedu   findu   Noneu   getu	   _base_urlu   url(   u   selfu   base(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   base_url  s    u   HTMLPage.base_urlc             c   s   x |  j  j d  D] } | j d  r | j d  } |  j t j |  j |   } d } |  j r |  j d k r t	 | j d  o d | j d  j
   k  } n  t | |  d | Vq q Wd S(   u   Yields all links in the pageu   .//au   hrefi   u   relu   internalN(   u   parsedu   findallu   getu
   clean_linku   urlparseu   urljoinu   base_urlu   Noneu   api_versionu   boolu   splitu   Link(   u   selfu   anchoru   hrefu   urlu   internal(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   links  s    !u   HTMLPage.linksc             c   s<   x |  j    D] } | Vq Wx |  j   D] } | Vq) Wd  S(   N(   u   explicit_rel_linksu   scraped_rel_links(   u   selfu   url(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu	   rel_links  s    	u   HTMLPage.rel_linksu   homepageu   downloadc             c   s   t  |  } x |  j j d  D] } | j d  r | j d  r t  | j d  j    } | | @r | j d  } |  j t j |  j |   } t	 | |  d d Vq q q Wd S(   u)   Yields all links with the given relationsu   .//au   relu   hrefu   trustedNF(   u   setu   parsedu   findallu   getu   splitu
   clean_linku   urlparseu   urljoinu   base_urlu   Linku   False(   u   selfu   relsu   anchoru
   found_relsu   hrefu   url(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   explicit_rel_links  s    
u   HTMLPage.explicit_rel_linksc          
   c   s   x |  j  |  j f D] } | j |  j  } | s7 q n  |  j j |  j d | j   } | sd q n  | j d  p | j d  p | j d  } | s q n  |  j t j	 |  j
 |   } t | |  d d d d Vq Wd  S(	   Nu   posi   i   i   u   trustedu   _deprecated_regexFT(   u   _homepage_reu   _download_reu   searchu   contentu   _href_reu   endu   groupu
   clean_linku   urlparseu   urljoinu   base_urlu   Linku   Falseu   True(   u   selfu   regexu   matchu
   href_matchu   url(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   scraped_rel_links&  s    !-u   HTMLPage.scraped_rel_linksu   [^a-z0-9$&+,/:;=?@.#%_\\|-]c             C   s   |  j  j d d   |  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).c             S   s   d t  |  j d   S(   Nu   %%%2xi    (   u   ordu   group(   u   match(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   <lambda><  s    u%   HTMLPage.clean_link.<locals>.<lambda>(   u	   _clean_reu   sub(   u   selfu   url(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   clean_link7  s    	u   HTMLPage.clean_linkNT(   u   homepageu   download(   u   __name__u
   __module__u   __qualname__u   __doc__u   reu   compileu   Iu   _homepage_reu   _download_reu   Su   _href_reu   Noneu   __init__u   __str__u   classmethodu   Trueu   get_pageu   staticmethodu   _handle_failu   _get_content_typeu   propertyu   api_versionu   base_urlu   linksu	   rel_linksu   explicit_rel_linksu   scraped_rel_linksu	   _clean_reu
   clean_link(   u
   __locals__(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   HTMLPageZ  s(   [
u   HTMLPagec             B   sv  |  Ee  Z d  Z d- d- d- d. d d  Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z e d d    Z e d d    Z e d d    Z d d   Z e d d    Z e d d     Z e j d!  Z e d" d#    Z e j d$  Z e d% d&    Z e d' d(    Z e d) d*    Z e d+ d,    Z d- S(/   u   Linkc             C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S(   N(   u   urlu
   comes_fromu   internalu   trustedu   _deprecated_regex(   u   selfu   urlu
   comes_fromu   internalu   trustedu   _deprecated_regex(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   __init__A  s
    				u   Link.__init__c             C   s.   |  j  r d |  j |  j  f St |  j  Sd  S(   Nu   %s (from %s)(   u
   comes_fromu   urlu   str(   u   self(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   __str__I  s    	u   Link.__str__c             C   s   d |  S(   Nu	   <Link %s>(    (   u   self(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   __repr__O  s    u   Link.__repr__c             C   s   |  j  | j  k S(   N(   u   url(   u   selfu   other(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   __eq__R  s    u   Link.__eq__c             C   s   |  j  | j  k S(   N(   u   url(   u   selfu   other(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   __ne__U  s    u   Link.__ne__c             C   s   |  j  | j  k  S(   N(   u   url(   u   selfu   other(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   __lt__X  s    u   Link.__lt__c             C   s   |  j  | j  k S(   N(   u   url(   u   selfu   other(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   __le__[  s    u   Link.__le__c             C   s   |  j  | j  k S(   N(   u   url(   u   selfu   other(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   __gt__^  s    u   Link.__gt__c             C   s   |  j  | j  k S(   N(   u   url(   u   selfu   other(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   __ge__a  s    u   Link.__ge__c             C   s   t  |  j  S(   N(   u   hashu   url(   u   self(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   __hash__d  s    u   Link.__hash__c             C   s\   t  j |  j  \ } } } } } t j | j d   p< | } | sX t d |  j   | S(   Nu   /u   URL %r produced no filename(   u   urlparseu   urlsplitu   urlu	   posixpathu   basenameu   rstripu   AssertionError(   u   selfu   _u   netlocu   pathu   name(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   filenameg  s    !u   Link.filenamec             C   s   t  j |  j  d S(   Ni    (   u   urlparseu   urlsplitu   url(   u   self(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   schemen  s    u   Link.schemec             C   s   t  j |  j  d S(   Ni   (   u   urlparseu   urlsplitu   url(   u   self(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   pathr  s    u	   Link.pathc             C   s   t  t j |  j j d    S(   Nu   /(   u   splitextu	   posixpathu   basenameu   pathu   rstrip(   u   self(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   splitextv  s    u   Link.splitextc             C   s   |  j    d S(   Ni   (   u   splitext(   u   self(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   exty  s    u   Link.extc             C   s=   t  j |  j  \ } } } } } t  j | | | | d  f  S(   N(   u   urlparseu   urlsplitu   urlu
   urlunsplitu   None(   u   selfu   schemeu   netlocu   pathu   queryu   fragment(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   url_without_fragment}  s    !u   Link.url_without_fragmentu   #egg=([^&]*)c             C   s,   |  j  j |  j  } | s d  S| j d  S(   Ni   (   u   _egg_fragment_reu   searchu   urlu   Noneu   group(   u   selfu   match(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   egg_fragment  s    u   Link.egg_fragmentu2   (sha1|sha224|sha384|sha256|sha512|md5)=([a-f0-9]+)c             C   s,   |  j  j |  j  } | r( | j d  Sd  S(   Ni   (   u   _hash_reu   searchu   urlu   groupu   None(   u   selfu   match(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   hash  s    u	   Link.hashc             C   s,   |  j  j |  j  } | r( | j d  Sd  S(   Ni   (   u   _hash_reu   searchu   urlu   groupu   None(   u   selfu   match(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu	   hash_name  s    u   Link.hash_namec             C   s0   t  j |  j j d d  d j d d  d  S(   Nu   #i   i    u   ?(   u	   posixpathu   basenameu   urlu   split(   u   self(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   show_url  s    u   Link.show_urlc             C   s   |  j  p t |  j d d  } | d k	 r | r y% t |  j d d  } t |  } Wn t t f k
 ru d } Yn X| d k s | d k r d S|  j r d Sd Sn | d k	 r d Sd S(   u   
        Returns True if this link can be verified after download, False if it
        cannot, and None if we cannot determine.
        u   trustedu   api_versioni   NTF(
   u   trustedu   getattru
   comes_fromu   Noneu   intu
   ValueErroru	   TypeErroru   hashu   Trueu   False(   u   selfu   trustedu   api_version(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu
   verifiable  s    	u   Link.verifiableNF(   u   __name__u
   __module__u   __qualname__u   Noneu   Falseu   __init__u   __str__u   __repr__u   __eq__u   __ne__u   __lt__u   __le__u   __gt__u   __ge__u   __hash__u   propertyu   filenameu   schemeu   pathu   splitextu   extu   url_without_fragmentu   reu   compileu   _egg_fragment_reu   egg_fragmentu   _hash_reu   hashu	   hash_nameu   show_urlu
   verifiable(   u
   __locals__(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   Link?  s0   	u   Linkc             C   s;   t  |   } | j } | s1 t | j  d } n  t |  S(   uP   Get a requirement from the URL, if possible.  This looks for #egg
    in the URLi    (   u   Linku   egg_fragmentu   splitextu   filenameu   package_to_requirement(   u   urlu   linku   egg_info(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   get_requirement_from_url  s
    	u   get_requirement_from_urlc             C   sa   t  j d |   } | r9 | j d  } | j d  } n |  } d } | rY d | | f S| Sd S(   u)   Translate a name like Foo-1.2 to Foo==1.3u   ^(.*?)-(dev|\d.*)i   i   u    u   %s==%sN(   u   reu   searchu   group(   u   package_nameu   matchu   nameu   version(    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   package_to_requirement  s    u   package_to_requirement(2   u   __doc__u   sysu   osu   reu	   mimetypesu	   posixpathu   pip.logu   loggeru   pip.utilu   Infu   normalize_nameu   splitextu   is_prereleaseu   pip.exceptionsu   DistributionNotFoundu   BestVersionAlreadyInstalledu   InstallationErroru   InvalidWheelFilenameu   UnsupportedWheelu   pip.backwardcompatu   urlparseu   url2pathnameu   pip.downloadu
   PipSessionu   url_to_pathu   path_to_urlu	   pip.wheelu   Wheelu	   wheel_extu   pip.pep425tagsu   supported_tagsu   supported_tags_noarchu   get_platformu   pip._vendoru   html5libu   requestsu   pkg_resourcesu   pip._vendor.requests.exceptionsu   SSLErroru   __all__u   DEFAULT_MIRROR_HOSTNAMEu   INSECURE_SCHEMESu   objectu   PackageFinderu	   PageCacheu   HTMLPageu   Linku   INSTALLED_VERSIONu   get_requirement_from_urlu   package_to_requirement(    (    (    u"   /tmp/pip-zej_zi-build/pip/index.pyu   <module>   s6   "(	  
