Skip to content

Commit 361cad8

Browse files
committed
Simplify the apply_reachability_to_packages_and_dependencies function
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
1 parent d8d48d0 commit 361cad8

1 file changed

Lines changed: 22 additions & 29 deletions

File tree

scanpipe/pipes/reachability.py

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -849,34 +849,27 @@ def apply_reachability_to_packages_and_dependencies(project, advisory_report):
849849
Update DiscoveredPackage and DiscoveredDependency records by injecting the
850850
computed reachability data into their affected_by_vulnerabilities JSON field.
851851
"""
852-
advisories_list = advisory_report.get("advisories", [])
853-
if not advisories_list:
852+
advisories = advisory_report.get("advisories", [])
853+
if not advisories:
854854
return
855855

856-
advisory_map = {adv["advisory_uid"]: adv for adv in advisories_list}
857-
858-
unsaved_packages = []
859-
for package in project.discoveredpackages.all():
860-
vulns = package.affected_by_vulnerabilities or []
861-
if inject_reachability_data(vulns, advisory_map):
862-
unsaved_packages.append(package)
863-
864-
if unsaved_packages:
865-
DiscoveredPackage.objects.bulk_update(
866-
objs=unsaved_packages,
867-
fields=["affected_by_vulnerabilities"],
868-
batch_size=10,
869-
)
870-
871-
unsaved_deps = []
872-
for dep in project.discovereddependencies.all():
873-
vulns = dep.affected_by_vulnerabilities or []
874-
if inject_reachability_data(vulns, advisory_map):
875-
unsaved_deps.append(dep)
876-
877-
if unsaved_deps:
878-
DiscoveredDependency.objects.bulk_update(
879-
objs=unsaved_deps,
880-
fields=["affected_by_vulnerabilities"],
881-
batch_size=10,
882-
)
856+
advisory_map = {adv["advisory_uid"]: adv for adv in advisories}
857+
targets = (
858+
(project.discoveredpackages.all(), DiscoveredPackage),
859+
(project.discovereddependencies.all(), DiscoveredDependency),
860+
)
861+
862+
for queryset, model in targets:
863+
unsaved = [
864+
item
865+
for item in queryset
866+
if inject_reachability_data(
867+
item.affected_by_vulnerabilities or [], advisory_map
868+
)
869+
]
870+
if unsaved:
871+
model.objects.bulk_update(
872+
objs=unsaved,
873+
fields=["affected_by_vulnerabilities"],
874+
batch_size=10,
875+
)

0 commit comments

Comments
 (0)