Skip to content

Commit 5d9ba9b

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

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
@@ -867,34 +867,27 @@ def apply_reachability_to_packages_and_dependencies(project, advisory_report):
867867
Update DiscoveredPackage and DiscoveredDependency records by injecting the
868868
computed reachability data into their affected_by_vulnerabilities JSON field.
869869
"""
870-
advisories_list = advisory_report.get("advisories", [])
871-
if not advisories_list:
870+
advisories = advisory_report.get("advisories", [])
871+
if not advisories:
872872
return
873873

874-
advisory_map = {adv["advisory_uid"]: adv for adv in advisories_list}
875-
876-
unsaved_packages = []
877-
for package in project.discoveredpackages.all():
878-
vulns = package.affected_by_vulnerabilities or []
879-
if inject_reachability_data(vulns, advisory_map):
880-
unsaved_packages.append(package)
881-
882-
if unsaved_packages:
883-
DiscoveredPackage.objects.bulk_update(
884-
objs=unsaved_packages,
885-
fields=["affected_by_vulnerabilities"],
886-
batch_size=10,
887-
)
888-
889-
unsaved_deps = []
890-
for dep in project.discovereddependencies.all():
891-
vulns = dep.affected_by_vulnerabilities or []
892-
if inject_reachability_data(vulns, advisory_map):
893-
unsaved_deps.append(dep)
894-
895-
if unsaved_deps:
896-
DiscoveredDependency.objects.bulk_update(
897-
objs=unsaved_deps,
898-
fields=["affected_by_vulnerabilities"],
899-
batch_size=10,
900-
)
874+
advisory_map = {adv["advisory_uid"]: adv for adv in advisories}
875+
targets = (
876+
(project.discoveredpackages.all(), DiscoveredPackage),
877+
(project.discovereddependencies.all(), DiscoveredDependency),
878+
)
879+
880+
for queryset, model in targets:
881+
unsaved = [
882+
item
883+
for item in queryset
884+
if inject_reachability_data(
885+
item.affected_by_vulnerabilities or [], advisory_map
886+
)
887+
]
888+
if unsaved:
889+
model.objects.bulk_update(
890+
objs=unsaved,
891+
fields=["affected_by_vulnerabilities"],
892+
batch_size=10,
893+
)

0 commit comments

Comments
 (0)