U
    ډe                     @   sv   d dl mZ d dlm  mZ d dlZd dlZd dlm	Z	 ddl
mZ ddlmZ eZdd	d
ZG dd dejZdS )    )logN)chain   )metadata   )_ORIGINAL_SUBCOMMANDS c                 c   s(   t jddD ]}| | E dH  qdS )z%Find all files under revision controlzsetuptools.file_finders)groupN)r   entry_pointsload)dirnameep r   Z/var/www/html/StaffProfile/newvenv/lib/python3.8/site-packages/setuptools/command/sdist.pywalk_revctrl   s    r   c                       s   e Zd ZdZdddddgZi Zddd	d
gZedd eD Zdd Z	dd Z
dd Zeejdd Z fddZ fddZdd Zdd Zdd Zdd  Z fd!d"Zd#d$ Zd%d& Zd'd( Zd)d* Z  ZS )+sdistz=Smart sdist that finds anything supported by revision control)zformats=Nz6formats for source distribution (comma-separated list))z	keep-tempkz@keep the distribution tree around after creating archive file(s))z	dist-dir=dzFdirectory to put the source distribution archive(s) in [default: dist])zowner=uz@Owner name used when creating a tar file [default: current user])zgroup=gzAGroup name used when creating a tar file [default: current group]r   z.rstz.txtz.mdc                 c   s   | ]}d  |V  qdS )z	README{0}N)format).0extr   r   r   	<genexpr>1   s     zsdist.<genexpr>c                 C   s   |  d | d}|j| _| jtj|jd |   | 	 D ]}|  | qD| 
  t| jdg }| jD ] }dd|f}||krp|| qpd S )Negg_infozSOURCES.txt
dist_filesr   r   )run_commandget_finalized_commandfilelistappendospathjoinr   check_readmeget_sub_commandsmake_distributiongetattrdistributionZarchive_files)selfei_cmdcmd_namer   filedatar   r   r   run3   s    



z	sdist.runc                 C   s   t j|  d S N)origr   initialize_optionsr(   r   r   r   r0   F   s    zsdist.initialize_optionsc              	   C   s$   |    tj|  W 5 Q R X dS )z%
        Workaround for #516
        N)_remove_os_linkr/   r   r%   r1   r   r   r   r%   I   s    
zsdist.make_distributionc                  c   sX   G dd d} t td| }zt`W n tk
r6   Y nX z
dV  W 5 || k	rR|t_X dS )zG
        In a context, remove and restore os.link if it exists
        c                   @   s   e Zd ZdS )z&sdist._remove_os_link.<locals>.NoValueN)__name__
__module____qualname__r   r   r   r   NoValueW   s   r6   linkN)r&   r    r7   	Exception)r6   Zorig_valr   r   r   r2   P   s    
zsdist._remove_os_linkc                    s   t    |   d S r.   )superadd_defaults _add_defaults_build_sub_commandsr1   	__class__r   r   r:   e   s    
zsdist.add_defaultsc                    s&   t    tjdr"| jd d S )Nzpyproject.toml)r9   _add_defaults_optionalr    r!   isfiler   r   r1   r<   r   r   r>   i   s    
zsdist._add_defaults_optionalc                 C   s8   | j  r4| d}| j|  | | | dS )zgetting python filesbuild_pyN)r'   has_pure_modulesr   r   extendget_source_files_add_data_files_safe_data_filesr(   r@   r   r   r   _add_defaults_pythonn   s    

zsdist._add_defaults_pythonc                    sP     d}t| t } fdd|D }dd |D } jt| d S )Nbuildc                 3   s   | ]}  |V  qd S r.   )r   r   cr1   r   r   r   y   s     z9sdist._add_defaults_build_sub_commands.<locals>.<genexpr>c                 s   s    | ]}t |d r| V  qdS )rC   N)hasattrrC   rI   r   r   r   r   z   s     
 )r   setr$   r   r   rB   r   from_iterable)r(   rH   Zmissing_cmdsZcmdsfilesr   r1   r   r;   u   s
    
z&sdist._add_defaults_build_sub_commandsc                 C   s   |j S )a  
        Since the ``sdist`` class is also used to compute the MANIFEST
        (via :obj:`setuptools.command.egg_info.manifest_maker`),
        there might be recursion problems when trying to obtain the list of
        data_files and ``include_package_data=True`` (which in turn depends on
        the files included in the MANIFEST).

        To avoid that, ``manifest_maker`` should be able to overwrite this
        method and avoid recursive attempts to build/analyze the MANIFEST.
        )
data_filesrF   r   r   r   rE   }   s    zsdist._safe_data_filesc                 C   s   | j dd |D  dS )zA
        Add data files as found in build_py.data_files.
        c                 s   s.   | ]&\}}}}|D ]}t j||V  qqd S r.   )r    r!   r"   )r   _src_dir	filenamesnamer   r   r   r      s   
 z(sdist._add_data_files.<locals>.<genexpr>N)r   rB   )r(   rO   r   r   r   rD      s    zsdist._add_data_filesc                    s2   zt    W n tk
r,   td Y nX d S )Nz&data_files contains unexpected objects)r9   _add_defaults_data_files	TypeErrorr   warnr1   r<   r   r   rT      s    zsdist._add_defaults_data_filesc                 C   s8   | j D ]}tj|r d S q| dd| j   d S )Nz,standard file not found: should have one of z, )READMESr    r!   existsrV   r"   )r(   fr   r   r   r#      s    
zsdist.check_readmec                 C   s^   t j| || tj|d}ttdrJtj|rJt| | 	d| | 
d| d S )Nz	setup.cfgr7   r   )r/   r   make_release_treer    r!   r"   rK   rX   unlink	copy_filer   save_version_info)r(   base_dirrN   destr   r   r   rZ      s    
zsdist.make_release_treec              	   C   s:   t j| jsdS t| jd}| }W 5 Q R X |dkS )NFrbs+   # file GENERATED by distutils, do NOT edit
)r    r!   r?   manifestopenreadline)r(   fp
first_liner   r   r   _manifest_is_not_generated   s
    z sdist._manifest_is_not_generatedc              	   C   s   t d| j t| jd}|D ]^}z|d}W n& tk
rV   t d|  Y qY nX | }|ds|spq| j	
| q|  dS )zRead the manifest file (named by 'self.manifest') and use it to
        fill in 'self.filelist', the list of files to include in the source
        distribution.
        zreading manifest file '%s'r`   zUTF-8z"%r not UTF-8 decodable -- skipping#N)r   infora   rb   decodeUnicodeDecodeErrorrV   strip
startswithr   r   close)r(   ra   liner   r   r   read_manifest   s    
zsdist.read_manifest)r3   r4   r5   __doc__user_optionsnegative_optZREADME_EXTENSIONStuplerW   r-   r0   r%   staticmethod
contextlibcontextmanagerr2   r:   r>   rG   r;   rE   rD   rT   r#   rZ   rf   ro   __classcell__r   r   r<   r   r      s6   
		r   )r   )	distutilsr   Zdistutils.command.sdistcommandr   r/   r    ru   	itertoolsr   
_importlibr   rH   r   listZ_default_revctrlr   r   r   r   r   <module>   s   
