From 6eb1607c0a7f0486fba05615adfead2a2d74e124 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 29 Mar 2024 10:26:49 +0100 Subject: [PATCH] refactor: name and explain user host login scope flag for mariadb --- frappe/commands/site.py | 31 ++++++++++++++++++++++++++--- frappe/database/__init__.py | 6 ++---- frappe/database/mariadb/setup_db.py | 7 ++++--- frappe/installer.py | 9 +-------- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/frappe/commands/site.py b/frappe/commands/site.py index dcea241051..24995f7599 100644 --- a/frappe/commands/site.py +++ b/frappe/commands/site.py @@ -38,6 +38,20 @@ from frappe.utils import CallbackManager default=False, help="Set MariaDB host to % and use TCP/IP Socket instead of using the UNIX Socket", ) +@click.option( + "--no-mariadb-socket", + is_flag=True, + default=False, + help="DEPRECATED: Set MariaDB host to % and use TCP/IP Socket instead of using the UNIX Socket", +) +@click.option( + "--mariadb-user-host-login-scope", + help=( + "Set the mariadb host for the user login scope if you don't want to use the current host as login " + "scope which typically is ''@'localhost' - may be used when initializing a user on a remote host. " + "See the mariadb docs on account names for more info." + ), +) @click.option("--admin-password", help="Administrator password for new site", default=None) @click.option("--verbose", is_flag=True, default=False, help="Verbose") @click.option("--force", help="Force restore if site/database already exists", is_flag=True, default=False) @@ -59,6 +73,7 @@ def new_site( source_sql=None, force=None, no_mariadb_socket=False, + mariadb_user_host_login_scope=False, install_app=None, db_name=None, db_password=None, @@ -72,11 +87,22 @@ def new_site( "Create a new site" from frappe.installer import _new_site + frappe.init(site=site, new_site=True) + + if no_mariadb_socket: + click.secho( + "--no-mariadb-socket is DEPRECATED; " + "use --mariadb-user-host-login-scope='%' (wildcard) or --mariadb-user-host-login-scope=, instead. " + "The name of this option was misleading: it had nothing to do with sockets.", + fg="yellow", + ) + frappe.flags.mariadb_user_host_login_scope = "%" + if mariadb_user_host_login_scope: + frappe.flags.mariadb_user_host_login_scope = mariadb_user_host_login_scope + rollback_callback = CallbackManager() try: - frappe.init(site=site, new_site=True) - _new_site( db_name, site, @@ -87,7 +113,6 @@ def new_site( install_apps=install_app, source_sql=source_sql, force=force, - no_mariadb_socket=no_mariadb_socket, db_password=db_password, db_type=db_type, db_host=db_host, diff --git a/frappe/database/__init__.py b/frappe/database/__init__.py index 12348e2f99..d8435fd1de 100644 --- a/frappe/database/__init__.py +++ b/frappe/database/__init__.py @@ -8,7 +8,7 @@ from shutil import which from frappe.database.database import savepoint -def setup_database(force, verbose=None, no_mariadb_socket=False): +def setup_database(force, verbose=None): import frappe if frappe.conf.db_type == "postgres": @@ -18,9 +18,7 @@ def setup_database(force, verbose=None, no_mariadb_socket=False): else: import frappe.database.mariadb.setup_db - return frappe.database.mariadb.setup_db.setup_database( - force, verbose, no_mariadb_socket=no_mariadb_socket - ) + return frappe.database.mariadb.setup_db.setup_database(force, verbose) def bootstrap_database(verbose=None, source_sql=None): diff --git a/frappe/database/mariadb/setup_db.py b/frappe/database/mariadb/setup_db.py index 7ee23e3ef5..8cb1b2d5d7 100644 --- a/frappe/database/mariadb/setup_db.py +++ b/frappe/database/mariadb/setup_db.py @@ -19,7 +19,7 @@ def get_mariadb_version(version_string: str = ""): return version.rsplit(".", 1) -def setup_database(force, verbose, no_mariadb_socket=False): +def setup_database(force, verbose): frappe.local.session = frappe._dict({"user": "Administrator"}) db_user = frappe.conf.db_user @@ -27,8 +27,9 @@ def setup_database(force, verbose, no_mariadb_socket=False): root_conn = get_root_connection() dbman = DbManager(root_conn) dbman_kwargs = {} - if no_mariadb_socket: - dbman_kwargs["host"] = "%" + + if frappe.flags.mariadb_user_host_login_scope is not None: + dbman_kwargs["host"] = frappe.flags.mariadb_user_host_login_scope dbman.create_user(db_user, frappe.conf.db_password, **dbman_kwargs) if verbose: diff --git a/frappe/installer.py b/frappe/installer.py index 715dd99b4d..37d30fb3ea 100644 --- a/frappe/installer.py +++ b/frappe/installer.py @@ -46,7 +46,6 @@ def _new_site( install_apps=None, source_sql=None, force=False, - no_mariadb_socket=False, db_password=None, db_type=None, db_host=None, @@ -63,10 +62,6 @@ def _new_site( print(f"Site {site} already exists, use `--force` to proceed anyway") sys.exit(1) - if no_mariadb_socket and db_type != "mariadb": - print("--no-mariadb-socket requires db_type to be set to mariadb.") - sys.exit(1) - frappe.init(site=site) if not db_name: @@ -96,7 +91,6 @@ def _new_site( db_host=db_host, db_port=db_port, db_user=db_user, - no_mariadb_socket=no_mariadb_socket, setup=setup_db, rollback_callback=rollback_callback, ) @@ -133,7 +127,6 @@ def install_db( db_host=None, db_port=None, db_user=None, - no_mariadb_socket=False, setup=True, rollback_callback=None, ): @@ -163,7 +156,7 @@ def install_db( frappe.flags.root_password = root_password if setup: - setup_database(force, verbose, no_mariadb_socket) + setup_database(force, verbose) if rollback_callback: rollback_callback.add(lambda: drop_user_and_database(db_name, db_user or db_name))