diff --git a/depaudit/utils/version.py b/depaudit/utils/version.py new file mode 100644 index 0000000..954f605 --- /dev/null +++ b/depaudit/utils/version.py @@ -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()