52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
import sys
|
|
from pathlib import Path
|
|
import traceback
|
|
|
|
# Add src to path
|
|
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
|
|
from src.data_model import BookStructure, ManifestEntry
|
|
from src.manifest_manager import ManifestManager
|
|
from src.backfill_engine import BackfillEngine
|
|
from src.bilingual_builder import BilingualBuilder
|
|
from src.utils import setup_logger
|
|
|
|
logger = setup_logger("build_final")
|
|
|
|
def build_final():
|
|
BOOK_NAME = "Empire of AI Dreams and Nightmares in Sam Altmans OpenAI (Karen Hao)"
|
|
WORK_DIR = Path(f".work/{BOOK_NAME}")
|
|
MANIFEST_PATH = WORK_DIR / "manifest.json"
|
|
STRUCTURE_PATH = WORK_DIR / "book_structure.json"
|
|
OUTPUT_EPUB = Path("output/final_verification.epub")
|
|
INPUT_EPUB = Path(f"input/{BOOK_NAME}.epub")
|
|
|
|
if not MANIFEST_PATH.exists() or not STRUCTURE_PATH.exists():
|
|
logger.error("Missing manifest or structure. Run translation first.")
|
|
return
|
|
|
|
# 1. Load Data
|
|
logger.info("Loading structure and manifest...")
|
|
structure = BookStructure.load(STRUCTURE_PATH)
|
|
manager = ManifestManager(MANIFEST_PATH)
|
|
manager.load()
|
|
|
|
# 2. Backfill
|
|
logger.info("Backfilling translations...")
|
|
backfiller = BackfillEngine()
|
|
structure = backfiller.backfill(structure, manager.entries, mode="bilingual")
|
|
|
|
# 3. Build
|
|
logger.info(f"Building final EPUB to {OUTPUT_EPUB}...")
|
|
builder = BilingualBuilder(WORK_DIR, original_epub_path=INPUT_EPUB)
|
|
builder.build(structure, OUTPUT_EPUB)
|
|
|
|
logger.info("Build complete.")
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
build_final()
|
|
except Exception as e:
|
|
traceback.print_exc()
|
|
print(f"CRITICAL ERROR: {e}")
|