From 8ffd363ccf2147164b4e6b18531a41177841b102 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Thu, 10 Aug 2023 12:40:23 +0530 Subject: [PATCH] fix: missing order by clause and tests --- frappe/core/doctype/recorder/recorder.py | 16 +++++++++--- frappe/core/doctype/recorder/test_recorder.py | 26 +++++++++++++++++-- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/frappe/core/doctype/recorder/recorder.py b/frappe/core/doctype/recorder/recorder.py index 89a9c770ae..4aab095914 100644 --- a/frappe/core/doctype/recorder/recorder.py +++ b/frappe/core/doctype/recorder/recorder.py @@ -41,10 +41,20 @@ class Recorder(Document): start = cint(args.get("start")) or 0 page_length = cint(args.get("page_length")) or 20 requests = Recorder.get_filtered_requests(args)[start : start + page_length] - if args.get("order_by"): - sort_key, sort_order = args.get("order_by").split(".")[1].split(" ") + + if order_by_statment := args.get("order_by"): + if "." in order_by_statment: + order_by_statment = order_by_statment.split(".")[1] + + if " " in order_by_statment: + sort_key, sort_order = order_by_statment.split(" ") + else: + sort_key = order_by_statment + sort_order = "desc" + sort_key = sort_key.replace("`", "") - return sorted(requests, key=lambda r: r[sort_key], reverse=bool(sort_order == "desc")) + return sorted(requests, key=lambda r: r.get(sort_key) or 0, reverse=bool(sort_order == "desc")) + return sorted(requests, key=lambda r: r.duration, reverse=1) @staticmethod diff --git a/frappe/core/doctype/recorder/test_recorder.py b/frappe/core/doctype/recorder/test_recorder.py index aa2bb52c98..6069e9d47f 100644 --- a/frappe/core/doctype/recorder/test_recorder.py +++ b/frappe/core/doctype/recorder/test_recorder.py @@ -1,9 +1,31 @@ # Copyright (c) 2023, Frappe Technologies and Contributors # See license.txt -# import frappe +import frappe +import frappe.recorder from frappe.tests.utils import FrappeTestCase +from frappe.utils import set_request class TestRecorder(FrappeTestCase): - pass + def setUp(self): + self.start_recoder() + + def start_recoder(self): + frappe.recorder.stop() + frappe.recorder.delete() + set_request() + frappe.recorder.start() + frappe.recorder.record() + + def stop_recorder(self): + frappe.recorder.dump() + + def test_recorder_list(self): + frappe.get_all("User") # trigger one query + self.stop_recorder() + + requests = frappe.get_all("Recorder") + self.assertGreaterEqual(len(requests), 1) + request = frappe.get_doc("Recorder", requests[0].name) + self.assertGreaterEqual(len(request.sql_queries), 1)