o
    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Zd-ddZddd.d#d$Zd/d'd(Zd0d*d+Z dS )1    )annotationsN)NewTypeTupleUnioncast   )Tag	parse_tag)InvalidVersionVersion NormalizedNamec                   @     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   E/var/www/html/dev/env/lib/python3.10/site-packages/packaging/utils.pyr          r   c                   @  r   )InvalidWheelFilenamezM
    An invalid wheel filename was found, users should refer to PEP 427.
    Nr   r   r   r   r   r      r   r   c                   @  r   )InvalidSdistFilenamez^
    An invalid sdist filename was found, users should refer to the packaging user guide.
    Nr   r   r   r   r   r      r   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namestrr   bool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%   c                 C  s   t | d uS N)_normalized_regexr    )r   r   r   r   is_normalized_name5   s   r(   T)strip_trailing_zeroversionVersion | strr)   c                C  s  t | trzt| }W n ty   |  Y S w | }g }|jdkr)||j d ddd |jD }|r=t	dd|}|| |j
durU|dd	d |j
D  |jdurc|d
|j  |jdurq|d|j  |jdu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      | ]}t |V  qd S r&   r   .0xr   r   r   	<genexpr>P       z'canonicalize_version.<locals>.<genexpr>z(\.0)+$ Nc                 s  r.   r&   r/   r0   r   r   r   r3   X   r4   z.postz.dev+)
isinstancer   r   r
   epochappendjoinreleaserer"   prepostdevlocal)r*   r)   parsedpartsrelease_segmentr   r   r   canonicalize_version9   s.   







rD   filename8tuple[NormalizedName, Version, BuildTag, frozenset[Tag]]c              
   C  s<  |  dstd|  | d d } | d}|dvr"td|  | d|d }|d }d	|v s<td
|tjd u rCtd|  t|}zt|d }W n t	yc } ztd|  |d }~ww |dkr|d }t
|}|d u rt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): rI   zInvalid build number: z in ''r   )endswithr   countsplitr<   r    UNICODEr%   r   r
   _build_tag_regexr   BuildTagintgroupr	   )rE   dashesrB   	name_partr   r*   e
build_partbuild_matchbuildtagsr   r   r   parse_wheel_filenamei   sH   


 r]   tuple[NormalizedName, Version]c              
   C  s   |  dr| d td  }n|  dr| d td  }ntd|  |d\}}}|s6td|  t|}z	t|}W ||fS  tyW } ztd|  |d }~ww )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): )rN   lenr   
rpartitionr%   r   r
   )rE   	file_stemrW   sepversion_partr   r*   rX   r   r   r   parse_sdist_filename   s0   


rd   )r   r   r   r   r   r   )r   r   r   r   )r*   r+   r)   r   r   r   )rE   r   r   rF   )rE   r   r   r^   )!
__future__r   r<   typingr   r   r   r   r\   r   r	   r*   r
   r   rT   r   rS   r   
ValueErrorr   r   r   compile
IGNORECASEr   r!   r'   rR   r%   r(   rD   r]   rd   r   r   r   r   <module>   s,   





0+