version always get stringified

This commit is contained in:
J. Nick Koston 2023-10-04 13:54:59 -05:00
parent 4ca87c15a0
commit 2fe52faa04
No known key found for this signature in database
1 changed files with 31 additions and 29 deletions

View File

@ -257,7 +257,7 @@ VERSION_PATTERN = r"""
_VERSION_REGEX = re.compile(r"^\s*" + VERSION_PATTERN + r"\s*$", re.VERBOSE | re.IGNORECASE)
@functools.lru_cache(maxsize=4096)
def _cached_version(version: str) -> Tuple[_Version, CmpKey]:
def _cached_version(version: str) -> Tuple[_Version, CmpKey, str]:
# Validate the version and parse it into pieces
match = _VERSION_REGEX.search(version)
if not match:
@ -285,43 +285,45 @@ def _cached_version(version: str) -> Tuple[_Version, CmpKey]:
_version.local,
)
return _version, key
parts = []
# Epoch
if _version.epoch != 0:
parts.append(f"{_version.epoch}!")
# Release segment
parts.append(".".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(f".post{_version.post}")
# Development release
if _version.dev is not None:
parts.append(f".dev{_version.dev}")
# Local version segment
if _version.local is not None:
parts.append(f"+{_version.local}")
_str = "".join(parts)
return _version, key, _str
class Version(_BaseVersion):
def __init__(self, version: str) -> None:
self._version, self._key = _cached_version(version)
self._version, self._key, self._str = _cached_version(version)
def __repr__(self) -> str:
return f"<Version('{self}')>"
def __str__(self) -> str:
parts = []
# Epoch
if self.epoch != 0:
parts.append(f"{self.epoch}!")
# Release segment
parts.append(".".join(str(x) for x in self.release))
# Pre-release
if self.pre is not None:
parts.append("".join(str(x) for x in self.pre))
# Post-release
if self.post is not None:
parts.append(f".post{self.post}")
# Development release
if self.dev is not None:
parts.append(f".dev{self.dev}")
# Local version segment
if self.local is not None:
parts.append(f"+{self.local}")
return "".join(parts)
return self._str
@property
def epoch(self) -> int: