"""Core application version details."""
from typing import List, Tuple
from text_lint.exceptions.version import InvalidVersion
try:
from importlib import metadata
except ImportError: # pragma: no cover
import importlib_metadata as metadata # type: ignore[no-redef]
AliasVersionTuple = Tuple[int, int, int]
[Doku]
def string_to_version_tuple(version_string: str) -> AliasVersionTuple:
"""Convert dot separated version strings into a 3 element version tuples.
:param version_string: A string containing a semantic version.
:returns: The version object extracted from the version_string.
:raises: InvalidVersion
"""
version_digits: List[int] = []
if isinstance(version_string, str):
try:
version_digits = [int(digit) for digit in version_string.split(".")]
except ValueError:
pass
if len(version_digits) != 3:
raise InvalidVersion(version_string)
return version_digits[0], version_digits[1], version_digits[2]
[Doku]
def version_tuple_to_string(version_tuple: AliasVersionTuple) -> str:
"""Convert a 3 element version tuple into a dot separated version string.
:param version_tuple: The version object to convert.
:returns: A string representation of the version_tuple.
:raises: InvalidVersion
"""
if not isinstance(version_tuple, tuple) or len(version_tuple) != 3:
raise InvalidVersion(version_tuple)
try:
list(map(int, version_tuple))
except ValueError as exc:
raise InvalidVersion(version_tuple) from exc
return ".".join(map(str, version_tuple))
APPLICATION_VERSION = string_to_version_tuple(metadata.version('text_lint'))