From a84a67482f43a8876194b15ffaa6cc02908e3c6e Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Fri, 12 Aug 2022 12:50:31 +0530 Subject: [PATCH 1/4] fix: Exclude 'tested' files from coverage --- frappe/coverage.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/frappe/coverage.py b/frappe/coverage.py index ffa3576818..8519b04c55 100644 --- a/frappe/coverage.py +++ b/frappe/coverage.py @@ -24,6 +24,15 @@ STANDARD_EXCLUSIONS = [ "*/patches/*", ] +# tested via commands' test suite +TESTED_VIA_CLI = [ + "*/frappe/installer.py", + "*/frappe/build.py", + "*/frappe/database/__init__.py", + "*/frappe/database/db_manager.py", + "*/frappe/database/**/setup_db.py", +] + FRAPPE_EXCLUSIONS = [ "*/tests/*", "*/commands/*", @@ -33,7 +42,7 @@ FRAPPE_EXCLUSIONS = [ "*frappe/setup.py", "*/doctype/*/*_dashboard.py", "*/patches/*", -] +] + TESTED_VIA_CLI class CodeCoverage: From 91a47c26027f518aec06c5ec43b5081deda74f46 Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Fri, 12 Aug 2022 12:52:19 +0530 Subject: [PATCH 2/4] fix: Deprecate setup help database APIs APIs have been unused since ~v4/6? Don't see any need to keep them in. --- frappe/database/__init__.py | 13 ------------- frappe/database/mariadb/setup_db.py | 17 ----------------- frappe/database/postgres/setup_db.py | 9 --------- 3 files changed, 39 deletions(-) diff --git a/frappe/database/__init__.py b/frappe/database/__init__.py index 423442d344..d1b7729fee 100644 --- a/frappe/database/__init__.py +++ b/frappe/database/__init__.py @@ -54,16 +54,3 @@ def get_db(host=None, user=None, password=None, port=None, read_only=False): return frappe.database.mariadb.database.MariaDBDatabase( host, user, password, port=port, read_only=read_only ) - - -def setup_help_database(help_db_name): - import frappe - - if frappe.conf.db_type == "postgres": - import frappe.database.postgres.setup_db - - return frappe.database.postgres.setup_db.setup_help_database(help_db_name) - else: - import frappe.database.mariadb.setup_db - - return frappe.database.mariadb.setup_db.setup_help_database(help_db_name) diff --git a/frappe/database/mariadb/setup_db.py b/frappe/database/mariadb/setup_db.py index ef246712b1..392421bc7c 100644 --- a/frappe/database/mariadb/setup_db.py +++ b/frappe/database/mariadb/setup_db.py @@ -63,23 +63,6 @@ def setup_database(force, source_sql, verbose, no_mariadb_socket=False): bootstrap_database(db_name, verbose, source_sql) -def setup_help_database(help_db_name): - dbman = DbManager(get_root_connection(frappe.flags.root_login, frappe.flags.root_password)) - dbman.drop_database(help_db_name) - - # make database - if not help_db_name in dbman.get_database_list(): - try: - dbman.create_user(help_db_name, help_db_name) - except Exception as e: - # user already exists - if e.args[0] != 1396: - raise - dbman.create_database(help_db_name) - dbman.grant_all_privileges(help_db_name, help_db_name) - dbman.flush_privileges() - - def drop_user_and_database(db_name, root_login, root_password): frappe.local.db = get_root_connection(root_login, root_password) dbman = DbManager(frappe.local.db) diff --git a/frappe/database/postgres/setup_db.py b/frappe/database/postgres/setup_db.py index 7eee8081c0..ff14510c9c 100644 --- a/frappe/database/postgres/setup_db.py +++ b/frappe/database/postgres/setup_db.py @@ -75,15 +75,6 @@ def import_db_from_sql(source_sql=None, verbose=False): ) -def setup_help_database(help_db_name): - root_conn = get_root_connection(frappe.flags.root_login, frappe.flags.root_password) - root_conn.sql(f"DROP DATABASE IF EXISTS `{help_db_name}`") - root_conn.sql(f"DROP USER IF EXISTS {help_db_name}") - root_conn.sql(f"CREATE DATABASE `{help_db_name}`") - root_conn.sql(f"CREATE user {help_db_name} password '{help_db_name}'") - root_conn.sql("GRANT ALL PRIVILEGES ON DATABASE `{0}` TO {0}".format(help_db_name)) - - def get_root_connection(root_login=None, root_password=None): if not frappe.local.flags.root_connection: if not root_login: From fe4702553c84f8484839449e336cd77c6f4f82fa Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Fri, 12 Aug 2022 12:53:24 +0530 Subject: [PATCH 3/4] chore: Add typing --- frappe/config/__init__.py | 8 +++----- frappe/core/notifications.py | 5 ++--- frappe/desk/doctype/event/event.py | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/frappe/config/__init__.py b/frappe/config/__init__.py index ebd75cd70a..947f61e9e0 100644 --- a/frappe/config/__init__.py +++ b/frappe/config/__init__.py @@ -8,10 +8,8 @@ from frappe.desk.moduleview import ( ) -def get_modules_from_all_apps_for_user(user=None): - if not user: - user = frappe.session.user - +def get_modules_from_all_apps_for_user(user: str = 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() @@ -61,7 +59,7 @@ def get_all_empty_tables_by_module(): empty_tables_by_module = {} for doctype, module in results: - if "tab" + doctype in empty_tables: + if f"tab{doctype}" in empty_tables: if module in empty_tables_by_module: empty_tables_by_module[module].append(doctype) else: diff --git a/frappe/core/notifications.py b/frappe/core/notifications.py index 9a127e567e..093418e345 100644 --- a/frappe/core/notifications.py +++ b/frappe/core/notifications.py @@ -32,11 +32,10 @@ def get_things_todo(as_list=False): if as_list: return data - else: - return data[0][0] + return data[0][0] -def get_todays_events(as_list=False): +def get_todays_events(as_list: bool = False): """Returns a count of todays events in calendar""" from frappe.desk.doctype.event.event import get_events from frappe.utils import nowdate diff --git a/frappe/desk/doctype/event/event.py b/frappe/desk/doctype/event/event.py index e9104ef897..7bcb8207a7 100644 --- a/frappe/desk/doctype/event/event.py +++ b/frappe/desk/doctype/event/event.py @@ -205,7 +205,7 @@ def send_event_digest(): @frappe.whitelist() -def get_events(start, end, user=None, for_reminder=False, filters=None): +def get_events(start, end, user=None, for_reminder=False, filters=None) -> list[frappe._dict]: if not user: user = frappe.session.user From 96ed06f1f3dab3aa9d0f8150c41a5c1b943a86b0 Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Fri, 12 Aug 2022 12:54:00 +0530 Subject: [PATCH 4/4] test: Add test for config module --- frappe/tests/test_config.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 frappe/tests/test_config.py diff --git a/frappe/tests/test_config.py b/frappe/tests/test_config.py new file mode 100644 index 0000000000..21ceb47bb3 --- /dev/null +++ b/frappe/tests/test_config.py @@ -0,0 +1,17 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# License: MIT. See LICENSE +import unittest + +import frappe +from frappe.config import get_modules_from_all_apps_for_user + + +class TestConfig(unittest.TestCase): + def test_get_modules(self): + frappe_modules = frappe.get_all("Module Def", filters={"app_name": "frappe"}, pluck="name") + all_modules_data = get_modules_from_all_apps_for_user() + first_module_entry = all_modules_data[0] + all_modules = [x["module_name"] for x in all_modules_data] + self.assertIn("links", first_module_entry) + self.assertIsInstance(all_modules_data, list) + self.assertFalse([x for x in frappe_modules if x not in all_modules])