22
33from django .db import migrations , models
44from aboutcode .pipeline import LoopProgress
5+ from datetime import datetime
6+ from datetime import timezone
57
68
79class Migration (migrations .Migration ):
810 """
911 Add url field to the VulnerabilitySeverity model and remove reference foreignkey
10- relationship. Also, add new M2M 'severities' field in Vulnerability and
12+ relationship. Also, add new M2M 'severities' field in Vulnerability and
1113 AffectedByPackageRelatedVulnerability relationship.
1214
1315 To achieve this following model changes and data migrations are applied in chronological order:
@@ -16,10 +18,12 @@ class Migration(migrations.Migration):
1618 - Add 'severities' field to Vulnerability.
1719 - Add 'url' field to VulnerabilitySeverity.
1820 - Data migration to remove corrupted SUSE scores.
21+ - Data migration to enable reprocessing of old suse Advisory on next import.
1922 - Data migration to populate new VulnerabilitySeverity url field using reference.
2023 - Data migration to populate Vulnerability 'severities' M2M relationship.
2124 - Delete VulnerabilitySeverity reference field.
2225 """
26+
2327 def remove_inaccurate_suse_score (apps , schema_editor ):
2428 """
2529 Remove inaccurate suse severity scores.
@@ -35,6 +39,22 @@ def reverse_remove_inaccurate_suse_score(apps, schema_editor):
3539 """Reverse data migration not needed for inaccurate severity scores."""
3640 pass
3741
42+ def reprocess_suse_advisory_on_next_import (apps , schema_editor ):
43+ """Clear `date_imported` on old suse advisory to enable reprocessing on next suse import."""
44+
45+ print (f"\n Enable reprocess of old suse advisory on next import." )
46+ Advisory = apps .get_model ("vulnerabilities" , "Advisory" )
47+ Advisory .objects .filter (
48+ created_by = "vulnerabilities.importers.suse_scores.SUSESeverityScoreImporter"
49+ ).update (date_imported = None )
50+
51+ def reverse_reprocess_suse_advisory_on_next_import (apps , schema_editor ):
52+ """Populate `date_imported` on old suse advisory to prevent reprocessing on next suse import."""
53+ Advisory = apps .get_model ("vulnerabilities" , "Advisory" )
54+ Advisory .objects .filter (
55+ created_by = "vulnerabilities.importers.suse_scores.SUSESeverityScoreImporter"
56+ ).update (date_imported = datetime .now (timezone .utc ))
57+
3858 def populate_severity_model_with_url (apps , schema_editor ):
3959 """Populate the new VulnerabilitySeverity `url` field using reference url"""
4060
@@ -181,6 +201,10 @@ def reverse_populate_vulnerability_model_with_severities(apps, schema_editor):
181201 code = remove_inaccurate_suse_score ,
182202 reverse_code = reverse_remove_inaccurate_suse_score ,
183203 ),
204+ migrations .RunPython (
205+ code = reprocess_suse_advisory_on_next_import ,
206+ reverse_code = reverse_reprocess_suse_advisory_on_next_import ,
207+ ),
184208 migrations .RunPython (
185209 code = populate_severity_model_with_url ,
186210 reverse_code = reverse_populate_severity_model_reference_using_url ,
0 commit comments