from __future__ import annotations import json from pathlib import Path from typing import Dict, List from ..models import TaskSpec DATA_DIR = Path(__file__).resolve().parent.parent / "data" def _load_file(name: str) -> List[TaskSpec]: path = DATA_DIR / name with path.open("r", encoding="utf-8") as handle: raw = json.load(handle) return [TaskSpec.model_validate(item) for item in raw] def get_all_tasks() -> List[TaskSpec]: tasks: List[TaskSpec] = [] for filename in ("easy_cases.json", "medium_cases.json", "hard_cases.json"): tasks.extend(_load_file(filename)) return tasks def get_task(task_id: str) -> TaskSpec: for task in get_all_tasks(): if task.task_id == task_id: return task raise KeyError(f"Unknown task_id: {task_id}") def list_task_ids() -> List[str]: return [task.task_id for task in get_all_tasks()]