Skip to content

Commit f0efc3a

Browse files
committed
Refine the DiscoveredDependency.create_from_data method #1145
Signed-off-by: tdruez <tdruez@nexb.com>
1 parent 25e9bf1 commit f0efc3a

2 files changed

Lines changed: 25 additions & 5 deletions

File tree

scanpipe/models.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3777,6 +3777,12 @@ def create_from_data(
37773777
Create and returns a DiscoveredDependency for a `project` from the
37783778
`dependency_data`.
37793779
3780+
The `for_package` and `resolved_to_package` FK can be provided as args or
3781+
in the dependency_data providing the `for_package_uid` and
3782+
`resolve_to_package_uid`.
3783+
Note that a dependency without a `for_package` FK is a project dependency and
3784+
a dependency without a `resolve_to_package` is unresolved.
3785+
37803786
If `strip_datafile_path_root` is True, then `create_from_data()` will
37813787
strip the root path segment from the `datafile_path` of
37823788
`dependency_data` before looking up the corresponding CodebaseResource
@@ -3792,11 +3798,13 @@ def create_from_data(
37923798

37933799
for_package_uid = dependency_data.get("for_package_uid")
37943800
if not for_package and for_package_uid:
3795-
for_package = project_packages_qs.get(package_uid=for_package_uid)
3801+
for_package = project_packages_qs.get_or_none(package_uid=for_package_uid)
37963802

3797-
resolved_to_uid = dependency_data.get("resolved_to_uid")
3798-
if not resolved_to_package and resolved_to_uid:
3799-
resolved_to_package = project_packages_qs.get(package_uid=resolved_to_uid)
3803+
resolve_to_package_uid = dependency_data.get("resolve_to_package_uid")
3804+
if not resolved_to_package and resolve_to_package_uid:
3805+
resolved_to_package = project_packages_qs.get_or_none(
3806+
package_uid=resolve_to_package_uid
3807+
)
38003808

38013809
datafile_path = dependency_data.get("datafile_path")
38023810
if not datafile_resource and datafile_path:

scanpipe/tests/test_models.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2704,10 +2704,11 @@ def test_scanpipe_discovered_package_model_create_from_data_missing_type(self):
27042704
def test_scanpipe_discovered_dependency_model_create_from_data(self):
27052705
project1 = Project.objects.create(name="Analysis")
27062706

2707-
DiscoveredPackage.create_from_data(project1, package_data1)
2707+
package1 = DiscoveredPackage.create_from_data(project1, package_data1)
27082708
CodebaseResource.objects.create(
27092709
project=project1, path="daglib-0.3.2.tar.gz-extract/daglib-0.3.2/PKG-INFO"
27102710
)
2711+
# Unresolved dependency
27112712
dependency = DiscoveredDependency.create_from_data(
27122713
project1, dependency_data1, strip_datafile_path_root=False
27132714
)
@@ -2731,6 +2732,17 @@ def test_scanpipe_discovered_dependency_model_create_from_data(self):
27312732
dependency.datafile_path,
27322733
)
27332734
self.assertEqual("pypi_sdist_pkginfo", dependency.datasource_id)
2735+
self.assertFalse(dependency.is_project_dependency)
2736+
self.assertTrue(dependency.is_for_package)
2737+
self.assertFalse(dependency.is_resolved_to_package)
2738+
2739+
# Resolved project dependency, resolved_to_package provided as arg
2740+
dependency2 = DiscoveredDependency.create_from_data(
2741+
project1, dependency_data={}, resolved_to_package=package1
2742+
)
2743+
self.assertTrue(dependency2.is_project_dependency)
2744+
self.assertFalse(dependency2.is_for_package)
2745+
self.assertTrue(dependency2.is_resolved_to_package)
27342746

27352747
def test_scanpipe_discovered_package_model_unique_package_uid_in_project(self):
27362748
project1 = Project.objects.create(name="Analysis")

0 commit comments

Comments
 (0)