Files
2025-04-30 08:48:49 -05:00

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)