OPEN SOURCE
software/src/orchestration/models.py
Read on this site and download the files you need.
Nichijoyaku was created using AI. A complete review by human biblical-language and biblical-studies specialists has not been established. Read alongside established translations and original-language resources.
← Back to the open-source guide
1"""Job state models for fault-tolerant Bible translation orchestration.23Provides dataclasses for tracking translation jobs at various granularities:4- VerseJob: Individual verse translation tracking5- BookJob: Book-level progress and status6- BibleJob: Full Bible translation job with configuration snapshot7"""89from __future__ import annotations1011import uuid12from dataclasses import dataclass, field13from datetime import datetime14from enum import Enum15from typing import Any161718class JobStatus(str, Enum):19"""Status of a job at any level (verse, book, or bible)."""2021PENDING = "pending"22IN_PROGRESS = "in_progress"23COMPLETED = "completed"24FAILED = "failed"25CANCELLED = "cancelled"262728@dataclass29class VerseJob:30"""Tracks the translation status of a single verse.3132Attributes:33book: Book name (e.g., 'john', 'genesis').34chapter: Chapter number.35verse: Verse number.36status: Current job status.37attempts: Number of translation attempts.38last_error: Error message from most recent failed attempt.39worker_pid: PID of worker process currently handling this verse.40started_at: When translation started.41completed_at: When translation completed (or failed).42"""4344book: str45chapter: int46verse: int47status: JobStatus = JobStatus.PENDING48attempts: int = 049last_error: str | None = None50worker_pid: int | None = None51started_at: datetime | None = None52completed_at: datetime | None = None5354@property55def reference_str(self) -> str:56"""Return verse reference as string (e.g., 'john:1:1')."""57return f"{self.book}:{self.chapter}:{self.verse}"585960@dataclass61class BookJob:62"""Tracks the translation status of an entire book.6364Attributes:65book: Book name (e.g., 'john', 'genesis').66status: Current job status.67total_verses: Total number of verses in the book.68completed_verses: Number of successfully translated verses.69failed_verses: Number of verses that failed translation.70worker_pid: PID of worker process handling this book.71started_at: When book translation started.72completed_at: When book translation completed.73error_message: Error message if book failed.74"""7576book: str77status: JobStatus = JobStatus.PENDING78total_verses: int = 079completed_verses: int = 080failed_verses: int = 081worker_pid: int | None = None82started_at: datetime | None = None83completed_at: datetime | None = None84error_message: str | None = None8586@property87def pending_verses(self) -> int:88"""Return number of pending verses."""89return self.total_verses - self.completed_verses - self.failed_verses9091@property92def progress_percentage(self) -> float:93"""Return progress as a percentage."""94if self.total_verses == 0:95return 0.096return (self.completed_verses / self.total_verses) * 100979899@dataclass100class BibleJob:101"""Tracks a full Bible translation job.102103Attributes:104job_id: Unique identifier for the job (UUID).105books: List of books to translate.106status: Current job status.107config_snapshot: Frozen configuration at job creation.108created_at: When job was created.109started_at: When translation started.110completed_at: When translation completed.111total_verses: Total verses across all books.112completed_verses: Total completed verses across all books.113failed_verses: Total failed verses across all books.114"""115116job_id: str = field(default_factory=lambda: str(uuid.uuid4()))117books: list[str] = field(default_factory=list)118status: JobStatus = JobStatus.PENDING119config_snapshot: dict[str, Any] = field(default_factory=dict)120created_at: datetime = field(default_factory=datetime.utcnow)121started_at: datetime | None = None122completed_at: datetime | None = None123total_verses: int = 0124completed_verses: int = 0125failed_verses: int = 0126127@property128def pending_verses(self) -> int:129"""Return number of pending verses across all books."""130return self.total_verses - self.completed_verses - self.failed_verses131132@property133def progress_percentage(self) -> float:134"""Return overall progress as a percentage."""135if self.total_verses == 0:136return 0.0137return (self.completed_verses / self.total_verses) * 100138139140@dataclass141class BookResult:142"""Result of translating a single book.143144Attributes:145book: Book name.146success: Whether translation succeeded.147verses_translated: Number of verses successfully translated.148verses_failed: Number of verses that failed.149duration_seconds: Total time taken in seconds.150error_message: Error message if failed.151"""152153book: str154success: bool155verses_translated: int156verses_failed: int157duration_seconds: float158error_message: str | None = None159160161@dataclass162class JobResult:163"""Result of a full Bible translation job.164165Attributes:166job_id: Job identifier.167success: Whether job completed successfully (all books translated).168books_completed: Number of books fully translated.169books_failed: Number of books that failed.170total_verses_translated: Total verses across all books.171total_verses_failed: Total failed verses across all books.172duration_seconds: Total time taken in seconds.173book_results: Individual results for each book.174"""175176job_id: str177success: bool178books_completed: int179books_failed: int180total_verses_translated: int181total_verses_failed: int182duration_seconds: float183book_results: list[BookResult] = field(default_factory=list)184185186# All 66 books of the Bible in canonical order187OLD_TESTAMENT_BOOKS = [188"genesis", "exodus", "leviticus", "numbers", "deuteronomy",189"joshua", "judges", "ruth", "1samuel", "2samuel",190"1kings", "2kings", "1chronicles", "2chronicles", "ezra",191"nehemiah", "esther", "job", "psalms", "proverbs",192"ecclesiastes", "song_of_solomon", "isaiah", "jeremiah", "lamentations",193"ezekiel", "daniel", "hosea", "joel", "amos",194"obadiah", "jonah", "micah", "nahum", "habakkuk",195"zephaniah", "haggai", "zechariah", "malachi",196]197198NEW_TESTAMENT_BOOKS = [199"matthew", "mark", "luke", "john", "acts",200"romans", "1corinthians", "2corinthians", "galatians", "ephesians",201"philippians", "colossians", "1thessalonians", "2thessalonians", "1timothy",202"2timothy", "titus", "philemon", "hebrews", "james",203"1peter", "2peter", "1john", "2john", "3john",204"jude", "revelation",205]206207ALL_BOOKS = OLD_TESTAMENT_BOOKS + NEW_TESTAMENT_BOOKS208