o
    yAf/4                     @  s  d dl m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mZ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 d dlmZmZ d dlmZm Z  erjd dl!m"Z" G dd dZ#G dd deZ$G dd deZ%dS )    )annotationsN)closing)copy)BytesIO)time)TYPE_CHECKINGAnyCallable)BuilderConfig)BuilderInterface)get_reproducible_timestampnormalize_archive_pathnormalize_file_permissionsnormalize_relative_pathreplace_file)DEFAULT_METADATA_VERSIONget_core_metadata_constructors)DEFAULT_BUILD_SCRIPTDEFAULT_CONFIG_FILE)TracebackTypec                   @  sH   e Zd Zd ddZd!ddZd"ddZd#ddZd$ddZd%ddZdS )&SdistArchivenamestrreproducibleboolreturnNonec                  sz   | _ | _|rt nd _tjdd\} _t|d _	t
j j	d jd _tj jdtjd _ fd	d
 _dS )zH
        https://peps.python.org/pep-0517/#source-distributions
        N.tar.gz)suffixzw+bwb)fileobjmodemtimew)r    r!   formatc                    s      jj| i |S N)normalize_tar_metadatatf
gettarinfo)argskwargsself =/usr/lib/python3.10/site-packages/hatchling/builders/sdist.py<lambda>*   s    z'SdistArchive.__init__.<locals>.<lambda>)r   r   r   	timestamptempfilemkstemppathosfdopenfdgzipGzipFilegztarfileTarFile
PAX_FORMATr'   r(   )r,   r   r   Zraw_fdr-   r+   r.   __init__   s   zSdistArchive.__init__contentsstr | bytesrelative_pathsc                 G  s   t |ts
|d}tttjj| j	g|R  }t
||_| jr,| jd ur,| j|_ntt |_tt|}| j|| W d    d S 1 sKw   Y  d S )Nzutf-8)
isinstancebytesencoder:   TarInfor   r4   r3   joinr   lensizer   r0   r"   intget_current_timestampr   r   r'   addfile)r,   r>   r@   tar_infobufferr-   r-   r.   create_file,   s   

 

"zSdistArchive.create_filerK   tarfile.TarInfoc                 C  sL   | j s|S t|}d|_d|_d|_d|_t|j|_| jd ur$| j|_	|S )Nr    )
r   r   uidgidunamegnamer   r!   r0   r"   )r,   rK   r-   r-   r.   r&   9   s   
z#SdistArchive.normalize_tar_metadatar   c                 C  s   t | j|}t| || |S r%   )getattrr'   setattr)r,   r   attrr-   r-   r.   __getattr__H   s   zSdistArchive.__getattr__c                 C  s   | S r%   r-   r+   r-   r-   r.   	__enter__M   s   zSdistArchive.__enter__exc_typetype[BaseException] | None	exc_valueBaseException | None	tracebackTracebackType | Nonec                 C  s"   | j   | j  | j  d S r%   )r'   closer9   r6   )r,   rY   r[   r]   r-   r-   r.   __exit__P   s   

zSdistArchive.__exit__N)r   r   r   r   r   r   )r>   r?   r@   r   r   r   )rK   rN   r   rN   )r   r   r   r   )r   r   )rY   rZ   r[   r\   r]   r^   r   r   )	__name__
__module____qualname__r=   rM   r&   rW   rX   r`   r-   r-   r-   r.   r      s    




r   c                      sH   e Zd Zd fddZedd	d
ZedddZedddZ  ZS )SdistBuilderConfigr)   r   r*   r   r   c                   s(   t  j|i | d | _d | _d | _d S r%   )superr=   ._SdistBuilderConfig__core_metadata_constructor"_SdistBuilderConfig__strict_naming#_SdistBuilderConfig__support_legacy)r,   r)   r*   	__class__r-   r.   r=   Y   s   
zSdistBuilderConfig.__init__Callable[..., str]c              	   C  s   | j d u r=| jdt}t|tsd| j d}t|t }||vr8d| d| j dd	t
| }t||| | _ | j S )Nzcore-metadata-version Field `tool.hatch.build.targets.z(.core-metadata-version` must be a stringzUnknown metadata version `z&` for field `tool.hatch.build.targets.z$.core-metadata-version`. Available: , )rf   target_configgetr   rA   r   plugin_name	TypeErrorr   rE   sorted
ValueError)r,   Zcore_metadata_versionmessageconstructorsr-   r-   r.   core_metadata_constructor`   s    


z,SdistBuilderConfig.core_metadata_constructorr   c                 C  sp   | j d u r5d| jv r | jd }t|tsd| j d}t|n| jdd}t|ts2d}t||| _ | j S )Nzstrict-namingrl   z!.strict-naming` must be a booleanTz8Field `tool.hatch.build.strict-naming` must be a boolean)rg   rn   rA   r   rp   rq   Zbuild_configro   )r,   strict_namingrt   r-   r-   r.   rw   u   s   




z SdistBuilderConfig.strict_namingc                 C  s$   | j d u rt| jdd| _ | j S )Nzsupport-legacyF)rh   r   rn   ro   r+   r-   r-   r.   support_legacy   s   
z!SdistBuilderConfig.support_legacy)r)   r   r*   r   r   r   )r   rk   )r   r   )	ra   rb   rc   r=   propertyrv   rw   rx   __classcell__r-   r-   ri   r.   rd   X   s    rd   c                   @  sn   e Zd ZdZdZd#ddZd$dd	Zd%ddZd&ddZe	d'ddZ
d(d)ddZd*ddZed+d d!Zd"S ),SdistBuilderz.
    Build an archive of the source files
    sdistr   dict[str, Callable]c                 C  s
   d| j iS Nstandard)build_standardr+   r-   r-   r.   get_version_api   s   
zSdistBuilder.get_version_api	list[str]c                 C  s   dgS r~   r-   r+   r-   r-   r.   get_default_versions   s   z!SdistBuilder.get_default_versions	directoryr   versionsr   c                 C  s2   t |D ]}|drt t j|| qd S )Nr   )r4   listdirendswithremover3   rE   )r,   r   r   filenamer-   r-   r.   clean   s
   
zSdistBuilder.clean
build_datar   c              
   K  sJ  t  }t| j| jjd~}|  D ]O}| jjr)tj	|j
\}}|dkr)|| |j|jttj| j|jd}| r[t|jd}	|||	 W d    n1 sUw   Y  q|| q|| jj| j|d dd | jjr|| jt||d dd W d    n1 sw   Y  tj|| j d	}
t|j|
 |
S )
N)r   z__init__.py)arcnamerbdependencies)extra_dependencieszPKG-INFOzsetup.pyr   )setr   artifact_project_idconfigr   Zrecurse_included_filesrx   r4   r3   splitrelative_pathaddr(   r   rE   Zdistribution_pathisfileopenrJ   rM   rv   metadataconstruct_setup_py_filerr   r   )r,   r   r   Zfound_packagesarchiveZincluded_fileZpossible_package	file_namerK   ftargetr-   r-   r.   r      sB   
 zSdistBuilder.build_standardc                 C  s,   | j jr| jS | | jjj d| jj S )N-)r   rw   Z
project_idZnormalize_file_name_componentr   coreraw_nameversionr+   r-   r-   r.   r      s
   z SdistBuilder.artifact_project_idr-   packagesr   	tuple[()]c                 C  s  d}|d7 }|d| j jjd7 }|d| j jd7 }| j jjr+|d| j jjd7 }| j jjr;|d| j jjd7 }| j jj}|d rQ|d	d
|d d7 }|d rb|dd
|d d7 }| j jj}|d rx|dd
|d d7 }|d r|dd
|d d7 }| j jj	r|d7 }| j jj	D ]
}|d|d7 }q|d7 }t
| j jj}|| |r|d7 }|D ]}|dd}	|d|	d7 }q|d7 }| j jjr|d7 }| j jj D ]&\}
}|sq|d|
d7 }|D ]}|dd}	|d|	d7 }q|d7 }q|d7 }| j jjs| j jjs| j jjr|d7 }| j jjrG|d7 }| j jj D ]\}}|d| d| d7 }q2|d7 }| j jjrm|d7 }| j jj D ]\}}|d| d| d7 }qX|d7 }| j jjr| j jj D ]&\}}|d|d7 }| D ]\}}|d| d| d7 }q|d7 }qz|d7 }|rd }|d!7 }|D ]/}|d"tj rd#}|d|tjd$d%d  d7 }q|d|tjd$d7 }q|d7 }|r|d&7 }|d'7 }|S )(Nz6# -*- coding: utf-8 -*-
from setuptools import setup

zsetup(
z	    name=z,
z    version=z    description=z    long_description=r   z    author=rm   emailz    author_email=z    maintainer=z    maintainer_email=z    classifiers=[
z        z    ],
z    install_requires=[
'"z    extras_require={
z: [
z            z        ],
z    },
z    entry_points={
z        'console_scripts': [
z            'z = z',
z        'gui_scripts': [
Fz    packages=[
srcT.   z    package_dir={'': 'src'},
z)
)r   r   r   r   descriptionZreadmeauthors_datarE   maintainers_dataZclassifierslistr   extendreplaceZoptional_dependenciesitemsscriptsgui_scriptsentry_points
startswithr4   sep)r,   r   r   r>   r   r   Z
classifierr   Zraw_specifier	specifieroption
specifiersr   Z
object_refgroupr   Z
src_layoutpackager-   r-   r.   r      s   






$&z$SdistBuilder.construct_setup_py_filedict[str, Any]c                 C  s   i }dt tfD ]}tj| j|}tj|r|||< q|g d}| jj	 D ]}|D ]
}tj
|||< q+q'| jjj}|rLt|}||tj| j|< | jjj}|rf|D ]}	t|	}
|
|tj| j|
< qU|S )Nzpyproject.toml)force_includer   )r   r   r4   r3   rE   rootexistsr   Zvcs_exclusion_filesvaluesbasenamer   r   readme_pathr   license_files)r,   r   r   r3   r   Zexclusion_filesZexclusion_filer   r   Zlicense_filer   r-   r-   r.   get_default_build_dataE  s*   


z#SdistBuilder.get_default_build_datatype[SdistBuilderConfig]c                 C  s   t S r%   )rd   )clsr-   r-   r.   get_config_class^  s   zSdistBuilder.get_config_classN)r   r}   )r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   )r-   )r   r   r   r   r   r   )r   r   )r   r   )ra   rb   rc   __doc__ZPLUGIN_NAMEr   r   r   r   ry   r   r   r   classmethodr   r-   r-   r-   r.   r{      s    



	(
pr{   )&
__future__r   r7   r4   r:   r1   
contextlibr   r   ior   r   rI   typingr   r   r	   Zhatchling.builders.configr
   Z#hatchling.builders.plugin.interfacer   Zhatchling.builders.utilsr   r   r   r   r   Zhatchling.metadata.specr   r   Zhatchling.utils.constantsr   r   typesr   r   rd   r{   r-   r-   r-   r.   <module>   s(    ;7