54 lines
1.3 KiB
Python

from typing import Optional, List, TYPE_CHECKING
from datetime import datetime
from pydantic import BaseModel
if TYPE_CHECKING:
from app.schemas.student_answer import StudentAnswer
# Shared properties
class ExamResultBase(BaseModel):
exam_id: int
student_id: int
is_completed: bool = False
remarks: Optional[str] = None
# Properties to receive via API on creation
class ExamResultCreate(ExamResultBase):
pass
# Properties to receive via API on update
class ExamResultUpdate(BaseModel):
score: Optional[float] = None
max_score: Optional[float] = None
completed_at: Optional[datetime] = None
is_completed: Optional[bool] = None
remarks: Optional[str] = None
class ExamResultInDBBase(ExamResultBase):
id: int
score: Optional[float] = None
max_score: Optional[float] = None
started_at: datetime
completed_at: Optional[datetime] = None
class Config:
from_attributes = True
# Additional properties to return via API
class ExamResult(ExamResultInDBBase):
pass
# Exam result with student answers
class ExamResultWithAnswers(ExamResult):
answers: List['StudentAnswer'] = []
# Update forward references
from app.schemas.student_answer import StudentAnswer # noqa: E402
ExamResultWithAnswers.model_rebuild()