Files
t3mp3st/bench/cve-zero/samples/GHSA-fqvv-jvhr-g5jc/source/src/firefighter/raid/models.py
T

84 lines
2.2 KiB
Python

from __future__ import annotations
from typing import TYPE_CHECKING
from django.conf import settings
from django.db import models
from django_stubs_ext.db.models import TypedModelMeta
from firefighter.incidents.models.incident import Incident
from firefighter.jira_app.models import JiraIssue
if TYPE_CHECKING:
from firefighter.incidents.models.impact import Impact # noqa: F401
class JiraTicket(JiraIssue):
"""Jira ticket model."""
# XXX Incident/Impact should be split into new models
incident = models.OneToOneField(
Incident, on_delete=models.CASCADE, related_name="jira_ticket", null=True
)
impacts = models.ManyToManyField["Impact", "JiraTicketImpact"](
"incidents.Impact", through="JiraTicketImpact"
)
# TODO: priority
# Jira Custom fields
business_impact = models.CharField(
max_length=128,
help_text="It maps with customfield_10936",
blank=True,
null=True,
default="",
)
class Meta(TypedModelMeta):
verbose_name = "Jira ticket"
verbose_name_plural = "Jira tickets"
def get_absolute_url(self) -> str:
return self.url
@property
def url(self) -> str:
return f"{settings.RAID_JIRA_API_URL}/browse/{self.key}"
class JiraTicketImpact(models.Model):
jira_ticket = models.ForeignKey(
"JiraTicket", on_delete=models.CASCADE
)
impact = models.ForeignKey(
"incidents.Impact", on_delete=models.CASCADE
)
def __str__(self) -> str:
return f"{self.jira_ticket.key}: {self.impact}"
class FeatureTeam(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=80)
jira_project_key = models.CharField(
max_length=10,
unique=True,
)
class Meta(TypedModelMeta):
unique_together = ("name", "jira_project_key")
verbose_name = "Feature Team"
verbose_name_plural = "Feature Teams"
def __str__(self) -> str:
return self.name
@property
def get_team(self) -> str:
return f"{self.name} {self.jira_project_key}"
@property
def get_key(self) -> str:
return f"{self.jira_project_key}"