SurfSense/surfsense_backend/app/schemas/podcasts.py

67 lines
1.6 KiB
Python
Raw Normal View History

2025-12-21 22:26:33 -08:00
"""Podcast schemas for API responses."""
from datetime import datetime
from enum import StrEnum
2025-12-21 22:26:33 -08:00
from typing import Any
from pydantic import BaseModel
class PodcastStatusEnum(StrEnum):
2026-01-27 17:51:36 +02:00
PENDING = "pending"
GENERATING = "generating"
READY = "ready"
FAILED = "failed"
2025-12-21 22:26:33 -08:00
class PodcastBase(BaseModel):
"""Base podcast schema."""
title: str
podcast_transcript: list[dict[str, Any]] | None = None
file_location: str | None = None
search_space_id: int
class PodcastCreate(PodcastBase):
"""Schema for creating a podcast."""
pass
class PodcastUpdate(BaseModel):
"""Schema for updating a podcast."""
title: str | None = None
podcast_transcript: list[dict[str, Any]] | None = None
file_location: str | None = None
class PodcastRead(PodcastBase):
"""Schema for reading a podcast."""
id: int
2026-01-27 17:51:36 +02:00
status: PodcastStatusEnum = PodcastStatusEnum.READY
2025-12-21 22:26:33 -08:00
created_at: datetime
transcript_entries: int | None = None
2025-12-21 22:26:33 -08:00
class Config:
from_attributes = True
@classmethod
def from_orm_with_entries(cls, obj):
"""Create PodcastRead with transcript_entries computed."""
data = {
"id": obj.id,
"title": obj.title,
"podcast_transcript": obj.podcast_transcript,
"file_location": obj.file_location,
"search_space_id": obj.search_space_id,
"status": obj.status,
"created_at": obj.created_at,
"transcript_entries": len(obj.podcast_transcript)
if obj.podcast_transcript
else None,
}
return cls(**data)