dpi-detector/utils/version.py

27 lines
896 B
Python

"""Утилиты версионирования и сравнения semver."""
import re
def is_newer(latest: str, current: str) -> bool:
"""Semver-сравнение: latest > current. Устойчив к 'v', prerelease-суффиксам и мусору."""
try:
def parse(v: str) -> tuple:
clean = v.lstrip("vV").strip()
main_ver = re.split(r"[-+]", clean)[0]
parts = []
for part in main_ver.split("."):
m = re.match(r"^\d+", part)
if m:
parts.append(int(m.group(0)))
while len(parts) < 3:
parts.append(0)
return tuple(parts)
p_lat = parse(latest)
p_cur = parse(current)
if not any(p_lat) or not any(p_cur):
return False
return p_lat > p_cur
except Exception:
return False