From 67983224fbe5a33bd7bf8ea8c134b27f1afdda8a Mon Sep 17 00:00:00 2001 From: stuppie Date: Sat, 11 Apr 2026 11:03:37 -0600 Subject: pydantic after model_validator doesnt raise a ValidationError if a KeyError is raised, only a ValueError. did not know that. try except ValidationError in get_assignment bc Baddies have been known to submit assignments with purposely malformed "answer" (xml) section to break the process_assignment flow --- jb/models/assignment.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'jb/models/assignment.py') diff --git a/jb/models/assignment.py b/jb/models/assignment.py index 5dd0167..92e5a89 100644 --- a/jb/models/assignment.py +++ b/jb/models/assignment.py @@ -155,16 +155,19 @@ class Assignment(AssignmentStub): def check_answers_alignment(self) -> Self: if self.answers_dict is None: return self + if "amt_worker_id" not in self.answers_dict: + raise ValueError("answers_dict missing amt_worker_id") if self.amt_worker_id != self.answers_dict["amt_worker_id"]: raise ValueError("Assignment answer invalid worker_id") + if "amt_assignment_id" not in self.answers_dict: + raise ValueError("answers_dict missing amt_assignment_id") if self.amt_assignment_id != self.answers_dict["amt_assignment_id"]: raise ValueError("Assignment answer invalid amt_assignment_id") - if ( - self.tsid - and self.answers_dict["tsid"] - and self.tsid != self.answers_dict["tsid"] - ): - raise ValueError("Assignment answer invalid tsid") + if self.tsid: + if "tsid" not in self.answers_dict: + raise ValueError("answers_dict missing tsid") + if self.answers_dict["tsid"] and self.tsid != self.answers_dict["tsid"]: + raise ValueError("Assignment answer invalid tsid") return self # --- Properties --- -- cgit v1.2.3