Skip to content

Commit

Permalink
pyln: Add a version parser to pyln-testing
Browse files Browse the repository at this point in the history
We changed the way we configure CLN to run in developer mode, which
promptly broke anything that wasn't v23.11 and later. So we parse the
version, and make it comparable, so we can determine what to do on the
fly, and maintain a better backwards compatibility.

Changelog-Changed: pyln-testing: pyln-testing is now version-aware and can customize the run based on the version.
  • Loading branch information
cdecker committed Jan 23, 2024
1 parent 3cdeb8b commit a2dae52
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 0 deletions.
38 changes: 38 additions & 0 deletions contrib/pyln-testing/pyln/testing/version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@

from dataclasses import dataclass


@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":
if s.startswith('v'):
s = s[1:]

parts = [int(i) for i in s.split('.', 3)]
year, month = parts[0], parts[1]
if len(parts) == 3:
patch = parts[2]
else:
patch = 0

return Version(year=year, month=month, patch=patch)
12 changes: 12 additions & 0 deletions contrib/pyln-testing/tests/test_fixtures.py
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit a2dae52

Please sign in to comment.