U
    ~f                     @  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 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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 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   N/home/mars/bis/venv/lib/python3.8/site-packages/pip/_vendor/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[-_.]+z/^([a-z0-9]|[a-z0-9]([a-z0-9-](?!--))*[a-z0-9])$z	(\d+)(.*)F)validatestrbool)namer   returnc                C  s6   |rt | std| td|  }tt|S )Nzname is invalid: -)_validate_regexmatchr   _canonicalize_regexsublowerr   r   )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_name5   s    r&   T)strip_trailing_zerozVersion | str)versionr'   r   c                C  s  t | tr2zt| }W q6 tk
r.   |  Y S X n| }g }|jdkrV||j d ddd |jD }|r~t	dd|}|| |j
dk	r|dd	d |j
D  |jdk	r|d
|j  |jdk	r|d|j  |jdk	r|d|j  d|S )z
    This is very similar to Version.__str__, but has one subtle difference
    with the way it handles the release segment.
    r   !.c                 s  s   | ]}t |V  qd S r$   r   .0xr   r   r   	<genexpr>P   s     z'canonicalize_version.<locals>.<genexpr>z(\.0)+$ Nc                 s  s   | ]}t |V  qd S r$   r+   r,   r   r   r   r/   X   s     z.postz.dev+)
isinstancer   r   r
   epochappendjoinreleaserer    prepostdevlocal)r(   r'   parsedpartsZrelease_segmentr   r   r   canonicalize_version9   s,    





r>   z8tuple[NormalizedName, Version, BuildTag, frozenset[Tag]])filenamer   c              
   C  sJ  |  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|  dtt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): rB   zInvalid build number: z in ''r   )endswithr   countsplitr7   r   UNICODEr#   r   r
   _build_tag_regexr   BuildTagintgroupr	   )r?   dashesr=   	name_partr   r(   e
build_partbuild_matchbuildtagsr   r   r   parse_wheel_filenamei   sD    




 rV   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): )rG   lenr   
rpartitionr#   r   r
   )r?   	file_stemrP   sepversion_partr   r(   rQ   r   r   r   parse_sdist_filename   s(    

r\   )!
__future__r   r7   typingr   r   r   r   rU   r   r	   r(   r
   r   rM   r   rL   r   
ValueErrorr   r   r   compile
IGNORECASEr   r   r%   rK   r#   r&   r>   rV   r\   r   r   r   r   <module>   s,   
 


0+