Coverage for frappe_manager / migration_manager / version.py: 79%
28 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-07-02 18:13 +0530
« prev ^ index » next coverage.py v7.13.5, created at 2026-07-02 18:13 +0530
1from dataclasses import dataclass
2from functools import total_ordering
4from packaging.version import Version as PackagingVersion
7@total_ordering
8@dataclass
9class Version:
10 version: str
12 def __post_init__(self):
13 self._parsed = PackagingVersion(self.version)
15 def __lt__(self, other):
16 if not isinstance(other, Version):
17 return NotImplemented
18 return self._parsed < other._parsed
20 def __eq__(self, other):
21 if not isinstance(other, Version):
22 return NotImplemented
23 return self._parsed == other._parsed
25 def __gt__(self, other):
26 if not isinstance(other, Version):
27 return NotImplemented
28 return self._parsed > other._parsed
30 def __str__(self):
31 return self.version
33 @property
34 def base_version(self) -> str:
35 """Return the base version without any dev/pre/post suffixes (e.g. ``0.19.0``)."""
36 return str(self._parsed.base_version)
38 def version_string(self):
39 return f"v{self.version}"