From 7504c1bc738291b17c715de8737bcaa09599625b Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Mon, 28 Nov 2022 11:31:24 +0530 Subject: [PATCH 1/3] refactor: simpler commit after_request --- frappe/app.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/frappe/app.py b/frappe/app.py index fc679aa44e..5bacf8d4ec 100644 --- a/frappe/app.py +++ b/frappe/app.py @@ -320,12 +320,13 @@ def handle_exception(e): def after_request(rollback): # if HTTP method would change server state, commit if necessary - if frappe.db and ( - frappe.local.flags.commit or frappe.local.request.method in UNSAFE_HTTP_METHODS + if ( + frappe.db + and (frappe.local.flags.commit or frappe.local.request.method in UNSAFE_HTTP_METHODS) + and frappe.db.transaction_writes ): - if frappe.db.transaction_writes: - frappe.db.commit() - rollback = False + frappe.db.commit() + rollback = False # update session if getattr(frappe.local, "session_obj", None): From 4cc367f6c1d9ada5c27101f9ef10f7c5fab66f76 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Mon, 28 Nov 2022 11:34:46 +0530 Subject: [PATCH 2/3] fix: apply rollback to all HTTP methods that can write --- frappe/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/app.py b/frappe/app.py index 5bacf8d4ec..3c768c3d1d 100644 --- a/frappe/app.py +++ b/frappe/app.py @@ -77,7 +77,7 @@ def application(request: Request): rollback = after_request(rollback) finally: - if request.method in ("POST", "PUT") and frappe.db and rollback: + if request.method in UNSAFE_HTTP_METHODS and frappe.db and rollback: frappe.db.rollback() frappe.rate_limiter.update() From 4f162da728ac32a7831e641bc8a5545941ea7524 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Mon, 28 Nov 2022 11:39:22 +0530 Subject: [PATCH 3/3] fix: rollback if not commiting --- frappe/app.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frappe/app.py b/frappe/app.py index 3c768c3d1d..2fe9991c4c 100644 --- a/frappe/app.py +++ b/frappe/app.py @@ -327,6 +327,9 @@ def after_request(rollback): ): frappe.db.commit() rollback = False + elif frappe.db: + frappe.db.rollback() + rollback = False # update session if getattr(frappe.local, "session_obj", None):