diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5f9d513f..c58ad806 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -41,8 +41,8 @@ repos: - repo: local hooks: - - id: pyproject.toml - name: pyproject.toml + - id: generate_requirements.py + name: generate_requirements.py language: system entry: python tools/generate_requirements.py - files: "pyproject.toml|requirements/.*\\.txt|tools/.*generate.*" + files: "pyproject.toml|requirements/.*\\.txt|tools/generate_requirements.py" diff --git a/pyproject.toml b/pyproject.toml index 2dedbcfe..70bfbded 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,6 +43,10 @@ Homepage = 'https://numpydoc.readthedocs.io' Source = 'https://github.com/numpy/numpydoc/' [project.optional-dependencies] +developer = [ + 'pre-commit>=3.3', + "tomli; python_version < '3.11'", +] doc = [ 'numpy>=1.22', 'matplotlib>=3.5', diff --git a/requirements/default.txt b/requirements/default.txt new file mode 100644 index 00000000..1b80561c --- /dev/null +++ b/requirements/default.txt @@ -0,0 +1,6 @@ +# Generated via tools/generate_requirements.py and pre-commit hook. +# Do not edit this file; modify pyproject.toml instead. +sphinx>=5 +Jinja2>=2.10 +tabulate>=0.8.10 +tomli>=1.1.0;python_version<'3.11' diff --git a/requirements/developer.txt b/requirements/developer.txt index fb283a26..dbeefe57 100644 --- a/requirements/developer.txt +++ b/requirements/developer.txt @@ -1,2 +1,4 @@ +# Generated via tools/generate_requirements.py and pre-commit hook. +# Do not edit this file; modify pyproject.toml instead. pre-commit>=3.3 tomli; python_version < '3.11' diff --git a/requirements/doc.txt b/requirements/doc.txt index df1d26ef..de4cdc1f 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -1,4 +1,5 @@ -# Generated from pyproject.toml +# Generated via tools/generate_requirements.py and pre-commit hook. +# Do not edit this file; modify pyproject.toml instead. numpy>=1.22 matplotlib>=3.5 pydata-sphinx-theme>=0.13 diff --git a/requirements/test.txt b/requirements/test.txt index 27e43374..2a9e670f 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,4 +1,5 @@ -# Generated from pyproject.toml +# Generated via tools/generate_requirements.py and pre-commit hook. +# Do not edit this file; modify pyproject.toml instead. pytest pytest-cov matplotlib diff --git a/tools/generate_requirements.py b/tools/generate_requirements.py index 4e24ed45..388d2ccc 100755 --- a/tools/generate_requirements.py +++ b/tools/generate_requirements.py @@ -12,11 +12,28 @@ except ImportError: sys.exit("Please install `tomli` first: `pip install tomli`") -repo_dir = (Path(__file__).parent / "..").resolve() -req_dir = repo_dir / "requirements" -pyproject = toml.loads((repo_dir / "pyproject.toml").read_text()) - -for key, opt_list in pyproject["project"]["optional-dependencies"].items(): - lines = ["# Generated from pyproject.toml"] + opt_list - req_fname = req_dir / f"{key}.txt" - req_fname.write_text("\n".join(lines) + "\n") +script_pth = Path(__file__) +repo_dir = script_pth.parent.parent +script_relpth = script_pth.relative_to(repo_dir) +header = [ + f"# Generated via {script_relpth.as_posix()} and pre-commit hook.", + "# Do not edit this file; modify pyproject.toml instead.", +] + + +def generate_requirement_file(name: str, req_list: list[str]) -> None: + req_fname = repo_dir / "requirements" / f"{name}.txt" + req_fname.write_text("\n".join(header + req_list) + "\n") + + +def main() -> None: + pyproject = toml.loads((repo_dir / "pyproject.toml").read_text()) + + generate_requirement_file("default", pyproject["project"]["dependencies"]) + + for key, opt_list in pyproject["project"]["optional-dependencies"].items(): + generate_requirement_file(key, opt_list) + + +if __name__ == "__main__": + main()