From b5128a35fd513d0953ab87d8cf43ad5530c4036e Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Thu, 7 Jul 2022 14:40:59 +0530 Subject: [PATCH] refactor: simplify fetching of readable records (#17417) - remove encoding, use cstr directly - remove falsy values by default None, empty string. --- frappe/boot.py | 6 +++++- .../document_naming_settings.py | 1 - .../desk/doctype/dashboard_chart/dashboard_chart.py | 12 +++--------- frappe/desk/doctype/number_card/number_card.py | 7 ++----- frappe/permissions.py | 6 ++---- 5 files changed, 12 insertions(+), 20 deletions(-) diff --git a/frappe/boot.py b/frappe/boot.py index a0a93bd497..c53d6bcc66 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -21,7 +21,7 @@ from frappe.social.doctype.energy_point_settings.energy_point_settings import ( is_energy_point_enabled, ) from frappe.translate import get_lang_dict -from frappe.utils import add_user_info, get_time_zone +from frappe.utils import add_user_info, cstr, get_time_zone from frappe.utils.change_log import get_versions from frappe.website.doctype.web_page_view.web_page_view import is_tracking_enabled @@ -142,6 +142,10 @@ def get_allowed_reports(cache=False): return get_user_pages_or_reports("Report", cache=cache) +def get_allowed_report_names(cache=False) -> set[str]: + return {cstr(report) for report in get_allowed_reports(cache).keys() if report} + + def get_user_pages_or_reports(parent, cache=False): _cache = frappe.cache() diff --git a/frappe/core/doctype/document_naming_settings/document_naming_settings.py b/frappe/core/doctype/document_naming_settings/document_naming_settings.py index 5680b6c823..ad50cb90aa 100644 --- a/frappe/core/doctype/document_naming_settings/document_naming_settings.py +++ b/frappe/core/doctype/document_naming_settings/document_naming_settings.py @@ -8,7 +8,6 @@ from frappe.core.doctype.doctype.doctype import validate_series from frappe.model.document import Document from frappe.model.naming import NamingSeries from frappe.permissions import get_doctypes_with_read -from frappe.utils import cint class NamingSeriesNotSetError(frappe.ValidationError): diff --git a/frappe/desk/doctype/dashboard_chart/dashboard_chart.py b/frappe/desk/doctype/dashboard_chart/dashboard_chart.py index 1145873a09..75f230a901 100644 --- a/frappe/desk/doctype/dashboard_chart/dashboard_chart.py +++ b/frappe/desk/doctype/dashboard_chart/dashboard_chart.py @@ -6,7 +6,7 @@ import json import frappe from frappe import _ -from frappe.boot import get_allowed_reports +from frappe.boot import get_allowed_report_names from frappe.config import get_modules_from_all_apps_for_user from frappe.model.document import Document from frappe.model.naming import append_number_if_name_exists @@ -40,10 +40,7 @@ def get_permission_query_conditions(user): allowed_doctypes = [ frappe.db.escape(doctype) for doctype in frappe.permissions.get_doctypes_with_read() ] - allowed_reports = [ - frappe.db.escape(key) if type(key) == str else key.encode("UTF8") - for key in get_allowed_reports() - ] + allowed_reports = [frappe.db.escape(report) for report in get_allowed_report_names()] allowed_modules = [ frappe.db.escape(module.get("module_name")) for module in get_modules_from_all_apps_for_user() ] @@ -83,10 +80,7 @@ def has_permission(doc, ptype, user): return True if doc.chart_type == "Report": - allowed_reports = [ - key if type(key) == str else key.encode("UTF8") for key in get_allowed_reports() - ] - if doc.report_name in allowed_reports: + if doc.report_name in get_allowed_report_names(): return True else: allowed_doctypes = frappe.permissions.get_doctypes_with_read() diff --git a/frappe/desk/doctype/number_card/number_card.py b/frappe/desk/doctype/number_card/number_card.py index 1bffd68940..12a6105c4b 100644 --- a/frappe/desk/doctype/number_card/number_card.py +++ b/frappe/desk/doctype/number_card/number_card.py @@ -3,7 +3,7 @@ import frappe from frappe import _ -from frappe.boot import get_allowed_reports +from frappe.boot import get_allowed_report_names from frappe.config import get_modules_from_all_apps_for_user from frappe.model.document import Document from frappe.model.naming import append_number_if_name_exists @@ -91,10 +91,7 @@ def has_permission(doc, ptype, user): return True if doc.type == "Report": - allowed_reports = [ - key if type(key) == str else key.encode("UTF8") for key in get_allowed_reports() - ] - if doc.report_name in allowed_reports: + if doc.report_name in get_allowed_report_names(): return True else: allowed_doctypes = tuple(frappe.permissions.get_doctypes_with_read()) diff --git a/frappe/permissions.py b/frappe/permissions.py index 5e56071123..acbdf76989 100644 --- a/frappe/permissions.py +++ b/frappe/permissions.py @@ -6,7 +6,7 @@ import frappe import frappe.share from frappe import _, msgprint from frappe.query_builder import DocType -from frappe.utils import cint +from frappe.utils import cint, cstr rights = ( "select", @@ -360,9 +360,7 @@ def has_controller_permissions(doc, ptype, user=None): def get_doctypes_with_read(): - return list( - {p.parent if type(p.parent) == str else p.parent.encode("UTF8") for p in get_valid_perms()} - ) + return list({cstr(p.parent) for p in get_valid_perms() if p.parent}) def get_valid_perms(doctype=None, user=None):