Openenv / tasks /task_registry.py
vishaldhakad's picture
intial push
eda351c
Raw
History Blame Contribute Delete
1.57 kB
"""
tasks/task_registry.py — Central task registry.
All 9 tasks indexed by ID and difficulty. sample_task() picks randomly
within a difficulty tier to prevent memorisation across episodes.
"""
import random
from typing import Dict, Any
from tasks.easy.password_validator import TASK as T1
from tasks.easy.input_sanitizer import TASK as T2
from tasks.easy.hash_generator import TASK as T3
from tasks.medium.sql_query_builder import TASK as T4
from tasks.medium.file_path_handler import TASK as T5
from tasks.medium.api_rate_limiter import TASK as T6
from tasks.hard.file_upload_handler import TASK as T7
from tasks.hard.jwt_validator import TASK as T8
from tasks.hard.auth_middleware import TASK as T9
ALL_TASKS: Dict[str, Dict[str, Any]] = {
t["id"]: t for t in [T1, T2, T3, T4, T5, T6, T7, T8, T9]
}
BY_DIFFICULTY = {
"easy": [T1, T2, T3],
"medium": [T4, T5, T6],
"hard": [T7, T8, T9],
}
def get_task(task_id: str) -> Dict[str, Any]:
if task_id not in ALL_TASKS:
raise ValueError(f"Unknown task_id: {task_id}. Valid: {list(ALL_TASKS.keys())}")
return ALL_TASKS[task_id]
def sample_task(difficulty: str = "medium") -> Dict[str, Any]:
"""Randomly pick a task at the given difficulty. Anti-memorisation."""
tasks = BY_DIFFICULTY.get(difficulty, BY_DIFFICULTY["medium"])
return random.choice(tasks)
def list_tasks() -> list:
return [
{
"id": t["id"],
"difficulty": t["difficulty"],
"cwe_targets": t["cwe_targets"],
}
for t in ALL_TASKS.values()
]