
    ϶vgə                       d Z ddlm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mZ ddlm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/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5  ej6        d          Z7 ej6        dej8                  Z9 ej6        d          Z: ej6        dej8                  j;        Z<d=                                Z>g dZ?dZ@dejA         dejB        jC         dejB        jD         ZEd ZFd ZGd ZHd5dZId5dZJd5dZKde#dfdZLd ZM ej6        d ej8                  ZN	 eMd!             ZO G d" d#          ZP G d$ d%eP          ZQ G d& d'e%          ZR ej6        d(          jS        ZTd) ZUd* ZVd6d+ZWd, ZX G d- d.e          ZY G d/ d0ejZ                  Z[ej\        j]        fd1Z^d2 Z_  eWe@          e^          Z^d3 Z`d4 ZadS )7z$PyPI and direct package downloading.    )annotationsN)	translatewraps)
NamedTupleunique_everseen)BINARY_DISTCHECKOUT_DISTDEVELOP_DISTEGG_DISTSOURCE_DISTDistributionEnvironmentRequirementfind_distributionsnormalize_pathparse_version	safe_namesafe_versionto_filename)Wheel   )_cfg_read_utf8_with_fallback_read_utf8_with_fallback)log)DistutilsErrorz^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/z Python-urllib/.c                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     U/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/setuptools/package_index.pyparse_requirement_argr*   H   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    Q   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#r   )urllibr%   urlparseunquotesplit)	urlparts_schemeserverpath_parameters_queryfragmentr3   s	            r)   egg_info_for_urlrI   i   s    L!!#&&E;@8GVT;<

3 344D"""tz'9'9|##DJJsOOB$788
d{{C++h>r6   c              #    K   t          |           \  }}t          | ||          E d{V  |rOt                              |          }|r5t	          | |                    d          |t                    E d{V  dS dS dS )zEYield egg or source distribution objects that might be found at a URLNr   )
precedence)rI   distros_for_locationEGG_FRAGMENTmatchr!   groupr   )rA   metadatar3   rH   rN   s        r)   r   r   t   s      %c**ND(#Cx888888888 ""8,, 	,U[[^^X-            	 	r6   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.whlr   )locationproject_nameversionrK   r,   )r0   r   from_locationr   is_compatiblerU   rV   r   r    r!   r
   
EXTENSIONSlen)rT   basenamerP   wheelwin_baser4   platformexts           r)   rL   rL      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 Ir6   c                x    t          t          |           t          j                            |           |          S )zEYield possible egg or source distribution objects based on a filename)rL   r   osrE   r[   )filenamerP   s     r)   distros_for_filenamerc      s3    x  "'"2"28"<"<h  r6   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!
    rS   c              3  @   K   | ]}t          j        d |          V  dS )z	py\d\.\d$N)rerN   ).0ps     r)   	<genexpr>z(interpret_distro_name.<locals>.<genexpr>   s.      KKAbh|Q77KKKKKKr6      Nr   )
py_versionrK   r^   )r@   anyrangerZ   isdigitr   join)rT   r[   rP   rk   rK   r^   rB   rh   s           r)   r!   r!      s
      NN3E #KKqrrKKKKK  3u::  8BQB<!! 	E	 JJ
rrqrr       r6   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5r6   r   )ru   rv   s   ` r)   unique_valuesrw      s5     4[[6 6 6 6 [6 Nr6   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,homepager:   r   )z<th>Home Pagez<th>Download URLr9   N)RELfinditergroupssetmapstrstripr/   r@   HREFr=   r%   urljoin
htmldecoderO   findsearch)rA   pagerN   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r6   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	     	r6   c                    dS )zC
        Check the hash. Return False if validation fails.
        Tr   r   s    r)   is_validzContentChecker.is_valid   s	     tr6   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	    
 	r6   N)__name__
__module____qualname____doc__r   r   r   r   r6   r)   r   r      sK                 r6   r   c                  ^    e Zd Z ej        d          Zd
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]+)returnNonec                T    || _         t          j        |          | _        || _        d S rr   )	hash_namehashlibnewhashexpected)r   r   r   s      r)   __init__zHashChecker.__init__  s%    "K	**	 r6   c                    t           j                            |          d         }|st                      S | j                            |          }|st                      S  | di |                                S )z5Construct a (possibly null) ContentChecker from a URLr9   r   )r=   r%   r>   r   patternr   	groupdict)clsrA   rH   rN   s       r)   from_urlzHashChecker.from_url  s{     <((--b1 	$!###""8,, 	$!###s''U__&&'''r6   c                :    | j                             |           d S rr   )r   updater   s     r)   r   zHashChecker.feed!  s    	r6   c                F    | j                                         | j        k    S rr   )r   	hexdigestr   r   s    r)   r   zHashChecker.is_valid$  s    y""$$55r6   c                ,    || j         z  } ||          S rr   )r   )r   r   r   msgs       r)   r   zHashChecker.report'  s    'x}}r6   Nr   r   )r   r   r   rf   compiler   r   classmethodr   r   r   r   r   r6   r)   r   r     s        bj	# G
! ! ! !
 ( ( [(     6 6 6    r6   r   c                  d    e Zd ZdZ	 	 	 	 d9d: fdZ fdZd;d<dZd;d=dZd;d>dZd?dZ	d?dZ
d Zd Zd?dZd@d?dZd?dZd@ fd	Zd?dZd?dZd Zd?d Zd! Z	 	 	 	 dAdBd&Z	 dCdDd(Zd) Zd*Zd+ Zd?d,Zd@d-Zd. Zed/             Zd0 Z d1 Z!d?d2Z"d3 Z#d4 Z$ed5             Z%d?d6Z&d?d7Z'd?d8Z( xZ)S )Er   z;A distribution index that scans web pages for download URLshttps://pypi.org/simple/*NT	index_urlr   
verify_sslboolr   r   c                r    t                      j        |i | |dd |                    d                    z   | _        i | _        i | _        i | _        t          j        d	                    t          t          |                              j        | _        g | _        t          j        j        | _        d S )Nr8   |)superr   r0   r   scanned_urlsfetched_urlspackage_pagesrf   r   ro   r   r   rN   allowsto_scanr=   requesturlopenopener)r   r   hosts	ca_bundler   rs   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,r6   c                    	 t          |j                   n# t          $ r Y d S w xY wt                                          |          S rr   )r   rV   	Exceptionr   add)r   distr   s     r)   r   zPackageIndex.addA  sS    	$,'''' 	 	 	44	ww{{4   s    
&&Fretrievec           	        || 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ignorer   code  )&r   
URL_SCHEMEprocess_filenamelistr   url_okdebugr   r   r   infoopen_url
isinstancer=   error	HTTPErrorr   r   rA   headersgetr/   closereadr   	get_paramdecoder   r|   r%   r   r   rO   process_urlr1   r   getattrprocess_index)r   rA   r   diststmplfr3   r   r   rN   links              r)   r   zPackageIndex.process_urlJ  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.Mr6   nestedc                    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)ra   rE   existswarnisdirrealpathlistdirr   ro   rc   r   r   r   r   )r   fnr   rE   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%%&&&&&	' 	'r6   fatalc                N   t          |          }|o*|                    d                                          dk    }|s8|                     t          j                            |          d                   rdS d}|rt          ||z            |                     ||           dS )Nr   fileTz
Note: Bypassing %s (disallowed host; see https://setuptools.pypa.io/en/latest/deprecated/easy_install.html#restricting-downloads-with-allow-hosts for details).
F)	r   rO   r/   r   r=   r%   r>   r   r   )r   rA   r   sis_filer   s         r)   r   zPackageIndex.url_ok  s    sOO4

((**f4 	dkk&,"7"7"<"<Q"?@@ 	4W 	
  	 s+++IIc35r6   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)ra   r   r0   )rg   rE   entrys      r)   ri   z.PackageIndex.scan_egg_links.<locals>.<genexpr>  sm       
 
D))
 
 ~~k**	
5M
 
 
 
 
 
 
r6   )filterra   rE   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==>>>>>r6   c           
        t          t          j                            ||                    }t	          t          d t          t          j        |	                                                              }t          |          dk    rd S |\  }}t          t          j                            ||                    D ]?}t          j        j        |g|R  |_        t          |_        |                     |           @d S )Nrj   )r   ra   rE   ro   r   r  r   r   r   
splitlinesrZ   r   rT   r   rK   r   )r   rE   r  contentlinesegg_path_setup_pathr   s           r)   r  zPackageIndex.scan_egg_link  s    *27<<e+D+DEEVD#ci1C1C1E1E"F"FGGHHu::??F %+&rw||D('C'CDD 	 	DGL6666DM)DOHHTNNNN	 	r6   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NNr8   rj   r<   r   r   T)r1   r   r   r   r=   r%   r?   rZ   r@   r   r   r   
setdefaultr/   r   )r   r   NO_MATCH_SENTINELrB   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1r6   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 pager   r   .pyz#egg=rS   c                6    d|                      ddd          z  S )Nz<a href="%s#md5=%s">%s</a>r      rj   )rO   )ms    r)   <lambda>z,PackageIndex.process_index.<locals>.<lambda>  s    2QWWQ15E5EE r6   )r   r|   r  r=   r%   r   r   rO   r&   r   rI   r0   need_version_infoscan_urlPYPI_MD5sub)	r   rA   r   rN   r  r  new_urlr3   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   rA   s     r)   r  zPackageIndex.need_version_info  s*     	
 	
 	
 	
 	
r6   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   rs   s      r)   r&  zPackageIndex.scan_all  sa    >!222 &	#%%%%%IINOOOdn%%%%%r6   c                   |                      | j        |j        z   dz              | j                            |j                  s%|                      | j        |j        z   dz              | j                            |j                  s|                     |           t          | j                            |j        d                    D ]}|                      |           d S )Nr8   r   )	r   r   unsafe_namer   r   keyrU   not_found_in_indexr   )r   requirementrA   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#	 	r6   c                    |                                   |                     |           | |j                 D ]!}||v r|c S |                     d||           "t	                                          ||          S )Nz%s does not match %s)prescanr/  r,  r   r   obtain)r   r.  	installerr   r   s       r)   r2  zPackageIndex.obtain  s    ;''') 	B 	BD{""JJ-{DAAAAww~~k9555r6   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   ra   unlinkr   r   r2   rE   r[   )r   checkerrb   tfps       r)   
check_hashzPackageIndex.check_hash  s     	tz#Ch#NOOO!! 	IIKKKIh  <$$$bg&6&6x&@&@&@&@B  	 	r6   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   r1   r   r   r   append)r   urlsrA   s      r)   add_find_linkszPackageIndex.add_find_links  s     	) 	)C$!# %>>'** % ,,-- % c"""" ##C((((	) 	)r6   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)   r1  zPackageIndex.prescan)  s3    < 	3T]DL11222r6   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/  sR      	Y	#H#DD	#X#DS+)***r6   c                   t          |t                    st          |          }|rV|                     ||          }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.
        r  rT   N)r   r   r   _download_urlrI   r0   	gen_setupra   rE   r   r*   r   fetch_distribution)r   r'   tmpdirschemefoundr3   rH   s          r)   r:   zPackageIndex.download7  s    $ $,, 	3%%F 3**488!1$!7!7h=='' D NN5(FCCE%% 3,T22t..tV<<j$OOOr6   
force_scansource
develop_okDistribution | Nonec                2   	                       d|           t                      	d}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 %sNenvEnvironment | Nonec                z   |}|| j                  D ]}|j        t          k    r2s0|vr+                    d|                               |           D|| v o|j        t
          k    p }|rJ                    |j        	          }||_        t          j
                            |j                  r|c S d S )Nz&Skipping development or system egg: %s)r,  rK   r   r   r   r   r:   rT   download_locationra   rE   r   )
reqrM  r   testlocrJ  r   skippedrI  rE  s
        r)   r   z-PackageIndex.fetch_distribution.<locals>.findw  s    { CG $ $?l22:27**		D     D)))s{U;(F(Tf* $--v>>C-0D*w~~d&<== $#4r6   z:No local packages or working download links found for %s%sza source distribution of r   zBest match: %s)rT   rr   )rM  rN  )r   r~   r1  r/  r   r   clonerP  )
r   r.  rE  rH  rI  rJ  local_indexr   r   rT  s
   ` ` ``   @r)   rD  zPackageIndex.fetch_distributionY  sr   4 			$k222%%	 	 	 	 	 	 	 	 	 	 	0  	%LLNNN{+++4$$D 	2/4[11D<|'4$$D<
<{+++4$$D<IIL77=2  
 4II&---::t'=:>>>r6   
str | Nonec                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)rD  rT   )r   r.  rE  rH  rI  r   s         r)   fetchzPackageIndex.fetch  s0     &&{FJOO= tr6   c                   t                               |          }|r.d t          ||                    d          d           D             pg }t	          |          dk    rZt
          j                            |          }t
          j                            |          |k    rvt
          j        	                    ||          }t
          j        
                    |          r t
          j                            ||          st          j        ||           |}t          t
          j        	                    |d          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   )rV   )rg   ds     r)   
<listcomp>z*PackageIndex.gen_setup.<locals>.<listcomp>  s0       9  r6   r   zsetup.pywzutf-8)encodingz(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.)rM   rN   r!   rO   rZ   ra   rE   r[   dirnamero   r   samefileshutilcopy2openwriterU   rV   splitextr   )	r   rb   rH   rE  rN   r   r[   dstr   s	            r)   rC  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gNNN 	RV


 a---a(((((221555  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 O 
	 . &.XXuu6   !G  s   	AF..F25F2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   r9   zcontent-lengthzContent-LengthwbTr   )r   r   r   r   r   r=   r   r   r   r   r   dl_blocksizeget_allmaxr   int
reporthookrd  r   r   re  r8  r   )r   rA   rb   fpr6  r   blocknumbssizesizesr7  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 rr   r   )r   rA   rb   rr  blksizert  s         r)   rp  zPackageIndex.reporthook  s    r6   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(          f$ r:}|r| 
                    ||           nt          d|d|          |Y d }~d S d }~ww xY w)Nr:  rj  c                ,    g | ]}t          |          S r   )r   )rg   args     r)   r]  z)PackageIndex.open_url.<locals>.<listcomp>  s    777CHH777r6   zDownload error for ri  z7 returned a bad status line. The server might be down, )r1   
local_openopen_with_authr   r&   httpclient
InvalidURLro   rs   r   r   r=   r   r   URLErrorreasonBadStatusLinelineHTTPExceptionOSError)r   rA   warningvr   s        r)   r   zPackageIndex.open_url  sm   >>'"" 	#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/   +***** )73 	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                j   t          |          \  }}|r3d|v r.|                    dd                              dd          }d|v .nd}|                    d          r
|d d         }t          j                            ||          }|                     ||          p|                     ||          S )Nz..r#   \___downloaded__rR   r.   )rI   replacer0   ra   rE   ro   _download_vcs_download_other)r   rA   rE  r2   	_fragmentrb   s         r)   rB  zPackageIndex._download_url4  s     +3//i 	$$,,||D#..66tSAA $,, $D==$$ 	9D7<<--!!#x00WD4H4Hh4W4WWr6   c                   t           j                            |           j        }|                    d          \  }}}t          ddgdgt          |          z  z             }t          t          |h|z            d          S )a  
        >>> rvcs = PackageIndex._resolve_vcs
        >>> rvcs('git+http://foo/bar')
        'git'
        >>> rvcs('hg+https://foo/bar')
        'hg'
        >>> rvcs('git:myhost')
        'git'
        >>> rvcs('hg:myhost')
        >>> rvcs('http://foo/bar')
        +svngithgN)	r=   r%   urlsplitrF  	partitionr~   r   nextiter)rA   rF  presep_postalloweds         r)   _resolve_vcszPackageIndex._resolve_vcsE  sv     &&s++2 **3//S%uenvS		'99::D#))4000r6   c                   |                      |          }|sd S |dk    rt          d|           |                    d          \  }}}|                     |          \  }}|                     d| d| d|            t          j        |dd||g           t          |d	|d
d|g|d|dd	d|dg          }|2|                     d|            t          j        ||                    |S )Nr  z/Invalid config, SVN download is not supported: r<   zDoing z clone from z to rU  z--quietz-Ccheckoutz--cwdupz-rz-q)r  r  zChecking out )r  r   r  _vcs_split_rev_from_urlr   
subprocess
check_calldict)r   rA   spec_filenamevcsrb   r  revco_commandss           r)   r  zPackageIndex._download_vcsX  s6   $$ 	4%<< G#GG   '0055!Q//44S		?3??C??X??@@@sGYXFGGGdHj)SAWhdD#tD
 
 
 ?II+c++,,,!+c"2333r6   c                0   t           j                            |          j        }|dk    rAt           j                            t           j                            |          j                  S |                     |d           | 	                    ||          S )Nr   T)
r=   r%   r  rF  r   url2pathnamer>   rE   r   _attempt_download)r   rA   rb   rF  s       r)   r  zPackageIndex._download_otherq  sx    &&s++2V>..v|/D/DS/I/I/NOOOC%%c8444r6   c                2    |                      |d           d S )NT)r   r'  s     r)   r   zPackageIndex.scan_urly  s    d#####r6   c                    |                      ||          }d|                    dd                                          v r|                     |||          S |S )Nr   r   r   )rv  r   r/   _invalid_download_html)r   rA   rb   r   s       r)   r  zPackageIndex._attempt_download|  sY    ##C22W[[44::<<<<..sGXFFFOr6   c                N    t          j        |           t          d|           )NzUnexpected HTML page found at )ra   r5  r   )r   rA   r   rb   s       r)   r  z#PackageIndex._invalid_download_html  s)    
	(CcCCDDDr6   c                f   t           j                            |           }|j                            dd          d         }|j                            d          \  }}}|                    d          \  }}}|r||fn|df\  }}	|                    ||d          	                                }
|
|	fS )	a  
        Given a possible VCS URL, return a clean URL and resolved revision if any.

        >>> vsrfu = PackageIndex._vcs_split_rev_from_url
        >>> vsrfu('git+https://github.com/pypa/setuptools@v69.0.0#egg-info=setuptools')
        ('https://github.com/pypa/setuptools', 'v69.0.0')
        >>> vsrfu('git+https://github.com/pypa/setuptools#egg-info=setuptools')
        ('https://github.com/pypa/setuptools', None)
        >>> vsrfu('http://foo/bar')
        ('http://foo/bar', None)
        r  r   r9   r<   @Nr   )rF  rE   rH   )
r=   r%   r  rF  r@   rE   r  
rpartition_replacegeturl)rA   rB   clean_schemeno_fragment_pathr  r  r  post
clean_pathr  resolveds              r)   r  z$PackageIndex._vcs_split_rev_from_url  s     %%c**|))#q11"5 "'!5!5c!:!:!Q)44S99S$),>3++4,
C>>	 " 
 

 &(( 	 }r6   c                *    t          j        |g|R   d S rr   )r   r   r)  s      r)   r   zPackageIndex.debug  s     	#r6   c                *    t          j        |g|R   d S rr   )r   r   r)  s      r)   r   zPackageIndex.info       tr6   c                *    t          j        |g|R   d S rr   )r   r   r)  s      r)   r   zPackageIndex.warn  r  r6   )r   r   NT)r   r   r   r   r   r   )F)r   r   r   r   )r   r   r   r   )r   r   r   r   r   rr   )FFFN)rH  r   rI  r   rJ  r   r   rK  )FF)rH  r   rI  r   r   rW  )*r   r   r   r   r   r   r   r   r   r  r  r  r   r  r&  r/  r2  r8  r=  r1  r-  r:   rD  rY  rC  rl  rv  rp  r   rB  staticmethodr  r  r  r   r  r  r  r   r   r   __classcell__r   s   @r)   r   r   ,  s6       EE 4- - - - - - -$! ! ! ! !31 31 31 31 31j' ' ' ' '      ? ? ? ?    2 2 2 
 
 
:
 
 
 
& & & & &   6 6 6 6 6 6   ) ) ) )      P  P  PL ! P? P? P? P? P?f MR    , , ,\ L" " "H    T  T  T  TDX X X" 1 1 \1$  25 5 5$ $ $ $  E E E   \>             r6   r   z!&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?c                T    |                      d          }t          j        |          S )Nr   )rO   r   unescape)rN   whats     r)   decode_entityr    s!    ;;q>>D=r6   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***r6   c                      fd}|S )Nc                      fd}|S )Nc                     t          j                    }t          j                   	  | i |t          j        |           S # t          j        |           w xY wrr   )socketgetdefaulttimeoutsetdefaulttimeout)rs   rt   old_timeoutru   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   )ru   r  r  s   ` r)   r  z'socket_timeout.<locals>._socket_timeout  s*    	6 	6 	6 	6 	6 	6 r6   r   )r  r  s   ` r)   socket_timeoutr    s$    	 	 	 	 	 r6   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  )authauth_s
auth_bytesencoded_bytesencodeds        r)   _encode_authr    s[     \!!$''FJ$Z00M""$$G??4$$$r6   c                  0    e Zd ZU dZded<   ded<   ddZdS )	
Credentialz
    A username/password pair.

    Displayed separated by `:`.
    >>> str(Credential('username', 'password'))
    'username:password'
    r   usernamepasswordr   c                $    | j          d| j         S )N:)r  r  r   s    r)   __str__zCredential.__str__  s    -11$-111r6   N)r   r   )r   r   r   r   __annotations__r  r   r6   r)   r  r    sH           MMMMMM2 2 2 2 2 2r6   r  c                  @     e Zd Z fdZed             Zd Zd Z xZS )
PyPIConfigc                `   t                               g dd          }t                                          |           t          j                            t          j                            d          d          }t          j                            |          rt          | |           dS dS )z%
        Load from ~/.pypirc
        )r  r  
repositoryr   ~z.pypircN)
r  fromkeysr   r   ra   rE   ro   
expanduserr   r   )r   defaultsrcr   s      r)   r   zPyPIConfig.__init__  s     ==!G!G!GLL"""W\\"',,S119==7>>" 	3(r22222	3 	3r6   c                      fd                                  D             }t          t           j        |                    S )Nc                d    g | ],}                     |d                                           *|-S )r  )r   r   )rg   sectionr   s     r)   r]  z2PyPIConfig.creds_by_repository.<locals>.<listcomp>	  sI     &
 &
 &
xx..4466&
&
 &
 &
r6   )sectionsr  r   _get_repo_cred)r   sections_with_repositoriess   ` r)   creds_by_repositoryzPyPIConfig.creds_by_repository  sR    &
 &
 &
 &
==??&
 &
 &
" C+-GHHIIIr6   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
 
 
 	
r6   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  itemsr1   )r   rA   r  creds       r)   find_credentialzPyPIConfig.find_credential  sN    
 !% 8 > > @ @ 	 	J~~j)) tr6   )	r   r   r   r   propertyr  r  r  r  r  s   @r)   r  r    st        	3 	3 	3 	3 	3 J J XJ
 
 
      r6   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: '')r~  httpsr  z*Authenticating as %s for %s (from .pypirc)zBasic Authorizationz
User-Agent)r=   r%   r>   r0   r~  r  r  
_splituserr  r  r   r  r   r   r  
urlunparser   Request
add_header
user_agentrA   )rA   r   parsedrF  netlocrE   paramsqueryr$  r  addressr  r   rB   r#  r   rq  s2h2path2param2query2frag2s                          r)   r}  r}  #  s    \""3''F06-FFD&% s <k$$%:;;;""""6**gg$g 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Ir6   c                D    |                      d          \  }}} |r|nd| fS )zNsplituser('user[:passwd]@host[:port]')
    --> 'user[:passwd]', 'host[:port]'.r  N)r  )hostuserdelims      r)   r   r   S  s0     ,,D%#DDtd**r6   c                    | S rr   r   )rA   s    r)   
fix_sf_urlr  ^  s    Jr6   c                   t           j                            |           \  }}}}}}t           j                            |          }t
          j                            |          rt           j                            |           S |	                    d          rt
          j        
                    |          rg }t          j        |          D ]}	t
          j                            ||	          }
|	dk    rt          |
          } 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 directoriesr8   z
index.htmlz<a href="{name}">{name}</a>)r2   zB<html><head><title>{url}</title></head><body>{files}</body></html>r  )rA   files)   OK)r   zPath not foundz	Not foundr   z	text/html)r=   r%   r>   r   r  ra   rE   isfiler   r0   r   r   ro   r   r;  formatioStringIOr   r   )rA   rC   _serverrE   _paramrG   _fragrb   r  r   filepathbodyr   statusmessager   body_streams                    r)   r|  r|  b  s   4:L4I4I#4N4N1GWdFFE~**400H	w~~h C~%%c***	s		 Ch 7 7 CH%% 
	@ 
	@Aw||Ha00HL  /99x(( SLL6==1=EEFFFFWD;;3dii.>.>;??D# B{+G+d##K<!!#vwMMMr6   rr   )r"   )br   
__future__r   r  configparserr   r   http.clientr~  r  r  ra   rf   rb  r  r  sysurllib.errorr=   urllib.parseurllib.requestfnmatchr   	functoolsr   typingr   more_itertoolsr	   
setuptoolspkg_resourcesr
   r   r   r   r   r   r   r   r   r   r   r   r   r   setuptools.wheelr   unicode_utilsr   r   	distutilsr   distutils.errorsr   r   rM   Ir   r!  rN   r   r@   rY   __all___SOCKET_TIMEOUT__version__version_infomajorminorr  r*   r    rI   r   rL   rc   r!   rw   r{   r   r   r   r   r"  r  r  r   r  r  r  RawConfigParserr  r   r   r}  r   r  r|  r   r6   r)   <module>r?     s7   * * " " " " " "            				     				 				       



                               * * * * * *                                     # " " " " " Q Q Q Q Q Q Q Q       + + + + + +rz677rz3RT::2:J  RZ,bd339
.4466
   s:1ss#BRBXss[^[k[qss
    0  	 	 	 	       F    .2kTX   D
 
 
 bjKRTRR
 L L L$       2    .   BB
 B
 B
 B
 B
; B
 B
 B
N RZ<==A
  
	+ 	+ 	+   % % %*2 2 2 2 2 2 2 2 % % % % %- % % %P  &~5 + + + +`+ + + 100@@  N N N N Nr6   