Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ dependencies = [
excel = ["openpyxl>=3.0"]
parquet = ["pyarrow>=10.0"]
proxy = ["scipy>=1.10"]
benchmark = ["scikit-learn>=1.9.0", "pyyaml>=6.0", "fairlearn>=0.14.0", "matplotlib>=3.11"]
benchmark = ["scikit-learn>=1.8.0", "pyyaml>=6.0", "fairlearn>=0.14.0", "matplotlib>=3.11"]

[project.urls]
Homepage = "https://github.com/yakew7/Fair-Code"
Expand Down
51 changes: 51 additions & 0 deletions tests/test_dependency_versions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
from pathlib import Path
import re


def test_requirements_lock_versions_satisfy_pyproject_minimums():
root = Path(__file__).resolve().parents[1]

pyproject = root / "pyproject.toml"
requirements_lock = root / "requirements-lock.txt"

assert pyproject.is_file(), f"Could not find {pyproject}"
assert requirements_lock.is_file(), f"Could not find {requirements_lock}"

pyproject_text = pyproject.read_text(encoding="utf-8")
lock_text = requirements_lock.read_text(encoding="utf-8")

pyproject_versions = dict(
re.findall(
r'([A-Za-z0-9_.-]+)\s*>=\s*([0-9]+(?:\.[0-9]+)*)',
pyproject_text,
)
)

locked_versions = dict(
re.findall(
r'^([A-Za-z0-9_.-]+)==([0-9]+(?:\.[0-9]+)*)',
lock_text,
re.MULTILINE,
)
)

for dependency, minimum in pyproject_versions.items():
locked = locked_versions.get(dependency)

dependency = normalize_dependency(dependency)

if locked is None:
continue

assert version_tuple(locked) >= version_tuple(minimum), (
f"{dependency} is locked to {locked}, "
f"but pyproject.toml requires >= {minimum}"
)


def version_tuple(version):
return tuple(int(part) for part in version.split("."))


def normalize_dependency(name):
return name.lower().replace("-", "_").replace(".", "_")
Loading