Skip to content

Commit 910aee3

Browse files
committed
New key 'package-management' for metadata
1 parent 61ad33e commit 910aee3

File tree

8 files changed

+57
-40
lines changed

8 files changed

+57
-40
lines changed

SPECIFICATION.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,9 @@ The tool outputs structured JSON with packages aggregated by scope (project/syst
6969
"packages": [
7070
{ "name": "numpy", "version": "1.3.3", "type": "pip" }
7171
],
72-
"pip": { "location": "/app/venv/lib/python3.12/site-packages", "hash": "sha256:..." }
72+
"package-management": {
73+
"pip": { "location": "/app/venv/lib/python3.12/site-packages", "hash": "sha256:..." }
74+
}
7375
},
7476
"system": {
7577
"packages": [

dependency_resolver/core/orchestrator.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,13 +104,11 @@ def resolve_dependencies(
104104

105105
# Build final result structure matching proposal
106106
if project_packages or project_metadata:
107-
project_section: dict[str, Any] = {"packages": project_packages}
108-
project_section.update(project_metadata)
107+
project_section: dict[str, Any] = {"packages": project_packages, "package-management": project_metadata}
109108
result["project"] = project_section
110109

111110
if system_packages or system_metadata:
112-
system_section: dict[str, Any] = {"packages": system_packages}
113-
system_section.update(system_metadata)
111+
system_section: dict[str, Any] = {"packages": system_packages, "package-management": system_metadata}
114112
result["system"] = system_section
115113

116114
return result

dependency_resolver/core/output_formatter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def create_excerpt(self, dependencies: dict[str, Any], max_deps_per_section: int
3636

3737
for key, value in section_data.items():
3838
if key != "packages":
39-
# Copy metadata (location, hash for project managers)
39+
# Copy metadata (package-management and other metadata)
4040
excerpt[section_name][key] = value
4141

4242
if "packages" in section_data:

docs/guides/quick-start.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,11 @@ The tool outputs JSON with packages organized by scope:
4848
"type": "pip"
4949
}
5050
],
51-
"pip": {
52-
"location": "/path/to/venv/lib/python3.12/site-packages",
53-
"hash": "abc123..."
51+
"package-management": {
52+
"pip": {
53+
"location": "/path/to/venv/lib/python3.12/site-packages",
54+
"hash": "abc123..."
55+
}
5456
}
5557
},
5658
"system": {

docs/technical/adding-new-detectors.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -336,14 +336,14 @@ def has_system_scope(self, executor: EnvironmentExecutor, working_dir: Optional[
336336
def get_dependencies(self, executor: EnvironmentExecutor, working_dir: Optional[str] = None) -> tuple[list[dict[str, Any]], dict[str, Any]]:
337337
if working_dir and self._has_project_files(executor, working_dir):
338338
# Extract project dependencies
339-
packages = [] # List of package dictionaries
339+
packages = []
340340
location = self._resolve_absolute_path(executor, working_dir)
341-
metadata = {"location": location} # Project scope metadata
341+
metadata = {"location": location}
342342
return packages, metadata
343343
else:
344344
# Extract system dependencies
345-
packages = [] # List of package dictionaries
346-
metadata = {} # Empty for system scope
345+
packages = []
346+
metadata = {}
347347
return packages, metadata
348348
```
349349

docs/usage/output-format.md

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@ The dependency-resolver outputs a unified JSON structure that aggregates all pac
1111
"source": { ... },
1212
"project": {
1313
"packages": [...],
14-
"pip": { ... },
15-
"npm": { ... }
14+
"package-management": {
15+
"pip": { ... },
16+
"npm": { ... }
17+
}
1618
},
1719
"system": {
1820
"packages": [...]
@@ -63,13 +65,15 @@ Project-specific packages from all package managers are aggregated in a single a
6365
"type": "npm"
6466
}
6567
],
66-
"pip": {
67-
"location": "/path/to/venv/lib/python3.12/site-packages",
68-
"hash": "def456..."
69-
},
70-
"npm": {
71-
"location": "/app/node_modules",
72-
"hash": "abc123..."
68+
"package-management": {
69+
"pip": {
70+
"location": "/path/to/venv/lib/python3.12/site-packages",
71+
"hash": "def456..."
72+
},
73+
"npm": {
74+
"location": "/app/node_modules",
75+
"hash": "abc123..."
76+
}
7377
}
7478
}
7579
}
@@ -142,9 +146,11 @@ For project-scoped package managers, a location hash is provided in the metadata
142146
{
143147
"project": {
144148
"packages": [...],
145-
"pip": {
146-
"location": "/path/to/venv/lib/python3.12/site-packages",
147-
"hash": "sha256:location-based-hash"
149+
"package-management": {
150+
"pip": {
151+
"location": "/path/to/venv/lib/python3.12/site-packages",
152+
"hash": "sha256:location-based-hash"
153+
}
148154
}
149155
}
150156
}
@@ -197,13 +203,15 @@ Here's a complete example showing the new unified structure:
197203
"type": "npm"
198204
}
199205
],
200-
"pip": {
201-
"location": "/app/venv/lib/python3.12/site-packages",
202-
"hash": "sha256:xyz789..."
203-
},
204-
"npm": {
205-
"location": "/app/node_modules",
206-
"hash": "sha256:npm456..."
206+
"package-management": {
207+
"pip": {
208+
"location": "/app/venv/lib/python3.12/site-packages",
209+
"hash": "sha256:xyz789..."
210+
},
211+
"npm": {
212+
"location": "/app/node_modules",
213+
"hash": "sha256:npm456..."
214+
}
207215
}
208216
},
209217
"system": {
@@ -250,8 +258,9 @@ if "project" in deps:
250258
print(f" {name}: {version} ({pkg_type}) {'' if has_hash else ''}")
251259

252260
# Show metadata for each package manager
253-
for key, value in project.items():
254-
if key != "packages" and isinstance(value, dict):
261+
package_management = project.get("package-management", {})
262+
for key, value in package_management.items():
263+
if isinstance(value, dict):
255264
location = value.get("location", "N/A")
256265
has_hash = "hash" in value
257266
print(f" {key.upper()} location: {location} {'' if has_hash else ''}")

tests/detectors/maven/test_maven_docker_detection.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,10 @@ def _validate_maven_dependencies(self, result: Dict[str, Any]) -> None:
218218
assert len(maven_packages) > 0, "Should have found Maven packages"
219219

220220
# Should have location metadata
221-
assert "maven" in project_result, "Project scope should contain Maven metadata"
222-
maven_metadata = project_result["maven"]
221+
assert "package-management" in project_result, "Project scope should contain package-management metadata"
222+
package_management = project_result["package-management"]
223+
assert "maven" in package_management, "package-management should contain Maven metadata"
224+
maven_metadata = package_management["maven"]
223225
assert "location" in maven_metadata
224226
assert maven_metadata["location"] == "/tmp/test-maven-project"
225227

@@ -260,8 +262,10 @@ def _validate_maven_dependencies_pom_only(self, result: Dict[str, Any]) -> None:
260262
assert len(maven_packages) > 0, "Should have found Maven packages"
261263

262264
# Should have location metadata
263-
assert "maven" in project_result, "Project scope should contain Maven metadata"
264-
maven_metadata = project_result["maven"]
265+
assert "package-management" in project_result, "Project scope should contain package-management metadata"
266+
package_management = project_result["package-management"]
267+
assert "maven" in package_management, "package-management should contain Maven metadata"
268+
maven_metadata = package_management["maven"]
265269
assert "location" in maven_metadata
266270
assert maven_metadata["location"] == "/tmp/test-maven-project"
267271

tests/detectors/npm/test_npm_docker_detection.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,10 @@ def _validate_npm_dependencies(self, result: Dict[str, Any]) -> None:
8080
self.validate_dependency_structure(npm_packages, sample_count=3)
8181

8282
# Should have location metadata
83-
assert "npm" in project_result, "Project scope should contain npm metadata"
84-
npm_metadata = project_result["npm"]
83+
assert "package-management" in project_result, "Project scope should contain package-management metadata"
84+
package_management = project_result["package-management"]
85+
assert "npm" in package_management, "package-management should contain npm metadata"
86+
npm_metadata = package_management["npm"]
8587
assert "location" in npm_metadata, "npm metadata should have location field for project scope"
8688
location = npm_metadata["location"]
8789
assert isinstance(location, str), "Location should be a string"

0 commit comments

Comments
 (0)