|
| 1 | +# Generated manually |
| 2 | + |
| 3 | +from django.db import migrations, models |
| 4 | + |
| 5 | + |
| 6 | +def shift_severity_values(apps, schema_editor): |
| 7 | + """ |
| 8 | + Shift existing severity values up by 1 to make room for INFO level. |
| 9 | + OLD -> NEW mapping: |
| 10 | + 0 (LOW) -> 1 |
| 11 | + 1 (MEDIUM) -> 2 |
| 12 | + 2 (HIGH) -> 3 |
| 13 | + 3 (CRITICAL) -> 4 |
| 14 | + -1 (UNDEFINED) stays -1 |
| 15 | + """ |
| 16 | + SecurityException = apps.get_model("core", "SecurityException") |
| 17 | + Finding = apps.get_model("core", "Finding") |
| 18 | + Vulnerability = apps.get_model("core", "Vulnerability") |
| 19 | + |
| 20 | + # Update in reverse order to avoid conflicts |
| 21 | + for model in [SecurityException, Finding, Vulnerability]: |
| 22 | + model.objects.filter(severity=3).update(severity=4) # CRITICAL: 3 -> 4 |
| 23 | + model.objects.filter(severity=2).update(severity=3) # HIGH: 2 -> 3 |
| 24 | + model.objects.filter(severity=1).update(severity=2) # MEDIUM: 1 -> 2 |
| 25 | + model.objects.filter(severity=0).update(severity=1) # LOW: 0 -> 1 |
| 26 | + |
| 27 | + |
| 28 | +class Migration(migrations.Migration): |
| 29 | + dependencies = [ |
| 30 | + ("core", "0103_alter_terminology_field_path"), |
| 31 | + ] |
| 32 | + |
| 33 | + operations = [ |
| 34 | + # Update Finding status choices |
| 35 | + migrations.AlterField( |
| 36 | + model_name="finding", |
| 37 | + name="status", |
| 38 | + field=models.CharField( |
| 39 | + choices=[ |
| 40 | + ("--", "Undefined"), |
| 41 | + ("identified", "Identified"), |
| 42 | + ("confirmed", "Confirmed"), |
| 43 | + ("dismissed", "Dismissed"), |
| 44 | + ("assigned", "Assigned"), |
| 45 | + ("in_progress", "In Progress"), |
| 46 | + ("mitigated", "Mitigated"), |
| 47 | + ("resolved", "Resolved"), |
| 48 | + ("closed", "Closed"), |
| 49 | + ("deprecated", "Deprecated"), |
| 50 | + ], |
| 51 | + default="--", |
| 52 | + max_length=32, |
| 53 | + verbose_name="Status", |
| 54 | + ), |
| 55 | + ), |
| 56 | + # Shift existing severity data |
| 57 | + migrations.RunPython(shift_severity_values, migrations.RunPython.noop), |
| 58 | + # Update severity field choices with INFO level |
| 59 | + migrations.AlterField( |
| 60 | + model_name="finding", |
| 61 | + name="severity", |
| 62 | + field=models.SmallIntegerField( |
| 63 | + choices=[ |
| 64 | + (-1, "undefined"), |
| 65 | + (0, "info"), |
| 66 | + (1, "low"), |
| 67 | + (2, "medium"), |
| 68 | + (3, "high"), |
| 69 | + (4, "critical"), |
| 70 | + ], |
| 71 | + default=-1, |
| 72 | + verbose_name="Severity", |
| 73 | + ), |
| 74 | + ), |
| 75 | + migrations.AlterField( |
| 76 | + model_name="securityexception", |
| 77 | + name="severity", |
| 78 | + field=models.SmallIntegerField( |
| 79 | + choices=[ |
| 80 | + (-1, "undefined"), |
| 81 | + (0, "info"), |
| 82 | + (1, "low"), |
| 83 | + (2, "medium"), |
| 84 | + (3, "high"), |
| 85 | + (4, "critical"), |
| 86 | + ], |
| 87 | + default=-1, |
| 88 | + verbose_name="Severity", |
| 89 | + ), |
| 90 | + ), |
| 91 | + migrations.AlterField( |
| 92 | + model_name="vulnerability", |
| 93 | + name="severity", |
| 94 | + field=models.SmallIntegerField( |
| 95 | + choices=[ |
| 96 | + (-1, "undefined"), |
| 97 | + (0, "info"), |
| 98 | + (1, "low"), |
| 99 | + (2, "medium"), |
| 100 | + (3, "high"), |
| 101 | + (4, "critical"), |
| 102 | + ], |
| 103 | + default=-1, |
| 104 | + verbose_name="Severity", |
| 105 | + ), |
| 106 | + ), |
| 107 | + ] |
0 commit comments