diff --git a/contrib/pyln-testing/pyln/testing/version.py b/contrib/pyln-testing/pyln/testing/version.py new file mode 100644 index 000000000000..92e3f63c5f23 --- /dev/null +++ b/contrib/pyln-testing/pyln/testing/version.py @@ -0,0 +1,37 @@ + +from dataclasses import dataclass +import re + + +@dataclass +class Version: + year: int + month: int + patch: int = 0 + + def __lt__(self, other): + return [self.year, self.month, self.patch] < [other.year, other.month, other.patch] + + def __gt__(self, other): + return other < self + + def __le__(self, other): + return [self.year, self.month, self.patch] <= [other.year, other.month, other.patch] + + def __ge__(self, other): + return other <= self + + def __eq__(self, other): + return [self.year, self.month] == [other.year, other.month] + + @classmethod + def from_str(cls, s: str) -> "Version": + m = re.search(r'^v(\d+).(\d+).?(\d+)?(rc\d+)?', s) + parts = [int(m.group(i)) for i in range(1, 4) if m.group(i) is not None] + year, month = parts[0], parts[1] + if len(parts) == 3: + patch = parts[2] + else: + patch = 0 + + return Version(year=year, month=month, patch=patch) diff --git a/contrib/pyln-testing/tests/test_fixtures.py b/contrib/pyln-testing/tests/test_fixtures.py new file mode 100644 index 000000000000..60c8d3f771b9 --- /dev/null +++ b/contrib/pyln-testing/tests/test_fixtures.py @@ -0,0 +1,12 @@ +from pyln.testing.version import Version + + +def test_version_parsing(): + cases = [ + ("v24.02", Version(24, 2)), + ("v23.11.2", Version(23, 11, 2)), + ] + + for test_in, test_out in cases: + v = Version.from_str(test_in) + assert test_out == v