nyanimedb/modules/anime_etl/models.py
2025-12-03 20:00:39 +03:00

82 lines
2.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# anime_etl/models.py
from __future__ import annotations
from enum import Enum
from typing import Dict, List, Optional
from pydantic import BaseModel
class Source(str, Enum):
ANILIST = "anilist"
JIKAN = "jikan"
SHIKIMORI = "shikimori"
class Studio(BaseModel):
id: Optional[int] = None
name: str
poster: Optional["Image"] = None
description: Optional[str] = None
class Image(BaseModel):
id: Optional[int] = None
storage_type: Optional[str] = None # для БД: storage_type_t
image_path: str # для внешнего постера URL
class Tag(BaseModel):
# локализованный тег, как в Tag.yaml: { "en": "Shojo", "ru": "Сёдзё", ... }
names: Dict[str, str]
class SourceTitle(BaseModel):
"""
Нормализованная инфа из одного источника (AniList/Jikan/...).
"""
source: Source
external_id: str
title_names: Dict[str, List[str]]
studio: Optional[Studio] = None
tags: List[Tag] = []
poster: Optional[Image] = None
title_status: Optional[str] = None
rating: Optional[float] = None
rating_count: Optional[int] = None
release_year: Optional[int] = None
release_season: Optional[str] = None
season: Optional[int] = None
episodes_aired: Optional[int] = None
episodes_all: Optional[int] = None
episodes_len: Optional[Dict[str, float]] = None
class CanonicalTitle(BaseModel):
"""
То, что пойдёт в нашу БД + будет соответствовать Title.yaml.
"""
id: Optional[int] = None
title_names: Dict[str, List[str]]
studio: Optional[Studio] = None
tags: List[Tag] = []
poster: Optional[Image] = None
title_status: Optional[str] = None
rating: Optional[float] = None
rating_count: Optional[int] = None
release_year: Optional[int] = None
release_season: Optional[str] = None
season: Optional[int] = None
episodes_aired: Optional[int] = None
episodes_all: Optional[int] = None
episodes_len: Optional[Dict[str, float]] = None