Your IP : 216.73.217.13


Current Path : /snap/certbot/current/lib64/python3.12/site-packages/packaging/__pycache__/
Upload File :
Current File : //snap/certbot/current/lib64/python3.12/site-packages/packaging/__pycache__/utils.cpython-312.pyc

�

�jx&����ddlmZddlZddlmZmZmZmZddlm	Z	m
Z
mZddlm
Z
mZmZgd�Zdd�Zeed	eeeffZed
e�Z	Gd�de�ZGd
�de�ZGd�de�Zej4dej6ej8z�Zej4dej8�Zej4dej8�Zdd�dd�Z d d�Z!dd�					d!d�Z"dd�					d"d�Z#d#d�Z$y)$�)�annotationsN)�NewType�Tuple�Union�cast�)�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��tS)N)�__all__���/build/snapcraft-certbot-54d6d23c1eba5f776fc280588daee8b3/parts/certbot/install/lib/python3.12/site-packages/packaging/utils.py�__dir__rs���Nrrrc��eZdZdZy)rzW
    An invalid distribution name; users should refer to the packaging user guide.
    N��__name__�
__module__�__qualname__�__doc__rrrrr'���rrc��eZdZdZy)rzM
    An invalid wheel filename was found, users should refer to PEP 427.
    Nr rrrrr-r%rrc��eZdZdZy)rz^
    An invalid sdist filename was found, users should refer to the packaging user guide.
    Nr rrrrr3r%rrz%[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)�validatec��|r#tj|�std|����|j�j	dd�j	dd�}d|vr|j	dd�}d|vr�td|�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'
    zname is invalid: �_�-�.z--r)�_validate_regex�	fullmatchr�lower�replacer)�namer(�values   rrrBs|��2��1�1�$�7��-�d�X�6�7�7�
�J�J�L� � ��c�*�2�2�3��<�E�
�%�-��
�
�d�C�(���%�-�� �%�(�(rc�0�tj|�duS)a7
    Check if a name is already normalized (i.e. :func:`canonicalize_name` would
    roundtrip to the same value).

    :param str name: The name to check.

    >>> from packaging.utils import is_normalized_name
    >>> is_normalized_name("requests")
    True
    >>> is_normalized_name("Django")
    False
    N)�_normalized_regexr.)r1s rrrgs���&�&�t�,�D�8�8rT)�strip_trailing_zeroc��t|t�r	t|�}t|rt	|��S|�S#t$rt|�cYSwxYw)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'
    )�
isinstance�strr
rr)�versionr5s  rrrwsU��<�'�3��	 ��g�&�G��+>��w�'�L�L�G�L�L���	 ��w�<��	 �s�9�A�A��validate_orderc���|jd�std|����|dd}|jd�}|dvrtd|����|jd|dz
�}|d	}d
|vs%t	j
d|tj��td|����t|�}	t|d
�}|dk(rc|d}tj|�}	|	�td|�d|����tdt|	jd
��|	jd�f�}
nd}
|d}	t||��}|||
|fS#t$r}td|���|�d}~wwxYw#t$rtd|���d�wxYw)a
    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:: 26.1
       The *validate_order* parameter.
    z.whlz3Invalid wheel filename (extension must be '.whl'): N���r+)��z0Invalid wheel filename (wrong number of parts): �r�__z^[\w\d._]*$zInvalid project name: rz*Invalid wheel filename (invalid version): r?zInvalid build number: z in rr���r:z\Invalid wheel filename (compressed tag set components must be in sorted order per PEP 425): )�endswithr�count�split�re�match�UNICODErr
r�_build_tag_regexr�int�grouprr
)
�filenamer;�dashes�parts�	name_partr1r9�e�
build_part�build_match�build�tag_str�tagss
             rrr�s���Z���V�$�"�A�(��N�
�	
����}�H�
�^�^�C�
 �F�
�V��"�>�x�l�K�
�	
�
�N�N�3���
�+�E��a��I��y��B�H�H�^�Y��
�
�K�S�"�%;�H�<�#H�I�I��Y�'�D���%��(�#����{��1�X�
�&�,�,�Z�8����&�(���D���E��
��Z�#�k�&7�&7��&:�";�[�=N�=N�q�=Q�!R�S�����B�i�G�����@��
�'�5�$�'�'��/��"�8���E�
��	����$��"�*�*2��
7�
��	��s$�%D6�#
E�6	E�?E�E�E/c�b�|jd�r|dtd�}n/|jd�r|dtd�}ntd|����|jd�\}}}|std|����t	|�}	t|�}||fS#t$r}td|���|�d}~wwxYw)a�
    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``), or if it does not
        contain a dash separating the name and the version of the distribution.

    >>> 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

    .. _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+zInvalid sdist filename: z*Invalid sdist filename (invalid version): )rC�lenr�
rpartitionrr
r)rL�	file_stemrO�sep�version_partr1r9rPs        rrr�s���,����#��.��I���/�	�	�	�	�6�	"��^��F��|�,�	�"���|�
�
�	
�$-�#7�#7��#<� �I�s�L��"�%=�h�\�#J�K�K��Y�'�D���,�'��
�'�?�����"�8���E�
��	���s�B�	B.�B)�)B.)�returnz	list[str])r1r8r(�boolr\r)r1r8r\r])r9z
Version | strr5r]r\r8)rLr8r;r]r\z8tuple[NormalizedName, Version, BuildTag, frozenset[Tag]])rLr8r\ztuple[NormalizedName, Version])%�
__future__rrF�typingrrrrrUr	r
rr9rr
rrrrJr8rr�
ValueErrorrrr�compile�
IGNORECASE�ASCIIr-r4rIrrrrrrrr�<module>rds;��
#�	�.�.�3�3�=�=������r��E�#�s�(�O�+�,���)�3�/���
�*���:���:���"�*�*�,�b�m�m�b�h�h�.F����B�J�J�M�r�x�x�X���2�:�:�l�B�H�H�5��6;�")�J
9�"<@�#M�
�#M�48�#M��#M�R!�Y(��Y(��Y(�>�	Y(�x/r