Skip to content

Commit

Permalink
maint: generate requirements.txt from pyproject.toml
Browse files Browse the repository at this point in the history
  • Loading branch information
oesteban committed Mar 15, 2024
1 parent d5855ae commit e53e988
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 1 deletion.
5 changes: 5 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ jobs:
- checkout:
path: /tmp/src/templateflow

- run:
name: Generate requirements.txt
command: |
python /tmp/src/templateflow/.maint/update_requirements.py
- restore_cache:
keys:
- deps-v10-{{ checksum "/tmp/src/templateflow/requirements.txt"}}-{{ epoch }}
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
# setuptools_scm
templateflow/_version.py

# circleci hash checking
requirements.txt
min-requirements.txt

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
Expand Down
File renamed without changes.
44 changes: 44 additions & 0 deletions .maint/update_requirements.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/usr/bin/env python3
from copy import copy
from pathlib import Path
from packaging.requirements import Requirement, SpecifierSet

try:
from tomllib import loads # Python +3.11
except ImportError:
from pip._vendor.tomli import loads

repo_root = Path(__file__).parent.parent
pyproject = repo_root / "pyproject.toml"
reqs = repo_root / "requirements.txt"
min_reqs = repo_root / "min-requirements.txt"

requirements = [
Requirement(req)
for req in loads(pyproject.read_text())["project"]["dependencies"]
]

script_name = Path(__file__).relative_to(repo_root)


def to_min(req):
if req.specifier:
req = copy(req)
try:
min_spec = [spec for spec in req.specifier if spec.operator in (">=", "~=")][0]
except IndexError:
return req
min_spec._spec = ("==",) + min_spec._spec[1:]
req.specifier = SpecifierSet(str(min_spec))
return req


lines = [f"# Auto-generated by {script_name}", ""]

# Write requirements
lines[1:-1] = [str(req) for req in requirements]
reqs.write_text("\n".join(lines))

# Write minimum requirements
lines[1:-1] = [str(to_min(req)) for req in requirements]
min_reqs.write_text("\n".join(lines))
4 changes: 3 additions & 1 deletion MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
recursive-exclude templateflow/tests *
recursive-exclude templateflow/conf/tests *
recursive-exclude docs/ *

recursive-exclude .circleci/ *
recursive-exclude .github/ *
recursive-exclude .maint/ *

exclude .gitignore .gitattributes .git_archival.txt .travis.yml .zenodo.json codecov.yml update_changes.sh
exclude .gitignore .gitattributes .git_archival.txt .travis.yml .zenodo.json codecov.yml

0 comments on commit e53e988

Please sign in to comment.