seitime-frappe/frappe/utils/modules.py
David 091df9fe2b
refactor!: make room in the frappe.config namespace
BRAKING: fappe.config namespace moved to
frappe.utils.modules namespace
2024-09-12 12:18:58 +02:00

64 lines
1.9 KiB
Python

import frappe
from frappe import _
def get_modules_from_all_apps_for_user(user: str | None = None) -> list[dict]:
user = user or frappe.session.user
all_modules = get_modules_from_all_apps()
global_blocked_modules = frappe.get_doc("User", "Administrator").get_blocked_modules()
user_blocked_modules = frappe.get_doc("User", user).get_blocked_modules()
blocked_modules = global_blocked_modules + user_blocked_modules
allowed_modules_list = [m for m in all_modules if m.get("module_name") not in blocked_modules]
empty_tables_by_module = get_all_empty_tables_by_module()
for module in allowed_modules_list:
module_name = module.get("module_name")
# Apply onboarding status
if module_name in empty_tables_by_module:
module["onboard_present"] = 1
return allowed_modules_list
def get_modules_from_all_apps():
modules_list = []
for app in frappe.get_installed_apps():
modules_list += get_modules_from_app(app)
return modules_list
def get_modules_from_app(app):
return frappe.get_all("Module Def", filters={"app_name": app}, fields=["module_name", "app_name as app"])
def get_all_empty_tables_by_module():
table_rows = frappe.qb.Field("table_rows")
table_name = frappe.qb.Field("table_name")
information_schema = frappe.qb.Schema("information_schema")
empty_tables = (
frappe.qb.from_(information_schema.tables).select(table_name).where(table_rows == 0)
).run()
empty_tables = {r[0] for r in empty_tables}
results = frappe.get_all("DocType", fields=["name", "module"])
empty_tables_by_module = {}
for doctype, module in results:
if f"tab{doctype}" in empty_tables:
if module in empty_tables_by_module:
empty_tables_by_module[module].append(doctype)
else:
empty_tables_by_module[module] = [doctype]
return empty_tables_by_module
def is_domain(module):
return module.get("category") == "Domains"
def is_module(module):
return module.get("type") == "module"