o
    Ee                     @   s  d Z ddlZddlmZ ddlmZ ddlmZ eeef Z	e
dejZe
dejZe
d	ejZe
d
ejZdedefddZdedefddZdedefddZdedefddZdedefddZdedefddZdedefddZdedefdd ZdS )!zZ
Helpers for normalization as expected in wheel/sdist/module file names
and core metadata
    N)Path)Union   )	packagingz)^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$z[^A-Z0-9._-]+z
[^A-Z0-9]+z,^v?(?P<safe>(?:[0-9]+!)?[0-9]+(?:\.[0-9]+)*)namereturnc                 C   s   t dd| }| sJ |S )zMake a string safe to be used as Python identifier.
    >>> safe_identifier("12abc")
    '_12abc'
    >>> safe_identifier("__editable__.myns.pkg-78.9.3_local")
    '__editable___myns_pkg_78_9_3_local'
    z
\W|^(?=\d)_)resubisidentifier)r   safe r   Z/var/www/bmteknikk.ddns.net/venv/lib/python3.10/site-packages/setuptools/_normalization.pysafe_identifier   s   r   	componentc                 C   s   t d| S )zEscape a component used as a project name according to Core Metadata.
    >>> safe_name("hello world")
    'hello-world'
    >>> safe_name("hello?world")
    'hello-world'
    >>> safe_name("hello_world")
    'hello_world'
    -)_UNSAFE_NAME_CHARSr
   )r   r   r   r   	safe_name    s   
r   versionc                 C   sR   |  dd}z	ttj|W S  tjjy(   td|}ttj| Y S w )a
  Convert an arbitrary string into a valid version string.
    Can still raise an ``InvalidVersion`` exception.
    To avoid exceptions use ``best_effort_version``.
    >>> safe_version("1988 12 25")
    '1988.12.25'
    >>> safe_version("v0.2.1")
    '0.2.1'
    >>> safe_version("v0.2?beta")
    '0.2b0'
    >>> safe_version("v0.2 beta")
    '0.2b0'
    >>> safe_version("ubuntu lts")
    Traceback (most recent call last):
    ...
    setuptools.extern.packaging.version.InvalidVersion: Invalid version: 'ubuntu.lts'
     .r   )replacestrr   r   VersionInvalidVersionr   r
   )r   vattemptr   r   r   safe_version-   s   r   c                 C   s   zt | W S  tjjyH   | dd}t|}|r(|d }|t|d }nd}| }t	d|
d}d| 
d}t | d|  Y S w )a  Convert an arbitrary string into a version-like string.
    Fallback when ``safe_version`` is not safe enough.
    >>> best_effort_version("v0.2 beta")
    '0.2b0'
    >>> best_effort_version("ubuntu lts")
    '0.dev0+sanitized.ubuntu.lts'
    >>> best_effort_version("0.23ubuntu1")
    '0.23.dev0+sanitized.ubuntu1'
    >>> best_effort_version("0.23-")
    '0.23.dev0+sanitized'
    >>> best_effort_version("0.-_")
    '0.dev0+sanitized'
    >>> best_effort_version("42.+?1")
    '42.dev0+sanitized.1'
    r   r   r   N0z
sanitized.z.dev0+)r   r   r   r   r   _PEP440_FALLBACKsearchlen_NON_ALPHANUMERICr
   strip)r   r   matchr   rest	safe_restlocalr   r   r   best_effort_versionF   s   

r(   extrac                 C   s   t d| d S )zNormalize extra name according to PEP 685
    >>> safe_extra("_FrIeNdLy-._.-bArD")
    'friendly-bard'
    >>> safe_extra("FrIeNdLy-._.-bArD__._-")
    'friendly-bard'
    r   )r"   r
   r#   lower)r)   r   r   r   
safe_extrag   s   r+   valuec                 C   s   |  dddS )zNormalize each component of a filename (e.g. distribution/version part of wheel)
    Note: ``value`` needs to be already normalized.
    >>> filename_component("my-pkg")
    'my_pkg'
    r   r   )r   r#   r,   r   r   r   filename_componentq   s   r.   c                 C      t t| S )zBLike ``safe_name`` but can be used as filename component for wheel)r.   r   r-   r   r   r   
safer_namez   s   r0   c                 C   r/   )zLLike ``best_effort_version`` but can be used as filename component for wheel)r.   r(   r-   r   r   r   safer_best_effort_version   s   r1   )__doc__r	   pathlibr   typingr   externr   r   _PathcompileI_VALID_NAMEr   r"   r   r   r   r   r(   r+   r.   r0   r1   r   r   r   r   <module>   s$    !
	