From e3055e39988997ad6602be71cd45b65b3f8c15ef Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 20 Oct 2025 17:20:48 +0100 Subject: [PATCH] Normalize whitespace and strip

wrappers in question answers and feedback --- sbas/models.py | 45 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/sbas/models.py b/sbas/models.py index bd4af97e..28a5ef5c 100644 --- a/sbas/models.py +++ b/sbas/models.py @@ -4,6 +4,7 @@ from django.utils import timezone from django.core.files.storage import FileSystemStorage from django.conf import settings from django.utils.html import format_html +import re from django.urls import reverse @@ -112,16 +113,50 @@ class Question(QuestionBase): return self.stem def clean(self): + # normalize whitespace and strip surrounding

...

wrappers + try: + super().clean() + except Exception: + # If parent has no clean or it fails, ignore and continue + pass + + def _strip_outer_p(text): + if not text: + return text + t = text.strip() + # match

with optional attributes, e.g.

,

, etc. + m = re.match(r"^]*>(.*)

$", t, flags=re.IGNORECASE | re.DOTALL) + if m: + return m.group(1).strip() + return t + + # Answers if self.a_answer: - self.a_answer = self.a_answer.strip() + self.a_answer = _strip_outer_p(self.a_answer) if self.b_answer: - self.b_answer = self.b_answer.strip() + self.b_answer = _strip_outer_p(self.b_answer) if self.c_answer: - self.c_answer = self.c_answer.strip() + self.c_answer = _strip_outer_p(self.c_answer) if self.d_answer: - self.d_answer = self.d_answer.strip() + self.d_answer = _strip_outer_p(self.d_answer) if self.e_answer: - self.e_answer = self.e_answer.strip() + self.e_answer = _strip_outer_p(self.e_answer) + + # Per-answer feedbacks + if hasattr(self, 'a_feedback') and self.a_feedback: + self.a_feedback = _strip_outer_p(self.a_feedback) + if hasattr(self, 'b_feedback') and self.b_feedback: + self.b_feedback = _strip_outer_p(self.b_feedback) + if hasattr(self, 'c_feedback') and self.c_feedback: + self.c_feedback = _strip_outer_p(self.c_feedback) + if hasattr(self, 'd_feedback') and self.d_feedback: + self.d_feedback = _strip_outer_p(self.d_feedback) + if hasattr(self, 'e_feedback') and self.e_feedback: + self.e_feedback = _strip_outer_p(self.e_feedback) + + # General feedback + if hasattr(self, 'feedback') and self.feedback: + self.feedback = _strip_outer_p(self.feedback) def get_app_name(self): return "sbas"