From 86fcf481e35d77802faec227845f05c8a1994e73 Mon Sep 17 00:00:00 2001 From: Tom Schraitle Date: Fri, 23 Dec 2022 16:19:29 +0100 Subject: [PATCH] Introduce public Version.NAMES class variable This class variable contains a tuple of strings that contains the names of all attributes of a Version (like "major", "minor" etc). In cases we need to have dynamical values, this makes it easier to iterate. --- changelog.d/pr389.trivial.rst | 6 ++++++ src/semver/version.py | 17 +++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 changelog.d/pr389.trivial.rst diff --git a/changelog.d/pr389.trivial.rst b/changelog.d/pr389.trivial.rst new file mode 100644 index 00000000..12829855 --- /dev/null +++ b/changelog.d/pr389.trivial.rst @@ -0,0 +1,6 @@ +Add public class variable :data:`Version.NAMES `. + +This class variable contains a tuple of strings that contains the names of +all attributes of a Version (like ``"major"``, ``"minor"`` etc). + +In cases we need to have dynamical values, this makes it easier to iterate. diff --git a/src/semver/version.py b/src/semver/version.py index 96281192..a121d3cf 100644 --- a/src/semver/version.py +++ b/src/semver/version.py @@ -66,6 +66,10 @@ class Version: """ __slots__ = ("_major", "_minor", "_patch", "_prerelease", "_build") + + #: The names of the different parts of a version + NAMES = tuple([item[1:] for item in __slots__]) + #: Regex for number in a prerelease _LAST_NUMBER = re.compile(r"(?:[^\d]*(\d+)[^\d]*)+") #: Regex template for a semver version @@ -398,13 +402,9 @@ def next_version(self, part: str, prerelease_token: str = "rc") -> "Version": :param prerelease_token: prefix string of prerelease, defaults to 'rc' :return: new object with the appropriate part raised """ - validparts = { - "major", - "minor", - "patch", - "prerelease", - # "build", # currently not used - } + cls = type(self) + # "build" is currently not used, that's why we use [:-1] + validparts = cls.NAMES[:-1] if part not in validparts: raise ValueError( "Invalid part. Expected one of {validparts}, but got {part!r}".format( @@ -419,7 +419,8 @@ def next_version(self, part: str, prerelease_token: str = "rc") -> "Version": ): return version.replace(prerelease=None, build=None) - if part in ("major", "minor", "patch"): + # Only check the main parts: + if part in cls.NAMES[:3]: return getattr(version, "bump_" + part)() if not version.prerelease: pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy