Didactopus/src/didactopus/worker.py

38 lines
1.5 KiB
Python

from __future__ import annotations
import json, tempfile
from pathlib import Path
from .repository import update_render_job, register_artifact
from .render_bundle import make_render_bundle
def process_render_job(job_id: int, learner_id: str, pack_id: str, fmt: str, fps: int, theme: str, animation_payload: dict):
update_render_job(job_id, status="running")
try:
base = Path(tempfile.mkdtemp(prefix=f"didactopus_job_{job_id}_"))
payload_json = base / "animation_payload.json"
payload_json.write_text(json.dumps(animation_payload, indent=2), encoding="utf-8")
out_dir = base / "bundle"
make_render_bundle(str(payload_json), str(out_dir), fps=fps, fmt=fmt)
manifest_path = out_dir / "render_manifest.json"
script_path = out_dir / "render.sh"
update_render_job(
job_id,
status="completed",
bundle_dir=str(out_dir),
payload_json=str(payload_json),
manifest_path=str(manifest_path),
script_path=str(script_path),
error_text="",
)
register_artifact(
render_job_id=job_id,
learner_id=learner_id,
pack_id=pack_id,
artifact_type="render_bundle",
fmt=fmt,
title=f"{pack_id} animation bundle",
path=str(out_dir),
metadata={"fps": fps, "theme": theme, "manifest_path": str(manifest_path), "script_path": str(script_path)},
)
except Exception as e:
update_render_job(job_id, status="failed", error_text=str(e))