64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
"""Lecture/ecriture des artefacts du pipeline dans data/<slug>/.
|
|
|
|
Chaque etape ecrit un JSON ; les etapes suivantes les relisent. C'est aussi ce
|
|
qui rend le pipeline reprenable : on peut detecter qu'un artefact existe deja.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from ..config import book_data_dir
|
|
from ..models import Cast, ChapterAnalysis, Pronunciation
|
|
|
|
|
|
def analysis_path(slug: str, chapter_index: int) -> Path:
|
|
return book_data_dir(slug) / "analysis" / f"ch{chapter_index:02d}.json"
|
|
|
|
|
|
def cast_path(slug: str) -> Path:
|
|
return book_data_dir(slug) / "cast.json"
|
|
|
|
|
|
def pronunciation_path(slug: str) -> Path:
|
|
return book_data_dir(slug) / "pronunciation.json"
|
|
|
|
|
|
def save_analysis(slug: str, analysis: ChapterAnalysis) -> Path:
|
|
path = analysis_path(slug, analysis.index)
|
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
path.write_text(analysis.model_dump_json(indent=2), encoding="utf-8")
|
|
return path
|
|
|
|
|
|
def load_analysis(slug: str, chapter_index: int) -> ChapterAnalysis:
|
|
path = analysis_path(slug, chapter_index)
|
|
return ChapterAnalysis.model_validate_json(path.read_text(encoding="utf-8"))
|
|
|
|
|
|
def save_cast(slug: str, cast: Cast) -> Path:
|
|
path = cast_path(slug)
|
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
path.write_text(cast.model_dump_json(indent=2), encoding="utf-8")
|
|
return path
|
|
|
|
|
|
def load_cast(slug: str) -> Cast:
|
|
path = cast_path(slug)
|
|
if not path.exists():
|
|
return Cast()
|
|
return Cast.model_validate_json(path.read_text(encoding="utf-8"))
|
|
|
|
|
|
def save_pronunciation(slug: str, pron: Pronunciation) -> Path:
|
|
path = pronunciation_path(slug)
|
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
path.write_text(pron.model_dump_json(indent=2), encoding="utf-8")
|
|
return path
|
|
|
|
|
|
def load_pronunciation(slug: str) -> Pronunciation:
|
|
path = pronunciation_path(slug)
|
|
if not path.exists():
|
|
return Pronunciation()
|
|
return Pronunciation.model_validate_json(path.read_text(encoding="utf-8"))
|