update get_min_versions

This commit is contained in:
Chester Curme 2025-02-03 13:22:53 -05:00
parent 701387066c
commit dfce027c57

View File

@ -1,3 +1,4 @@
from collections import defaultdict
import sys import sys
from typing import Optional from typing import Optional
@ -95,6 +96,23 @@ def get_minimum_version(package_name: str, spec_string: str) -> Optional[str]:
return str(min(valid_versions)) if valid_versions else None return str(min(valid_versions)) if valid_versions else None
def _check_python_version_from_requirement(
requirement: Requirement, python_version: str
) -> bool:
if not requirement.marker:
return True
else:
marker_str = str(requirement.marker)
if "python_full_version" in marker_str:
python_version_str = "".join(
char
for char in marker_str
if char.isdigit() or char in (".", "<", ">", "=", ",")
)
return check_python_version(python_version, python_version_str)
return True
def get_min_version_from_toml( def get_min_version_from_toml(
toml_path: str, toml_path: str,
versions_for: str, versions_for: str,
@ -106,10 +124,10 @@ def get_min_version_from_toml(
with open(toml_path, "rb") as file: with open(toml_path, "rb") as file:
toml_data = tomllib.load(file) toml_data = tomllib.load(file)
dependencies = {} dependencies = defaultdict(list)
for dep in toml_data["project"]["dependencies"]: for dep in toml_data["project"]["dependencies"]:
requirement = Requirement(dep) requirement = Requirement(dep)
dependencies[requirement.name] = requirement dependencies[requirement.name].append(requirement)
# Initialize a dictionary to store the minimum versions # Initialize a dictionary to store the minimum versions
min_versions = {} min_versions = {}
@ -124,14 +142,11 @@ def get_min_version_from_toml(
if lib in dependencies: if lib in dependencies:
if include and lib not in include: if include and lib not in include:
continue continue
requirement = dependencies[lib] requirements = dependencies[lib]
# TODO: fix this for requirement in requirements:
# if requirement.marker and not requirement.marker.evaluate( if _check_python_version_from_requirement(requirement, python_version):
# {"python_version": python_version} version_string = str(requirement.specifier)
# ): break
# continue
# Get the version string
version_string = str(requirement.specifier)
# Use parse_version to get the minimum supported version from version_string # Use parse_version to get the minimum supported version from version_string
min_version = get_minimum_version(lib, version_string) min_version = get_minimum_version(lib, version_string)