o
    wid                     @  s  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m	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mZ ddlmZ dd	lmZ d
dlmZ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#m%Z% ddl"m&Z& ddl$m'Z( ddl)m*Z* ej+j, dej+j- Z.dd Z/G dd dZ0G dd de0eZ1G dd de(Z'G dd deZ2d6d!d"Z3d6d#d$Z4d6d%d&Z5e!j6Z6e!j7Z7d6d'd(Z8d6d)d*Z9d7d8d.d/Z:d6d0d1Z;d9d2d3Z<G d4d5 d5e Z=dS ):zUsetuptools.command.egg_info

Create a distribution's .egg-info directory and contents    )annotationsN)Callable)Command)	bdist_egg)sdistwalk_revctrl)edit_config)glob   )_entry_points_normalization)metadata)SetuptoolsDeprecationWarning   )_requirestxt)log)DistutilsInternalError)FileList)convert_path.c                 C  s  d}|  tjj}ttj}d| d}t|D ]\}}|t|d k}|dkr<|r0|d7 }n|d| d| d	7 }qd
}t|}	||	k r|| }
|
dkrU||d 7 }n|
dkr^||7 }ny|
dkr|d }||	k rt|| dkrt|d }||	k r|| dkr|d }||	k r|| dkr|d }||	k r|| dks||	kr|t|
7 }n1||d | }d}|d
 dkrd}|dd }|t|7 }|d| d7 }|}n|t|
7 }|d7 }||	k sF|s||7 }q|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[^]r   **z.*z(?:+z)*r   *?[!^Nz\Z)flags)splitospathsepreescape	enumeratelencompile	MULTILINEDOTALL)r	   patchunksr#   
valid_charcchunk
last_chunki	chunk_lencharinner_iinner
char_class r7   X/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/setuptools/command/egg_info.pytranslate_pattern(   s\   

-r9   c                   @  sV   e Zd ZdZdZedd Zdd Zdd ZdddZ	dddZ
dddZeeZdS )
InfoCommonNc                 C  s   t | j S N)r   	safe_namedistributionget_nameselfr7   r7   r8   name   s   zInfoCommon.namec                 C  s   |  | j }t|S r;   )
_maybe_tagr=   get_versionr   safe_version)r@   taggedr7   r7   r8   tagged_version   s   
zInfoCommon.tagged_versionc                 C  s   | j r
| |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_already_taggedr@   versionr7   r7   r8   rB      s   zInfoCommon._maybe_tagrJ   strreturnboolc                 C  s   | | j|  fS r;   )endswithrG   
_safe_tagsrI   r7   r7   r8   rH      s   zInfoCommon._already_taggedc              	   C  sH   zt d| j dd  W S  tjjy#   t | jdd Y S w )N0r    r   )r   rD   rG   	packagingrJ   InvalidVersionr<   replacer?   r7   r7   r8   rO      s
   zInfoCommon._safe_tagsc                 C  s,   d}| j r
|| j 7 }| jr|td7 }|S )Nr   z%Y%m%d)	tag_buildtag_datetimestrftimerI   r7   r7   r8   tags   s   
zInfoCommon.tags)rJ   rK   rL   rM   )rL   rK   )__name__
__module____qualname__rU   rV   propertyrA   rF   rB   rH   rO   rY   rG   r7   r7   r7   r8   r:   {   s    



r:   c                   @  s   e Zd ZdZg dZdgZddiZdd Zed!d	d
Z	e	j
d"dd
Z	d"ddZd"ddZedfddZd#d$ddZd"ddZd"ddZd"ddZd"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]r`   rc   c                 C  s"   d | _ d | _d | _d | _d| _d S )NF)egg_baseegg_namer^   egg_versionignore_egg_info_in_manifestr?   r7   r7   r8   initialize_options   
   
zegg_info.initialize_optionsrL   
int | Nonec                 C     d S r;   r7   r?   r7   r7   r8   tag_svn_revision      zegg_info.tag_svn_revisionNonec                 C  rl   r;   r7   )r@   valuer7   r7   r8   rm      rn   c                 C  s$   t |  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   )rU   rV   )r^   N)dictrY   r   )r@   filenamer^   r7   r7   r8   save_version_info   s   zegg_info.save_version_infoc              
   C  s   | j | _|  | _tj| j}zt|tjj}|rdnd}tj	|| j| jf  W n t
yF } ztjd| j d| j |d }~ww | jd u rZ| jj}|pSi dtj| _| d t| jd | _| jtjkrxtj| j| j| _| j| jj_d S )Nz%s==%sz%s===%sz-Invalid distribution name or version syntax: -r   re   	.egg-info)rA   rf   rF   rg   rR   rJ   Version
isinstancerequirementsRequirement
ValueError	distutilserrorsDistutilsOptionErrorre   r=   package_dirgetr!   curdirensure_dirnamer   filename_componentr^   r"   joinr   )r@   parsed_version
is_versionspecr_   dirsr7   r7   r8   finalize_options   s.   


zegg_info.finalize_optionsNc                 C  s   t | j| j||S )0Compute filename of the output egg. Private API.)_egg_basenamerf   rg   )r@   
py_versionplatformr7   r7   r8   _get_egg_basename   s   zegg_info._get_egg_basenameFforcerM   c                 C  sR   |r|  ||| dS tj|r'|du r |s td|| dS | | 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@   whatrr   datar   r7   r7   r8   write_or_delete_file  s   	zegg_info.write_or_delete_filec                 C  s8   t d|| |d}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openwriteclose)r@   r   rr   r   fr7   r7   r8   r     s
   


zegg_info.write_filec                 C  s   t d| t| dS )z8Delete `filename` (if not a dry run) after announcing itzdeleting %sN)r   r   r!   unlink)r@   rr   r7   r7   r8   r     s   zegg_info.delete_filec              
   C  s   t tjdd}| | j z	t| jd  W n ty1 } zd| j d}tj	
||d }~ww |D ]}| }|| |jtj| j|j q4tj| jd}tj|r\| | |   d S )Nzegg_info.writers)groupz'Cannot update time stamp of directory ''znative_libs.txt)listr   entry_pointsmkpathr^   r!   utimeOSErrorr{   r|   DistutilsFileErrorloadrA   r"   r   r   r   find_sources)r@   writersr_   msgepwriternlr7   r7   r8   run$  s    
zegg_info.runc                 C  s<   t j| jd}t| j}| j|_||_|	  |j
| _
dS )z"Generate SOURCES.txt manifest filezSOURCES.txtN)r!   r"   r   r^   manifest_makerr=   rh   ignore_egg_info_dirmanifestr   filelist)r@   manifest_filenamemmr7   r7   r8   r   :  s   
zegg_info.find_sources)rL   rk   rL   ro   Fr   rM   rL   ro   )rZ   r[   r\   descriptionuser_optionsboolean_optionsnegative_optri   r]   rm   setterrs   r   PY_MAJORr   r   r   r   r   r   r7   r7   r7   r8   r^      s&    


 


r^   c                      s   e Zd Z	d%d& fddZd'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dZd'dd Zd!d" Zd#d$ Z  ZS )(r   NFr   rM   rL   ro   c                   s   t  || || _d S r;   )super__init__r   )r@   r   debug_printr   	__class__r7   r8   r   G  s   
zFileList.__init__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yI   d
|d|}	t|	d w |d}
|dv rV|g}|
r[|fnd}|| }| d|g|
rl|gng  |  |D ]}||stj||g|R   qud 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$Invalid MANIFEST.in: unknown action z in z
recursive->   r   r   r7   rQ   )_parse_template_liner   r   global_includeglobal_exclude	functoolspartialrecursive_includerecursive_excluder   r   KeyErrorr   
startswithr   r   r   r   )r@   lineactionpatternsdirdir_pattern
action_maplog_mapprocess_actionr   action_is_recursiveextra_log_argslog_tmplpatternr7   r7   r8   process_template_lineM  s\   

zFileList.process_template_linec                 C  sR   d}t t| jd ddD ]}|| 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foundr1   r7   r7   r8   _remove_files  s   zFileList._remove_filesc                 C  $   dd t |D }| | t|S )z#Include files that match 'pattern'.c                 S     g | ]
}t j|s|qS r7   r!   r"   isdir.0r   r7   r7   r8   
<listcomp>      z$FileList.include.<locals>.<listcomp>r	   extendrM   r@   r   r   r7   r7   r8   r     s   
zFileList.includec                 C  s   t |}| |jS )z#Exclude files that match 'pattern'.)r9   r   matchr@   r   r   r7   r7   r8   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  r   r7   r   r   r7   r7   r8   r     r   z.FileList.recursive_include.<locals>.<listcomp>T)	recursive)r!   r"   r   r	   r   rM   )r@   r   r   full_patternr   r7   r7   r8   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   r9   r!   r"   r   r   r   )r@   r   r   r   r7   r7   r8   r     s   zFileList.recursive_excludec                 C  r   )zInclude all files from 'dir/'.c                 S  s"   g | ]}t j|D ]}|q
qS r7   )r{   r   findall)r   	match_diritemr7   r7   r8   r     s    
z"FileList.graft.<locals>.<listcomp>r   )r@   r   r   r7   r7   r8   r     s
   
zFileList.graftc                 C  s   t tj|d}| |jS )zFilter out files from 'dir/'.r   r   )r@   r   r   r7   r7   r8   r     s   zFileList.prunec                   sJ   | j du 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 r7   r   r   r   r7   r8   r     s    z+FileList.global_include.<locals>.<listcomp>)allfilesr   r9   r!   r"   r   r   rM   r   r7   r   r8   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   r7   r7   r8   r     s   zFileList.global_excludec                 C  s0   | d}t|}| |r| j| d S d S )N)removesuffixr   
_safe_pathr   append)r@   r   r"   r7   r7   r8   r     s
   

zFileList.appendc                 C  s   | j t| j| d S r;   )r   r   filterr   )r@   pathsr7   r7   r8   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)r   r   r   r   r?   r7   r7   r8   _repair  s   zFileList._repairc              	   C  s   d}t |}|d u rtd| d dS t |d}|d u r)t||d dS z"d|v p1d|v }| jr:|r:W dS tj|sFtj|rIW dS W d S  t	y^   t||t
  Y d S w )	Nz!'%s' not %s encodable -- skippingr   z$' in unexpected encoding -- skippingFr   ru   s	   .egg-infoT)unicode_utilsfilesys_decoder   r   
try_encoder   r!   r"   r   UnicodeEncodeErrorsysgetfilesystemencoding)r@   r"   enc_warnu_path	utf8_pathis_egg_infor7   r7   r8   r     s&   

zFileList._safe_path)NNF)r   rM   rL   ro   r   )rZ   r[   r\   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r7   r7   r   r8   r   D  s"    
F	



r   c                   @  sz   e Zd ZdZdddZdddZddd	Zd
d ZdddZdddZ	e
dd ZdddZdddZdd Zdd ZdS )r   zMANIFEST.inrL   ro   c                 C  s"   d| _ d| _d| _d| _d| _d S )NTF)use_defaultsr   manifest_onlyforce_manifestr   r?   r7   r7   r8   ri     rj   z!manifest_maker.initialize_optionsc                 C  rl   r;   r7   r?   r7   r7   r8   r     s   zmanifest_maker.finalize_optionsc                 C  sz   t | jd| _tj| js|   |   tj| j	r!| 
  |   |   |   | j  | j  |   d S )N)r   )r   r   r   r!   r"   r   r   write_manifestadd_defaultstemplateread_templateadd_license_files_add_referenced_filesprune_file_listsortremove_duplicatesr?   r7   r7   r8   r     s   

zmanifest_maker.runc                 C  s   t |}|tjdS )N/)r   r   rT   r!   r#   )r@   r"   r7   r7   r8   _manifest_normalize(  s   
z"manifest_maker._manifest_normalizec                   sF    j    fdd j jD }d j d} 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 r7   )r  r   r?   r7   r8   r   4  s    z1manifest_maker.write_manifest.<locals>.<listcomp>zwriting manifest file 'r   N)r   r   r   r   executer   )r@   r   r   r7   r?   r8   r  ,  s   
zmanifest_maker.write_manifestc                 C  s   |  |st| | d S d S r;   )_should_suppress_warningr   r   )r@   r   r7   r7   r8   r   8  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   r7   r7   r8   r  <  s   z'manifest_maker._should_suppress_warningc                 C  s   t |  | j| j | j| j tt }|r!| j| nt	j
| jr,|   t	j
dr8| jd | d}| j|j d S )Nzsetup.pyr^   )r   r  r   r   r  r   r   r   r   r!   r"   r   read_manifestget_finalized_commandr   r^   )r@   rcfilesei_cmdr7   r7   r8   r  C  s   


zmanifest_maker.add_defaultsc                 C  s4   | j jjpg }|D ]}td| q	| j| d S )Nzadding license file '%s')r=   r   license_filesr   r   r   r   )r@   r  lfr7   r7   r8   r  U  s   z manifest_maker.add_license_filesc                 C  s4   t | jdg }|D ]}td| q	| j| dS )zGAdd files referenced by the config (e.g. `file:` directive) to filelist_referenced_filesz%adding file referenced by config '%s'N)getattrr=   r   debugr   r   )r@   
referencedrfr7   r7   r8   r  [  s   z$manifest_maker._add_referenced_filesc                 C  s*   t |dr	| S tjdddd | 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_manifestz@`build_py` command does not inherit from setuptools' `build_py`.z
            Custom 'build_py' does not implement 'get_data_files_without_manifest'.
            Please extend command classes from setuptools instead of distutils.
            z!https://peps.python.org/pep-0632/)see_url)hasattrr%  r   emitget_data_files)r@   build_pyr7   r7   r8   _safe_data_filesc  s   

	zmanifest_maker._safe_data_filesNr   )rZ   r[   r\   r  ri   r   r   r  r  r   staticmethodr  r  r  r  r+  r7   r7   r7   r8   r     s    







r   rL   ro   c                 C  sN   d |}|d}t| d}|| W d   dS 1 s w   Y  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)r   r   r   r   )rr   contentsr   r7   r7   r8   r   |  s
   

"r   c              	   C  s   t d| | jj}| j|j|_}| j|j|_}z|| j	 W |||_|_n|||_|_w t
| jdd }t| j	| d S )Nz
writing %szip_safe)r   r   r=   r   rg   rJ   rf   rA   write_pkg_infor^   r!  r   write_safety_flag)cmdbasenamerr   r   oldveroldnamesafer7   r7   r8   r0    s    r0  c                 C  s   dS )aj  
    Unused: left to avoid errors when updating (from source) from <= 67.8.
    Old installations have a .dist-info directory with the entry-point
    ``depends.txt = setuptools.command.egg_info:warn_depends_obsolete``.
    This may trigger errors when running the first egg_info in build_meta.
    TODO: Remove this function in a version sufficiently > 68.
    Nr7   r2  r3  rr   r7   r7   r8   warn_depends_obsolete  s    r8  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    )r   kr7   r7   r8   r     s    z(write_toplevel_names.<locals>.<listcomp>ztop-level namesr-  )rq   fromkeysr=   iter_distribution_namesr   r   sorted)r2  r3  rr   pkgsr7   r7   r8   write_toplevel_names  s   
 r>  c                 C  s   t | ||d d S )NT)	write_argr7  r7   r7   r8   overwrite_arg  s   r@  Fr   rM   c                 C  sH   t j|d }t| j|d }|d urd|d }| |||| d S )Nr   r-  )r!   r"   splitextr!  r=   r   r   )r2  r3  rr   r   argnamerp   r7   r7   r8   r?    s
   r?  c                 C  s,   t | jj}t |}| d||d d S )Nzentry pointsT)r   r   r=   r   renderr   )r2  r3  rr   epsdefnr7   r7   r8   write_entries  s   
rF  c                 C  sB   t | }t |}| d| d|pt }|r|d| 7 }|S )r   rt   z-py)r   r   r   )rf   rg   r   r   rA   rJ   eggr7   r7   r8   r     s   

r   c                   @  s   e Zd ZdZdS )EggInfoDeprecationWarningz?Deprecated behavior warning for EggInfo, bypassing suppression.N)rZ   r[   r\   __doc__r7   r7   r7   r8   rH    s    rH  r   r   r   )NN)>rI  
__future__r   r   r!   r$   r  rW   collections.abcr   rR   packaging.requirementspackaging.versionsetuptools.unicode_utilsr   
setuptoolsr   setuptools.commandr   setuptools.command.sdistr   r   setuptools.command.setoptr   setuptools.globr	   r   r   r   
_importlibr   warningsr   r   distutils.errorsr{   distutils.filelistr   r   r   	_FileListdistutils.utilr   version_infomajorminorr   r9   r:   r^   r   r   r0  r8  write_requirementswrite_setup_requirementsr>  r@  r?  rF  r   rH  r7   r7   r7   r8   <module>   s\    S/  J
o






