
    #j/                    .   d dl mZ d dlZd dlmZmZmZ ddlmZm	Z	m
Z
mZ ddlmZmZmZ g dZddZeed	   eeef   f   Z	  ed
e      Z	  G d de      Z G d de      Z G d de      Z ej6                  dej8                  ej:                  z        Z ej6                  dej:                        Z ej6                  dej:                        Z  ej6                  dejB                        Z"ddd dZ#d!dZ$dd	 	 	 	 	 d"dZ%dd	 	 	 	 	 d#dZ&d$dZ'y)%    )annotationsN)NewTypeUnioncast   )
InvalidTagTagUnsortedTagsError	parse_tag)InvalidVersionVersion_TrimmedRelease)
BuildTagInvalidNameInvalidSdistFilenameInvalidWheelFilenameNormalizedNamecanonicalize_namecanonicalize_versionis_normalized_nameparse_sdist_filenameparse_wheel_filenamec                     t         S )N)__all__     S/var/www/oz-panel.ru/ozpay-pub/venv/lib/python3.12/site-packages/packaging/utils.py__dir__r      s    Nr   r   r   c                      e Zd ZdZy)r   zs
    An invalid distribution name; users should refer to the packaging user guide.

    .. versionadded:: 23.2
    N__name__
__module____qualname____doc__r   r   r   r   r   .       r   r   c                      e Zd ZdZy)r   zi
    An invalid wheel filename was found, users should refer to PEP 427.

    .. versionadded:: 20.9
    Nr    r   r   r   r   r   6   r%   r   r   c                      e Zd ZdZy)r   zz
    An invalid sdist filename was found, users should refer to the packaging user guide.

    .. versionadded:: 20.9
    Nr    r   r   r   r   r   >   r%   r   r   z%[a-z0-9]|[a-z0-9][a-z0-9._-]*[a-z0-9]z[a-z0-9]+(?:-[a-z0-9]+)*z	(\d+)(.*)z
^[\w._]+\ZF)validatec                   |r#t         j                  |       st        d|       | j                         j	                  dd      j	                  dd      }d|v r|j	                  dd      }d|v rt        d|      S )a#  
    This function takes a valid Python package or extra name, and returns the
    normalized form of it.

    The return type is typed as :class:`NormalizedName`. This allows type
    checkers to help require that a string has passed through this function
    before use.

    If **validate** is true, then the function will check if **name** is a valid
    distribution name before normalizing.

    :param str name: The name to normalize.
    :param bool validate: Check whether the name is a valid distribution name.
    :raises InvalidName: If **validate** is true and the name is not an
        acceptable distribution name.

    >>> from packaging.utils import canonicalize_name
    >>> canonicalize_name("Django")
    'django'
    >>> canonicalize_name("oslo.concurrency")
    'oslo-concurrency'
    >>> canonicalize_name("requests")
    'requests'

    .. versionadded:: 16.2

    .. versionchanged:: 20.4
       The return type was changed to :class:`NormalizedName`.

    .. versionchanged:: 23.2
       Added the *validate* keyword parameter.
    zname is invalid: _-.z--r   )_validate_regex	fullmatchr   lowerreplacer   )namer(   values      r   r   r   R   s}    B 11$7-dX677 JJL  c*223<E
%-dC( %- %((r   c                0    t         j                  |       duS )a5  
    Check if a name is a normalized project name (i.e. a valid name that
    :func:`canonicalize_name` would roundtrip to the same value).

    The roundtrip only characterizes normalized names for *valid* names. A name
    must start and end with an ASCII letter or digit, which
    :func:`canonicalize_name` does not enforce: it leaves a leading or trailing
    hyphen in place, so such a name roundtrips without being normalized.

    :param str name: The name to check.

    >>> from packaging.utils import canonicalize_name, is_normalized_name
    >>> is_normalized_name("requests")
    True
    >>> is_normalized_name("Django")
    False
    >>> canonicalize_name("_not_legal")
    '-not-legal'
    >>> is_normalized_name("-not-legal")  # roundtrips, but not a valid name
    False

    .. versionadded:: 23.2
    N)_normalized_regexr.   )r1   s    r   r   r      s    0 &&t,D88r   T)strip_trailing_zeroc                   t        | t              r	 t        |       } t        |rt	        |             S |       S # t        $ r t        |       cY S w xY w)a  Return a canonical form of a version as a string.

    This function takes a string representing a package version (or a
    :class:`~packaging.version.Version` instance), and returns the
    normalized form of it. By default, it strips trailing zeros from
    the release segment.

    >>> from packaging.utils import canonicalize_version
    >>> 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'

    >>> canonicalize_version('1.4.0.0.0')
    '1.4'

    .. versionadded:: 17.1

    .. versionchanged:: 21.0
       The return type was narrowed to :class:`str`.

    .. versionchanged:: 22.0
       Added the *strip_trailing_zero* keyword parameter.
    )
isinstancestrr   r   r   )versionr5   s     r   r   r      sV    L '3	 g&G +>w'LLGLL  	 w<	 s   9 AAvalidate_orderc                  | j                  d      st        d|       | dd } | j                  d      }|dvrt        d|       | j                  d|dz
        }|d	   }d
|v st        j                  |      t        d|       t        |      }	 t        |d         }|dk(  rc|d   }t        j                  |      }	|	t        d| d|       t        dt        |	j                  d            |	j                  d      f      }
nd}
|d   }	 t        ||      }|||
|fS # t        $ r}t        d|       |d}~ww xY w# t        $ r t        d|       dt        $ r t        d|       dw xY w)am  
    This function takes the filename of a wheel file, and parses it,
    returning a tuple of name, version, build number, and tags.

    The name part of the tuple is normalized and typed as
    :class:`NormalizedName`. The version portion is an instance of
    :class:`~packaging.version.Version`. The build number is ``()`` if
    there is no build number in the wheel filename, otherwise a
    two-item tuple of an integer for the leading digits and
    a string for the rest of the build number. The tags portion is a
    frozen set of :class:`~packaging.tags.Tag` instances (as the tag
    string format allows multiple tags to be combined into a single
    string).

    If **validate_order** is true, compressed tag set components are
    checked to be in sorted order as required by PEP 425.

    :param str filename: The name of the wheel file.
    :param bool validate_order: Check whether compressed tag set components
        are in sorted order.
    :raises InvalidWheelFilename: If the filename in question
        does not follow the :ref:`wheel specification
        <pypug:binary-distribution-format>`.

    >>> from packaging.utils import parse_wheel_filename
    >>> from packaging.tags import Tag
    >>> from packaging.version import Version
    >>> name, ver, build, tags = parse_wheel_filename("foo-1.0-py3-none-any.whl")
    >>> name
    'foo'
    >>> ver == Version('1.0')
    True
    >>> tags == {Tag("py3", "none", "any")}
    True
    >>> not build
    True

    .. versionadded:: 20.9

    .. versionchanged:: 23.2
       Raises :class:`InvalidWheelFilename` when the version component is invalid.

    .. versionadded:: 26.1
       The *validate_order* parameter.

    .. versionchanged:: 26.3
       Raises :class:`InvalidWheelFilename` when an interpreter component is
       not an identifier, a tag set component is empty, or the project name is
       empty.
    z.whlz3Invalid wheel filename (extension must be '.whl'): Nr+   )      z0Invalid wheel filename (wrong number of parts):    r   __zInvalid project name: r   z*Invalid wheel filename (invalid version): r?   zInvalid build number: z in r   r   r:   z\Invalid wheel filename (compressed tag set components must be in sorted order per PEP 425): z0Invalid wheel filename (invalid tag component): )endswithr   countsplit_wheel_name_regexmatchr   r   r   _build_tag_regexr   intgroupr   r
   r   )filenamer;   dashesparts	name_partr1   r9   e
build_partbuild_matchbuildtag_strtagss                r   r   r      s   n V$"A(N
 	
 }H^^C FV">xlK
 	
 NN3
+EaIy-33I>F"%;H<#HIIY'D%(# {1X
&,,Z8&(DE  Z#k&7&7&:";[=N=Nq=Q!RSBiG
@ '5$''7  "8E
	$  "**27
 	  ">xlK
	s$   D& E &	E/D>>E0E6c                   | j                  d      r| dt        d        }n/| j                  d      r| dt        d        }nt        d|       |j                  d      \  }}}|st        d|       |st        d|       t	        |      }	 t        |      }||fS # t        $ r}t        d|       |d}~ww xY w)	a5  
    This function takes the filename of a sdist file (as specified
    in the `Source distribution format`_ documentation), and parses
    it, returning a tuple of the normalized name and version as
    represented by an instance of :class:`~packaging.version.Version`.

    :param str filename: The name of the sdist file.
    :raises InvalidSdistFilename: If the filename does not end
        with an sdist extension (``.zip`` or ``.tar.gz``), if it does not
        contain a dash separating the name and the version of the distribution,
        if the project name is empty, or if the version portion is not a valid
        version.

    >>> from packaging.utils import parse_sdist_filename
    >>> from packaging.version import Version
    >>> name, ver = parse_sdist_filename("foo-1.0.tar.gz")
    >>> name
    'foo'
    >>> ver == Version('1.0')
    True

    .. versionadded:: 20.9

    .. versionchanged:: 21.0
       Added support for ``.zip`` source distributions.

    .. versionchanged:: 23.2
       Raises :class:`InvalidSdistFilename` when the version component is invalid.

    .. versionchanged:: 26.3
       Raises :class:`InvalidSdistFilename` on an empty project name.

    .. _Source distribution format: https://packaging.python.org/specifications/source-distribution-format/#source-distribution-file-name
    z.tar.gzNz.zipz@Invalid sdist filename (extension must be '.tar.gz' or '.zip'): r+   zInvalid sdist filename: z-Invalid sdist filename (empty project name): z*Invalid sdist filename (invalid version): )rC   lenr   
rpartitionr   r   r   )rK   	file_stemrN   sepversion_partr1   r9   rO   s           r   r   r   2  s    F #.I/				6	"^F|,	"|
 	
 $-#7#7#< IsL"%=h\#JKK";H<H
 	
 Y'D,' '?  "8E
	s   B! !	B>*B99B>)returnz	list[str])r1   r8   r(   boolr[   r   )r1   r8   r[   r\   )r9   zVersion | strr5   r\   r[   r8   )rK   r8   r;   r\   r[   z8tuple[NormalizedName, Version, BuildTag, frozenset[Tag]])rK   r8   r[   ztuple[NormalizedName, Version])(
__future__r   retypingr   r   r   rT   r   r	   r
   r   r9   r   r   r   r   r   tuplerI   r8   r   r   
ValueErrorr   r   r   compile
IGNORECASEASCIIr-   r4   rH   UNICODErF   r   r   r   r   r   r   r   r   <module>rf      s\  
 # 	 ' ' ? ? = = rE#s(O+, )3/* : :  "**,bmmbhh.F BJJ:BHHE 2::lBHH5  BJJ}bjj9  6; *)Z98 <@+M+M48+M+Mb !g(g( g( >	g(T@r   