|
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}") |