@@ -66,6 +66,10 @@ class Version:
66
66
"""
67
67
68
68
__slots__ = ("_major" , "_minor" , "_patch" , "_prerelease" , "_build" )
69
+
70
+ #: The names of the different parts of a version
71
+ NAMES = tuple ([item [1 :] for item in __slots__ ])
72
+
69
73
#: Regex for number in a prerelease
70
74
_LAST_NUMBER = re .compile (r"(?:[^\d]*(\d+)[^\d]*)+" )
71
75
#: Regex template for a semver version
@@ -398,13 +402,9 @@ def next_version(self, part: str, prerelease_token: str = "rc") -> "Version":
398
402
:param prerelease_token: prefix string of prerelease, defaults to 'rc'
399
403
:return: new object with the appropriate part raised
400
404
"""
401
- validparts = {
402
- "major" ,
403
- "minor" ,
404
- "patch" ,
405
- "prerelease" ,
406
- # "build", # currently not used
407
- }
405
+ cls = type (self )
406
+ # "build" is currently not used, that's why we use [:-1]
407
+ validparts = cls .NAMES [:- 1 ]
408
408
if part not in validparts :
409
409
raise ValueError (
410
410
"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":
419
419
):
420
420
return version .replace (prerelease = None , build = None )
421
421
422
- if part in ("major" , "minor" , "patch" ):
422
+ # Only check the main parts:
423
+ if part in cls .NAMES [:3 ]:
423
424
return getattr (version , "bump_" + part )()
424
425
425
426
if not version .prerelease :
0 commit comments