U
    BSha                     @   s  d 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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mZ ddl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 Z+G dd dZ,G dd de,eZ-G dd deZG dd deZ.dd Z/dd Z0dd Z1d d! Z2d"d# Z3d$d% Z4d&d' Z5d(d) Z6d3d+d,Z7d-d. Z8d/d0 Z9G d1d2 d2e*Z:dS )4zUsetuptools.command.egg_info

Create a distribution's .egg-info directory and contents    )FileList)DistutilsInternalError)convert_path)logN)Command)sdist)walk_revctrl)edit_config)	bdist_egg)parse_requirements	safe_nameparse_versionsafe_versionyield_lines
EntryPointiter_entry_pointsto_filename)glob)	packaging)SetuptoolsDeprecationWarningc                 C   s  d}|  tjj}ttj}d|f }t|D ]\}}|t|d k}|dkrr|r`|d7 }q0|d||f 7 }q0d}t|}	||	k r|| }
|
dkr||d 7 }n |
d	kr||7 }n|
d
kr|d }||	k r|| dkr|d }||	k r|| dkr|d }||	k r,|| dkr,|d }q||	krF|t|
7 }nR||d | }d}|d dkrxd}|dd }|t|7 }|d|f 7 }|}n|t|
7 }|d7 }q~|s0||7 }q0|d7 }tj|tj	tj
B dS )z
    Translate a file path glob like '*.txt' in to a regular expression.
    This differs from fnmatch.translate which allows wildcards to match
    directory separators. It also knows about '**/' which matches any number of
    directories.
     z[^%s]   **z.*z
(?:%s+%s)*r   *?[!]^Nz[%s]z\Z)flags)splitospathsepreescape	enumeratelencompile	MULTILINEDOTALL)r   patchunksr#   Z
valid_charcchunk
last_chunkiZ	chunk_lencharZinner_iinner
char_class r4   N/root/rtd-docs/venv/lib/python3.8/site-packages/setuptools/command/egg_info.pytranslate_pattern#   sV    







r6   c                   @   s@   e Zd ZdZdZedd Zdd Zdd Zdd	 Z	ee	Z
dS )

InfoCommonNc                 C   s   t | j S N)r   distributionget_nameselfr4   r4   r5   namez   s    zInfoCommon.namec                 C   s   t | | j S r8   )r   
_maybe_tagr9   get_versionr;   r4   r4   r5   tagged_version~   s    zInfoCommon.tagged_versionc                 C   s    | j r|| j r|S || j  S )z
        egg_info may be called more than once for a distribution,
        in which case the version string already contains all tags.
        )vtagsendswithr<   versionr4   r4   r5   r>      s    zInfoCommon._maybe_tagc                 C   s,   d}| j r|| j 7 }| jr(|td7 }|S )Nr   z-%Y%m%d)	tag_buildtag_datetimestrftimerC   r4   r4   r5   tags   s    
zInfoCommon.tags)__name__
__module____qualname__rE   rF   propertyr=   r@   r>   rI   rA   r4   r4   r4   r5   r7   v   s   

r7   c                   @   s   e Zd ZdZddddgZdgZddiZdd	 Zed
d Z	e	j
dd Z	dd Zdd ZdddZdd Zdd Zdd Zdd Zdd ZdS ) egg_infoz+create a distribution's .egg-info directory)z	egg-base=ezLdirectory containing .egg-info directories (default: top of the source tree))tag-datedz0Add date stamp (e.g. 20050528) to version number)z
tag-build=bz-Specify explicit tag to add to version number)no-dateDz"Don't include date stamp [default]rP   rS   c                 C   s"   d | _ d | _d | _d | _d| _d S )NF)egg_baseegg_namerN   egg_versionbroken_egg_infor;   r4   r4   r5   initialize_options   s
    zegg_info.initialize_optionsc                 C   s   d S r8   r4   r;   r4   r4   r5   tag_svn_revision   s    zegg_info.tag_svn_revisionc                 C   s   d S r8   r4   )r<   valuer4   r4   r5   rZ      s    c                 C   s0   t  }|  |d< d|d< t|t|d dS )z
        Materialize the value of date into the
        build tag. Install build keys in a deterministic order
        to avoid arbitrary reordering on subsequent builds.
        rE   r   rF   )rN   N)collectionsOrderedDictrI   r	   dict)r<   filenamerN   r4   r4   r5   save_version_info   s    zegg_info.save_version_infoc              
   C   sT  | j | _|  | _t| j}z6t|tjj}|r4dnd}t	t
|| j| jf  W n< tk
r } ztjd| j| jf |W 5 d }~X Y nX | jd kr| jj}|pi dtj| _| d t| jd | _| jtjkrtj| j| j| _d| jkr|   | j| jj_| jj}|d k	rP|j| j krP| j|_t| j|_ d | j_d S )Nz%s==%sz%s===%sz2Invalid distribution name or version syntax: %s-%sr   rU   	.egg-info-)!r=   rV   r@   rW   r   
isinstancer   rD   Versionlistr   
ValueError	distutilserrorsDistutilsOptionErrorrU   r9   package_dirgetr!   curdirensure_dirnamer   rN   r"   joincheck_broken_egg_infometadataZ_patched_distkeylower_version_parsed_version)r<   parsed_versionZ
is_versionspecrO   dirspdr4   r4   r5   finalize_options   sB    





zegg_info.finalize_optionsFc                 C   sL   |r|  ||| n4tj|rH|dkr>|s>td|| dS | | dS )a  Write `data` to `filename` or delete if empty

        If `data` is non-empty, this routine is the same as ``write_file()``.
        If `data` is empty but not ``None``, this is the same as calling
        ``delete_file(filename)`.  If `data` is ``None``, then this is a no-op
        unless `filename` exists, in which case a warning is issued about the
        orphaned file (if `force` is false), or deleted (if `force` is true).
        Nz$%s not set in setup(), but %s exists)
write_filer!   r"   existsr   warndelete_file)r<   whatr_   dataforcer4   r4   r5   write_or_delete_file   s    	  zegg_info.write_or_delete_filec                 C   s>   t d|| |d}| js:t|d}|| |  dS )zWrite `data` to `filename` (if not a dry run) after announcing it

        `what` is used in a log message to identify what is being written
        to the file.
        zwriting %s to %sutf-8wbN)r   infoencodedry_runopenwriteclose)r<   r~   r_   r   fr4   r4   r5   rz   
  s    


zegg_info.write_filec                 C   s    t d| | jst| dS )z8Delete `filename` (if not a dry run) after announcing itzdeleting %sN)r   r   r   r!   unlink)r<   r_   r4   r4   r5   r}     s    zegg_info.delete_filec                 C   s   |  | j t| jd  | jj}tdD ]4}|j|d | }|| |j	tj
| j|j	 q*tj
| jd}tj
|r| | |   d S )Nzegg_info.writers)	installerznative_libs.txt)mkpathrN   r!   utimer9   Zfetch_build_eggr   requireresolver=   r"   rn   r{   r}   find_sources)r<   r   epwriternlr4   r4   r5   run  s    
zegg_info.runc                 C   s4   t j| jd}t| j}||_|  |j| _dS )z"Generate SOURCES.txt manifest filezSOURCES.txtN)	r!   r"   rn   rN   manifest_makerr9   manifestr   filelist)r<   Zmanifest_filenamemmr4   r4   r5   r   -  s
    
zegg_info.find_sourcesc                 C   sT   | j d }| jtjkr&tj| j|}tj|rPtd|| j	 | j	| _
|| _	d S )Nra   aB  ------------------------------------------------------------------------------
Note: Your current .egg-info directory has a '-' in its name;
this will not work correctly with "setup.py develop".

Please rename %s to %s to correct this problem.
------------------------------------------------------------------------------)rV   rU   r!   rl   r"   rn   r{   r   r|   rN   rX   )r<   Zbeir4   r4   r5   ro   5  s    
 zegg_info.check_broken_egg_infoN)F)rJ   rK   rL   descriptionuser_optionsboolean_optionsnegative_optrY   rM   rZ   setterr`   ry   r   rz   r}   r   r   ro   r4   r4   r4   r5   rN      s.    


1
rN   c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )r   c              	   C   s
  |  |\}}}}| j| j| j| jt| j|t| j|| j	| j
d}dddddddd	d}z|| }W n$ tk
r   td
j|dY nX |d}	|dkr|g}|	r|fnd}
|| }| d|g|	r|gng  |  |D ]}||stj||f|
  qd S )N)includeexcludezglobal-includezglobal-excludezrecursive-includezrecursive-excludegraftprunez%warning: no files found matching '%s'z9warning: no previously-included files found matching '%s'z>warning: no files found matching '%s' anywhere in distributionzRwarning: no previously-included files matching '%s' found anywhere in distributionz:warning: no files found matching '%s' under directory '%s'zNwarning: no previously-included files matching '%s' found under directory '%s'z+warning: no directories found matching '%s'z6no previously-included directories found matching '%s'z/this cannot happen: invalid action '{action!s}')actionz
recursive->   r   r   r4    )Z_parse_template_liner   r   global_includeglobal_exclude	functoolspartialrecursive_includerecursive_excluder   r   KeyErrorr   format
startswithdebug_printrn   r   r|   )r<   liner   patternsdirZdir_patternZ
action_mapZlog_mapZprocess_actionZaction_is_recursiveZextra_log_argsZlog_tmplpatternr4   r4   r5   process_template_lineH  sd      
	
zFileList.process_template_linec                 C   sR   d}t t| jd ddD ]2}|| j| r| d| j|   | j|= d}q|S )z
        Remove all files from the file list that match the predicate.
        Return True if any matching files were removed
        Fr   z
 removing T)ranger'   filesr   )r<   	predicatefoundr0   r4   r4   r5   _remove_files  s    zFileList._remove_filesc                 C   s$   dd t |D }| | t|S )z#Include files that match 'pattern'.c                 S   s   g | ]}t j|s|qS r4   r!   r"   isdir.0r   r4   r4   r5   
<listcomp>  s      z$FileList.include.<locals>.<listcomp>r   extendboolr<   r   r   r4   r4   r5   r     s    
zFileList.includec                 C   s   t |}| |jS )z#Exclude files that match 'pattern'.)r6   r   matchr<   r   r   r4   r4   r5   r     s    zFileList.excludec                 C   s8   t j|d|}dd t|ddD }| | t|S )zN
        Include all files anywhere in 'dir/' that match the pattern.
        r   c                 S   s   g | ]}t j|s|qS r4   r   r   r4   r4   r5   r     s    z.FileList.recursive_include.<locals>.<listcomp>T)	recursive)r!   r"   rn   r   r   r   )r<   r   r   Zfull_patternr   r4   r4   r5   r     s    
zFileList.recursive_includec                 C   s    t tj|d|}| |jS )zM
        Exclude any file anywhere in 'dir/' that match the pattern.
        r   r6   r!   r"   rn   r   r   )r<   r   r   r   r4   r4   r5   r     s    zFileList.recursive_excludec                 C   s$   dd t |D }| | t|S )zInclude all files from 'dir/'.c                 S   s"   g | ]}t j|D ]}|qqS r4   )rg   r   findall)r   Z	match_diritemr4   r4   r5   r     s    z"FileList.graft.<locals>.<listcomp>r   )r<   r   r   r4   r4   r5   r     s
    
zFileList.graftc                 C   s   t tj|d}| |jS )zFilter out files from 'dir/'.r   r   )r<   r   r   r4   r4   r5   r     s    zFileList.prunec                    sJ   | j dkr|   ttjd|  fdd| j D }| | t|S )z
        Include all files anywhere in the current directory that match the
        pattern. This is very inefficient on large file trees.
        Nr   c                    s   g | ]}  |r|qS r4   r   r   r   r4   r5   r     s     
 z+FileList.global_include.<locals>.<listcomp>)allfilesr   r6   r!   r"   rn   r   r   r   r4   r   r5   r     s    

zFileList.global_includec                 C   s   t tjd|}| |jS )zD
        Exclude all files anywhere that match the pattern.
        r   r   r   r4   r4   r5   r     s    zFileList.global_excludec                 C   s8   | dr|d d }t|}| |r4| j| d S )Nr   )rB   r   
_safe_pathr   append)r<   r   r"   r4   r4   r5   r     s
    

zFileList.appendc                 C   s   | j t| j| d S r8   )r   r   filterr   )r<   pathsr4   r4   r5   r     s    zFileList.extendc                 C   s   t t| j| j| _dS )z
        Replace self.files with only safe paths

        Because some owners of FileList manipulate the underlying
        ``files`` attribute directly, this method must be called to
        repair those paths.
        N)re   r   r   r   r;   r4   r4   r5   _repair  s    zFileList._repairc              	   C   s   d}t |}|d kr(td|  dS t |d}|d krNt||d dS z"tj|shtj|rnW dS W n& tk
r   t||t	
  Y nX d S )Nz!'%s' not %s encodable -- skippingz''%s' in unexpected encoding -- skippingFr   T)unicode_utilsfilesys_decoder   r|   Z
try_encoder!   r"   r{   UnicodeEncodeErrorsysgetfilesystemencoding)r<   r"   Zenc_warnZu_pathZ	utf8_pathr4   r4   r5   r     s    

zFileList._safe_pathN)rJ   rK   rL   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r4   r4   r4   r5   r   E  s   M


r   c                   @   s\   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd Zdd Zdd ZdS )r   zMANIFEST.inc                 C   s   d| _ d| _d| _d| _d S )Nr   )Zuse_defaultsr   Zmanifest_onlyZforce_manifestr;   r4   r4   r5   rY     s    z!manifest_maker.initialize_optionsc                 C   s   d S r8   r4   r;   r4   r4   r5   ry     s    zmanifest_maker.finalize_optionsc                 C   sd   t  | _tj| js|   |   tj| jr<| 	  | 
  | j  | j  |   d S r8   )r   r   r!   r"   r{   r   write_manifestadd_defaultstemplateZread_templateprune_file_listsortZremove_duplicatesr;   r4   r4   r5   r     s    

zmanifest_maker.runc                 C   s   t |}|tjdS )N/)r   r   replacer!   r#   )r<   r"   r4   r4   r5   _manifest_normalize%  s    
z"manifest_maker._manifest_normalizec                    sB    j    fdd j jD }d j } t j|f| dS )zo
        Write the file list in 'self.filelist' to the manifest file
        named by 'self.manifest'.
        c                    s   g | ]}  |qS r4   )r   r   r;   r4   r5   r   1  s     z1manifest_maker.write_manifest.<locals>.<listcomp>zwriting manifest file '%s'N)r   r   r   r   executerz   )r<   r   msgr4   r;   r5   r   )  s    

zmanifest_maker.write_manifestc                 C   s   |  |st| | d S r8   )_should_suppress_warningr   r|   )r<   r   r4   r4   r5   r|   5  s    
zmanifest_maker.warnc                 C   s   t d| S )z;
        suppress missing-file warnings from sdist
        zstandard file .*not found)r$   r   )r   r4   r4   r5   r   9  s    z'manifest_maker._should_suppress_warningc                 C   s   t |  |   | j| j | j| j tt }|rJ| j	| nt
j| jr`|   t
jdrx| jd | d}| j|j d S )Nzsetup.pyrN   )r   r   Zcheck_licenser   r   r   r   re   r   r   r!   r"   r{   Zread_manifestget_finalized_commandr   rN   )r<   ZrcfilesZei_cmdr4   r4   r5   r   @  s    


zmanifest_maker.add_defaultsc                 C   sZ   |  d}| j }| j|j | j| ttj	}| jj
d| d | dd d S )Nbuildz(^|z)(RCS|CVS|\.svn)r   )Zis_regex)r   r9   get_fullnamer   r   
build_baser$   r%   r!   r#   Zexclude_pattern)r<   r   base_dirr#   r4   r4   r5   r   S  s    

zmanifest_maker.prune_file_listN)rJ   rK   rL   r   rY   ry   r   r   r   r|   staticmethodr   r   r   r4   r4   r4   r5   r     s   
r   c              	   C   s8   d |}|d}t| d}|| W 5 Q R X dS )z{Create a file with the specified name and write 'contents' (a
    sequence of strings without line terminators) to it.
    
r   r   N)rn   r   r   r   )r_   contentsr   r4   r4   r5   rz   ]  s    

rz   c              	   C   s|   t d| | jsx| jj}| j|j |_}| j|j |_}z|	| j
 W 5 || |_|_X t| jdd }t| j
| d S )Nz
writing %sZzip_safe)r   r   r   r9   rp   rW   rD   rV   r=   write_pkg_inforN   getattrr
   Zwrite_safety_flag)cmdbasenamer_   rp   ZoldverZoldnamesafer4   r4   r5   r   j  s    r   c                 C   s   t j|rtd d S )NzsWARNING: 'depends.txt' is not used by setuptools 0.6!
Use the install_requires/extras_require setup() args instead.)r!   r"   r{   r   r|   r   r   r_   r4   r4   r5   warn_depends_obsolete}  s    r   c                 C   s,   t |pd}dd }t||}| | d S )Nr4   c                 S   s   | d S )Nr   r4   )r   r4   r4   r5   	append_cr  s    z&_write_requirements.<locals>.append_cr)r   map
writelines)streamreqslinesr   r4   r4   r5   _write_requirements  s    
r   c                 C   sj   | j }t }t||j |jp"i }t|D ]&}|djf t	  t|||  q,| 
d||  d S )Nz
[{extra}]
requirements)r9   ioStringIOr   Zinstall_requiresextras_requiresortedr   r   varsr   getvalue)r   r   r_   distr   r   extrar4   r4   r5   write_requirements  s    
r   c                 C   s,   t  }t|| jj | d||  d S )Nzsetup-requirements)r   r   r   r9   Zsetup_requiresr   r   )r   r   r_   r   r4   r4   r5   write_setup_requirements  s    r  c                 C   s:   t dd | j D }| d|dt|d  d S )Nc                 S   s   g | ]}| d dd qS ).r   r   )r    )r   kr4   r4   r5   r     s   z(write_toplevel_names.<locals>.<listcomp>ztop-level namesr   )r^   fromkeysr9   Ziter_distribution_namesrz   rn   r   )r   r   r_   pkgsr4   r4   r5   write_toplevel_names  s    r  c                 C   s   t | ||d d S )NT)	write_argr   r4   r4   r5   overwrite_arg  s    r  Fc                 C   sH   t j|d }t| j|d }|d k	r4d|d }| |||| d S )Nr   r   )r!   r"   splitextr   r9   rn   r   )r   r   r_   r   argnamer[   r4   r4   r5   r    s
    r  c                 C   s   | j j}t|ts|d kr |}nl|d k	rg }t| D ]H\}}t|tsnt||}dtt	t|
 }|d||f  q8d|}| d||d d S )Nr   z	[%s]
%s

r   zentry pointsT)r9   entry_pointsrc   strr   itemsr   parse_grouprn   r   valuesr   r   )r   r   r_   r   r   sectionr   r4   r4   r5   write_entries  s    

r  c               
   C   sj   t dt tjdrftd>} | D ]2}t	d|}|r(t
|d  W  5 Q R  S q(W 5 Q R X dS )zd
    Get a -r### off of PKG-INFO Version in case this is an sdist of
    a subversion revision.
    z$get_pkg_info_revision is deprecated.zPKG-INFOzVersion:.*-r(\d+)\s*$r   r   )warningsr|   EggInfoDeprecationWarningr!   r"   r{   r   r   r$   r   intgroup)r   r   r   r4   r4   r5   get_pkg_info_revision  s     *r  c                   @   s   e Zd ZdZdS )r  z?Deprecated behavior warning for EggInfo, bypassing suppression.N)rJ   rK   rL   __doc__r4   r4   r4   r5   r    s   r  )F);r  distutils.filelistr   Z	_FileListdistutils.errorsr   distutils.utilr   rg   r   r   r!   r$   r   r   r  rG   r\   
setuptoolsr   Zsetuptools.command.sdistr   r   Zsetuptools.command.setoptr	   Zsetuptools.commandr
   pkg_resourcesr   r   r   r   r   r   r   r   Zsetuptools.unicode_utilsr   Zsetuptools.globr   Zsetuptools.externr   r   r6   r7   rN   r   rz   r   r   r   r   r  r  r  r  r  r  r  r4   r4   r4   r5   <module>   sV   (S 1 IP	

