2626import logging
2727from itertools import chain
2828from typing import Tuple
29+ from typing import Set
2930
3031from django .db import transaction
3132
@@ -68,9 +69,8 @@ class ImportRunner:
6869 - All update and select operations must use indexed columns.
6970 """
7071
71- def __init__ (self , importer : models .Importer , batch_size : int ):
72+ def __init__ (self , importer : models .Importer ):
7273 self .importer = importer
73- self .batch_size = batch_size
7474
7575 def run (self , cutoff_date : datetime .datetime = None ) -> None :
7676 """
@@ -84,9 +84,10 @@ def run(self, cutoff_date: datetime.datetime = None) -> None:
8484 from all Linux distributions that package this kernel version.
8585 """
8686 logger .info (f"Starting import for { self .importer .name } ." )
87- data_source = self .importer .make_data_source (self . batch_size , cutoff_date = cutoff_date )
87+ data_source = self .importer .make_data_source (cutoff_date = cutoff_date )
8888 with data_source :
89- process_advisories (data_source )
89+ advisories = data_source .updated_advisories ()
90+ process_advisories (advisories )
9091 self .importer .last_run = datetime .datetime .now (tz = datetime .timezone .utc )
9192 self .importer .data_source_cfg = dataclasses .asdict (data_source .config )
9293 self .importer .save ()
@@ -108,46 +109,41 @@ def get_vuln_pkg_refs(vulnerability, package):
108109
109110
110111@transaction .atomic
111- def process_advisories (data_source : DataSource ) -> None :
112+ def process_advisories (advisories : Set [ Advisory ] ) -> None :
112113 bulk_create_vuln_pkg_refs = set ()
113- # Treat updated_advisories and added_advisories as same. Eventually
114- # we want to refactor all data sources to provide advisories via a
115- # single method.
116- advisory_batches = chain (data_source .updated_advisories (), data_source .added_advisories ())
117- for batch in advisory_batches :
118- for advisory in batch :
119- vuln , vuln_created = _get_or_create_vulnerability (advisory )
120- for vuln_ref in advisory .references :
121- ref , _ = models .VulnerabilityReference .objects .get_or_create (
122- vulnerability = vuln , reference_id = vuln_ref .reference_id , url = vuln_ref .url
114+ for advisory in advisories :
115+ vuln , vuln_created = _get_or_create_vulnerability (advisory )
116+ for vuln_ref in advisory .references :
117+ ref , _ = models .VulnerabilityReference .objects .get_or_create (
118+ vulnerability = vuln , reference_id = vuln_ref .reference_id , url = vuln_ref .url
119+ )
120+
121+ for score in vuln_ref .severities :
122+ models .VulnerabilitySeverity .objects .update_or_create (
123+ vulnerability = vuln ,
124+ scoring_system = score .system .identifier ,
125+ reference = ref ,
126+ defaults = {"value" : str (score .value )},
123127 )
124128
125- for score in vuln_ref .severities :
126- models .VulnerabilitySeverity .objects .update_or_create (
127- vulnerability = vuln ,
128- scoring_system = score .system .identifier ,
129- reference = ref ,
130- defaults = {"value" : str (score .value )},
131- )
132-
133- for aff_pkg_with_patched_pkg in advisory .affected_packages :
134- vulnerable_package , _ = _get_or_create_package (
135- aff_pkg_with_patched_pkg .vulnerable_package
129+ for aff_pkg_with_patched_pkg in advisory .affected_packages :
130+ vulnerable_package , _ = _get_or_create_package (
131+ aff_pkg_with_patched_pkg .vulnerable_package
132+ )
133+ patched_package = None
134+ if aff_pkg_with_patched_pkg .patched_package :
135+ patched_package , _ = _get_or_create_package (
136+ aff_pkg_with_patched_pkg .patched_package
136137 )
137- patched_package = None
138- if aff_pkg_with_patched_pkg .patched_package :
139- patched_package , _ = _get_or_create_package (
140- aff_pkg_with_patched_pkg .patched_package
141- )
142138
143- prv , _ = models .PackageRelatedVulnerability .objects .get_or_create (
144- vulnerability = vuln ,
145- package = vulnerable_package ,
146- )
139+ prv , _ = models .PackageRelatedVulnerability .objects .get_or_create (
140+ vulnerability = vuln ,
141+ package = vulnerable_package ,
142+ )
147143
148- if patched_package :
149- prv .patched_package = patched_package
150- prv .save ()
144+ if patched_package :
145+ prv .patched_package = patched_package
146+ prv .save ()
151147
152148 models .PackageRelatedVulnerability .objects .bulk_create (
153149 [i .to_model_object () for i in bulk_create_vuln_pkg_refs ]
0 commit comments