RishiKar210's picture
Deploy backend incl. missing-dialogue detection + character creation
03090ce verified
Raw
History Blame Contribute Delete
1.39 kB
"""Pluggable script parsers: turn a dub script (DOCX table / SRT / CSV) into a
common ``ScriptDoc`` of timecoded, speaker-attributed segments.
Public surface::
from backend.script_parser import parse_script
doc = parse_script(path, fmt="auto", fps=24)
"""
from __future__ import annotations
from pathlib import Path
from .base import ScriptDoc, ScriptSegment, canonical_key, normalize_character, parse_timecode
__all__ = [
"ScriptDoc", "ScriptSegment", "parse_script",
"canonical_key", "normalize_character", "parse_timecode",
]
def parse_script(path: str | Path, fmt: str = "auto", fps: float | None = None) -> ScriptDoc:
"""Dispatch to the right parser by ``fmt`` (or the file extension when 'auto')."""
path = Path(path)
if fmt == "auto":
ext = path.suffix.lower().lstrip(".")
fmt = {"docx": "docx", "srt": "srt", "csv": "csv", "tsv": "csv"}.get(ext, "")
if not fmt:
raise ValueError(f"Cannot infer script format from '{path.name}'. Pass fmt=docx|srt|csv.")
if fmt == "docx":
from .docx_table import parse as _parse
return _parse(path, fps=fps)
if fmt == "srt":
from .srt import parse as _parse
return _parse(path)
if fmt == "csv":
from .csv_parser import parse as _parse
return _parse(path, fps=fps)
raise ValueError(f"Unknown script format '{fmt}'")