From d87092936f2b5f7099e302e53dbfc0760d5e8328 Mon Sep 17 00:00:00 2001 From: David Arnold Date: Wed, 17 Jan 2024 16:53:30 +0100 Subject: [PATCH 1/2] chore: simplify frappe.connect & require explicit site initialization --- frappe/__init__.py | 8 +------- frappe/commands/site.py | 14 +++++++++----- frappe/commands/translate.py | 3 ++- frappe/commands/utils.py | 3 ++- frappe/utils/background_jobs.py | 3 ++- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 94ad9dad7c..6eb05b8208 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -274,20 +274,14 @@ def init(site: str, sites_path: str = ".", new_site: bool = False, force=False) local.conf.db_user = local.conf.db_name -def connect( - site: str | None = None, db_name: str | None = None, set_admin_as_user: bool = True -) -> None: +def connect(db_name: str | None = None, set_admin_as_user: bool = True) -> None: """Connect to site database instance. - :param site: If site is given, calls `frappe.init`. :param db_name: Optional. Will use from `site_config.json`. :param set_admin_as_user: Set Administrator as current user. """ from frappe.database import get_db - if site: - init(site) - local.db = get_db( host=local.conf.db_host, port=local.conf.db_port, diff --git a/frappe/commands/site.py b/frappe/commands/site.py index 73724b8df8..3b6fcb32f1 100644 --- a/frappe/commands/site.py +++ b/frappe/commands/site.py @@ -342,7 +342,7 @@ def partial_restore(context, sql_file_path, verbose, encryption_key=None): site = get_site(context) verbose = context.verbose or verbose frappe.init(site=site) - frappe.connect(site=site) + frappe.connect() err, out = frappe.utils.execute_in_shell(f"file {sql_file_path}", check_exit_code=True) if err: click.secho("Failed to detect type of backup file", fg="red") @@ -538,7 +538,8 @@ def add_db_index(context, doctype, column): columns = column # correct naming for site in context.sites: - frappe.connect(site=site) + frappe.init(site=site) + frappe.connect() try: frappe.db.add_index(doctype, columns) if len(columns) == 1: @@ -580,7 +581,8 @@ def describe_database_table(context, doctype, column): import json for site in context.sites: - frappe.connect(site=site) + frappe.init(site=site) + frappe.connect() try: data = _extract_table_stats(doctype, column) # NOTE: Do not print anything else in this to avoid clobbering the output. @@ -666,7 +668,8 @@ def add_system_manager(context, email, first_name, last_name, send_welcome_email import frappe.utils.user for site in context.sites: - frappe.connect(site=site) + frappe.init(site=site) + frappe.connect() try: frappe.utils.user.add_system_manager(email, first_name, last_name, send_welcome_email, password) frappe.db.commit() @@ -692,7 +695,8 @@ def add_user_for_sites( import frappe.utils.user for site in context.sites: - frappe.connect(site=site) + frappe.init(site=site) + frappe.connect() try: add_new_user(email, first_name, last_name, user_type, send_welcome_email, password, add_role) frappe.db.commit() diff --git a/frappe/commands/translate.py b/frappe/commands/translate.py index 5042843405..247d4a77d5 100644 --- a/frappe/commands/translate.py +++ b/frappe/commands/translate.py @@ -34,7 +34,8 @@ def new_language(context, lang_code, app): raise Exception("--site is required") # init site - frappe.connect(site=context["sites"][0]) + frappe.init(site=context["sites"][0]) + frappe.connect() frappe.translate.write_translations_file(app, lang_code) print( diff --git a/frappe/commands/utils.py b/frappe/commands/utils.py index 8f6cb70d17..cc65b9fa53 100644 --- a/frappe/commands/utils.py +++ b/frappe/commands/utils.py @@ -108,7 +108,8 @@ def clear_cache(context): for site in context.sites: try: - frappe.connect(site) + frappe.init(site=site) + frappe.connect() frappe.clear_cache() clear_website_cache() finally: diff --git a/frappe/utils/background_jobs.py b/frappe/utils/background_jobs.py index 36b4a75c96..f40b20a4a0 100755 --- a/frappe/utils/background_jobs.py +++ b/frappe/utils/background_jobs.py @@ -188,7 +188,8 @@ def execute_job(site, method, event, job_name, kwargs, user=None, is_async=True, retval = None if is_async: - frappe.connect(site) + frappe.init(site=site) + frappe.connect() if os.environ.get("CI"): frappe.flags.in_test = True From 2b16450cf085ec957c76118c6025786d35072a8c Mon Sep 17 00:00:00 2001 From: David Arnold Date: Thu, 18 Jan 2024 12:38:26 +0100 Subject: [PATCH 2/2] chore: keep frappe.connect backwards compatible for a while --- frappe/__init__.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 6eb05b8208..efcbb09503 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -274,14 +274,26 @@ def init(site: str, sites_path: str = ".", new_site: bool = False, force=False) local.conf.db_user = local.conf.db_name -def connect(db_name: str | None = None, set_admin_as_user: bool = True) -> None: +def connect( + site: str | None = None, db_name: str | None = None, set_admin_as_user: bool = True +) -> None: """Connect to site database instance. + :param site: (Deprecated) If site is given, calls `frappe.init`. :param db_name: Optional. Will use from `site_config.json`. :param set_admin_as_user: Set Administrator as current user. """ from frappe.database import get_db + if site: + from frappe.utils.deprecations import deprecation_warning + + deprecation_warning( + "Calling frappe.connect with the site argument is deprecated and will be removed in next major version. " + "Instead, explicitly invoke frappe.init(site) prior to calling frappe.connect(), if initializing the site is necessary." + ) + init(site) + local.db = get_db( host=local.conf.db_host, port=local.conf.db_port,