48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
# uncompyle6 version 3.9.2
|
|
# Python bytecode version base 3.7.0 (3394)
|
|
# Decompiled from: Python 3.8.19 (default, Mar 20 2024, 15:27:52)
|
|
# [Clang 14.0.6 ]
|
|
# Embedded file name: /var/user/app/device_supervisorbak/device_supervisor/lib/packaging/utils.py
|
|
# Compiled at: 2024-04-18 03:12:56
|
|
# Size of source mod 2**32: 1915 bytes
|
|
from __future__ import absolute_import, division, print_function
|
|
import re
|
|
from ._typing import TYPE_CHECKING, cast
|
|
from .version import InvalidVersion, Version
|
|
if TYPE_CHECKING:
|
|
from typing import NewType, Union
|
|
NormalizedName = NewType("NormalizedName", str)
|
|
else:
|
|
NormalizedName = str
|
|
_canonicalize_regex = re.compile("[-_.]+")
|
|
|
|
def canonicalize_name(name):
|
|
value = _canonicalize_regex.sub("-", name).lower()
|
|
return cast("NormalizedName", value)
|
|
|
|
|
|
def canonicalize_version(version):
|
|
"""
|
|
This is very similar to Version.__str__, but has one subtle difference
|
|
with the way it handles the release segment.
|
|
"""
|
|
if not isinstance(version, Version):
|
|
try:
|
|
version = Version(version)
|
|
except InvalidVersion:
|
|
return version
|
|
|
|
parts = []
|
|
if version.epoch != 0:
|
|
parts.append("{0}!".format(version.epoch))
|
|
parts.append(re.sub("(\\.0)+$", "", ".".join((str(x) for x in version.release))))
|
|
if version.pre is not None:
|
|
parts.append("".join((str(x) for x in version.pre)))
|
|
if version.post is not None:
|
|
parts.append(".post{0}".format(version.post))
|
|
if version.dev is not None:
|
|
parts.append(".dev{0}".format(version.dev))
|
|
if version.local is not None:
|
|
parts.append("+{0}".format(version.local))
|
|
return "".join(parts)
|