A Python port of the Invisible Internet Project (I2P)
at main 47 lines 1.1 kB view raw
1"""Version comparison for I2P router updates. 2 3Handles semver-like version strings (e.g. "0.9.62", "2.4.0"). 4 5Ported from net.i2p.CoreVersion. 6""" 7 8from __future__ import annotations 9 10from dataclasses import dataclass 11 12 13@dataclass 14class Version: 15 """Parsed version number.""" 16 major: int 17 minor: int 18 patch: int 19 20 def __init__(self, version_str: str) -> None: 21 parts = version_str.strip().split(".") 22 self.major = int(parts[0]) if len(parts) > 0 else 0 23 self.minor = int(parts[1]) if len(parts) > 1 else 0 24 self.patch = int(parts[2]) if len(parts) > 2 else 0 25 26 def __str__(self) -> str: 27 return f"{self.major}.{self.minor}.{self.patch}" 28 29 def as_tuple(self) -> tuple[int, int, int]: 30 return (self.major, self.minor, self.patch) 31 32 33def compare_versions(a: str, b: str) -> int: 34 """Compare two version strings. 35 36 Returns: 37 > 0 if a is newer than b 38 0 if equal 39 < 0 if a is older than b 40 """ 41 va = Version(a).as_tuple() 42 vb = Version(b).as_tuple() 43 if va > vb: 44 return 1 45 elif va < vb: 46 return -1 47 return 0