|
|
|
__version__ = '1.3.17'
|
|
|
|
|
|
def parse_version_info(version_str: str, length: int = 4) -> tuple:
|
|
"""Parse a version string into a tuple.
|
|
|
|
Args:
|
|
version_str (str): The version string.
|
|
length (int): The maximum number of version levels. Default: 4.
|
|
|
|
Returns:
|
|
tuple[int | str]: The version info, e.g., "1.3.0" is parsed into
|
|
(1, 3, 0, 0, 0, 0), and "2.0.0rc1" is parsed into
|
|
(2, 0, 0, 0, 'rc', 1) (when length is set to 4).
|
|
"""
|
|
from packaging.version import parse
|
|
version = parse(version_str)
|
|
assert version.release, f'failed to parse version {version_str}'
|
|
release = list(version.release)
|
|
release = release[:length]
|
|
if len(release) < length:
|
|
release = release + [0] * (length - len(release))
|
|
if version.is_prerelease:
|
|
release.extend(list(version.pre))
|
|
elif version.is_postrelease:
|
|
release.extend(list(version.post))
|
|
else:
|
|
release.extend([0, 0])
|
|
return tuple(release)
|
|
|
|
|
|
version_info = tuple(int(x) for x in __version__.split('.')[:3])
|
|
|
|
__all__ = ['__version__', 'version_info', 'parse_version_info']
|
|
|