Skip to content
This repository was archived by the owner on Sep 3, 2025. It is now read-only.
Merged
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
13 changes: 10 additions & 3 deletions src/dispatch/conference/models.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
"""Models for conference resources in the Dispatch application."""

from jinja2 import Template

from pydantic import field_validator
from pydantic import field_validator, ValidationInfo
from sqlalchemy import Column, Integer, String, ForeignKey

from dispatch.database.core import Base
Expand All @@ -11,6 +12,7 @@

class Conference(Base, ResourceMixin):
"""SQLAlchemy model for conference resources."""

id = Column(Integer, primary_key=True)
conference_id = Column(String)
conference_challenge = Column(String, nullable=False, server_default="N/A")
Expand All @@ -20,28 +22,33 @@ class Conference(Base, ResourceMixin):
# Pydantic models...
class ConferenceBase(ResourceBase):
"""Base Pydantic model for conference resources."""

conference_id: str | None = None
conference_challenge: str | None = None


class ConferenceCreate(ConferenceBase):
"""Pydantic model for creating a conference resource."""

pass


class ConferenceUpdate(ConferenceBase):
"""Pydantic model for updating a conference resource."""

pass


class ConferenceRead(ConferenceBase):
"""Pydantic model for reading a conference resource."""

description: str | None = None

@field_validator("description", mode="before")
@classmethod
def set_description(cls, v, values):
def set_description(cls, v, info: ValidationInfo):
"""Sets the description using a Jinja2 template and the conference challenge."""
conference_challenge = info.data.get("conference_challenge")
return Template(INCIDENT_CONFERENCE_DESCRIPTION).render(
conference_challenge=values["conference_challenge"]
conference_challenge=conference_challenge
)
14 changes: 11 additions & 3 deletions src/dispatch/document/models.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
"""Models for document resources in the Dispatch application."""

from datetime import datetime
from collections import defaultdict

from pydantic import field_validator
from pydantic import field_validator, ValidationInfo
from sqlalchemy import (
Column,
ForeignKey,
Expand Down Expand Up @@ -42,6 +43,7 @@

class Document(ProjectMixin, ResourceMixin, EvergreenMixin, Base):
"""SQLAlchemy model for document resources."""

id = Column(Integer, primary_key=True)
name = Column(String)
description = Column(String)
Expand All @@ -63,6 +65,7 @@ class Document(ProjectMixin, ResourceMixin, EvergreenMixin, Base):
# Pydantic models...
class DocumentBase(ResourceBase, EvergreenBase):
"""Base Pydantic model for document resources."""

description: str | None = None
name: NameStr
created_at: datetime | None = None
Expand All @@ -71,13 +74,15 @@ class DocumentBase(ResourceBase, EvergreenBase):

class DocumentCreate(DocumentBase):
"""Pydantic model for creating a document resource."""

filters: list[SearchFilterRead] | None = []
project: ProjectRead
tags: list[TagRead] | None = []


class DocumentUpdate(DocumentBase):
"""Pydantic model for updating a document resource."""

filters: list[SearchFilterRead] | None
tags: list[TagRead] | None = []

Expand All @@ -101,20 +106,23 @@ def find_exclusive(cls, v):

class DocumentRead(DocumentBase):
"""Pydantic model for reading a document resource."""

id: PrimaryKey
filters: list[SearchFilterRead] | None = []
project: ProjectRead | None
tags: list[TagRead] | None = []

@field_validator("description", mode="before")
@classmethod
def set_description(cls, v, values):
def set_description(cls, v, info: ValidationInfo):
"""Sets the description for the document resource."""
if not v:
return DOCUMENT_DESCRIPTIONS.get(values["resource_type"], "No Description")
resource_type = info.data.get("resource_type")
return DOCUMENT_DESCRIPTIONS.get(resource_type, "No Description")
return v


class DocumentPagination(Pagination):
"""Pydantic model for paginated document results."""

items: list[DocumentRead] = []
Loading