
     f                        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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ZddlmZ ddl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$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, dd	l-m.Z.  ej/        d
          Z0 ej/        dej1                  Z2 ej/        d          Z3 ej/        dej1                  j4        Z5d6                                Z7g dZ8dZ9dZ:e:;                     dj;        ej<         e          Z=d Z>d Z?d Z@d1dZAd1dZBd1dZCdedfdZDd ZE ej/        dej1                  ZF	 eEd             ZG G d d          ZH G d  d!eH          ZI G d" d#e          ZJ ej/        d$          jK        ZLd% ZMd& ZNd2d'ZOd( ZP G d) d*          ZQ G d+ d,ejR                  ZSejT        jU        fd-ZVd. ZW  eOe9          eV          ZVd/ ZXd0 ZYdS )3z$PyPI and direct package downloading.    Nwraps)CHECKOUT_DISTDistributionBINARY_DISTnormalize_pathSOURCE_DISTEnvironmentfind_distributions	safe_namesafe_versionto_filenameRequirementDEVELOP_DISTEGG_DISTparse_version)log)DistutilsError)	translate)Wheelunique_everseenz^egg=([-A-Za-z0-9_.+!]+)$zhref\s*=\s*['"]?([^'"> ]+)z<a href="([^"#]+)">([^<]+)</a>\n\s+\(<a (?:title="MD5 hash"\n\s+)href="[^?]+\?:action=show_md5&amp;digest=([0-9a-f]{32})">md5</a>\)z([-+.a-z0-9]{2,}):z.tar.gz .tar.bz2 .tar .zip .tgz)PackageIndexdistros_for_urlparse_bdist_wininstinterpret_distro_name   z<setuptools/{setuptools.__version__} Python-urllib/{py_major}z{}.{})py_major
setuptoolsc                 v    	 t          j        |           S # t          $ r}t          d|           |d }~ww xY w)Nz/Not a URL, existing file, or requirement spec: )r   parse
ValueErrorr   )speces     [/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/setuptools/package_index.pyparse_requirement_argr&   E   sV     &&&   nCG4I
 
	s    
838c                    |                                  }d\  }}}|                    d          r|                    d          r| dd         }d}n{|                    dd          r| d	d
         }| dd         }d}nN|                    d          r| dd         }d}n,|                    dd          r| d	d
         }| dd         }d}|||fS )z=Return (base,pyversion) or (None,None) for possible .exe name)NNN.exez
.win32.exeNiwin32z	.win32-pyiiz.win-amd64.exeiz	win-amd64z.win-amd64-pyi)lowerendswith
startswith)namer+   basepy_verplats        r%   r   r   N   s     JJLLE)D&$~~f >>,'' 	:DDDk3// 
	"R%[F:DDD^^,-- 	:DDDos33 	"R%[F:DD    c                    t           j                            |           }|\  }}}}}}t           j                            |                    d          d                   }|dk    r>|dk    r8t           j                            |                    d          d                   }d|v r|                    dd          \  }}||fS )N/zsourceforge.netdownload#   )urllibr!   urlparseunquotesplit)	urlpartsschemeserverpath
parametersqueryfragmentr/   s	            r%   egg_info_for_urlrF   f   s    L!!#&&E8=5FFD*eX<

3 344D"""tz'9'9|##DJJsOOB$788
d{{C++h>r2   c              #     K   t          |           \  }}t          | ||          D ]}|V  |rNt                              |          }|r4t	          | |                    d          |t                    D ]
}|V  dS dS dS )zEYield egg or source distribution objects that might be found at a URLr9   )
precedenceN)rF   distros_for_locationEGG_FRAGMENTmatchr   groupr   )r>   metadatar/   rE   distrK   s         r%   r   r   q   s      %c**ND($S$99  



 ""8,, 	-U[[^^X-     



 	 	 r2   c                    |                     d          r
|dd         }|                     d          rd|v rt          j        | ||          gS |                     d          rOd|v rKt          |          }|                                sg S t          | |j        |j        t          dz             gS |                     d	          r.t          |          \  }}}|t          | |||t          |          S t          D ]B}|                     |          r+|dt          |                    }t          | ||          c S Cg S )
z:Yield egg or source distribution objects based on basename.egg.zipNr*   z.egg-z.whlr9   )locationproject_nameversionrH   r(   )r,   r   from_locationr   is_compatiblerS   rT   r   r   r   r   
EXTENSIONSlen)rR   basenamerM   wheelwin_baser0   platformexts           r%   rI   rI      s   $$ !CRC=   JSH__*8XxHHII   
SH__h""$$ 	I!"/#a<  
 	
    %8%B%B"&(((Hfk8  
  G GS!! 	G3s88),H(8XFFFFF	G Ir2   c                 x    t          t          |           t          j                            |           |          S )zEYield possible egg or source distribution objects based on a filename)rI   r   osrB   rY   )filenamerM   s     r%   distros_for_filenamera      s3    x  "'"2"28"<"<h  r2   c           
   #     K   |                     d          }|s#t          d |dd         D                       rdS t          t          |                    D ]&}||         dd                                         r n't          |          }t          | |d                    |d|                   d                    ||d                   |||          V  dS )zGenerate the interpretation 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!
    rQ   c              3   @   K   | ]}t          j        d |          V  dS )z	py\d\.\d$N)rerK   ).0ps     r%   	<genexpr>z(interpret_distro_name.<locals>.<genexpr>   s.      KKAbh|Q77KKKKKKr2      Nr9   )
py_versionrH   r\   )r=   anyrangerX   isdigitr   join)rR   rY   rM   ri   rH   r\   r?   rf   s           r%   r   r      s
      NN3E #KKqrrKKKKK  3u::  8BQB<!! 	E	 JJ
rrqrr       r2   c                 <     t                      fd            }|S )zs
    Wrap a function returning an iterable such that the resulting iterable
    only ever yields unique items.
    c                  .    t           | i |          S Nr   )argskwargsfuncs     r%   wrapperzunique_values.<locals>.wrapper   s     ttT4V44555r2   r   )rs   rt   s   ` r%   unique_valuesru      s5     4[[6 6 6 6 [6 Nr2   z3<([^>]*\srel\s{0,10}=\s{0,10}['"]?([^'" >]+)[^>]*)>c           
   #     K   t                               |          D ]}|                                \  }}t          t	          t
          j        |                                                    d                              }d|v sd|v r_t                              |          D ]D}t          j                            | t          |                    d                              V  EdD ]|}|                    |          }|dk    r_t                              ||          }|rBt          j                            | t          |                    d                              V  }dS )zEFind rel="homepage" and rel="download" links in `page`, yielding URLs,homepager6   r9   )z<th>Home Pagez<th>Download URLr5   N)RELfinditergroupssetmapstrstripr+   r=   HREFr:   r!   urljoin
htmldecoderL   findsearch)r>   pagerK   tagrelrelsposs          r%   find_external_linksr      sM      d## L L<<>>S3sy#))++"3"3C"8"899::t!3!3s++ L Ll**3
5;;q>>0J0JKKKKKK4 L Liinn"99KKc**E Ll**3
5;;q>>0J0JKKKKKL Lr2   c                   $    e Zd ZdZd Zd Zd ZdS )ContentCheckerzP
    A null content checker that defines the interface for checking content
    c                     dS )z3
        Feed a block of data to the hash.
        N selfblocks     r%   feedzContentChecker.feed   s	     	r2   c                     dS )zC
        Check the hash. Return False if validation fails.
        Tr   r   s    r%   is_validzContentChecker.is_valid   s	     tr2   c                     dS )zu
        Call reporter with information about the checker (hash name)
        substituted into the template.
        Nr   )r   reportertemplates      r%   reportzContentChecker.report  s	    
 	r2   N)__name__
__module____qualname____doc__r   r   r   r   r2   r%   r   r      sK                 r2   r   c                   \    e Zd Z ej        d          Zd Zed             Zd Z	d Z
d ZdS )HashCheckerzK(?P<hash_name>sha1|sha224|sha384|sha256|sha512|md5)=(?P<expected>[a-f0-9]+)c                 T    || _         t          j        |          | _        || _        d S rp   )	hash_namehashlibnewhashexpected)r   r   r   s      r%   __init__zHashChecker.__init__  s%    "K	**	 r2   c                     t           j                            |          d         }|st                      S | j                            |          }|st                      S  | di |                                S )z5Construct a (possibly null) ContentChecker from a URLr5   r   )r:   r!   r;   r   patternr   	groupdict)clsr>   rE   rK   s       r%   from_urlzHashChecker.from_url  s{     <((--b1 	$!###""8,, 	$!###s''U__&&'''r2   c                 :    | j                             |           d S rp   )r   updater   s     r%   r   zHashChecker.feed   s    	r2   c                 F    | j                                         | j        k    S rp   )r   	hexdigestr   r   s    r%   r   zHashChecker.is_valid#  s    y""$$55r2   c                 ,    || j         z  } ||          S rp   )r   )r   r   r   msgs       r%   r   zHashChecker.report&  s    'x}}r2   N)r   r   r   rd   compiler   r   classmethodr   r   r   r   r   r2   r%   r   r   
  s        bj	# G
! ! !
 ( ( [(     6 6 6    r2   r   c                   .    e Zd ZdZ	 	 	 	 d+ fd	Z fdZd,d	Zd,d
Zd,dZd Z	d Z
d Zd Zd Zd-dZd Zd- fd	Zd Zd Zd Zd Zd Z	 	 	 	 d.dZd/dZd ZdZd Zd Zd-dZd  Zd! Zd" Zd# Z d$ Z!e"d,d%            Z#d& Z$d' Z%d( Z&d) Z'd* Z( xZ)S )0r   z;A distribution index that scans web pages for download URLshttps://pypi.org/simple/*NTc                 r    t                      j        |i | |dd |                    d                    z   | _        i | _        i | _        i | _        t          j        d	                    t          t          |                              j        | _        g | _        t          j        j        | _        d S )Nr4   |)superr   r,   	index_urlscanned_urlsfetched_urlspackage_pagesrd   r   rm   r}   r   rK   allowsto_scanr:   requesturlopenopener)r   r   hosts	ca_bundle
verify_sslrq   kw	__class__s          r%   r   zPackageIndex.__init__.  s     	$%"%%%"S)Fy/A/A#/F/F+F)F%GGj#i*?*?!@!@AAGn,r2   c                     	 t          |j                   n# t          $ r Y d S w xY wt                                          |          S rp   )r   rT   	Exceptionr   add)r   rN   r   s     r%   r   zPackageIndex.add@  sS    	$,'''' 	 	 	FF	ww{{4   s    
&&Fc           	         || j         v r|sdS d| j         |<   t          |          s|                     |           dS t          t	          |                    }|r-|                     |          sdS |                     d|           |s|r	|| j        v r$t          t          | j	        |                     dS |                     |          sd| j        |<   dS | 
                    d|           d| j        |<   d}|                     |||z            }|dS t          |t          j        j                  r(|j        dk    r| 
                    d|j        z             d| j        |j        <   d|j                            d	d
                                          vr|                                 dS |j        }|                                }t          |t0                    sTt          |t          j        j                  rd}n|j                            d          pd}|                    |d          }|                                 t6                              |          D ]W}	t          j                            |t?          |	                     d                              }
| !                    |
           X|"                    | j#                  r-tI          |dd          dk    r| %                    ||          }dS dS dS )z<Evaluate a URL as a possible download, and maybe retrieve itNTzFound link: %sz
Reading %sz<Download error on %s: %%s -- Some packages may not be found!i  zAuthentication error: %shtmlcontent-type zlatin-1charsetignorer9   code  )&r   
URL_SCHEMEprocess_filenamelistr   url_okdebugr   r}   r   infoopen_url
isinstancer:   error	HTTPErrorr   r   r>   headersgetr+   closereadr~   	get_paramdecoder   rz   r!   r   r   rL   process_urlr-   r   getattrprocess_index)r   r>   retrievediststmplfr/   r   r   rK   links              r%   r   zPackageIndex.process_urlI  s   $###H#F!%## 	2!!#&&&F--..E 2{{3'' F

+S111 	 	C4+<$<$<TXu%%&&&F{{3 	%)Dc"F		,$$$!%#MMM#tcz**9Fa/00 	:QVs]]II0158999#'!% ~r::@@BBBBGGIIIFuvvxx$$$ 	2!V\344 F#)--i88EI;;w11D				]]4(( 	# 	#E<''jQ.H.HIIDT"""">>$.)) 	1ga.F.F#.M.M%%c400DDD	1 	1.M.Mr2   c                     t           j                            |          s|                     d|           d S t           j                            |          rl|sjt           j                            |          }t          j        |          D ]6}|                     t           j                            ||          d           7t          |          }|r:| 
                    d|           t          t          | j        |                     d S d S )NzNot found: %sTz	Found: %s)r_   rB   existswarnisdirrealpathlistdirr   rm   ra   r   r   r}   r   )r   fnnestedrB   itemr   s         r%   r   zPackageIndex.process_filename~  s    w~~b!! 	IIor***F7== 	FV 	F7##B''D
4(( F F%%bgll4&>&>EEEE$R(( 	'JJ{B'''TXu%%&&&&&	' 	'r2   c                 N   t          |          }|o*|                    d                                          dk    }|s8|                     t          j                            |          d                   rdS d}|rt          ||z            |                     ||           d S )Nr9   fileTzN
Note: Bypassing %s (disallowed host; see http://bit.ly/2hrImnY for details).
)	r   rL   r+   r   r:   r!   r;   r   r   )r   r>   fatalsis_filer   s         r%   r   zPackageIndex.url_ok  s    sOO4

((**f4 	dkk&,"7"7"<"<Q"?@@ 	44 	  	  s+++IIc3r2   c                     t          t          j        j        |          }d |D             }t	          t          j        | j        |                     d S )Nc              3   v   K   | ]4}t          j        |          D ]}|                    d           ||fV  5dS )z	.egg-linkN)r_   r   r,   )re   rB   entrys      r%   rg   z.PackageIndex.scan_egg_links.<locals>.<genexpr>  sm       
 
D))
 
 ~~k**	
5M
 
 
 
 
 
 
r2   )filterr_   rB   r   r   	itertoolsstarmapscan_egg_link)r   search_pathdirs	egg_linkss       r%   scan_egg_linkszPackageIndex.scan_egg_links  sY    bgm[11
 

 
 
	 	Yt19==>>>>>r2   c           
         t          t          j                            ||                    5 }t	          t          d t          t          j        |                              }d d d            n# 1 swxY w Y   t          |          dk    rd S |\  }}t          t          j                            ||                    D ]?}t          j        j        |g|R  |_        t          |_        |                     |           @d S )Nrh   )openr_   rB   rm   r   r   r}   r~   r   rX   r   rR   r	   rH   r   )r   rB   r   	raw_lineslinesegg_path
setup_pathrN   s           r%   r   zPackageIndex.scan_egg_link  s)   "',,tU++,, 	B	c#)Y&?&?@@AAE	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B u::??F$*&rw||D('C'CDD 	 	DGL6666DM)DOHHTNNNN	 	s   6A00A47A4c           	         d}|                     | j                  s|S t          t          t          j        j        |t          | j                  d                              d                              }t          |          dk    s
d|d         v r|S t          |d                   }t          |d                   }d| j                            |                                i           |<   t          |          t          |          fS )N)NNr4   rh   r8   r9   r   T)r-   r   r   r}   r:   r!   r<   rX   r=   r   r   r   
setdefaultr+   r   )r   r   NO_MATCH_SENTINELr?   pkgvers         r%   _scanzPackageIndex._scan  s    &t~.. 	%$$S-tC4G4G4I4I/J/P/PQT/U/UVVWWu::??cU1Xoo$$ a!!58$$?C%%ciikk266t<3S!1!111r2   c                 \   t                               |          D ]f}	 |                     t          j                            |t          |                    d                                         W# t          $ r Y cw xY w|                     |          \  }}|sdS t          ||          D ]c}t          |          \  }}|                    d          r%|s#|r|d|d|z  }n|                     |           |                     |           dt                              d |          S )z#Process the contents of a PyPI pager9   r   .pyz#egg=rQ   c                 6    d|                      ddd          z  S )Nz<a href="%s#md5=%s">%s</a>r9      rh   )rL   )ms    r%   <lambda>z,PackageIndex.process_index.<locals>.<lambda>  s    2QWWQ15E5EE r2   )r   rz   r  r:   r!   r   r   rL   r"   r   rF   r,   need_version_infoscan_urlPYPI_MD5sub)	r   r>   r   rK   r  r  new_urlr/   frags	            r%   r   zPackageIndex.process_index  sN    ]]4(( 	 	E

6<//ZA5O5OPPQQQQ    ::c??S 	2 +355 	# 	#G)'22JD$}}U## 0D 0 0GsssCC88GG**3///MM'""""||EEt
 
 	
s   AA22
A?>A?c                 2    |                      d|           d S )NzPPage at %s links to .py file(s) without version info; an index scan is required.)scan_allr   r>   s     r%   r  zPackageIndex.need_version_info  s*     	
 	
 	
 	
 	
r2   c                     | j         | j        vr%|r | j        |g|R   |                     d           |                     | j                    d S )Nz6Scanning index of all packages (this may take a while))r   r   r   r   r  r   r   rq   s      r%   r  zPackageIndex.scan_all  sa    >!222 &	#%%%%%IINOOOdn%%%%%r2   c                    |                      | j        |j        z   dz              | j                            |j                  s%|                      | j        |j        z   dz              | j                            |j                  s|                     |           t          | j                            |j        d                    D ]}|                      |           d S )Nr4   r   )	r  r   unsafe_namer   r   keyrS   not_found_in_indexr   )r   requirementr>   s      r%   find_packageszPackageIndex.find_packages  s    dn{'>>DEEE!%%ko66 	KMM$.;+CCcIJJJ!%%ko66 	1##K000*..{CCDD 	 	CMM#	 	r2   c                    |                                   |                     |           | |j                 D ]!}||v r|c S |                     d||           "t	          t
          |                               ||          S )Nz%s does not match %s)prescanr'  r$  r   r   r   obtain)r   r&  	installerrN   r   s       r%   r*  zPackageIndex.obtain   s    ;''') 	B 	BD{""JJ-{DAAAA\4((//YGGGr2   c                 2   |                     | j        d|z             |                                sd|                                 t	          j        |           t          |j        j        dt          j	        
                    |          d          dS )z-
        checker is a ContentChecker
        zValidating %%s checksum for %sz validation failed for z; possible download problem?N)r   r   r   r   r_   unlinkr   r   r.   rB   rY   )r   checkerr`   tfps       r%   
check_hashzPackageIndex.check_hash	  s     	tz#Ch#NOOO!! 	IIKKKIh  <$$$bg&6&6x&@&@&@&@B  	 	r2   c                     |D ]y}| j         @t          |          r1|                    d          st          t	          |                    r|                     |           _| j                             |           zdS )z;Add `urls` to the list that will be prescanned for searchesNfile:)r   r   r-   r   r   r  append)r   urlsr>   s      r%   add_find_linkszPackageIndex.add_find_links  s     	) 	)C$!# %>>'** % ,,-- % c"""" ##C((((	) 	)r2   c                 p    | j         r't          t          | j        | j                              d| _         dS )z7Scan urls scheduled for prescanning (e.g. --find-links)N)r   r   r}   r  r   s    r%   r)  zPackageIndex.prescan&  s3    < 	3T]DL11222r2   c                     | |j                  r
| j        d}}n	| j        d}} |||j                   |                                  d S )Nz#Couldn't retrieve index page for %rz3Couldn't find index page for %r (maybe misspelled?))r$  r   r   r#  r  )r   r&  methr   s       r%   r%  zPackageIndex.not_found_in_index,  sX      		#H#DD 	E D 	S+)***r2   c                    t          |t                    st          |          }|rj|                     |                    d          ||          }t          |          \  }}|                    d          r|                     |||          }|S t          j	        
                    |          r|S t          |          }t          |                     ||          dd          S )a  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.
        r9   r  rR   N)r   r   r   _download_urlrL   rF   r,   	gen_setupr_   rB   r   r&   r   fetch_distribution)r   r#   tmpdirr@   foundr/   rE   s          r%   r6   zPackageIndex.download7  s    $ $,, 	3%%F 3**6<<??D&II!1$!7!7h=='' D NN5(FCCE%% 3,T22t..tV<<j$OOOr2   c                    	                       d|           i 	d}d	 	fd	}|r4                                                       |            ||          }|s| |||          }|& j                                           ||          }|"|s                      |            ||          }|                     drdpd|           dS                       d|           |                    |j                  S )
a|  Obtain a distribution suitable for fulfilling `requirement`

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

        If the `source` flag is set, only source distributions and source
        checkout links will be considered.  Unless the `develop_ok` flag is
        set, development and system eggs (i.e., those using the ``.egg-info``
        format) will be ignored.
        zSearching for %sNc                 Z   |}|| j                  D ]}|j        t          k    r"s |vr                    d|           d|<   4|| v o|j        t          k    p }|rJ                    |j        	          }||_        t          j	        
                    |j                  r|c S d S )Nz&Skipping development or system egg: %sr9   )r$  rH   r   r   r	   r6   rR   download_locationr_   rB   r   )
reqenvrN   testloc
develop_okr   skippedsourcer=  s
        r%   r   z-PackageIndex.fetch_distribution.<locals>.findw  s    { CG $ $?l22:27**		D    )*s{U;(F(Tf* $--v>>C-0D*w~~d&<== $#!$ $r2   z:No local packages or working download links found for %s%sza source distribution of r   zBest match: %s)rR   rp   )r   r)  r'  r   r   clonerA  )
r   r&  r=  
force_scanrH  rF  local_indexrN   r   rG  s
   ` ` ``   @r%   r<  zPackageIndex.fetch_distributionY  sn   4 			$k222	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$.  	%LLNNN{+++4$$D 	2/4[11D<|'4$$D<
<{+++4$$D<IIL77=2     II&---::t'=:>>>r2   c                 H    |                      ||||          }||j        S dS )a3  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)r<  rR   )r   r&  r=  rJ  rH  rN   s         r%   fetchzPackageIndex.fetch  s0     &&{FJOO= tr2   c                    t                               |          }|r.d t          ||                    d          d           D             pg }t	          |          dk    rXt
          j                            |          }t
          j                            |          |k    rvt
          j        	                    ||          }t
          j        
                    |          r t
          j                            ||          st          j        ||           |}t          t
          j        	                    |d          d          5 }|                    d|d         j        d|d         j        dt
          j                            |          d         d	           d d d            n# 1 swxY w Y   |S |rt'          d
|d|          t'          d          )Nc                      g | ]}|j         	|S r   )rT   )re   ds     r%   
<listcomp>z*PackageIndex.gen_setup.<locals>.<listcomp>  s0       9  r2   r9   zsetup.pywz(from setuptools import setup
setup(name=r   z
, version=z, py_modules=[z])
z9Can't unambiguously interpret project/version identifier zI; any dashes in the name or version should be escaped using underscores. zpCan't process plain .py files without an '#egg=name-version' suffix to enable automatic setup script generation.)rJ   rK   r   rL   rX   r_   rB   rY   dirnamerm   r   samefileshutilcopy2r  writerS   rT   splitextr   )	r   r`   rE   r=  rK   r   rY   dstr   s	            r%   r;  zPackageIndex.gen_setup  s   ""8,,  .xQNN    	 u::??w''11H wx((F22gll6844s++ #0@0@30O0O #L3///"Hbgll6:66<< 	


 a---a(((((221555  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 O 
	 . &.XXuu6   !G  s   AF,,F03F0i    c                    |                      d|           d }	 t                              |          }|                     |          }t	          |t
          j        j                  r"t          d|d|j	        d|j
                  |                                 }d}| j        }d}d|v rP|                    d          }	t          t          t          |	                    }|                     |||||           t#          |d	          5 }
	 |                    |          }|rI|                    |           |
                    |           |dz  }|                     |||||           nnb|                     |||
           d d d            n# 1 swxY w Y   ||r|                                 S S # |r|                                 w w xY w)NzDownloading %szCan't download :  r   r5   zcontent-lengthzContent-LengthwbTr9   )r   r   r   r   r   r:   r   r   r   r   r   dl_blocksizeget_allmaxr}   int
reporthookr  r   r   rW  r0  r   )r   r>   r`   fpr.  r   blocknumbssizesizesr/  r   s               r%   _download_tozPackageIndex._download_to  s   		"C(((	!**3//Gs##B"fl455 $n25##rwwwG   ggiiGH"BD7**(8993sE??++XxTBBBh%% 
8GGBKKE U+++		%((( AXxTJJJJ 3777
8 
8 
8 
8 
8 
8 
8 
8 
8 
8 
8 
8 
8 
8 
8  



r 



s1   C3F8 A;FF8 FF8 FF8 8Gc                     d S rp   r   )r   r>   r`   rd  blksizerf  s         r%   rb  zPackageIndex.reporthook
  s    r2   c                    |                     d          rt          |          S 	 t          || j                  S # t          t
          j        j        f$ r]}d                    d |j	        D                       }|r| 
                    ||           nt          |d|          |Y d }~d S d }~wt          j        j        $ r}|cY d }~S d }~wt          j        j        $ rD}|r| 
                    ||j                   nt          d|d|j                  |Y d }~d S d }~wt
          j        j        $ rC}|r| 
                    ||j                   nt          |d|j                  |Y d }~d S d }~wt
          j        j        t(          j        f$ r:}|r| 
                    ||           nt          d|d|          |Y d }~d S d }~ww xY w)Nr2  r\  c                 ,    g | ]}t          |          S r   )r~   )re   args     r%   rQ  z)PackageIndex.open_url.<locals>.<listcomp>  s    777CHH777r2   zDownload error for r[  z7 returned a bad status line. The server might be down, )r-   
local_openopen_with_authr   r"   httpclient
InvalidURLrm   rq   r   r   r:   r   r   URLErrorreasonBadStatusLinelineHTTPExceptionsocket)r   r>   warningvr   s        r%   r   zPackageIndex.open_url  so   >>'"" 	#c??"	T!#t{333DK23 	B 	B 	B((7777788C B		'3''''$SS%9::A (''''' |% 	 	 	HHHHHH|$ 	 	 	 		'18,,,,$n3633A  -,,,,,
 {( 	 	 	 		'16****$"%##qvv/   +***** )6<8 	T 	T 	T T		'1%%%%$nCCC%KLLRSS &%%%%%	TsL   ; GAB..GCGG#9D""G98E77#G/GGc                    t          |          \  }}|r3d|v r.|                    dd                              dd          }d|v .nd}|                    d          r
|d d         }t          j                            ||          }|dk    s|                    d	          r|                     ||          S |d
k    s|                    d          r|                     ||          S |                    d          r| 	                    ||          S |dk    rBt          j                            t          j                            |          d                   S |                     |d           |                     ||          S )Nz...\___downloaded__rP   r*   svnzsvn+gitzgit+zhg+r   rh   T)rF   replacer,   r_   rB   rm   r-   _download_svn_download_git_download_hgr:   r   url2pathnamer!   r;   r   _attempt_download)r   r@   r>   r=  r.   rE   r`   s          r%   r:  zPackageIndex._download_url0  s    *#..h 	$$,,||D#..66tSAA $,, $D==$$ 	9D7<<-- U??f//77?%%c8444u__ 1 1& 9 9_%%c8444u%% 	9$$S(333v>..v|/D/DS/I/I!/LMMMKKT"""))#x888r2   c                 2    |                      |d           d S )NT)r   r  s     r%   r  zPackageIndex.scan_urlM  s    d#####r2   c                     |                      ||          }d|                    dd                                          v r|                     |||          S |S )Nr   r   r   )rh  r   r+   _download_html)r   r>   r`   r   s       r%   r  zPackageIndex._attempt_downloadP  sY    ##C22W[[44::<<<<&&sGX>>>Or2   c                 t   t          |          }|D ]m}|                                rWt          j        d|          r@|                                 t          j        |           |                     ||          c S  nn|                                 t          j        |           t          d|z             )Nz <title>([^- ]+ - )?Revision \d+:zUnexpected HTML page found at )	r  r   rd   r   r   r_   r-  r  r   )r   r>   r   r`   r   rv  s         r%   r  zPackageIndex._download_htmlW  s    H~~ 	 	Dzz|| 9@$GG =JJLLLIh'''--c8<<<<< 	


	(=CDDDr2   c                    t          j        dt                     |                    dd          d         }d}|                                                    d          rd|v rt          j                            |          \  }}}}}}	|s|                    d          rd	|d
d          v r|d
d                              d	d          \  }}t          |          \  }
}|
rTd|
v r"|
                    dd          \  }}d|d|}nd|
z   }|}||||||	f}t          j        
                    |          }|                     d||           t          j        d|d|d|           |S )Nz"SVN download support is deprecatedr8   r9   r   r   zsvn:@z//r4   rh   :z --username=z --password=z'Doing subversion checkout from %s to %szsvn checkoutz -q r\  )warningsr   UserWarningr=   r+   r-   r:   r!   r;   
_splituser
urlunparser   r_   system)r   r>   r`   credsr@   netlocrB   rf   qr   authhostuserpwr?   s                  r%   r  zPackageIndex._download_svnf  s   :KHHHiiQ"99;;!!&)) 	9cSjj,2L,A,A#,F,F)FFD!Q 9dood33 9tABBx#ABBx~~c155'//
d 9d{{#'::c1#5#5bbBF$$ K . 5!F"FCAq8E ,11%88C		;S(KKK
		uuuccc88DEEEr2   c                 J   t           j                            |           \  }}}}}|                    dd          d         }|                    dd          d         }d }d|v r|                    dd          \  }}t           j                            ||||df          } | |fS )N+r9   r5   r8   r   r  r   )r:   r!   urlsplitr=   rsplit
urlunsplit)r>   
pop_prefixr@   r  rB   rD   r  revs           r%   _vcs_split_rev_from_urlz$PackageIndex._vcs_split_rev_from_url|  s    ,2L,A,A#,F,F)eTc1%%b) zz#q!!!$$;;C++ID# l%%vvtUB&GHHCxr2   c                 8   |                     dd          d         }|                     |d          \  }}|                     d||           t          j        d|d|           |0|                     d	|           t          j        d
|d|           |S )Nr8   r9   r   Tr  zDoing git clone from %s to %szgit clone --quiet r\  zChecking out %szgit -C z checkout --quiet r=   r  r   r_   r  r   r>   r`   r  s       r%   r  zPackageIndex._download_git  s    >>#q))!,///EES		13AAA
		sssHH=>>>?II'---II HHC   r2   c                 :   |                     dd          d         }|                     |d          \  }}|                     d||           t          j        d|d|           |1|                     d	|           t          j        d
|d|d           |S )Nr8   r9   r   Tr  zDoing hg clone from %s to %szhg clone --quiet r\  zUpdating to %sz	hg --cwd z
 up -C -r z -qr  r  s       r%   r  zPackageIndex._download_hg  s    >>#q))!,///EES		0#x@@@
		ccc88<===?II&,,,II HHCC   r2   c                 *    t          j        |g|R   d S rp   )r   r   r!  s      r%   r   zPackageIndex.debug  s     	#r2   c                 *    t          j        |g|R   d S rp   )r   r   r!  s      r%   r   zPackageIndex.info       tr2   c                 *    t          j        |g|R   d S rp   )r   r   r!  s      r%   r   zPackageIndex.warn  r  r2   )r   r   NT)Frp   )FFFN)FF)*r   r   r   r   r   r   r   r   r   r  r   r  r   r  r  r'  r*  r0  r5  r)  r%  r6   r<  rM  r;  r^  rh  rb  r   r:  r  r  r  r  staticmethodr  r  r  r   r   r   __classcell__r   s   @r%   r   r   +  s       EE -- - - - - -$! ! ! ! !31 31 31 31j' ' ' '        ? ? ?   2 2 2 
 
 
:
 
 
& & & &  H H H H H H  ) ) )  	 	 	 P  P  PL N? N? N? N?`   , , ,\ L" " "H   T  T  T  TD9 9 9:$ $ $  E E E  ,    \"  &  &          r2   r   z!&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?c                 T    |                      d          }t          j        |          S )Nr   )rL   r   unescape)rK   whats     r%   decode_entityr    s!    ;;q>>D=r2   c                 ,    t          t          |           S )a  
    Decode HTML entities in the given text.

    >>> htmldecode(
    ...     'https://../package_name-0.1.2.tar.gz'
    ...     '?tokena=A&amp;tokenb=B">package_name-0.1.2.tar.gz')
    'https://../package_name-0.1.2.tar.gz?tokena=A&tokenb=B">package_name-0.1.2.tar.gz'
    )
entity_subr  )texts    r%   r   r     s     mT***r2   c                       fd}|S )Nc                       fd}|S )Nc                      t          j                    }t          j                   	  | i |t          j        |           S # t          j        |           w xY wrp   )rx  getdefaulttimeoutsetdefaulttimeout)rq   rr   old_timeoutrs   timeouts      r%   _socket_timeoutz@socket_timeout.<locals>._socket_timeout.<locals>._socket_timeout  sd     244K$W---6tT,V,,(5555(5555s   A Ar   )rs   r  r  s   ` r%   r  z'socket_timeout.<locals>._socket_timeout  s*    	6 	6 	6 	6 	6 	6 r2   r   )r  r  s   ` r%   socket_timeoutr    s$    	 	 	 	 	 r2   c                     t           j                            |           }|                                }t	          j        |          }|                                }|                    dd          S )a9  
    Encode auth from a URL suitable for an HTTP header.
    >>> str(_encode_auth('username%3Apassword'))
    'dXNlcm5hbWU6cGFzc3dvcmQ='

    Long auth strings should not cause a newline to be inserted.
    >>> long_auth = 'username:' + 'password'*10
    >>> chr(10) in str(_encode_auth(long_auth))
    False
    
r   )r:   r!   r<   encodebase64	b64encoder   r  )r  auth_s
auth_bytesencoded_bytesencodeds        r%   _encode_authr    s[     \!!$''FJ$Z00M""$$G??4$$$r2   c                   $    e Zd ZdZd Zd Zd ZdS )
Credentialz:
    A username/password pair. Use like a namedtuple.
    c                 "    || _         || _        d S rp   usernamepassword)r   r  r  s      r%   r   zCredential.__init__  s      r2   c              #   .   K   | j         V  | j        V  d S rp   r  r   s    r%   __iter__zCredential.__iter__  s(      mmr2   c                 &    dt          |           z  S )Nz%(username)s:%(password)s)varsr   s    r%   __str__zCredential.__str__  s    *T$ZZ77r2   N)r   r   r   r   r   r  r  r   r2   r%   r  r    sK         ! ! !  8 8 8 8 8r2   r  c                   @     e Zd Z fdZed             Zd Zd Z xZS )
PyPIConfigc                 j   t                               g dd          }t                                          |           t          j                            t          j                            d          d          }t          j                            |          r| 	                    |           dS dS )z%
        Load from ~/.pypirc
        )r  r  
repositoryr   ~z.pypircN)
dictfromkeysr   r   r_   rB   rm   
expanduserr   r   )r   defaultsrcr   s      r%   r   zPyPIConfig.__init__
  s     ==!G!G!GLL"""W\\"',,S119==7>>" 	IIbMMMMM	 	r2   c                       fd                                  D             }t          t           j        |                    S )Nc                 d    g | ],}                     |d                                           *|-S )r  )r   r   )re   sectionr   s     r%   rQ  z2PyPIConfig.creds_by_repository.<locals>.<listcomp>  sI     &
 &
 &
xx..4466&
&
 &
 &
r2   )sectionsr  r}   _get_repo_cred)r   sections_with_repositoriess   ` r%   creds_by_repositoryzPyPIConfig.creds_by_repository  sR    &
 &
 &
 &
==??&
 &
 &
" C+-GHHIIIr2   c                    |                      |d                                          }|t          |                      |d                                          |                      |d                                                    fS )Nr  r  r  )r   r   r  )r   r  repos      r%   r  zPyPIConfig._get_repo_cred  st    xx..4466ZHHWj))//11HHWj))//11
 
 
 	
r2   c                 v    | j                                         D ]\  }}|                    |          r|c S dS )z
        If the URL indicated appears to be a repository defined in this
        config, return the credential for that repository.
        N)r  itemsr-   )r   r>   r  creds       r%   find_credentialzPyPIConfig.find_credential&  sS    
 !% 8 > > @ @ 	 	J~~j)) 	 	r2   )	r   r   r   r   propertyr  r  r  r  r  s   @r%   r  r  	  st        	 	 	 	 	 J J XJ
 
 
      r2   r  c                    t           j                            |           }|\  }}}}}}|                    d          rt          j                            d          |dv rt          |          \  }	}
nd}	|	sMt                      	                    |           }|r*t          |          }	|j        | f}t          j        dg|R   |	rodt          |	          z   }	||
||||f}t           j                            |          }t           j                            |          }|                    d|	           nt           j                            |           }|                    dt&                      ||          }|	rct           j                            |j                  \  }}}}}}||k    r2||
k    r,||||||f}t           j                            |          |_        |S )	z4Open a urllib2 request, handling HTTP authenticationr  znonnumeric port: '')rp  httpsNz*Authenticating as %s for %s (from .pypirc)zBasic Authorizationz
User-Agent)r:   r!   r;   r,   rp  rq  rr  r  r  r  r~   r  r   r   r  r  r   Request
add_header
user_agentr>   )r>   r   parsedr@   r  rB   paramsrD   r  r  addressr  r   r?   r  r   rc  s2h2path2param2query2frag2s                          r%   ro  ro  0  s    \""3''F06-FFD&% s <k$$%:;;;""""6**gg J||++C00 	Jt99D=#%DHAIDIIII .,t,,,vud:,))%00.((11?D1111.((--|Z000	B 4 06|/D/DRV/L/L,Bvvu<<B'MMvvu<E\,,U33BFIr2   c                 D    |                      d          \  }}} |r|nd| fS )zNsplituser('user[:passwd]@host[:port]')
    --> 'user[:passwd]', 'host[:port]'.r  N)
rpartition)r  r  delims      r%   r  r  _  s0     ,,D%#DDtd**r2   c                     | S rp   r   )r>   s    r%   
fix_sf_urlr  j  s    Jr2   c                    t           j                            |           \  }}}}}}t           j                            |          }t
          j                            |          rt           j                            |           S |	                    d          rt
          j        
                    |          rg }t          j        |          D ]}	t
          j                            ||	          }
|	dk    r>t          |
d          5 }|                                }ddd           n# 1 swxY w Y    nzt
          j        
                    |
          r|	dz  }	|                    d                    |	                     d}|                    | d                    |          	          }d
\  }}nd\  }}}ddi}t#          j        |          }t           j                            | ||||          S )z7Read a local path, with special support for directoriesr4   z
index.htmlrNz<a href="{name}">{name}</a>)r.   zB<html><head><title>{url}</title></head><body>{files}</body></html>r  )r>   files)   OK)r   zPath not foundz	Not foundr   z	text/html)r:   r!   r;   r   r  r_   rB   isfiler   r,   r   r   rm   r  r   r3  formatioStringIOr   r   )r>   r@   rA   rB   paramrD   r  r`   r  r   filepathrc  bodyr   statusmessager   body_streams                     r%   rn  rn  n  s   /5|/D/DS/I/I,FFD%~**400H	w~~h C~%%c***	s		 Ch 7 7 CH%% 	@ 	@Aw||Ha00HL  (C(( %B7799D% % % % % % % % % % % % % % %x(( SLL6==1=EEFFFF X  ;;3dii.>.>;??D# B{+G+d##K<!!#vwMMMs   D((D,	/D,	rp   )r   )Zr   sysr_   rd   r  rU  rx  r  r   r   r  configparserr   http.clientrp  urllib.parser:   urllib.requesturllib.error	functoolsr   r   pkg_resourcesr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   	distutilsr   distutils.errorsr   fnmatchr   setuptools.wheelr    setuptools.extern.more_itertoolsr   r   rJ   Ir   r  rK   r   r=   rW   __all___SOCKET_TIMEOUT_tmplr  version_infor  r&   r   rF   r   rI   ra   r   ru   ry   r   r   r   r   r  r  r  r   r  r  r  RawConfigParserr  r   r   ro  r  r  rn  r   r2   r%   <module>r"     s   * * 



 				 				 				                                                                               + + + + + +       " " " " " " < < < < < < rz677rz3RT::2:J  RZ,bd339
.4466
   F\\W^S-.:   

    0            F    .2kTX   D
 
 
 bjKRTRR
 L L L$       2    .   BP
 P
 P
 P
 P
; P
 P
 P
j RZ<==A
  
	+ 	+ 	+   % % %*8 8 8 8 8 8 8 8"$ $ $ $ $- $ $ $N  &~5 + + + +^+ + + 100@@  N N N N Nr2   