optimg/build-deps.py
2025-10-22 11:11:46 +02:00

48 lines
1.5 KiB
Python

import argparse
import os
import re
DEPS_REGEX = "dependencies = \[[^\]]*\]"
PYPROJECT_FILENAME = "pyproject.toml"
if __name__ == "__main__":
"""
build-deps retrieves all mandatory requirements in `requirements.txt`
and copies them in `pyproject.toml` dependencies list.
"""
parser = argparse.ArgumentParser()
parser.add_argument("-d", "--dry-run", action="store_true")
args = parser.parse_args()
# read and store requirements
requirements: list[str] = []
with open("requirements.txt", "r") as f:
for d in f.readlines():
d = d.replace("\n", "")
requirements.append(f'"{d}"')
# format requirements for pryproject.toml
deps: str = "dependencies = ["
deps += "\n" if len(requirements) >= 1 else ""
for dep in requirements:
deps += f"\t{dep},\n"
deps += "]"
# get and replace the pyproject.toml content
content: str = ""
with open(PYPROJECT_FILENAME, "r") as f:
content = f.read()
content = re.sub(DEPS_REGEX, deps, content, 1)
# write the new content in a temp file
with open(f"{PYPROJECT_FILENAME}.tmp", "w") as f:
f.write(content)
# if not dry run, override the original pyproject.toml
if not args.dry_run:
try:
os.rename(f"{PYPROJECT_FILENAME}.tmp", PYPROJECT_FILENAME)
except Exception as e:
print(f"error occurred while overriding pyproject file: {e}")
os.remove(f"{PYPROJECT_FILENAME}.tmp")