o
    i e                     @  st   d dl mZ d dlZd dlZd dlmZ d dlmZ e	dZ
e	dZdddZdddZdddZdddZdS )    )annotationsN)
WheelError)	WheelFilez6^(?P<namever>(?P<name>.+?)-(?P<ver>\d.*?))\.dist-info$s   Build: (\d\w*)$	directorystrdest_dirbuild_number
str | Nonec                   s   fddt  D }t|dkrtd  |s"td  |d }t|d}d}t j |d	}t	|d
}t
| \}	}|	sOtd|W d   n1 sYw   Y  |durd|n|}|dur|rr|d| 7 }||krt	|d}| }
t|
|}
|d |  ||
 W d   n1 sw   Y  t|	}t j|| d| d}t|d}td| dddd |  W d   n1 sw   Y  td dS )aB  Repack a previously unpacked wheel directory into a new wheel file.

    The .dist-info/WHEEL file must contain one or more tags so that the target
    wheel file name can be determined.

    :param directory: The unpacked wheel directory
    :param dest_dir: Destination directory (defaults to the current directory)
    c                   s0   g | ]}t jt j |rt|r|qS  )ospathisdirjoinDIST_INFO_REmatch).0fnr   r
   =/var/www/myenv/lib/python3.10/site-packages/wheel/cli/pack.py
<listcomp>   s    zpack.<locals>.<listcomp>   z)Multiple .dist-info directories found in z#No .dist-info directories found in r   nameverNWHEELrbzCNo tags present in {}/WHEEL; cannot determine target wheel filename-zrb+z.whlwzRepacking wheel as z... T)endflushOK)r   listdirlenr   r   r   groupr   r   open	read_tagsreadformatset_build_numberseektruncatewritecompute_tagliner   printwrite_files)r   r   r   dist_info_dirsdist_info_dirname_versionexisting_build_numberwheel_file_pathftagswheel_file_contenttagline
wheel_pathwfr
   r   r   pack   sN   




	r9   	input_strbytesreturntuple[list[str], str | None]c                 C  sj   g }d}|   D ](}|dr||dd  d q|dr0|dd  d}q||fS )zRead tags from a string.

    :param input_str: A string containing one or more tags, separated by spaces
    :return: A list of tags and a list of build tags
    Ns   Tag:     r   asciis   Build: )
splitlines
startswithappendsplitrstripdecode)r:   r4   r1   liner
   r
   r   r$   L   s   
 
r$   r5   c                 C  s6   |r	d|  dnd}t|| \} }|s| |7 } | S )zCompute a build tag and add/replace/remove as necessary.

    :param wheel_file_content: The contents of .dist-info/WHEEL
    :param build_number: The build tags present in .dist-info/WHEEL
    :return: The (modified) contents of .dist-info/WHEEL
    zBuild: %s
r?       )encodeBUILD_NUM_REsubn)r5   r   replacementnum_replacedr
   r
   r   r'   ^   s   r'   r4   	list[str]c                 C  sX   t dd | D }t dd | D }t dd | D }dd|d|d|gS )zcCompute a tagline from a list of tags.

    :param tags: A list of tags
    :return: A tagline
    c                 S     h | ]	}| d d qS )r   r   rC   r   tagr
   r
   r   	<setcomp>y       z"compute_tagline.<locals>.<setcomp>c                 S  rN   )r   r   rO   rP   r
   r
   r   rR   z   rS   c                 S  rN   )r      rO   rP   r
   r
   r   rR   {   rS   r   .)sortedr   )r4   implsabivers	platformsr
   r
   r   r+   s   s   "r+   )r   r   r   r   r   r	   )r:   r;   r<   r=   )r5   r;   r   r	   r<   r;   )r4   rM   r<   r   )
__future__r   os.pathr   re	wheel.clir   wheel.wheelfiler   compiler   rI   r9   r$   r'   r+   r
   r
   r
   r   <module>   s    



?
