Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions vulnerabilities/migrations/0144_curator_advisoryv2_curator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Generated by Django 5.2.11 on 2026-10-08 03:37

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
(
"vulnerabilities",
"0143_remove_impactedpackageaffecting_vulnerabili_impacte_1904b9_idx_and_more",
),
]

operations = [
migrations.CreateModel(
name="Curator",
fields=[
(
"id",
models.AutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
(
"name",
models.CharField(help_text="Name of the curator.", max_length=100, unique=True),
),
(
"created_at",
models.DateTimeField(
auto_now_add=True,
help_text="Timestamp indicating when this curator was added.",
),
),
],
),
migrations.AddField(
model_name="advisoryv2",
name="curator",
field=models.ForeignKey(
blank=True,
help_text="The curator who submitted this curation advisory.",
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="curations",
to="vulnerabilities.curator",
),
),
]
27 changes: 27 additions & 0 deletions vulnerabilities/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2923,6 +2923,24 @@ def to_dict(self):
}


class Curator(models.Model):
"""A person who submits curations for advisories."""

name = models.CharField(
max_length=100,
unique=True,
help_text="Name of the curator.",
)

created_at = models.DateTimeField(
auto_now_add=True,
help_text="Timestamp indicating when this curator was added.",
)

def __str__(self):
return self.name


class AdvisoryV2QuerySet(BaseQuerySet):
def latest_for_avid(self, avid: str):
try:
Expand Down Expand Up @@ -3229,6 +3247,15 @@ class AdvisoryV2(models.Model):
help_text="Indicates whether this is a curation advisory.",
)

curator = models.ForeignKey(
Curator,
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name="curations",
help_text="The curator who submitted this curation advisory.",
)

date_published = models.DateTimeField(
blank=True,
null=True,
Expand Down
15 changes: 15 additions & 0 deletions vulnerabilities/tests/test_curator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import pytest

from vulnerabilities.models import Curator


@pytest.mark.django_db
def test_curator_str_returns_name():
curator = Curator.objects.create(name="John")
assert str(curator) == "John"


@pytest.mark.django_db
def test_curator_has_no_curations_by_default():
curator = Curator.objects.create(name="John")
assert curator.curations.count() == 0