From 75ea48b4f4319f2499216df8ffb3c052efc08244 Mon Sep 17 00:00:00 2001 From: BitterPanda Date: Wed, 9 Jul 2025 13:56:35 +0200 Subject: [PATCH 1/4] use .to_dict(flat=False) to extract data from form in flask --- aikido_zen/sources/flask/extract_form_data.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/aikido_zen/sources/flask/extract_form_data.py b/aikido_zen/sources/flask/extract_form_data.py index 18f261730..8df3cb736 100644 --- a/aikido_zen/sources/flask/extract_form_data.py +++ b/aikido_zen/sources/flask/extract_form_data.py @@ -5,12 +5,16 @@ def extract_form_data_from_flask_request_and_save_data(req): """Extract form data from flask request""" context = get_current_context() + if not context: + return try: - if context: - if req.form: - context.set_body(req.form) - else: - context.set_body(req.data.decode("utf-8")) - context.set_as_current_context() + # https://flask.palletsprojects.com/en/stable/api/#flask.Request + # req.form is an ImmutableMultiDict, use `.to_dict(flat=False)` to extract all values. + if req.form: + form_data = req.form.to_dict(flat=False) + context.set_body(form_data) + else: + context.set_body(req.data.decode("utf-8")) + context.set_as_current_context() except Exception as e: logger.debug("Exception occurred whilst extracting flask body data: %s", e) From 94b72563884a2b96775fa9c0e3ae4667271a3aa7 Mon Sep 17 00:00:00 2001 From: BitterPanda Date: Tue, 15 Jul 2025 09:40:48 +0200 Subject: [PATCH 2/4] Test with .items(multi=True), for flask form data --- aikido_zen/sources/flask/extract_form_data.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aikido_zen/sources/flask/extract_form_data.py b/aikido_zen/sources/flask/extract_form_data.py index 8df3cb736..aa21e680b 100644 --- a/aikido_zen/sources/flask/extract_form_data.py +++ b/aikido_zen/sources/flask/extract_form_data.py @@ -9,9 +9,9 @@ def extract_form_data_from_flask_request_and_save_data(req): return try: # https://flask.palletsprojects.com/en/stable/api/#flask.Request - # req.form is an ImmutableMultiDict, use `.to_dict(flat=False)` to extract all values. + # req.form is an ImmutableMultiDict, use `.items(multi=True)` to extract all values. if req.form: - form_data = req.form.to_dict(flat=False) + form_data = req.form.items(multi=True) context.set_body(form_data) else: context.set_body(req.data.decode("utf-8")) From 0cc4ae3965861b8fab1c1ad9067af9c83f1d6b6a Mon Sep 17 00:00:00 2001 From: BitterPanda Date: Tue, 15 Jul 2025 09:43:20 +0200 Subject: [PATCH 3/4] use .getlist() --- aikido_zen/sources/flask/extract_form_data.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/aikido_zen/sources/flask/extract_form_data.py b/aikido_zen/sources/flask/extract_form_data.py index aa21e680b..937685521 100644 --- a/aikido_zen/sources/flask/extract_form_data.py +++ b/aikido_zen/sources/flask/extract_form_data.py @@ -1,3 +1,5 @@ +from typing import Dict, List + from aikido_zen.context import get_current_context from aikido_zen.helpers.logging import logger @@ -9,9 +11,11 @@ def extract_form_data_from_flask_request_and_save_data(req): return try: # https://flask.palletsprojects.com/en/stable/api/#flask.Request - # req.form is an ImmutableMultiDict, use `.items(multi=True)` to extract all values. + # req.form is an ImmutableMultiDict, we will try and extract all values for a certain key if req.form: - form_data = req.form.items(multi=True) + form_data: Dict[str, List] = {} + for key in req.form.keys(): + form_data[key] = req.form.getlist(key) context.set_body(form_data) else: context.set_body(req.data.decode("utf-8")) From fff5e58b2ef7115f7b261f03a26297edb8604f76 Mon Sep 17 00:00:00 2001 From: BitterPanda Date: Tue, 15 Jul 2025 09:49:21 +0200 Subject: [PATCH 4/4] Do a parsing from the items(multi=True) --- aikido_zen/sources/flask/extract_form_data.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/aikido_zen/sources/flask/extract_form_data.py b/aikido_zen/sources/flask/extract_form_data.py index 937685521..553e254ea 100644 --- a/aikido_zen/sources/flask/extract_form_data.py +++ b/aikido_zen/sources/flask/extract_form_data.py @@ -14,8 +14,13 @@ def extract_form_data_from_flask_request_and_save_data(req): # req.form is an ImmutableMultiDict, we will try and extract all values for a certain key if req.form: form_data: Dict[str, List] = {} - for key in req.form.keys(): - form_data[key] = req.form.getlist(key) + + # Extract to a dict of lists + for key, value in req.form.items(multi=True): + if not key in form_data: + form_data[key] = list() + form_data[key].append(value) + context.set_body(form_data) else: context.set_body(req.data.decode("utf-8"))