data models
This commit is contained in:
parent
9c59fb1328
commit
b6578cfb0c
1 changed files with 82 additions and 0 deletions
82
modules/anime_etl/models.py
Normal file
82
modules/anime_etl/models.py
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
# 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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue