o
    yAf~                     @  sh   d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 G dd deZG dd	 d	e
ZdS )
    )annotationsN)AnyCallable)BuilderConfig)BuilderInterfacec                      sL   e Zd 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 )AppBuilderConfig)z3.11z3.10z3.9z3.8z3.7argsr   kwargsreturnNonec                   s(   t  j|i | d | _d | _d | _d S N)super__init___AppBuilderConfig__scripts!_AppBuilderConfig__python_version _AppBuilderConfig__pyapp_version)selfr   r	   	__class__ ;/usr/lib/python3.10/site-packages/hatchling/builders/app.pyr      s   
zAppBuilderConfig.__init__	list[str]c                 C  s   | j d u r]| jjjj}| jdg }t|ts"d| j	 d}t
|t|dD ](\}}t|ts>d| d| j	 d}t
|||vrOd| j	 d	| }t|q'|rXtt|nt|| _ | j S )
Nscripts Field `tool.hatch.build.targets.z.scripts` must be an array   zScript #z$ of field `tool.hatch.build.targets.z.scripts` must be a stringz2Unknown script in field `tool.hatch.build.targets.z.scripts`: )r   buildermetadatacorer   target_configget
isinstancelistplugin_name	TypeError	enumeratestr
ValueErrorsortedset)r   Zknown_scriptsr   messageiscriptr   r   r   r      s"   


zAppBuilderConfig.scriptsr%   c                 C  s   | j d u r?| jdd}t|tsd| j d}t||s<dtjvr<| j	D ]}| j
jjj|r5|} nq&d}t||| _ | j S )Nzpython-version r   z!.python-version` must be a stringZPYAPP_DISTRIBUTION_SOURCEzLField `project.requires-python` is incompatible with the known distributions)r   r   r   r    r%   r"   r#   osenvironSUPPORTED_VERSIONSr   r   r   Zpython_constraintcontainsr&   )r   python_versionr)   Zsupported_versionr   r   r   r1   .   s   


zAppBuilderConfig.python_versionc                 C  sD   | j d u r| jdd}t|tsd| j d}t||| _ | j S )Nzpyapp-versionr,   r   z .pyapp-version` must be a string)r   r   r   r    r%   r"   r#   )r   pyapp_versionr)   r   r   r   r2   D   s   

zAppBuilderConfig.pyapp_versionr   r   r	   r   r
   r   r
   r   )r
   r%   )
__name__
__module____qualname__r/   r   propertyr   r1   r2   __classcell__r   r   r   r   r      s    r   c                   @  sT   e Zd ZdZdZdddZddd	ZdddZdddZd ddZ	e
d!ddZdS )"
AppBuilderz
    Build applications
    appr
   dict[str, Callable]c                 C  s
   d| j iS NZ	bootstrap)build_bootstrapr   r   r   r   get_version_apiY   s   
zAppBuilder.get_version_apir   c                 C  s   dgS r=   r   r?   r   r   r   get_default_versions\   s   zAppBuilder.get_default_versions	directoryr%   versionsr   c                 C  s4   dd l }tj|d}tj|r|| d S d S )Nr   r;   )shutilr-   pathjoinisdirrmtree)r   rB   rC   rD   app_dirr   r   r   clean_   s
   zAppBuilder.clean
build_datar   c                 K  s  dd l }dd l}tjdd}|s|dsd}t|d}tj|d}tj	|s0t
| tjdk}ttj}	| jj|	d< | jj|	d	< | jjrP| jj|	d
< tjdd}
tjdd}| }|rgdnd}|r|}tj|d}|
rtj||
d|}ntj|d|}|ddd|g}n|}tj|d|}|dddd|g}| jjr|d| jjg | jjr| jjD ]B}t|	}| jjj| |d< | j|||d |
r| d| jj d|
 n| d| jj }tj||r| dn|}||| qnA| j|||	d |
r| jj d| jj d|
 n
| jj d| jj }tj||r+| dn|}||| W d    |S W d    |S 1 sHw   Y  |S )Nr   ZCARGOr,   Zcargoz-Executable `cargo` could not be found on PATHr;   win32ZPYAPP_PROJECT_NAMEZPYAPP_PROJECT_VERSIONZPYAPP_PYTHON_VERSIONZCARGO_BUILD_TARGETZ
PYAPP_REPOz	pyapp.exeZpyappbuildreleasez	--releasez--target-dirbininstallz--forcez--rootz	--versionZPYAPP_EXEC_SPEC)cwdenv-z.exe)rD   tempfiler-   r.   r   whichOSErrorrE   rF   rG   makedirssysplatformdictr   nameversionconfigr1   TemporaryDirectoryr2   extendr   r   cargo_buildmove)r   rB   rK   rD   rT   Z
cargo_pathr)   rI   Z
on_windowsZbase_envZbuild_target	repo_pathtemp_direxe_nameZcontext_dir
target_dirZtemp_exe_pathZinstall_commandr+   rR   Zexe_stemZexe_pathr   r   r   r>   j   sv   




 
*
**zAppBuilder.build_bootstrapr   r	   c                 O  sX   dd l }| jjdk r|j|d< |j|d< |j|i |}|jr*d|j d}t|d S )Nr   stdoutstderrzCompilation failed (code ))
subprocessr;   	verbosityPIPESTDOUTrun
returncoderV   )r   r   r	   ri   processr)   r   r   r   r`      s   

zAppBuilder.cargo_buildtype[AppBuilderConfig]c                 C  s   t S r   )r   )clsr   r   r   get_config_class   s   zAppBuilder.get_config_classN)r
   r<   r4   )rB   r%   rC   r   r
   r   )rB   r%   rK   r   r
   r%   r3   )r
   rp   )r5   r6   r7   __doc__ZPLUGIN_NAMEr@   rA   rJ   r>   r`   classmethodrr   r   r   r   r   r:   R   s    




Or:   )
__future__r   r-   rX   typingr   r   Zhatchling.builders.configr   Z#hatchling.builders.plugin.interfacer   r   r:   r   r   r   r   <module>   s    G