summaryrefslogtreecommitdiff
path: root/setuptools/_vendor/packaging/utils.py
diff options
context:
space:
mode:
authorBastian Venthur <bastian.venthur@flixbus.com>2020-02-11 09:55:35 +0100
committerBastian Venthur <bastian.venthur@flixbus.com>2020-02-11 09:55:35 +0100
commit087c3b26eed9b6a8960815c2773edd04b5c91a98 (patch)
treec0b0bf68b6f02980f742611c9232405ab9df299b /setuptools/_vendor/packaging/utils.py
parentc11270aa6bffd8913c6e074f09b9d920c8f19002 (diff)
parenta5dec2f14e3414e4ee5dd146bff9c289d573de9a (diff)
downloadpython-setuptools-git-087c3b26eed9b6a8960815c2773edd04b5c91a98.tar.gz
Merge branch 'master' into fix/1700
Diffstat (limited to 'setuptools/_vendor/packaging/utils.py')
-rw-r--r--setuptools/_vendor/packaging/utils.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/setuptools/_vendor/packaging/utils.py b/setuptools/_vendor/packaging/utils.py
index 942387ce..88418786 100644
--- a/setuptools/_vendor/packaging/utils.py
+++ b/setuptools/_vendor/packaging/utils.py
@@ -5,6 +5,8 @@ from __future__ import absolute_import, division, print_function
import re
+from .version import InvalidVersion, Version
+
_canonicalize_regex = re.compile(r"[-_.]+")
@@ -12,3 +14,44 @@ _canonicalize_regex = re.compile(r"[-_.]+")
def canonicalize_name(name):
# This is taken from PEP 503.
return _canonicalize_regex.sub("-", name).lower()
+
+
+def canonicalize_version(version):
+ """
+ This is very similar to Version.__str__, but has one subtle differences
+ with the way it handles the release segment.
+ """
+
+ try:
+ version = Version(version)
+ except InvalidVersion:
+ # Legacy versions cannot be normalized
+ return version
+
+ parts = []
+
+ # Epoch
+ if version.epoch != 0:
+ parts.append("{0}!".format(version.epoch))
+
+ # Release segment
+ # NB: This strips trailing '.0's to normalize
+ parts.append(re.sub(r"(\.0)+$", "", ".".join(str(x) for x in version.release)))
+
+ # Pre-release
+ if version.pre is not None:
+ parts.append("".join(str(x) for x in version.pre))
+
+ # Post-release
+ if version.post is not None:
+ parts.append(".post{0}".format(version.post))
+
+ # Development release
+ if version.dev is not None:
+ parts.append(".dev{0}".format(version.dev))
+
+ # Local version segment
+ if version.local is not None:
+ parts.append("+{0}".format(version.local))
+
+ return "".join(parts)