From 2095f33be4f3b569593648deacf2fcc899b6b011 Mon Sep 17 00:00:00 2001 From: Sejal Gupta Date: Thu, 30 Jul 2026 15:42:37 +0530 Subject: [PATCH] [v3-3-test] cli: Fix TypeError in 'airflow db shell' when database name is missing (#68913) (cherry picked from commit 521ad026ee46fef7ed0241b6a462e71ca151edf5) Co-authored-by: Sejal Gupta --- .../src/airflow/cli/commands/db_command.py | 6 ++++++ .../tests/unit/cli/commands/test_db_command.py | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/airflow-core/src/airflow/cli/commands/db_command.py b/airflow-core/src/airflow/cli/commands/db_command.py index 4c15ccc2d488d..54de07299c645 100644 --- a/airflow-core/src/airflow/cli/commands/db_command.py +++ b/airflow-core/src/airflow/cli/commands/db_command.py @@ -306,6 +306,12 @@ def shell(args): url = settings.get_engine().url print(f"DB: {url!r}") + if not url.database: + raise ValueError( + "The metadata database name is missing from the connection URI. " + "Please check your AIRFLOW__DATABASE__SQL_ALCHEMY_CONN configuration." + ) + if url.get_backend_name() == "mysql": with NamedTemporaryFile(suffix="my.cnf") as f: f.write(_build_mysql_cnf(url)) diff --git a/airflow-core/tests/unit/cli/commands/test_db_command.py b/airflow-core/tests/unit/cli/commands/test_db_command.py index 76e391e1144ed..e6168605a3f3e 100644 --- a/airflow-core/tests/unit/cli/commands/test_db_command.py +++ b/airflow-core/tests/unit/cli/commands/test_db_command.py @@ -534,6 +534,23 @@ def test_cli_shell_invalid_ppg3(self): with pytest.raises(AirflowException, match=r"Unknown driver: invalid\+psycopg"): db_command.shell(self.parser.parse_args(["db", "shell"])) + @mock.patch( + "airflow.cli.commands.db_command.settings.engine.url", + make_url("postgresql+psycopg2://postgres:airflow@postgres/"), + ) + @pytest.mark.parametrize( + "conn_uri", + [ + pytest.param("postgresql://postgres:postgres@postgres:5432", id="db-name-none"), + pytest.param("postgresql://postgres:postgres@postgres:5432/", id="db-name-empty"), + ], + ) + def test_db_shell_missing_database_name(self, conn_uri): + """Assert that an explicit ValueError is raised when the database name is missing.""" + with mock.patch("airflow.cli.commands.db_command.settings.engine.url", make_url(conn_uri)): + with pytest.raises(ValueError, match="The metadata database name is missing"): + db_command.shell(self.parser.parse_args(["db", "shell"])) + def test_run_db_downgrade_command_success_and_messages(self, capsys): class Args: to_revision = "abc"