podcast-generator/data.py
Jake Walker bbfbeddc55
All checks were successful
ci/woodpecker/push/build Pipeline was successful
add podcast images
2025-01-13 13:45:52 +00:00

53 lines
1.5 KiB
Python

import uuid
from datetime import datetime, timezone
from typing import Dict, List, Optional
from pydantic import BaseModel, Field
from settings import settings
REPO_DATA_FILENAME = settings.directory / "data.json"
class Episode(BaseModel):
id: str = Field(default_factory=lambda: str(uuid.uuid4()))
name: str
duration: Optional[float] = Field(default=None)
description: Optional[str] = Field(default=None)
file_hash: str
file_size: int
publish_date: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
class Podcast(BaseModel):
name: str
description: str
explicit: bool
image_filename: Optional[str] = Field(default=None)
episodes: List[Episode] = list()
class PodcastRepository(BaseModel):
podcasts: Dict[str, Podcast] = dict()
def load_repository() -> PodcastRepository:
settings.directory.mkdir(parents=True, exist_ok=True)
if not REPO_DATA_FILENAME.is_file():
new_repo = PodcastRepository(
podcasts={
str(uuid.uuid4()): Podcast(name=name, description=name, explicit=True)
for name in settings.feeds
}
)
save_repository(new_repo)
return new_repo
with open(REPO_DATA_FILENAME, "r") as f:
return PodcastRepository.model_validate_json(f.read())
def save_repository(repository: PodcastRepository) -> None:
with open(REPO_DATA_FILENAME, "w") as f:
f.write(repository.model_dump_json())