Skip to content

Commit 55ac847

Browse files
committed
Switch dependencies from list to dict of packages for O(1) retrieval
1 parent 02e5037 commit 55ac847

File tree

2 files changed

+15
-14
lines changed

2 files changed

+15
-14
lines changed

exasol/toolbox/util/dependencies/poetry_dependencies.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,15 @@ def _extract_from_line(line: str) -> Optional[Package]:
9292
return None
9393
return Package(name=split_line[0], version=split_line[1])
9494

95-
def _extract_from_poetry_show(self, output_text: str) -> list[Package]:
96-
return [
97-
package
95+
def _extract_from_poetry_show(self, output_text: str) -> dict[str, Package]:
96+
return {
97+
package.name: package
9898
for line in output_text.splitlines()
9999
if (package := self._extract_from_line(line))
100-
]
100+
}
101101

102102
@property
103-
def direct_dependencies(self) -> dict[str, list[Package]]:
103+
def direct_dependencies(self) -> dict[str, dict[str, Package]]:
104104
dependencies = {}
105105
for group in self.groups:
106106
command = (
@@ -122,7 +122,7 @@ def direct_dependencies(self) -> dict[str, list[Package]]:
122122
return dependencies
123123

124124
@property
125-
def all_dependencies(self) -> dict[str, list[Package]]:
125+
def all_dependencies(self) -> dict[str, dict[str, Package]]:
126126
command = ("poetry", "show", "--no-truncate")
127127
output = subprocess.run(
128128
command,
@@ -133,16 +133,17 @@ def all_dependencies(self) -> dict[str, list[Package]]:
133133
)
134134

135135
direct_dependencies = self.direct_dependencies.copy()
136-
transitive_dependencies = []
136+
137+
transitive_dependencies = {}
137138
names_direct_dependencies = {
138-
dep.name
139-
for group_list in direct_dependencies.values()
140-
for dep in group_list
139+
package_name
140+
for group_list in direct_dependencies
141+
for package_name in group_list
141142
}
142143
for line in output.stdout.splitlines():
143144
dep = self._extract_from_line(line=line)
144145
if dep and dep.name not in names_direct_dependencies:
145-
transitive_dependencies.append(dep)
146+
transitive_dependencies[dep.name] = dep
146147

147148
return direct_dependencies | {TRANSITIVE_GROUP.name: transitive_dependencies}
148149

test/unit/util/dependencies/poetry_dependencies_test.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
BLACK = Package(name="black", version="25.1.0")
2424

2525
DIRECT_DEPENDENCIES = {
26-
MAIN_GROUP.name: [PYLINT],
27-
DEV_GROUP.name: [ISORT],
28-
ANALYSIS_GROUP.name: [BLACK],
26+
MAIN_GROUP.name: {PYLINT.name: PYLINT},
27+
DEV_GROUP.name: {ISORT.name: ISORT},
28+
ANALYSIS_GROUP.name: {BLACK.name: BLACK},
2929
}
3030

3131

0 commit comments

Comments
 (0)