Skip to content

Commit 6d14d58

Browse files
new version
1 parent 9c33b61 commit 6d14d58

File tree

2 files changed

+60
-57
lines changed

2 files changed

+60
-57
lines changed

exasol/toolbox/nox/_dependencies_check.py

Lines changed: 55 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -3,67 +3,69 @@
33
from pathlib import Path
44
import nox
55
from nox import Session
6+
from noxconfig import PROJECT_CONFIG
67

78

89
FILTERS = ['url', 'git', 'path']
910

1011

1112
@nox.session(name="dependencies-check", python=False)
12-
def dependency_check(session: Session):
13-
file = Path("pyproject.toml")
14-
sys.exit(_dependencies_check(file.read_text()))
13+
def dependency_check(session: Session) -> None:
14+
file = Path(PROJECT_CONFIG.root, "pyproject.toml")
15+
output = _dependencies_check(file.read_text())
16+
print("\033[31m"+output) if output else print("\033[32m"+"Success: no wrong dependencies found")
17+
sys.exit(0 if not output else 1)
1518

1619

17-
def _source_filter(version, filters):
18-
output = None
19-
if isinstance(version, dict):
20-
for key in version.keys():
21-
if key in filters:
22-
output = key
23-
return output
20+
def _source_filter(version, filters) -> bool:
21+
for f in filters:
22+
if f in version:
23+
return True
24+
return False
2425

2526

26-
def _dependencies_check(string: str):
27+
def extract_dependencies(section, filters) -> list[str]:
28+
dependencies = []
29+
for name, version in section.items():
30+
if _source_filter(version, filters):
31+
dependencies.append(f"{name} = {version}")
32+
return dependencies
33+
34+
35+
def _dependencies_check(string: str) -> str:
2736
toml = tomlkit.loads(string)
28-
dependencies: list = []
29-
dev_dependencies: list = []
30-
group_dependencies: dict = {}
31-
if "tool" in toml:
32-
if "poetry" in toml["tool"].unwrap():
33-
if "dependencies" in toml["tool"].unwrap()["poetry"]:
34-
for name, version in toml["tool"].unwrap()["poetry"]["dependencies"].items():
35-
key = _source_filter(version, FILTERS)
36-
if key:
37-
dependencies.append(f"{name} = {version}")
38-
39-
if "dev" in toml["tool"].unwrap()["poetry"]:
40-
if "dependencies" in toml["tool"].unwrap()["poetry"]["dev"]:
41-
for name, version in toml["tool"].unwrap()["poetry"]["dev"]["dependencies"].items():
42-
key = _source_filter(version, FILTERS)
43-
if key:
44-
dev_dependencies.append(f"{name} = {version}")
45-
46-
if "group" in toml["tool"].unwrap()["poetry"]:
47-
for group in toml["tool"].unwrap()["poetry"]["group"]:
48-
if "dependencies" in toml["tool"].unwrap()["poetry"]["group"][group]:
49-
for name, version in toml["tool"].unwrap()["poetry"]["group"][group]["dependencies"].items():
50-
key = _source_filter(version, FILTERS)
51-
if key:
52-
if f'[tool.poetry.group.{group}.dependencies]' not in group_dependencies:
53-
group_dependencies[f'[tool.poetry.group.{group}.dependencies]'] = []
54-
group_dependencies[f'[tool.poetry.group.{group}.dependencies]'].append(f"{name} = {version}")
55-
56-
if dependencies or dev_dependencies or group_dependencies:
57-
l = len(dependencies)
58-
m = len(dev_dependencies)
59-
n = 0
60-
for _, dependency in group_dependencies.items():
61-
n += len(dependency)
62-
suffix = "y" if l+m+n == 1 else "ies"
63-
output = f"{l+m+n} illegal dependenc{suffix}:{chr(10)}"
64-
output += ("\n[tool.poetry.dependencies]\n"+"\n".join(dependencies)+"\n") if l > 0 else ""
65-
output += ("\n[tool.poetry.dev.dependencies]\n"+"\n".join(dev_dependencies)+"\n") if m > 0 else ""
66-
output += ("\n".join(f"{chr(10)}{key}{chr(10)}{chr(10).join(value)}"for key, value in group_dependencies.items())) if n > 0 else ""
67-
output += "\n"
68-
return output
69-
return 0
37+
group_dependencies = {}
38+
39+
poetry = toml.get("tool", {}).get("poetry", {})
40+
41+
dependencies = extract_dependencies(poetry.get("dependencies", {}), FILTERS)
42+
43+
dev_section = poetry.get("dev", {}).get("dependencies", {})
44+
dev_dependencies = extract_dependencies(dev_section, FILTERS)
45+
46+
group_section = poetry.get("group", {})
47+
for group, content in group_section.items():
48+
group_deps = extract_dependencies(content.get("dependencies", {}), FILTERS)
49+
if group_deps:
50+
group_key = f'[tool.poetry.group.{group}.dependencies]'
51+
group_dependencies[group_key] = group_deps
52+
53+
total_count = len(dependencies) + len(dev_dependencies) + sum(len(deps) for deps in group_dependencies.values())
54+
if total_count > 0:
55+
suffix = "y" if total_count == 1 else "ies"
56+
output = [f"{total_count} illegal dependenc{suffix}:\n"]
57+
58+
if dependencies:
59+
output.append(f"\n[tool.poetry.dependencies]\n" + "\n".join(dependencies) + "\n")
60+
if dev_dependencies:
61+
output.append(f"\n[tool.poetry.dev.dependencies]\n" + "\n".join(dev_dependencies) + "\n")
62+
for key, value in group_dependencies.items():
63+
output.append(f"\n{key}\n" + "\n".join(value) + "\n")
64+
65+
return "".join(output)
66+
67+
return ""
68+
69+
70+
if __name__ == "__main__":
71+
print(_dependencies_check(Path("pyproject.toml").read_text()))

test/unit/dependencies_check_test.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
_source_filter,
55
_dependencies_check
66
)
7-
import pathlib
87

98

109
@pytest.mark.parametrize(
@@ -59,9 +58,10 @@ def test_dependencies_check(filters, source, expected):
5958
6059
[tool.poetry.group.dev.dependencies]
6160
pytest = ">=7.2.2,<9"
62-
example-path = {path = "../my-package/dist/my-package-0.1.0.tar.gz"}
61+
example-path1 = {path = "../my-package/dist/my-package-0.1.0.tar.gz"}
62+
example-path2 = {path = "../my-package/dist/my-package-0.2.0.tar.gz"}
6363
""",
64-
"""3 illegal dependencies:
64+
"""4 illegal dependencies:
6565
6666
[tool.poetry.dependencies]
6767
example-url = {'url': 'https://example.com/my-package-0.1.0.tar.gz'}
@@ -70,7 +70,8 @@ def test_dependencies_check(filters, source, expected):
7070
example-git = {'git': '[email protected]:requests/requests.git'}
7171
7272
[tool.poetry.group.dev.dependencies]
73-
example-path = {'path': '../my-package/dist/my-package-0.1.0.tar.gz'}
73+
example-path1 = {'path': '../my-package/dist/my-package-0.1.0.tar.gz'}
74+
example-path2 = {'path': '../my-package/dist/my-package-0.2.0.tar.gz'}
7475
"""
7576
),
7677
]

0 commit comments

Comments
 (0)