o
    üÞhº  ã                   @  s4  d dl mZ d dl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e d¡Zddœd.dd„Zd/dd„Zej ddœd0d#d$„ƒZ!e!j"ddœd1d%d&„ƒZ#d2d)d*„Z$d3d,d-„Z%dS )4é    )ÚannotationsN)ÚNewTypeÚTupleÚUnionÚcasté   )ÚTagÚ	parse_tag)ÚInvalidVersionÚVersionÚ_TrimmedRelease© Ú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   úO/var/www/html/premium_crap/venv/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_name6   s   r(   T©Ústrip_trailing_zeroÚversionúVersion | strr*   c                C  s   t |r
tt | ƒƒƒS | ƒ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'
    )r   r   )r+   r*   r   r   r   Úcanonicalize_version:   s   r-   c                C  s0   zt | ƒ}W n ty   |  Y S w t||d�S )Nr)   )r   r
   r-   )r+   r*   Úparsedr   r   r   Ú_T   s   þr/   Úfilenameú8tuple[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 rt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): r4   zInvalid build number: z in r   éÿÿÿÿ)Úendswithr   ÚcountÚsplitÚrer!   ÚUNICODEr&   r   r
   Ú_build_tag_regexr   ÚBuildTagÚintÚgroupr	   )r0   ÚdashesÚpartsÚ	name_partr   r+   ÚeÚ
build_partÚbuild_matchÚbuildÚtagsr   r   r   Úparse_wheel_filename^   sH   
ÿ
ÿÿþ€ÿ
ÿ rI   ú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): )r8   Úlenr   Ú
rpartitionr&   r   r
   )r0   Ú	file_stemrC   ÚsepÚversion_partr   r+   rD   r   r   r   Úparse_sdist_filename‰   s0   

ÿÿ
ûÿþ€ÿrP   )r   r   r   r   r   r   )r   r   r   r   )r+   r,   r*   r   r   r   )r+   r   r*   r   r   r   )r0   r   r   r1   )r0   r   r   rJ   )&Ú
__future__r   Ú	functoolsr;   Útypingr   r   r   r   rH   r   r	   r+   r
   r   r   r?   r   r>   r   Ú
ValueErrorr   r   r   ÚcompileÚ
IGNORECASEr    r"   r'   r=   r&   r(   Úsingledispatchr-   Úregisterr/   rI   rP   r   r   r   r   Ú<module>   s4   
ÿ



ÿ
	+