<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
ž
à’Re˜  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 Z d d l Z d d l m	 Z	 d d l
 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 d d l m Z d d l m Z d d l m Z d d l 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+ m, Z, m- Z- d d	 l m. Z. d d
 l/ m0 Z0 d d l1 m2 Z2 d d l3 m4 Z4 e j5 d ƒ Z6 e j5 d e j7 ƒ Z8 e j5 d ƒ Z9 e j5 d e j7 ƒ j: Z; d j< ƒ  Z= d d d d g Z> d Z? d d „  Z@ d d „  ZA eB d d „ ZC eB d d „ ZD eB d d „ ZE eB e eB d d „ ZF eB d  d! „ ZG d" d# „  ZH e j5 d$ e j7 ƒ ZI eH d% d& „  ƒ ZJ d' e jK d d( … e d) ƒ d jK f ZL Gd* d+ „  d+ eM ƒ ZN Gd, d- „  d- eN ƒ ZO Gd. d „  d e ƒ ZP e j5 d/ ƒ jQ ZR d0 d1 „  ZS d2 d3 „  ZT d4 d5 „  ZU d d6 d7 „ ZV d8 d9 „  ZW Gd: d; „  d; eM ƒ ZX Gd< d= „  d= e- j- ƒ ZY e jZ d> d? „ Z[ eV e? ƒ e[ ƒ Z[ d@ dA „  Z\ dB dC „  Z] d S(D   u#   PyPI and direct package downloadingi    N(   u   wraps(   u   CHECKOUT_DISTu   Distributionu   BINARY_DISTu   normalize_pathu   SOURCE_DISTu   requireu   Environmentu   find_distributionsu	   safe_nameu   safe_versionu   to_filenameu   Requirementu   DEVELOP_DIST(   u   ssl_support(   u   log(   u   DistutilsError(   u   urllib2u   httplibu   StringIOu	   HTTPErroru   urlparseu
   urlunparseu   unquoteu	   splituseru   url2pathnameu   name2codepointu   unichru   urljoinu   urlsplitu
   urlunsplitu   ConfigParser(   u   filterfalse(   u	   translate(   u   strip_fragment(   u   get_all_headersu   ^egg=([-A-Za-z0-9_.]+)$u   href\s*=\s*['"]?([^'"> ]+)u   <a href="([^"#]+)">([^<]+)</a>
\s+\(<a (?:title="MD5 hash"
\s+)href="[^?]+\?:action=show_md5&amp;digest=([0-9a-f]{32})">md5</a>\)u   ([-+.a-z0-9]{2,}):u   .tar.gz .tar.bz2 .tar .zip .tgzu   PackageIndexu   distros_for_urlu   parse_bdist_wininstu   interpret_distro_namei   c             C   s   |  j  ƒ  } d \ } } } | j d ƒ ró | j d ƒ rR |  d d … } d } qó | j d d ƒ r |  d d … } |  d d … } d } qó | j d
 ƒ rµ |  d d … } d } qó | j d d ƒ ró |  d d … } |  d d … } d } qó n  | | | f S(   u=   Return (base,pyversion) or (None,None) for possible .exe nameu   .exeu
   .win32.exeNi
   u   win32u	   .win32-pyi   i   i   u   .win-amd64.exei   u	   win-amd64u   .win-amd64-pyi   (   NNNiöÿÿÿiðÿÿÿiùÿÿÿiüÿÿÿiðÿÿÿiòÿÿÿiìÿÿÿiùÿÿÿiüÿÿÿiìÿÿÿ(   u   loweru   Noneu   endswithu
   startswith(   u   nameu   loweru   baseu   py_veru   plat(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   parse_bdist_wininst.   s$    			c             C   sœ   t  |  ƒ \ } } } } } } t | j d ƒ d ƒ } | d k rk | d k rk t | j d ƒ d ƒ } n  d | k r’ | j d d ƒ \ } } n  | | f S(	   Nu   /i   u   sourceforge.netu   downloadi   u   #iÿÿÿÿiþÿÿÿ(   u   urlparseu   unquoteu   split(   u   urlu   schemeu   serveru   pathu
   parametersu   queryu   fragmentu   base(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   egg_info_for_urlF   s     u   egg_info_for_urlc             c   sŠ   t  |  ƒ \ } } x t |  | | ƒ D] } | Vq% W| r† t j | ƒ } | r† x1 t |  | j d ƒ | d t ƒD] } | Vqq Wq† n  d S(   uE   Yield egg or source distribution objects that might be found at a URLi   u
   precedenceN(   u   egg_info_for_urlu   distros_for_locationu   EGG_FRAGMENTu   matchu   interpret_distro_nameu   groupu   CHECKOUT_DIST(   u   urlu   metadatau   baseu   fragmentu   distu   match(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   distros_for_urlN   s     	"c             C   sê   | j  d ƒ r" | d d … } n  | j  d ƒ rS d | k rS t j |  | | ƒ g S| j  d ƒ rŸ t | ƒ \ } } } | d k	 rŸ t |  | | | t | ƒ Sn  xD t D]< } | j  | ƒ r¦ | d t | ƒ … } t |  | | ƒ Sq¦ Wg  S(   u:   Yield egg or source distribution objects based on basenameu   .egg.zipNi   u   .eggu   -u   .exeiüÿÿÿ(	   u   endswithu   Distributionu   from_locationu   parse_bdist_wininstu   Noneu   interpret_distro_nameu   BINARY_DISTu
   EXTENSIONSu   len(   u   locationu   basenameu   metadatau   win_baseu   py_veru   platformu   ext(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   distros_for_locationZ   s    u   distros_for_locationc             C   s"   t  t |  ƒ t j j |  ƒ | ƒ S(   uE   Yield possible egg or source distribution objects based on a filename(   u   distros_for_locationu   normalize_pathu   osu   pathu   basename(   u   filenameu   metadata(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   distros_for_filenameo   s    u   distros_for_filenamec       	      c   sØ   | j  d ƒ } | sd xL t | d d … ƒ D]1 \ } } t | ƒ d k r, | j d ƒ r, d Sq, Wn  xm t d t | ƒ d ƒ D]R } t |  | d j | d | … ƒ d j | | d … ƒ d | d | d	 | ƒVq~ Wd S(
   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   -i   Ni   u   py2.i   u
   py_versionu
   precedenceu   platform(   u   splitu	   enumerateu   lenu
   startswithu   rangeu   Distributionu   join(	   u   locationu   basenameu   metadatau
   py_versionu
   precedenceu   platformu   partsu   iu   p(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   interpret_distro_namev   s    #! 5c             c   sŒ   t  ƒ  } | j } | d k rM xg t | j |  ƒ D] } | | ƒ | Vq1 Wn; x8 |  D]0 } | | ƒ } | | k rT | | ƒ | VqT qT Wd S(   uH   List unique elements, preserving order. Remember all elements ever seen.N(   u   setu   addu   Noneu   filterfalseu   __contains__(   u   iterableu   keyu   seenu   seen_addu   elementu   k(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   unique_everseenš   s    		

u   unique_everseenc                s"   t  ˆ  ƒ ‡  f d d †  ƒ } | S(   us   
    Wrap a function returning an iterable such that the resulting iterable
    only ever yields unique items.
    c                 s   t  ˆ  |  | Ž  ƒ S(   N(   u   unique_everseen(   u   argsu   kwargs(   u   func(    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   wrapper°   s    u   unique_values.<locals>.wrapper(   u   wraps(   u   funcu   wrapper(    (   u   funcu1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   unique_values«   s    u   unique_valuesu(   <([^>]*\srel\s*=\s*['"]?([^'">]+)[^>]*)>c             c   s  x¢ t  j | ƒ D]‘ } | j ƒ  \ } } t t t j | j ƒ  j d ƒ ƒ ƒ } d | k sg d | k r x7 t	 j | ƒ D]# } t
 |  t | j d ƒ ƒ ƒ Vqw Wq q Wxd d D]\ } | j | ƒ } | d	 k r¬ t	 j | | ƒ } | rt
 |  t | j d ƒ ƒ ƒ Vqq¬ q¬ Wd S(
   uE   Find rel="homepage" and rel="download" links in `page`, yielding URLsu   ,u   homepageu   downloadi   u   <th>Home Pageu   <th>Download URLN(   u   <th>Home Pageu   <th>Download URLiÿÿÿÿ(   u   RELu   finditeru   groupsu   setu   mapu   stru   stripu   loweru   splitu   HREFu   urljoinu
   htmldecodeu   groupu   findu   search(   u   urlu   pageu   matchu   tagu   relu   relsu   pos(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   find_external_links¸   s    '(u   find_external_linksu   Python-urllib/%s setuptools/%si   u
   setuptoolsc             B   s>   |  Ee  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S(	   u   ContentCheckeruP   
    A null content checker that defines the interface for checking content
    c             C   s   d S(   u3   
        Feed a block of data to the hash.
        N(    (   u   selfu   block(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   feedÒ   s    u   ContentChecker.feedc             C   s   d S(   uC   
        Check the hash. Return False if validation fails.
        T(   u   True(   u   self(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   is_validØ   s    u   ContentChecker.is_validc             C   s   d S(   uu   
        Call reporter with information about the checker (hash name)
        substituted into the template.
        N(    (   u   selfu   reporteru   template(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   reportÞ   s    u   ContentChecker.reportN(   u   __name__u
   __module__u   __qualname__u   __doc__u   feedu   is_validu   report(   u
   __locals__(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   ContentCheckerÎ   s   u   ContentCheckerc             B   se   |  Ee  Z d  Z e j d ƒ Z d d „  Z e d d „  ƒ Z d d „  Z	 d d	 „  Z
 d
 d „  Z d S(   u   HashCheckeruK   (?P<hash_name>sha1|sha224|sha384|sha256|sha512|md5)=(?P<expected>[a-f0-9]+)c             C   s(   | |  _  t j | ƒ |  _ | |  _ d  S(   N(   u	   hash_nameu   hashlibu   newu   hashu   expected(   u   selfu	   hash_nameu   expected(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   __init__ë   s    	u   HashChecker.__init__c             C   sL   t  | ƒ d } | s t ƒ  S|  j j | ƒ } | s< t ƒ  S|  | j ƒ    S(   u5   Construct a (possibly null) ContentChecker from a URLi   iÿÿÿÿ(   u   urlparseu   ContentCheckeru   patternu   searchu	   groupdict(   u   clsu   urlu   fragmentu   match(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   from_urlð   s    u   HashChecker.from_urlc             C   s   |  j  j | ƒ d  S(   N(   u   hashu   update(   u   selfu   block(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   feedû   s    u   HashChecker.feedc             C   s   |  j  j ƒ  |  j k S(   N(   u   hashu	   hexdigestu   expected(   u   self(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   is_validþ   s    u   HashChecker.is_validc             C   s   | |  j  } | | ƒ S(   N(   u	   hash_name(   u   selfu   reporteru   templateu   msg(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   report  s    u   HashChecker.reportN(   u   __name__u
   __module__u   __qualname__u   reu   compileu   patternu   __init__u   classmethodu   from_urlu   feedu   is_validu   report(   u
   __locals__(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   HashCheckerå   s   	u   HashCheckerc                së  |  Ee  Z d  Z d Z d dG dH dI d d „ Z dJ d d „ Z dJ d d	 „ Z	 dJ d
 d „ Z
 d d „  Z d d „  Z d d „  Z d d „  Z dH d d „ Z d d „  Z dH ‡  f d d † Z d d „  Z d d „  Z d d „  Z d  d! „  Z d" d# „  Z dJ dJ dJ dH d$ d% „ Z dJ dJ d& d' „ Z d( d) „  Z d* Z d+ d, „  Z d- d. „  Z dH d/ d0 „ Z d1 d2 „  Z d3 d4 „  Z d5 d6 „  Z  d7 d8 „  Z! d9 d: „  Z" e# dJ d; d< „ ƒ Z$ d= d> „  Z% d? d@ „  Z& dA dB „  Z' dC dD „  Z( dE dF „  Z) ‡  S(K   u   PackageIndexu;   A distribution index that scans web pages for download URLsu   https://pypi.python.org/simpleu   *c             O   sÅ   t  j |  | | Ž | d d  | j d ƒ … |  _ i  |  _ i  |  _ i  |  _ t j d j	 t
 t | ƒ ƒ ƒ j |  _ g  |  _ | rµ t j rµ | s  t j ƒ  rµ t j | ƒ |  _ n t j |  _ d  S(   Nu   /u   |(   u   Environmentu   __init__u   endswithu	   index_urlu   scanned_urlsu   fetched_urlsu   package_pagesu   reu   compileu   joinu   mapu	   translateu   matchu   allowsu   to_scanu   ssl_supportu   is_availableu   find_ca_bundleu
   opener_foru   openeru   urllib2u   urlopen(   u   selfu	   index_urlu   hostsu	   ca_bundleu
   verify_sslu   argsu   kw(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   __init__	  s    !			'	!u   PackageIndex.__init__c       
   
   C   sU  | |  j  k r | r d Sd |  j  | <t | ƒ sD |  j | ƒ d St t | ƒ ƒ } | r‚ |  j | ƒ so d S|  j d | ƒ n  | sž | sž | |  j k r¸ t t	 |  j
 | ƒ ƒ d S|  j | ƒ sØ d |  j | <d S|  j d | ƒ d |  j | <|  j | d | ƒ } | d k rd Sd |  j | j <d | j j d d ƒ j ƒ  k rZ| j ƒ  d S| j } | j ƒ  } t | t ƒ sÃt | t ƒ r–d } n | j j d	 ƒ p«d } | j | d
 ƒ } n  | j ƒ  xB t j | ƒ D]1 } t | t | j d ƒ ƒ ƒ }	 |  j |	 ƒ qÝW| j |  j  ƒ rQt! | d d ƒ d k rQ|  j" | | ƒ } n  d S(   u<   Evaluate a URL as a possible download, and maybe retrieve itNu   Found link: %su
   Reading %su<   Download error on %s: %%s -- Some packages may not be found!u   htmlu   content-typeu    u   latin-1u   charsetu   ignorei   u   codei”  T(#   u   scanned_urlsu   Trueu
   URL_SCHEMEu   process_filenameu   listu   distros_for_urlu   url_oku   debugu   fetched_urlsu   mapu   addu   infou   open_urlu   Noneu   urlu   headersu   getu   loweru   closeu   readu
   isinstanceu   stru	   HTTPErroru	   get_paramu   decodeu   HREFu   finditeru   urljoinu
   htmldecodeu   groupu   process_urlu
   startswithu	   index_urlu   getattru   process_index(
   u   selfu   urlu   retrieveu   distsu   fu   baseu   pageu   charsetu   matchu   link(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   process_url  sN     !
		
*u   PackageIndex.process_urlc             C   sÌ   t  j j | ƒ s& |  j d | ƒ d  St  j j | ƒ r | r t  j j | ƒ } x9 t  j | ƒ D]% } |  j t  j j | | ƒ d ƒ qa Wn  t
 | ƒ } | rÈ |  j d | ƒ t t |  j | ƒ ƒ n  d  S(   Nu   Not found: %su	   Found: %sT(   u   osu   pathu   existsu   warnu   isdiru   realpathu   listdiru   process_filenameu   joinu   Trueu   distros_for_filenameu   debugu   listu   mapu   add(   u   selfu   fnu   nestedu   pathu   itemu   dists(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   process_filenameH  s    &u   PackageIndex.process_filenamec             C   s}   t  | ƒ } | r- | j d ƒ j ƒ  d k sF |  j t | ƒ d ƒ rJ d Sd } | ri t | | ƒ ‚ n |  j | | ƒ d  S(   Ni   u   fileuN   
Note: Bypassing %s (disallowed host; see http://bit.ly/1dg9ijs for details).
T(   u
   URL_SCHEMEu   groupu   loweru   allowsu   urlparseu   Trueu   DistutilsErroru   warn(   u   selfu   urlu   fatalu   su   msg(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   url_okX  s    :u   PackageIndex.url_okc             C   sf   x_ | D]W } t  j j | ƒ r x< t  j | ƒ D]( } | j d ƒ r/ |  j | | ƒ q/ q/ Wq q Wd  S(   Nu	   .egg-link(   u   osu   pathu   isdiru   listdiru   endswithu   scan_egg_link(   u   selfu   search_pathu   itemu   entry(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   scan_egg_linksc  s
    u   PackageIndex.scan_egg_linksc             C   s¥   d d „  t  t j t t j j | | ƒ ƒ ƒ Dƒ } t | ƒ d k r¡ xX t t j j | | d ƒ ƒ D]4 } t j j | | Œ | _	 t
 | _ |  j | ƒ qf Wn  d  S(   Nc             S   s   g  |  ] } | r | ‘ q S(    (    (   u   .0u   _f(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu
   <listcomp>k  s   	 u.   PackageIndex.scan_egg_link.<locals>.<listcomp>i   i    (   u   mapu   stru   stripu   openu   osu   pathu   joinu   lenu   find_distributionsu   locationu   SOURCE_DISTu
   precedenceu   add(   u   selfu   pathu   entryu   linesu   dist(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   scan_egg_linkj  s    "&	u   PackageIndex.scan_egg_linkc       
         s  ‡  f d d †  } xR t  j | ƒ D]A } y& | t | t | j d ƒ ƒ ƒ ƒ Wq" t k
 rb Yq" Xq" W| | ƒ \ } } | rxy t | | ƒ D]h } t | ƒ \ } }	 | j d ƒ rê |	 rê | rÚ | d | | f 7} qê ˆ  j	 | ƒ n  ˆ  j
 | ƒ q Wt j d d „  | ƒ Sd Sd	 S(
   u#   Process the contents of a PyPI pagec                sÁ   |  j  ˆ  j ƒ r½ t t t |  t ˆ  j ƒ d  … j d ƒ ƒ ƒ } t | ƒ d k r½ d | d k r½ t | d ƒ } t | d ƒ } d ˆ  j
 j | j ƒ  i  ƒ |  <t | ƒ t | ƒ f Sn  d S(   Nu   /i   u   #i   i    T(   NN(   u
   startswithu	   index_urlu   listu   mapu   unquoteu   lenu   splitu	   safe_nameu   safe_versionu   Trueu   package_pagesu
   setdefaultu   loweru   to_filenameu   None(   u   linku   partsu   pkgu   ver(   u   self(    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   scanu  s    +"u(   PackageIndex.process_index.<locals>.scani   u   .pyu
   #egg=%s-%sc             S   s   d |  j  d d d ƒ S(   Nu   <a href="%s#md5=%s">%s</a>i   i   i   (   u   group(   u   m(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   <lambda>˜  s    u,   PackageIndex.process_index.<locals>.<lambda>u    N(   u   HREFu   finditeru   urljoinu
   htmldecodeu   groupu
   ValueErroru   find_external_linksu   egg_info_for_urlu   endswithu   need_version_infou   scan_urlu   PYPI_MD5u   sub(
   u   selfu   urlu   pageu   scanu   matchu   pkgu   veru   new_urlu   baseu   frag(    (   u   selfu1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   process_indexs  s$    &	u   PackageIndex.process_indexc             C   s   |  j  d | ƒ d  S(   NuP   Page at %s links to .py file(s) without version info; an index scan is required.(   u   scan_all(   u   selfu   url(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   need_version_info  s    u   PackageIndex.need_version_infoc             G   sO   |  j  |  j k r; | r+ |  j | | Œ n  |  j d ƒ n  |  j |  j  ƒ d  S(   Nu6   Scanning index of all packages (this may take a while)(   u	   index_urlu   fetched_urlsu   warnu   infou   scan_url(   u   selfu   msgu   args(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   scan_all£  s     
u   PackageIndex.scan_allc             C   s­   |  j  |  j | j d ƒ |  j j | j ƒ sN |  j  |  j | j d ƒ n  |  j j | j ƒ ss |  j | ƒ n  x3 t |  j j | j f  ƒ ƒ D] } |  j  | ƒ q’ Wd  S(   Nu   /(	   u   scan_urlu	   index_urlu   unsafe_nameu   package_pagesu   getu   keyu   project_nameu   not_found_in_indexu   list(   u   selfu   requirementu   url(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   find_packages«  s    %u   PackageIndex.find_packagesc                sk   |  j  ƒ  |  j | ƒ x8 |  | j D]) } | | k r; | S|  j d | | ƒ q% Wt t |  ƒ j | | ƒ S(   Nu   %s does not match %s(   u   prescanu   find_packagesu   keyu   debugu   superu   PackageIndexu   obtain(   u   selfu   requirementu	   installeru   dist(   u	   __class__(    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   obtainº  s    
u   PackageIndex.obtainc             C   si   | j  |  j d | ƒ | j ƒ  se | j ƒ  t j | ƒ t d | j j t j	 j
 | ƒ f ƒ ‚ n  d S(   u-   
        checker is a ContentChecker
        u   Validating %%s checksum for %su7   %s validation failed for %s; possible download problem?N(   u   reportu   debugu   is_validu   closeu   osu   unlinku   DistutilsErroru   hashu   nameu   pathu   basename(   u   selfu   checkeru   filenameu   tfp(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu
   check_hashÃ  s    
u   PackageIndex.check_hashc             C   sr   xk | D]c } |  j  d k sJ t | ƒ sJ | j d ƒ sJ t t | ƒ ƒ rZ |  j | ƒ q |  j  j | ƒ q Wd S(   u;   Add `urls` to the list that will be prescanned for searchesu   file:N(   u   to_scanu   Noneu
   URL_SCHEMEu
   startswithu   listu   distros_for_urlu   scan_urlu   append(   u   selfu   urlsu   url(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   add_find_linksÒ  s    u   PackageIndex.add_find_linksc             C   s2   |  j  r% t t |  j |  j  ƒ ƒ n  d |  _  d S(   u7   Scan urls scheduled for prescanning (e.g. --find-links)N(   u   to_scanu   listu   mapu   scan_urlu   None(   u   self(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   prescaná  s    	u   PackageIndex.prescanc             C   sN   |  | j  r  |  j d } } n |  j d } } | | | j ƒ |  j ƒ  d  S(   Nu#   Couldn't retrieve index page for %ru3   Couldn't find index page for %r (maybe misspelled?)(   u   keyu   infou   warnu   unsafe_nameu   scan_all(   u   selfu   requirementu   methu   msg(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   not_found_in_indexç  s    
u   PackageIndex.not_found_in_indexc             C   sì   t  | t ƒ sÐ t | ƒ } | r| |  j | j d ƒ | | ƒ } t | ƒ \ } } | j d ƒ rx |  j | | | ƒ } n  | St j	 j
 | ƒ r’ | Sy t j | ƒ } WqÐ t k
 rÌ t d | f ƒ ‚ YqÐ Xn  t |  j | | ƒ d d ƒ S(   u  Locate 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.
        i   u   .pyu1   Not a URL, existing file, or requirement spec: %ru   locationN(   u
   isinstanceu   Requirementu
   URL_SCHEMEu   _download_urlu   groupu   egg_info_for_urlu   endswithu	   gen_setupu   osu   pathu   existsu   parseu
   ValueErroru   DistutilsErroru   getattru   fetch_distributionu   None(   u   selfu   specu   tmpdiru   schemeu   foundu   baseu   fragment(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   downloadð  s"    u   PackageIndex.downloadc       	   	      sN  ˆ j  d | ƒ i  ‰ d	 } d	 ‡  ‡ ‡ ‡ f d d † } | rf ˆ j ƒ  ˆ j | ƒ | | ƒ } n  | d	 k	 rŠ | p„ | | | ƒ } n  | d	 k r¾ ˆ j d	 k	 r¾ ˆ j ƒ  | | ƒ } n  | d	 k rí | rí ˆ j | ƒ | | ƒ } n  | d	 k rˆ j d ˆ rd pd | ƒ n/ ˆ j  d | ƒ | j d ˆ 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.
        u   Searching for %sc                sœ   | d  k r ˆ } n  x€ | |  j D]q } | j t k rn ˆ  rn | ˆ k r# ˆ j d | ƒ d ˆ | <q# q# n  | |  k r# | j t k s ˆ r# | Sq# Wd  S(   Nu&   Skipping development or system egg: %si   (   u   Noneu   keyu
   precedenceu   DEVELOP_DISTu   warnu   SOURCE_DIST(   u   requ   envu   dist(   u
   develop_oku   selfu   skippedu   source(    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   find1  s    	"u-   PackageIndex.fetch_distribution.<locals>.findu2   No local packages or download links found for %s%su   a source distribution of u    u   Best match: %su   locationN(	   u   infou   Noneu   prescanu   find_packagesu   to_scanu   warnu   cloneu   downloadu   location(	   u   selfu   requirementu   tmpdiru
   force_scanu   sourceu
   develop_oku   local_indexu   distu   find(    (   u
   develop_oku   selfu   skippedu   sourceu1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   fetch_distribution  s.    


u   PackageIndex.fetch_distributionc             C   s/   |  j  | | | | ƒ } | d k	 r+ | j Sd S(   u3  Obtain 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(   u   fetch_distributionu   Noneu   location(   u   selfu   requirementu   tmpdiru
   force_scanu   sourceu   dist(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   fetch[  s    u   PackageIndex.fetchc       
      C   sb  t  j | ƒ } | r= d d „  t | | j d ƒ d  ƒ Dƒ p@ g  } t | ƒ d k r3t j j | ƒ } t j j	 | ƒ | k rÏ t j j
 | | ƒ } d d l m } | | | ƒ sÏ t j | | ƒ | } qÏ n  t t j j
 | d ƒ d ƒ }	 |	 j d | d j | d j t j j | ƒ d f ƒ |	 j ƒ  | S| rRt d	 | | f ƒ ‚ n t d
 ƒ ‚ d  S(   Nc             S   s   g  |  ] } | j  r | ‘ q S(    (   u   version(   u   .0u   d(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu
   <listcomp>k  s   	 u*   PackageIndex.gen_setup.<locals>.<listcomp>i   i    (   u   samefileu   setup.pyu   wuI   from 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. %rup   Can't process plain .py files without an '#egg=name-version' suffix to enable automatic setup script generation.(   u   EGG_FRAGMENTu   matchu   interpret_distro_nameu   groupu   Noneu   lenu   osu   pathu   basenameu   dirnameu   joinu   setuptools.command.easy_installu   samefileu   shutilu   copy2u   openu   writeu   project_nameu   versionu   splitextu   closeu   DistutilsError(
   u   selfu   filenameu   fragmentu   tmpdiru   matchu   distsu   basenameu   dstu   samefileu   file(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu	   gen_setuph  s4    	
u   PackageIndex.gen_setupi    c             C   s•  |  j  d | ƒ d \ } } } zHt j | ƒ } |  j t | ƒ ƒ } t | t ƒ rw t d | | j	 | j
 f ƒ ‚ n  | j  ƒ  } d } |  j }	 d	 }
 d | k rä t | d ƒ } t t t | ƒ ƒ }
 |  j | | | |	 |
 ƒ n  t | d ƒ } xY | j |	 ƒ } | rK| j | ƒ | j | ƒ | d 7} |  j | | | |	 |
 ƒ qö Pqö |  j | | | ƒ | SWd  | r}| j ƒ  n  | r| j ƒ  n  Xd  S(
   Nu   Downloading %su   Can't download %s: %s %si    i   u   content-lengthu   Content-Lengthu   wb(   NNNiÿÿÿÿ(   u   infou   Noneu   HashCheckeru   from_urlu   open_urlu   strip_fragmentu
   isinstanceu	   HTTPErroru   DistutilsErroru   codeu   msgu   dl_blocksizeu   get_all_headersu   maxu   mapu   intu
   reporthooku   openu   readu   feedu   writeu
   check_hashu   close(   u   selfu   urlu   filenameu   fpu   tfpu   infou   checkeru   headersu   blocknumu   bsu   sizeu   sizesu   block(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   _download_to“  s>    	
  u   PackageIndex._download_toc             C   s   d  S(   N(    (   u   selfu   urlu   filenameu   blocknumu   blksizeu   size(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu
   reporthook·  s    u   PackageIndex.reporthookc             C   sÚ  | j  d ƒ r t | ƒ Sy t | |  j ƒ SWn¦t t j f k
 r¨ t j ƒ  d } d j	 d d „  | j
 Dƒ ƒ } | rŽ |  j | | ƒ n t d | | f ƒ ‚ Yn.t j k
 rÐ t j ƒ  d } | SYnt j k
 r)t j ƒ  d } | r|  j | | j ƒ n t d | | j f ƒ ‚ Yn­ t j k
 r‚t j ƒ  d } | re|  j | | j ƒ n t d | | j f ƒ ‚ YnT t j k
 rÕt j ƒ  d } | r»|  j | | ƒ n t d | | f ƒ ‚ Yn Xd  S(	   Nu   file:i   u    c             S   s   g  |  ] } t  | ƒ ‘ q S(    (   u   str(   u   .0u   arg(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu
   <listcomp>Á  s   	 u)   PackageIndex.open_url.<locals>.<listcomp>u   %s %su   Download error for %s: %su;   %s returned a bad status line. The server might be down, %s(   u
   startswithu
   local_openu   open_with_authu   openeru
   ValueErroru   httplibu
   InvalidURLu   sysu   exc_infou   joinu   argsu   warnu   DistutilsErroru   urllib2u	   HTTPErroru   URLErroru   reasonu   BadStatusLineu   lineu   HTTPException(   u   selfu   urlu   warningu   vu   msg(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   open_urlº  s@    
u   PackageIndex.open_urlc             C   sB  t  | ƒ \ } } | rL x7 d | k rH | j d d ƒ j d d ƒ } q Wn d } | j d ƒ rt | d  d … } n  t j j | | ƒ } | d k s¤ | j d	 ƒ r´ |  j | | ƒ S| d
 k sÏ | j d ƒ rß |  j | | ƒ S| j d ƒ rþ |  j	 | | ƒ S| d k rt
 t | ƒ d ƒ S|  j | d ƒ |  j | | ƒ Sd  S(   Nu   ..u   .u   \u   _u   __downloaded__u   .egg.zipi   u   svnu   svn+u   gitu   git+u   hg+u   filei   iüÿÿÿT(   u   egg_info_for_urlu   replaceu   endswithu   osu   pathu   joinu
   startswithu   _download_svnu   _download_gitu   _download_hgu   url2pathnameu   urlparseu   url_oku   Trueu   _attempt_download(   u   selfu   schemeu   urlu   tmpdiru   nameu   fragmentu   filename(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   _download_urlâ  s$    %u   PackageIndex._download_urlc             C   s   |  j  | d ƒ d  S(   NT(   u   process_urlu   True(   u   selfu   url(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   scan_urlÿ  s    u   PackageIndex.scan_urlc             C   sK   |  j  | | ƒ } d | j d d ƒ j ƒ  k rC |  j | | | ƒ S| Sd  S(   Nu   htmlu   content-typeu    (   u   _download_tou   getu   loweru   _download_html(   u   selfu   urlu   filenameu   headers(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   _attempt_download  s    u   PackageIndex._attempt_downloadc             C   s‘   t  | ƒ } xW | D]O } | j ƒ  r t j d | ƒ r^ | j ƒ  t j | ƒ |  j | | ƒ SPq q W| j ƒ  t j | ƒ t d | ƒ ‚ d  S(   Nu    <title>([^- ]+ - )?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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-build/setuptools/package_index.pyu   _socket_timeout€  s    u'   socket_timeout.<locals>._socket_timeout(    (   u   timeoutu   _socket_timeout(    (   u   timeoutu1   /tmp/pip-k8wh6o-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-k8wh6o-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-k8wh6o-build/setuptools/package_index.pyu   __init__¥  s    	u   Credential.__init__c             c   s   |  j  V|  j Vd  S(   N(   u   usernameu   password(   u   self(    (    u1   /tmp/pip-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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-k8wh6o-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 ƒ | | ƒ } | rt  | j ƒ \ } } } } } } | | k r| |	 k rt | | | | | | f ƒ | _ qn  | 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-k8wh6o-build/setuptools/package_index.pyu   open_with_auth×  s2    !'u   open_with_authc             C   s   |  S(   N(    (   u   url(    (    u1   /tmp/pip-k8wh6o-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>%s</title>u   </head><body>%s</body></html>u   
iÈ   u   OKi”  u   Path not foundu	   Not foundu	   text/htmlu   content-type(   iÈ   u   OK(   i”  u   Path not foundu	   Not found(   u   urlparseu   url2pathnameu   osu   pathu   isfileu   urllib2u   urlopenu   endswithu   isdiru   listdiru   openu   joinu   readu   closeu   appendu	   HTTPErroru   StringIO(   u   urlu   schemeu   serveru   pathu   paramu   queryu   fragu   filenameu   filesu   fu   fpu   bodyu   statusu   messageu   headers(    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu
   local_open  s*    !
!u
   local_open(^   u   __doc__u   sysu   osu   reu   shutilu   socketu   base64u   hashlibu	   functoolsu   wrapsu   pkg_resourcesu   CHECKOUT_DISTu   Distributionu   BINARY_DISTu   normalize_pathu   SOURCE_DISTu   requireu   Environmentu   find_distributionsu	   safe_nameu   safe_versionu   to_filenameu   Requirementu   DEVELOP_DISTu
   setuptoolsu   ssl_supportu	   distutilsu   logu   distutils.errorsu   DistutilsErroru   setuptools.compatu   urllib2u   httplibu   StringIOu	   HTTPErroru   urlparseu
   urlunparseu   unquoteu	   splituseru   url2pathnameu   name2codepointu   unichru   urljoinu   urlsplitu
   urlunsplitu   ConfigParseru   filterfalseu   fnmatchu	   translateu   setuptools.py26compatu   strip_fragmentu   setuptools.py27compatu   get_all_headersu   compileu   EGG_FRAGMENTu   Iu   HREFu   PYPI_MD5u   matchu
   URL_SCHEMEu   splitu
   EXTENSIONSu   __all__u   _SOCKET_TIMEOUTu   parse_bdist_wininstu   egg_info_for_urlu   Noneu   distros_for_urlu   distros_for_locationu   distros_for_filenameu   interpret_distro_nameu   unique_everseenu   unique_valuesu   RELu   find_external_linksu   versionu
   user_agentu   objectu   ContentCheckeru   HashCheckeru   PackageIndexu   subu
   entity_subu   uchru   decode_entityu
   htmldecodeu   socket_timeoutu   _encode_authu
   Credentialu
   PyPIConfigu   urlopenu   open_with_authu
   fix_sf_urlu
   local_open(    (    (    u1   /tmp/pip-k8wh6o-build/setuptools/package_index.pyu   <module>   sp   Xd			"
'!ÿ ÿ e
'+