Denys Kanunnikov
skeleton
8e5831a
import requests
class APIClient:
"""Handles all API interactions with error handling."""
def __init__(self, base_url):
self.base_url = base_url.rstrip('/')
def get_questions(self):
"""Fetch the full list of evaluation questions."""
try:
resp = requests.get(f"{self.base_url}/questions", timeout=10)
resp.raise_for_status()
return resp.json()
except Exception as e:
raise RuntimeError(f"Failed to fetch questions: {e}")
def get_random_question(self):
"""Fetch a single random question."""
try:
resp = requests.get(f"{self.base_url}/random-question", timeout=10)
resp.raise_for_status()
return resp.json()
except Exception as e:
raise RuntimeError(f"Failed to fetch random question: {e}")
def get_file(self, task_id):
"""Download a specific file associated with a given task ID."""
try:
resp = requests.get(f"{self.base_url}/files/{task_id}", timeout=20)
resp.raise_for_status()
return resp.content
except Exception as e:
raise RuntimeError(f"Failed to fetch file for task {task_id}: {e}")
def submit(self, username, agent_code, answers):
"""Submit agent answers and return the result."""
data = {"username": username, "agent_code": agent_code, "answers": answers}
try:
resp = requests.post(f"{self.base_url}/submit", json=data, timeout=60)
resp.raise_for_status()
return resp.json()
except Exception as e:
raise RuntimeError(f"Failed to submit answers: {e}")