99
1010import logging
1111
12+ from aboutcode .pipeline import LoopProgress
1213from django .db .models import Q
1314
1415from vulnerabilities .models import Advisory
@@ -27,7 +28,7 @@ def steps(cls):
2728
2829 def fill_missing_summaries (self ):
2930 """Find vulnerabilities without summaries and fill them using advisories with the same aliases."""
30- vulnerabilities_qs = Vulnerability .objects .filter (summary = "" ). prefetch_related ( "aliases" )
31+ vulnerabilities_qs = Vulnerability .objects .filter (summary = "" )
3132 self .log (
3233 f"Processing { vulnerabilities_qs .count ()} vulnerabilities without summaries" ,
3334 level = logging .INFO ,
@@ -36,11 +37,13 @@ def fill_missing_summaries(self):
3637 created_by = "nvd_importer" , summary__isnull = False
3738 ).exclude (summary = "" )
3839 self .log (
39- f"Found { nvd_importer_advisories .count ()} advisories from NVD importer" ,
40+ f"Found { nvd_importer_advisories .count ()} advisories with summaries from NVD importer" ,
4041 level = logging .INFO ,
4142 )
4243
43- for vulnerability in vulnerabilities_qs .paginated ():
44+ progress = LoopProgress (total_iterations = vulnerabilities_qs .count (), logger = self .log )
45+
46+ for vulnerability in progress .iter (vulnerabilities_qs .paginated ()):
4447 aliases = vulnerability .aliases .values_list ("alias" , flat = True )
4548 # get alias that start with CVE- with filter
4649 alias = aliases .filter (alias__startswith = "CVE-" ).first ()
@@ -60,6 +63,7 @@ def fill_missing_summaries(self):
6063 # Take the first matching advisory with a summary
6164 # get the advisory that was collected the most recently
6265 best_advisory = matching_advisories .order_by ("-date_collected" ).first ()
66+ # Note: we filtered above to only get non-empty summaries
6367 vulnerability .summary = best_advisory .summary
6468 vulnerability .save ()
6569 self .log (
0 commit comments