Skip to content

Commit 7a1f59b

Browse files
authored
Feature/649 restrict noxconfig usage (#650)
* Restrict noxconfig usage via the import linter to only exasol.toolbox.nox modules
1 parent 4b1640d commit 7a1f59b

10 files changed

Lines changed: 36 additions & 15 deletions

File tree

.import_linter_config

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
[importlinter]
22
root_package = exasol.toolbox
3+
include_external_packages = True
34

45
[importlinter:contract:security-contract]
56
name = Security module should not import from toolbox
@@ -14,3 +15,15 @@ ignore_imports =
1415
# importlinter lacks an option to ignore a specific line, so we must ignore this in
1516
# total, as this is needed for Python security audits.
1617
exasol.toolbox.tools.security -> exasol.toolbox.util.dependencies.audit
18+
19+
[importlinter:contract:restrict-noxconfig]
20+
name = Only exasol.toolbox.nox submodules can import noxconfig
21+
type = forbidden
22+
source_modules =
23+
exasol.toolbox
24+
forbidden_modules =
25+
noxconfig
26+
ignore_imports =
27+
# To reduce the effort in using nox sessions (i.e. having to pass the config path
28+
# in each CLI usage), we allow the noxconfig to be imported within these modules.
29+
exasol.toolbox.nox.* -> noxconfig

doc/changes/unreleased.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
11
# Unreleased
2+
3+
## Features
4+
5+
* #649: Restricted noxconfig usage throughout exasol.toolbox to only exasol.toolbox.nox.*

exasol/toolbox/util/dependencies/audit.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,6 @@ def get_vulnerabilities(working_directory: Path) -> list[Vulnerability]:
227227
).vulnerabilities
228228

229229

230-
def get_vulnerabilities_from_latest_tag():
231-
with poetry_files_from_latest_tag() as tmp_dir:
230+
def get_vulnerabilities_from_latest_tag(root_path: Path):
231+
with poetry_files_from_latest_tag(root_path=root_path) as tmp_dir:
232232
return get_vulnerabilities(working_directory=tmp_dir)

exasol/toolbox/util/dependencies/poetry_dependencies.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,8 @@ def get_dependencies(
159159
).direct_dependencies
160160

161161

162-
def get_dependencies_from_latest_tag() -> (
163-
OrderedDict[str, dict[NormalizedPackageStr, Package]]
164-
):
165-
with poetry_files_from_latest_tag() as tmp_dir:
162+
def get_dependencies_from_latest_tag(
163+
root_path: Path,
164+
) -> OrderedDict[str, dict[NormalizedPackageStr, Package]]:
165+
with poetry_files_from_latest_tag(root_path=root_path) as tmp_dir:
166166
return get_dependencies(working_directory=tmp_dir)

exasol/toolbox/util/dependencies/shared_models.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
)
2020

2121
from exasol.toolbox.util.git import Git
22-
from noxconfig import PROJECT_CONFIG
2322

2423
NormalizedPackageStr = NewType("NormalizedPackageStr", str)
2524

@@ -63,10 +62,10 @@ def files(self) -> tuple[str, ...]:
6362

6463

6564
@contextmanager
66-
def poetry_files_from_latest_tag() -> Generator[Path]:
65+
def poetry_files_from_latest_tag(root_path: Path) -> Generator[Path]:
6766
"""Context manager to set up a temporary directory with poetry files from the latest tag"""
6867
latest_tag = Git.get_latest_tag()
69-
path = PROJECT_CONFIG.root_path.relative_to(Git.toplevel())
68+
path = root_path.relative_to(Git.toplevel())
7069
with tempfile.TemporaryDirectory() as tmpdir_str:
7170
tmp_dir = Path(tmpdir_str)
7271
for file in PoetryFiles().files:

exasol/toolbox/util/release/changelog.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ def _describe_dependency_changes(self) -> str:
6868
Describe the dependency changes between the latest tag and the current version
6969
for use in the versioned changes file.
7070
"""
71-
previous_dependencies_in_groups = get_dependencies_from_latest_tag()
71+
previous_dependencies_in_groups = get_dependencies_from_latest_tag(
72+
root_path=self.root_path
73+
)
7274
current_dependencies_in_groups = get_dependencies(
7375
working_directory=self.root_path
7476
)

test/unit/util/dependencies/audit_test.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,9 @@ def test_with_mock(self, sample_vulnerability):
251251
"exasol.toolbox.util.dependencies.audit.audit_poetry_files",
252252
return_value=sample_vulnerability.pip_audit_json,
253253
):
254-
result = get_vulnerabilities_from_latest_tag()
254+
result = get_vulnerabilities_from_latest_tag(
255+
root_path=PROJECT_CONFIG.root_path
256+
)
255257

256258
# if successful, no errors & should be 1 due to mock
257259
assert isinstance(result, list)

test/unit/util/dependencies/poetry_dependencies_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ def test_get_dependencies():
142142

143143

144144
def test_get_dependencies_from_latest_tag():
145-
result = get_dependencies_from_latest_tag()
145+
result = get_dependencies_from_latest_tag(root_path=PROJECT_CONFIG.root_path)
146146

147147
# if successful, no errors & should be non-empty dictionary
148148
assert isinstance(result, dict)

test/unit/util/dependencies/shared_models_test.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
poetry_files_from_latest_tag,
1111
)
1212
from exasol.toolbox.util.git import Git
13+
from noxconfig import PROJECT_CONFIG
1314

1415

1516
class Dummy(BaseModel):
@@ -57,7 +58,7 @@ def test_coordinates():
5758

5859
def test_poetry_files_from_latest_tag():
5960
latest_tag = Git.get_latest_tag()
60-
with poetry_files_from_latest_tag() as tmp_dir:
61+
with poetry_files_from_latest_tag(root_path=PROJECT_CONFIG.root_path) as tmp_dir:
6162
for file in PoetryFiles().files:
6263
assert (tmp_dir / file).is_file()
6364

test/unit/util/release/changelog_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def unreleased_md(changelogs):
7676
def mock_dependencies(dependencies, previous_dependencies):
7777
with mock.patch.multiple(
7878
"exasol.toolbox.util.release.changelog",
79-
get_dependencies_from_latest_tag=lambda: previous_dependencies,
79+
get_dependencies_from_latest_tag=lambda root_path: previous_dependencies,
8080
get_dependencies=lambda working_directory: dependencies,
8181
):
8282
yield
@@ -86,7 +86,7 @@ def mock_dependencies(dependencies, previous_dependencies):
8686
def mock_no_dependencies():
8787
with mock.patch.multiple(
8888
"exasol.toolbox.util.release.changelog",
89-
get_dependencies_from_latest_tag=lambda: {},
89+
get_dependencies_from_latest_tag=lambda root_path: {},
9090
get_dependencies=lambda working_directory: {},
9191
):
9292
yield

0 commit comments

Comments
 (0)