3
A|ef                 @   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$j%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}| j tjj}tjtj}d|f }xt|D ]\}}|t|d k}|dkrv|rd|d7 }q4|d||f 7 }q4d}t|}	x:||	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 }x&||	k r6|| dkr6|d }qW ||	krR|tj|
7 }nR||d | }d}|d dkrd}|dd }|tj|7 }|d|f 7 }|}n|tj|
7 }|d7 }qW |s4||7 }q4W |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.*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innerZ
char_class r2   _/var/www/html/StaffProfile/staffvenv/lib/python3.6/site-packages/setuptools/command/egg_info.pytranslate_pattern#   sV    




r4   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j S )N)r   distributionget_name)selfr2   r2   r3   namez   s    zInfoCommon.namec             C   s   t | j| jj S )N)r   
_maybe_tagr6   get_version)r8   r2   r2   r3   tagged_version~   s    zInfoCommon.tagged_versionc             C   s    | j r|j| 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)r8   versionr2   r2   r3   r:      s    zInfoCommon._maybe_tagc             C   s,   d}| j r|| j 7 }| jr(|tjd7 }|S )Nr   z-%Y%m%d)	tag_buildtag_datetimestrftime)r8   r?   r2   r2   r3   tags   s    
zInfoCommon.tags)__name__
__module____qualname__r@   rA   propertyr9   r<   r:   rD   r=   r2   r2   r2   r3   r5   v   s   
r5   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	egg-base=eLdirectory containing .egg-info directories (default: top of the source tree)tag-dated0Add date stamp (e.g. 20050528) to version number
tag-build=b-Specify explicit tag to add to version numberno-dateD"Don't include date stamp [default]c             C   s"   d | _ d | _d | _d | _d| _d S )NF)egg_baseegg_namerI   egg_versionbroken_egg_info)r8   r2   r2   r3   initialize_options   s
    zegg_info.initialize_optionsc             C   s   d S )Nr2   )r8   r2   r2   r3   tag_svn_revision   s    zegg_info.tag_svn_revisionc             C   s   d S )Nr2   )r8   valuer2   r2   r3   r[      s    c             C   s0   t j }| j |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.
        r@   r   rA   )rI   N)collectionsOrderedDictrD   r	   dict)r8   filenamerI   r2   r2   r3   save_version_info   s    zegg_info.save_version_infoc             C   sT  | j | _| j | _t| j}y6t|tjj}|r4dnd}t	t
|| j| jf  W n< tk
r } z tjjd| j| jf |W Y d d }~X nX | jd kr| jj}|pi jdtj| _| jd t| jd | _| jtjkrtjj| j| j| _d| jkr| j  | j| jj_| jj}|d k	rP|j| jj krP| j|_t| j|_ d | j_d S )Nz%s==%sz%s===%sz2Invalid distribution name or version syntax: %s-%sr   rV   z	.egg-info-)!r9   rW   r<   rX   r   
isinstancer   r?   Versionlistr   
ValueError	distutilserrorsDistutilsOptionErrorrV   r6   package_dirgetr    curdirensure_dirnamer   rI   r!   joincheck_broken_egg_infometadata_patched_distkeylower_version_parsed_version)r8   parsed_versionZ
is_versionspecrK   dirspdr2   r2   r3   finalize_options   s8    



zegg_info.finalize_optionsFc             C   sN   |r| j ||| n6tjj|rJ|dkr@| r@tjd|| dS | j| 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)r8   whatr`   dataforcer2   r2   r3   write_or_delete_file   s    	
zegg_info.write_or_delete_filec             C   s>   t jd|| |jd}| js:t|d}|j| |j  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 %szutf-8wbN)r   infoencodedry_runopenwriteclose)r8   r   r`   r   fr2   r2   r3   r{   
  s    


zegg_info.write_filec             C   s    t jd| | jstj| dS )z8Delete `filename` (if not a dry run) after announcing itzdeleting %sN)r   r   r   r    unlink)r8   r`   r2   r2   r3   r~     s    zegg_info.delete_filec             C   s   | j | j tj| jd  | jj}x@tdD ]4}|j|d |j }|| |j	tj
j| j|j	 q,W tj
j| jd}tj
j|r| j| | j  d S )Nzegg_info.writers)	installerznative_libs.txt)mkpathrI   r    utimer6   fetch_build_eggr   requireresolver9   r!   rn   r|   r~   find_sources)r8   r   epwriternlr2   r2   r3   run  s     
zegg_info.runc             C   s4   t jj| jd}t| j}||_|j  |j| _dS )z"Generate SOURCES.txt manifest filezSOURCES.txtN)	r    r!   rn   rI   manifest_makerr6   manifestr   filelist)r8   Zmanifest_filenamemmr2   r2   r3   r   -  s
    
zegg_info.find_sourcesc             C   sd   | j d }| jtjkr&tjj| j|}tjj|r`tjdd d dd  || j	 | j	| _
|| _	d S )Nz	.egg-inforb   N   z
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.
)rW   rV   r    rl   r!   rn   r|   r   r}   rI   rY   )r8   Zbeir2   r2   r3   ro   5  s    

zegg_info.check_broken_egg_infoN)rJ   rK   rL   )rM   rN   rO   )rP   rQ   rR   )rS   rT   rU   )F)rE   rF   rG   descriptionuser_optionsboolean_optionsnegative_optrZ   rH   r[   setterra   rz   r   r{   r~   r   r   ro   r2   r2   r2   r3   rI      s$   
1
rI   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| jtj| j|tj| j|| j	| j
d}dddddddd	d}y|| }W n$ tk
r   td
j|dY nX |jd}	|dkr|g}|	r|fnf }
|| }| jdj|g|	r|gng  |  x&|D ]}||stj||f|
  qW d 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    >   r   r   )_parse_template_liner   r   global_includeglobal_exclude	functoolspartialrecursive_includerecursive_excluder   r   KeyErrorr   format
startswithdebug_printrn   r   r}   )r8   liner   patternsdirdir_patternZ
action_mapZlog_mapZprocess_actionZaction_is_recursiveZextra_log_argsZlog_tmplpatternr2   r2   r3   process_template_lineH  sJ    



zFileList.process_template_linec             C   sV   d}xLt t| jd ddD ]2}|| j| r| jd| j|   | j|= d}qW |S )z
        Remove all files from the file list that match the predicate.
        Return True if any matching files were removed
        Fr   z
 removing Tr   )ranger&   filesr   )r8   	predicatefoundr/   r2   r2   r3   _remove_files  s    zFileList._remove_filesc             C   s$   dd t |D }| j| t|S )z#Include files that match 'pattern'.c             S   s   g | ]}t jj|s|qS r2   )r    r!   isdir).0r   r2   r2   r3   
<listcomp>  s    z$FileList.include.<locals>.<listcomp>)r   extendbool)r8   r   r   r2   r2   r3   r     s    
zFileList.includec             C   s   t |}| j|jS )z#Exclude files that match 'pattern'.)r4   r   match)r8   r   r   r2   r2   r3   r     s    zFileList.excludec             C   s8   t jj|d|}dd t|ddD }| j| t|S )zN
        Include all files anywhere in 'dir/' that match the pattern.
        z**c             S   s   g | ]}t jj|s|qS r2   )r    r!   r   )r   r   r2   r2   r3   r     s    z.FileList.recursive_include.<locals>.<listcomp>T)	recursive)r    r!   rn   r   r   r   )r8   r   r   Zfull_patternr   r2   r2   r3   r     s    
zFileList.recursive_includec             C   s    t tjj|d|}| j|jS )zM
        Exclude any file anywhere in 'dir/' that match the pattern.
        z**)r4   r    r!   rn   r   r   )r8   r   r   r   r2   r2   r3   r     s    zFileList.recursive_excludec             C   s$   dd t |D }| j| t|S )zInclude all files from 'dir/'.c             S   s"   g | ]}t jj|D ]}|qqS r2   )rg   r   findall)r   Z	match_diritemr2   r2   r3   r     s   z"FileList.graft.<locals>.<listcomp>)r   r   r   )r8   r   r   r2   r2   r3   r     s    
zFileList.graftc             C   s   t tjj|d}| j|jS )zFilter out files from 'dir/'.z**)r4   r    r!   rn   r   r   )r8   r   r   r2   r2   r3   r     s    zFileList.prunec                sJ   | j dkr| j  ttjjd|  fdd| j D }| j| t|S )z
        Include all files anywhere in the current directory that match the
        pattern. This is very inefficient on large file trees.
        Nz**c                s   g | ]} j |r|qS r2   )r   )r   r   )r   r2   r3   r     s    z+FileList.global_include.<locals>.<listcomp>)allfilesr   r4   r    r!   rn   r   r   )r8   r   r   r2   )r   r3   r     s    

zFileList.global_includec             C   s   t tjjd|}| j|jS )zD
        Exclude all files anywhere that match the pattern.
        z**)r4   r    r!   rn   r   r   )r8   r   r   r2   r2   r3   r     s    zFileList.global_excludec             C   s8   |j dr|d d }t|}| j|r4| jj| d S )Nr   r   )r>   r   
_safe_pathr   append)r8   r   r!   r2   r2   r3   r     s
    

zFileList.appendc             C   s   | j jt| j| d S )N)r   r   filterr   )r8   pathsr2   r2   r3   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   )r8   r2   r2   r3   _repair  s    zFileList._repairc             C   s   d}t j|}|d kr(tjd|  dS t j|d}|d krNtj||d dS y tjj|shtjj|rldS W n& tk
r   tj||t	j
  Y nX d S )Nz!'%s' not %s encodable -- skippingz''%s' in unexpected encoding -- skippingFzutf-8T)unicode_utilsfilesys_decoder   r}   Z
try_encoder    r!   r|   UnicodeEncodeErrorsysgetfilesystemencoding)r8   r!   Zenc_warnZu_pathZ	utf8_pathr2   r2   r3   r     s    
zFileList._safe_pathN)rE   rF   rG   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r2   r2   r3   r   E  s   M


r   c               @   sl   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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_manifest)r8   r2   r2   r3   rZ     s    z!manifest_maker.initialize_optionsc             C   s   d S )Nr2   )r8   r2   r2   r3   rz     s    zmanifest_maker.finalize_optionsc             C   sl   t  | _tjj| js| j  | j  tjj| jr<| j	  | j
  | j  | jj  | jj  | j  d S )N)r   r   r    r!   r|   r   write_manifestadd_defaultstemplateZread_templateadd_license_filesprune_file_listsortremove_duplicates)r8   r2   r2   r3   r     s    

zmanifest_maker.runc             C   s   t j|}|jtjdS )N/)r   r   replacer    r"   )r8   r!   r2   r2   r3   _manifest_normalize&  s    
z"manifest_maker._manifest_normalizec                sB    j j   fdd j jD }d j } 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 | ]} j |qS r2   )r   )r   r   )r8   r2   r3   r   2  s    z1manifest_maker.write_manifest.<locals>.<listcomp>zwriting manifest file '%s'N)r   r   r   r   executer{   )r8   r   msgr2   )r8   r3   r   *  s    

zmanifest_maker.write_manifestc             C   s   | j |stj| | d S )N)_should_suppress_warningr   r}   )r8   r   r2   r2   r3   r}   6  s    
zmanifest_maker.warnc             C   s   t jd| S )z;
        suppress missing-file warnings from sdist
        zstandard file .*not found)r#   r   )r   r2   r2   r3   r   :  s    z'manifest_maker._should_suppress_warningc             C   s   t j|  | jj| j | jj| j tt }|rB| jj| nt	j
j| jrX| j  t	j
jdrp| jjd | jd}| jj|j d S )Nzsetup.pyrI   )r   r   r   r   r   r   re   r   r   r    r!   r|   Zread_manifestget_finalized_commandr   rI   )r8   ZrcfilesZei_cmdr2   r2   r3   r   A  s    


zmanifest_maker.add_defaultsc             C   s8   | j jjpg }x|D ]}tjd| qW | jj| d S )Nzadding license file '%s')r6   rp   license_filesr   r   r   r   )r8   r   Zlfr2   r2   r3   r   S  s
    
z manifest_maker.add_license_filesc             C   sZ   | j d}| jj }| jj|j | jj| tjtj	}| jj
d| d | dd d S )Nbuildz(^|z)(RCS|CVS|\.svn)r   )is_regex)r   r6   get_fullnamer   r   
build_baser#   r$   r    r"   exclude_pattern)r8   r   base_dirr"   r2   r2   r3   r   Z  s    

zmanifest_maker.prune_file_listc             C   s&   t |dr|j S tjdt |j S )a0  
        The parent class implementation of this method
        (``sdist``) will try to include data files, which
        might cause recursion problems when
        ``include_package_data=True``.

        Therefore, avoid triggering any attempt of
        analyzing/building the manifest again.
        get_data_files_without_manifestzCustom 'build_py' does not implement 'get_data_files_without_manifest'.
Please extend command classes from setuptools instead of distutils.)hasattrr   warningsr}   r   Zget_data_files)r8   build_pyr2   r2   r3   _safe_data_filesc  s    

zmanifest_maker._safe_data_filesN)rE   rF   rG   r   rZ   rz   r   r   r   r}   staticmethodr   r   r   r   r   r2   r2   r2   r3   r     s   	r   c          	   C   s8   dj |}|jd}t| d}|j| W d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.
    
zutf-8r   N)rn   r   r   r   )r`   contentsr   r2   r2   r3   r{   y  s    

r{   c             C   s|   t jd| | jsx| jj}| j|j |_}| j|j |_}z|j	| j
 W d || |_|_X t| jdd }tj| j
| d S )Nz
writing %szip_safe)r   r   r   r6   rp   rX   r?   rW   r9   write_pkg_inforI   getattrr
   Zwrite_safety_flag)cmdbasenamer`   rp   ZoldverZoldnamesafer2   r2   r3   r     s    r   c             C   s   t jj|rtj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`   r2   r2   r3   warn_depends_obsolete  s    r   c             C   s,   t |pf }dd }t||}| j| d S )Nc             S   s   | d S )Nr   r2   )r   r2   r2   r3   	append_cr  s    z&_write_requirements.<locals>.append_cr)r   map
writelines)streamreqslinesr   r2   r2   r3   _write_requirements  s    
r   c             C   sn   | j }tj }t||j |jp"i }x2t|D ]&}|jdjf t	  t|||  q.W | j
d||j  d S )Nz
[{extra}]
requirements)r6   ioStringIOr   install_requiresextras_requiresortedr   r   varsr   getvalue)r   r   r`   distr   r  extrar2   r2   r3   write_requirements  s    
r  c             C   s,   t j }t|| jj | jd||j  d S )Nzsetup-requirements)r   r   r   r6   setup_requiresr   r  )r   r   r`   r   r2   r2   r3   write_setup_requirements  s    r
  c             C   s:   t jdd | jj D }| jd|djt|d  d S )Nc             S   s   g | ]}|j d dd qS ).r   r   )r   )r   kr2   r2   r3   r     s   z(write_toplevel_names.<locals>.<listcomp>ztop-level namesr   )r_   fromkeysr6   iter_distribution_namesr{   rn   r  )r   r   r`   pkgsr2   r2   r3   write_toplevel_names  s    r  c             C   s   t | ||d d S )NT)	write_arg)r   r   r`   r2   r2   r3   overwrite_arg  s    r  Fc             C   sH   t jj|d }t| j|d }|d k	r4dj|d }| j|||| d S )Nr   r   )r    r!   splitextr   r6   rn   r   )r   r   r`   r   Zargnamer\   r2   r2   r3   r    s
    r  c             C   s   | j j}t|ts|d kr |}np|d k	rg }xXt|j D ]H\}}t|tsptj||}djtt	t|j
 }|jd||f  q:W dj|}| jd||d d S )Nr   z	[%s]
%s

r   zentry pointsT)r6   entry_pointsrc   strr  itemsr   parse_grouprn   r   valuesr   r   )r   r   r`   r   r   sectionr   r2   r2   r3   write_entries  s    

r  c              C   s^   t jdt tjjdrZtjd2} x*| D ]"}tj	d|}|r*t
|jdS q*W W d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   Nr   )r   r}   EggInfoDeprecationWarningr    r!   r|   r   r   r#   r   intgroup)r   r   r   r2   r2   r3   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)rE   rF   rG   __doc__r2   r2   r2   r3   r    s   r  )F);r  distutils.filelistr   Z	_FileListdistutils.errorsr   distutils.utilr   rg   r   r   r    r#   r   r   r   rB   r]   
setuptoolsr   Zsetuptools.command.sdistr   r   Zsetuptools.command.setoptr	   setuptools.commandr
   pkg_resourcesr   r   r   r   r   r   r   r   Zsetuptools.unicode_utilsr   Zsetuptools.globr   setuptools.externr   r   r4   r5   rI   r   r{   r   r   r   r  r
  r  r  r  r  r  r  r2   r2   r2   r3   <module>   sV   (
S 1 Il	

