Skip to content
Snippets Groups Projects
Commit 59965018 authored by Mohammad Torkashvand's avatar Mohammad Torkashvand
Browse files

Add reqs_checker.py for synchronizing dependencies between requirements.txt and setup.py

parent ddfbeef4
No related branches found
No related tags found
1 merge request!59Add reqs_checker.py for synchronizing dependencies between requirements.txt and setup.py
Pipeline #84638 passed
import re
def read_requirements_txt(file_path: str) -> list[str]:
with open(file_path, "r") as file:
lines = file.readlines()
def _dev_req_index() -> int:
return next((i for i, line in enumerate(lines) if "# dev requirements" in line), len(lines))
dev_req_index = _dev_req_index()
assert dev_req_index != len(lines), f"Missing # dev requirements section in {file_path}"
return [line.strip() for line in lines[: _dev_req_index()] if line.strip() and not line.startswith("#")]
def read_requirements_setup(file_path: str) -> list[str]:
with open(file_path, "r") as file:
content = file.read()
# Find and extract the install_requires section
matches = re.findall(r"install_requires=\[(.*?)\]", content, re.DOTALL)
if matches:
return re.findall(r'"([^"]+)"', matches[0])
return []
def compare_requirements(reqs: list[str], setup_reqs: list[str]) -> tuple[set[str], set[str]]:
missing_in_setup = set(reqs) - set(setup_reqs)
missing_in_requirements = set(setup_reqs) - set(reqs)
return missing_in_setup, missing_in_requirements
def main() -> None:
reqs = read_requirements_txt("requirements.txt")
setup_reqs = read_requirements_setup("setup.py")
missing_in_setup, missing_in_requirements = compare_requirements(reqs, setup_reqs)
if not missing_in_setup and not missing_in_requirements:
print("Requirements are synchronized.") # noqa: T201
else:
if missing_in_setup:
print("Missing or different in setup.py:", ", ".join(missing_in_setup)) # noqa: T201
if missing_in_requirements:
print("Missing or different in requirements.txt:", ", ".join(missing_in_requirements)) # noqa: T201
exit(1)
if __name__ == "__main__":
main()
jsonschema~=4.20.0
fastapi~=0.104.1
pydantic~=2.0.3
ansible-runner==2.3.4
uvicorn[standard]~=0.22.0
httpx~=0.25.1
pydantic~=2.5.1
ansible~=9.0.1
requests~=2.31.0
uvicorn~=0.22.0
ncclient~=0.6.13
xmltodict~=0.13.0
netaddr~=0.9.0
jmespath~=1.0.0
dictdiffer~=0.9.0
ansible-runner~=2.3.3
junos-eznc~=2.6.8
jxmlease~=1.0.3
ansible-core~=2.16.0
ansible_merge_vars~=5.0.0
httpx~=0.25.1
GitPython~=3.1.40
jinja2==3.1.2
junos-eznc~=2.6.8
jxmlease~=1.0.3
ncclient~=0.6.13
ruamel.yaml~=0.18.5
xmltodict~=0.13.0
dictdiffer~=0.9.0
jmespath~=1.0.1
# dev requirements
pytest~=7.4.3
Faker~=20.0.3
Faker~=20.1.0
responses~=0.24.1
sphinx~=7.2.6
sphinx-rtd-theme~=1.3.0
requests~=2.31.0
docutils~=0.18.1
isort~=5.12.0
black~=23.11.0
......
......@@ -9,21 +9,21 @@ setup(
url="https://gitlab.geant.org/goat/gap/lso",
packages=find_packages(),
install_requires=[
"jsonschema~=4.18.0",
"fastapi~=0.100.0",
"pydantic~=2.0.2",
"ansible~=8.1.0",
"jsonschema~=4.20.0",
"fastapi~=0.104.1",
"pydantic~=2.5.1",
"ansible~=9.0.1",
"requests~=2.31.0",
"uvicorn~=0.22.0",
"ncclient~=0.6.13",
"xmltodict~=0.13.0",
"netaddr~=0.8.0",
"netaddr~=0.9.0",
"jmespath~=1.0.0",
"dictdiffer~=0.9.0",
"ansible-runner~=2.3.3",
"junos-eznc~=2.6.8",
"jxmlease~=1.0.3",
"ansible-core~=2.15.1",
"ansible-core~=2.16.0",
"ansible_merge_vars~=5.0.0",
"httpx~=0.25.1",
"GitPython~=3.1.40",
......
......@@ -21,6 +21,7 @@ deps =
-r requirements.txt
commands =
python reqs_checker.py
isort -c .
ruff .
black --check .
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment