From 80dcf0b1788088bb1d469766deeabcd85bc0d7dc Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Sun, 29 Jan 2023 20:09:45 +0530 Subject: [PATCH] feat: Split dict hooks to separate lines --- .../audit_system_hooks/audit_system_hooks.py | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/frappe/custom/report/audit_system_hooks/audit_system_hooks.py b/frappe/custom/report/audit_system_hooks/audit_system_hooks.py index 8dab192a14..a42c5c361a 100644 --- a/frappe/custom/report/audit_system_hooks/audit_system_hooks.py +++ b/frappe/custom/report/audit_system_hooks/audit_system_hooks.py @@ -5,8 +5,6 @@ import frappe def execute(filters=None): - frappe.only_for("System Manager") - return get_columns(), get_data() @@ -14,8 +12,8 @@ def get_columns(): values_field_type = "Data" # TODO: better text wrapping in reportview columns = [ {"label": "Hook name", "fieldname": "hook_name", "fieldtype": "Data", "width": 200}, - {"label": "Hook key (optional)", "fieldname": "key", "fieldtype": "Data", "width": 200}, - {"label": "Hook Values", "fieldname": "hook_values", "fieldtype": values_field_type}, + {"label": "Hook key (optional)", "fieldname": "hook_key", "fieldtype": "Data", "width": 200}, + {"label": "Hook Values (resolved)", "fieldname": "hook_values", "fieldtype": values_field_type}, ] # Each app is shown in order as a column @@ -37,8 +35,7 @@ def get_data(): if not v: return "" - if isinstance(v, list) and len(v) == 1: - return str(v[0]) + v = delist(v) if isinstance(v, (dict, list)): try: @@ -50,11 +47,24 @@ def get_data(): data = [] for hook, values in hooks.items(): - row = {"hook_name": hook, "hook_values": fmt_hook_values(values)} + if isinstance(values, dict): + for k, v in values.items(): + row = {"hook_name": hook, "hook_key": fmt_hook_values(k), "hook_values": fmt_hook_values(v)} + for app in installed_apps: + if app_hooks := delist(frappe.get_hooks(hook, app_name=app)): + row[app] = fmt_hook_values(app_hooks.get(k)) + data.append(row) + else: + row = {"hook_name": hook, "hook_values": fmt_hook_values(values)} + for app in installed_apps: + row[app] = fmt_hook_values(frappe.get_hooks(hook, app_name=app)) - for app in installed_apps: - row[app] = fmt_hook_values(frappe.get_hooks(hook, app_name=app)) - - data.append(row) + data.append(row) return data + + +def delist(val): + if isinstance(val, list) and len(val) == 1: + return val[0] + return val