Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/packaging/utils.py @ 1:56ad4e20f292 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:32:28 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:d30785e31577 | 1:56ad4e20f292 |
---|---|
1 # This file is dual licensed under the terms of the Apache License, Version | |
2 # 2.0, and the BSD License. See the LICENSE file in the root of this repository | |
3 # for complete details. | |
4 from __future__ import absolute_import, division, print_function | |
5 | |
6 import re | |
7 | |
8 from ._typing import TYPE_CHECKING, cast | |
9 from .version import InvalidVersion, Version | |
10 | |
11 if TYPE_CHECKING: # pragma: no cover | |
12 from typing import NewType, Union | |
13 | |
14 NormalizedName = NewType("NormalizedName", str) | |
15 | |
16 _canonicalize_regex = re.compile(r"[-_.]+") | |
17 | |
18 | |
19 def canonicalize_name(name): | |
20 # type: (str) -> NormalizedName | |
21 # This is taken from PEP 503. | |
22 value = _canonicalize_regex.sub("-", name).lower() | |
23 return cast("NormalizedName", value) | |
24 | |
25 | |
26 def canonicalize_version(_version): | |
27 # type: (str) -> Union[Version, str] | |
28 """ | |
29 This is very similar to Version.__str__, but has one subtle difference | |
30 with the way it handles the release segment. | |
31 """ | |
32 | |
33 try: | |
34 version = Version(_version) | |
35 except InvalidVersion: | |
36 # Legacy versions cannot be normalized | |
37 return _version | |
38 | |
39 parts = [] | |
40 | |
41 # Epoch | |
42 if version.epoch != 0: | |
43 parts.append("{0}!".format(version.epoch)) | |
44 | |
45 # Release segment | |
46 # NB: This strips trailing '.0's to normalize | |
47 parts.append(re.sub(r"(\.0)+$", "", ".".join(str(x) for x in version.release))) | |
48 | |
49 # Pre-release | |
50 if version.pre is not None: | |
51 parts.append("".join(str(x) for x in version.pre)) | |
52 | |
53 # Post-release | |
54 if version.post is not None: | |
55 parts.append(".post{0}".format(version.post)) | |
56 | |
57 # Development release | |
58 if version.dev is not None: | |
59 parts.append(".dev{0}".format(version.dev)) | |
60 | |
61 # Local version segment | |
62 if version.local is not None: | |
63 parts.append("+{0}".format(version.local)) | |
64 | |
65 return "".join(parts) |