U
    j5{i°  ã                   @  s(  d dl mZ d dlZd dlmZmZmZmZ ddlm	Z	m
Z
 ddlmZmZmZ eed eeef f ZedeƒZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZe dej¡Ze d¡Ze d¡Zddœddddœdd„Zdddœdd„Zddœddddœd d!„Zdd"d#œd$d%„Zdd&d#œd'd(„Z dS ))é    )ÚannotationsN)ÚNewTypeÚTupleÚUnionÚcasté   )ÚTagÚ	parse_tag)ÚInvalidVersionÚVersionÚ_TrimmedRelease© ÚNormalizedNamec                   @  s   e Zd ZdZdS )ÚInvalidNamezW
    An invalid distribution name; users should refer to the packaging user guide.
    N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   ú3/tmp/pip-unpacked-wheel-gcvfa7ey/packaging/utils.pyr      s   r   c                   @  s   e Zd ZdZdS )ÚInvalidWheelFilenamezM
    An invalid wheel filename was found, users should refer to PEP 427.
    Nr   r   r   r   r   r      s   r   c                   @  s   e Zd ZdZdS )ÚInvalidSdistFilenamez^
    An invalid sdist filename was found, users should refer to the packaging user guide.
    Nr   r   r   r   r   r      s   r   z%[A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9]z+[a-z0-9]|[a-z0-9]([a-z0-9-](?!--))*[a-z0-9]z	(\d+)(.*)F)ÚvalidateÚstrÚbool)Únamer   Úreturnc                C  sT   |rt  | ¡std| ›�ƒ‚|  ¡  dd¡ dd¡}d|krJ| dd¡}q4td|ƒS )Nzname is invalid: Ú_ú-Ú.z--r   )Ú_validate_regexÚ	fullmatchr   ÚlowerÚreplacer   )r   r   Úvaluer   r   r   Úcanonicalize_name*   s    r%   )r   r   c                 C  s   t  | ¡d k	S )N)Ú_normalized_regexr!   )r   r   r   r   Úis_normalized_name7   s    r'   T)Ústrip_trailing_zerozVersion | str)Úversionr(   r   c                C  sH   t | tƒr4zt| ƒ} W n tk
r2   t| ƒ Y S X t|rBt| ƒn| ƒS )a»  
    Return a canonical form of a version as a string.

    >>> canonicalize_version('1.0.1')
    '1.0.1'

    Per PEP 625, versions may have multiple canonical forms, differing
    only by trailing zeros.

    >>> canonicalize_version('1.0.0')
    '1'
    >>> canonicalize_version('1.0.0', strip_trailing_zero=False)
    '1.0.0'

    Invalid versions are returned unaltered.

    >>> canonicalize_version('foo bar baz')
    'foo bar baz'
    )Ú
isinstancer   r   r
   r   )r)   r(   r   r   r   Úcanonicalize_version;   s    
r+   z8tuple[NormalizedName, Version, BuildTag, frozenset[Tag]])Úfilenamer   c              
   C  sH  |   d¡std| ›�ƒ‚| d d… } |  d¡}|dkrDtd| ›�ƒ‚|  d|d ¡}|d }d	|ksxt d
|tj¡d kr†td| ›�ƒ‚t|ƒ}zt|d ƒ}W n2 t	k
rÐ } ztd| ›�ƒ|‚W 5 d }~X Y nX |dk�r,|d }t
 |¡}|d k�rtd|› d| ›�ƒ‚tdt| d¡ƒ| d¡fƒ}	nd}	t|d ƒ}
|||	|
fS )Nz.whlz3Invalid wheel filename (extension must be '.whl'): éüÿÿÿr   )é   é   z0Invalid wheel filename (wrong number of parts): é   r   Ú__z^[\w\d._]*$zInvalid project name: r   z*Invalid wheel filename (invalid version): r/   zInvalid build number: z in ÚBuildTagr   éÿÿÿÿ)Úendswithr   ÚcountÚsplitÚreÚmatchÚUNICODEr%   r   r
   Ú_build_tag_regexr   ÚintÚgroupr	   )r,   ZdashesÚpartsÚ	name_partr   r)   ÚeZ
build_partZbuild_matchÚbuildÚtagsr   r   r   Úparse_wheel_filenameY   sD    
ÿ
ÿÿþ


ÿ rB   ztuple[NormalizedName, Version]c              
   C  s¼   |   d¡r| d tdƒ … }n,|   d¡r<| d tdƒ … }ntd| ›�ƒ‚| d¡\}}}|sltd| ›�ƒ‚t|ƒ}zt|ƒ}W n2 tk
r² } ztd| ›�ƒ|‚W 5 d }~X Y nX ||fS )Nz.tar.gzz.zipz@Invalid sdist filename (extension must be '.tar.gz' or '.zip'): r   zInvalid sdist filename: z*Invalid sdist filename (invalid version): )r4   Úlenr   Ú
rpartitionr%   r   r
   )r,   Z	file_stemr>   ÚsepZversion_partr   r)   r?   r   r   r   Úparse_sdist_filename„   s(    

ÿÿþrF   )!Ú
__future__r   r7   Útypingr   r   r   r   rA   r   r	   r)   r
   r   r   r;   r   r2   r   Ú
ValueErrorr   r   r   ÚcompileÚ
IGNORECASEr    r&   r:   r%   r'   r+   rB   rF   r   r   r   r   Ú<module>   s$   


ÿ+