examide / backend /models.py
Mananjp's picture
feat: Complete ExamIDE with test cases, auto-judging, scoring, PDF reports, room expiry & Docker
092e3d5
from pydantic import BaseModel
from typing import List, Optional, Dict
class TestCase(BaseModel):
test_id: str
input_data: str # stdin input to feed the program
expected_output: str # expected stdout output (stripped for comparison)
is_hidden: bool = False # True = hidden from students, used only for judging
class Room(BaseModel):
room_id: str
room_code: str
room_name: str
teacher_name: str
language: str
duration_minutes: int
start_time: Optional[str] = None
end_time: Optional[str] = None
students: List[str] = []
student_names: Dict[str, str] = {}
student_red_flags: Dict[str, int] = {}
questions: List[dict] = []
status: str = "active"
class Question(BaseModel):
question_id: str
question_text: str
language: str
test_cases: List[TestCase] = []
class Worksheet(BaseModel):
worksheet_id: str
room_id: str
student_id: str
question_id: str
code: str = ""
language: str
status: str = "working"
last_updated: str
class ExecutionResult(BaseModel):
success: bool
output: Optional[str] = None
error: Optional[str] = None
class CodeExecutionRequest(BaseModel):
code: str
language: str
class SubmissionResult(BaseModel):
question_id: str
total_cases: int
passed_cases: int
results: List[dict] = [] # per-case verdict details
overall: str # "Accepted" / "Wrong Answer" / "Runtime Error" / "Compilation Error"