(pdf_path: Path, title: str | None)
| 54 | |
| 55 | |
| 56 | def _create_job(pdf_path: Path, title: str | None) -> JobState: |
| 57 | job = JobState( |
| 58 | title=(title or pdf_path.stem).strip() or pdf_path.stem, |
| 59 | source_pdf_name=pdf_path.name, |
| 60 | ) |
| 61 | save_job_state(job) |
| 62 | |
| 63 | artifacts = ensure_artifact_paths(job.id) |
| 64 | source_pdf_path = Path(artifacts['source_pdf']) |
| 65 | source_pdf_path.parent.mkdir(parents=True, exist_ok=True) |
| 66 | shutil.copy2(str(pdf_path), str(source_pdf_path)) |
| 67 | |
| 68 | def apply(state: JobState) -> None: |
| 69 | state.artifacts.source_pdf_path = str(source_pdf_path) |
| 70 | |
| 71 | # mutate via save -> load -> apply |
| 72 | loaded = load_job_state(job.id) |
| 73 | if loaded is None: |
| 74 | raise RuntimeError(f'failed to reload job after create: {job.id}') |
| 75 | apply(loaded) |
| 76 | save_job_state(loaded) |
| 77 | |
| 78 | append_event(job.id, 'created', source_pdf=str(source_pdf_path), title=job.title) |
| 79 | return loaded |
| 80 | |
| 81 | |
| 82 | def _spawn_worker(job_id: str) -> int: |
no test coverage detected