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

1from dataclasses import dataclass 

2from functools import total_ordering 

3 

4from packaging.version import Version as PackagingVersion 

5 

6 

7@total_ordering 

8@dataclass 

9class Version: 

10 version: str 

11 

12 def __post_init__(self): 

13 self._parsed = PackagingVersion(self.version) 

14 

15 def __lt__(self, other): 

16 if not isinstance(other, Version): 

17 return NotImplemented 

18 return self._parsed < other._parsed 

19 

20 def __eq__(self, other): 

21 if not isinstance(other, Version): 

22 return NotImplemented 

23 return self._parsed == other._parsed 

24 

25 def __gt__(self, other): 

26 if not isinstance(other, Version): 

27 return NotImplemented 

28 return self._parsed > other._parsed 

29 

30 def __str__(self): 

31 return self.version 

32 

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) 

37 

38 def version_string(self): 

39 return f"v{self.version}"