From b6277f2e732f7e6a975d94409017a07d98904d5f Mon Sep 17 00:00:00 2001 From: Jonathan Willitts Date: Mon, 12 Aug 2024 17:27:58 +0100 Subject: [PATCH] Fixes server error loading AE reports if desc contains `{` or `}` (#816) --- .../templatetags/edc_adverse_event_extras.py | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/edc_adverse_event/templatetags/edc_adverse_event_extras.py b/edc_adverse_event/templatetags/edc_adverse_event_extras.py index e8b66cf..5c212fe 100644 --- a/edc_adverse_event/templatetags/edc_adverse_event_extras.py +++ b/edc_adverse_event/templatetags/edc_adverse_event_extras.py @@ -47,12 +47,16 @@ class DeathReportModel(DeathReportModelMixin, BaseUuidModel): ... register = template.Library() -def wrapx(text, length): +def wrapx(text: str, length: int) -> str: if length: return "
".join(wrap(text, length)) return text +def escape_braces(text: str) -> str: + return text.replace("{", "{{").replace("}", "}}") + + def select_ae_template(relative_path): """Returns a template object.""" local_path = f"{get_adverse_event_app_label()}/bootstrap{get_bootstrap_version()}/" @@ -78,10 +82,14 @@ def format_ae_description(context, ae_initial, wrap_length): context["YES"] = YES context["ae_initial"] = ae_initial try: - context["sae_reason"] = format_html(wrapx(ae_initial.sae_reason.name, wrap_length)) + context["sae_reason"] = format_html( + wrapx(escape_braces(ae_initial.sae_reason.name), wrap_length) + ) except AttributeError: context["sae_reason"] = "" - context["ae_description"] = format_html(wrapx(ae_initial.ae_description, wrap_length)) + context["ae_description"] = format_html( + wrapx(escape_braces(ae_initial.ae_description), wrap_length) + ) return context @@ -96,13 +104,15 @@ def format_ae_followup_description(context, ae_followup, wrap_length): context["ae_initial"] = ae_followup.ae_initial try: context["sae_reason"] = format_html( - wrapx(ae_followup.ae_initial.sae_reason.name, wrap_length) + wrapx(escape_braces(ae_followup.ae_initial.sae_reason.name), wrap_length) ) except AttributeError: context["sae_reason"] = "" - context["relevant_history"] = format_html(wrapx(ae_followup.relevant_history, wrap_length)) + context["relevant_history"] = format_html( + wrapx(escape_braces(ae_followup.relevant_history), wrap_length) + ) context["ae_description"] = format_html( - wrapx(ae_followup.ae_initial.ae_description, wrap_length) + wrapx(escape_braces(ae_followup.ae_initial.ae_description), wrap_length) ) return context @@ -116,10 +126,12 @@ def format_ae_susar_description(context, ae_susar, wrap_length): context["ae_susar"] = ae_susar context["ae_initial"] = ae_susar.ae_initial context["sae_reason"] = format_html( - "
".join(wrap(ae_susar.ae_initial.sae_reason.name, wrap_length or 35)) + "
".join( + wrap(escape_braces(ae_susar.ae_initial.sae_reason.name), wrap_length or 35) + ) ) context["ae_description"] = format_html( - wrapx(ae_susar.ae_initial.ae_description, wrap_length) + wrapx(escape_braces(ae_susar.ae_initial.ae_description), wrap_length) ) return context