Add utils module
This commit is contained in:
37
depaudit/utils/version.py
Normal file
37
depaudit/utils/version.py
Normal file
@@ -0,0 +1,37 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from packaging.version import Version
|
||||
from typing import Optional
|
||||
|
||||
|
||||
def parse_version(version_str: str) -> Optional[Version]:
|
||||
try:
|
||||
return Version(version_str)
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def compare_versions(v1: str, v2: str) -> int:
|
||||
parsed_v1 = parse_version(v1)
|
||||
parsed_v2 = parse_version(v2)
|
||||
if parsed_v1 is None or parsed_v2 is None:
|
||||
return 0
|
||||
if parsed_v1 < parsed_v2:
|
||||
return -1
|
||||
elif parsed_v1 > parsed_v2:
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
def is_version_outdated(current: str, latest: str) -> bool:
|
||||
return compare_versions(current, latest) < 0
|
||||
|
||||
|
||||
def extract_version_from_specifier(specifier: str) -> Optional[str]:
|
||||
if not specifier:
|
||||
return None
|
||||
operators = ["===", "==", ">=", "<=", "~=", "!=", ">", "<", "^", "~"]
|
||||
for op in operators:
|
||||
if specifier.startswith(op):
|
||||
return specifier[len(op):].strip()
|
||||
return specifier.strip()
|
||||
Reference in New Issue
Block a user