U
    42i                     @  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-7wv4vqcv/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rt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$   


+