From 73ae892066ca719c5ff1ecf6dfe2d237fef41934 Mon Sep 17 00:00:00 2001 From: Beto Dealmeida Date: Thu, 16 Dec 2021 09:17:15 -0800 Subject: [PATCH] feat: don't ask for password when DB exists (#17776) --- superset/charts/commands/importers/v1/__init__.py | 2 +- superset/databases/schemas.py | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/superset/charts/commands/importers/v1/__init__.py b/superset/charts/commands/importers/v1/__init__.py index dc469a676..f407a4662 100644 --- a/superset/charts/commands/importers/v1/__init__.py +++ b/superset/charts/commands/importers/v1/__init__.py @@ -97,7 +97,7 @@ class ImportChartsCommand(ImportModelsCommand): ) config["params"].update({"datasource": dataset.uid}) - if config["query_context"]: + if "query_context" in config: del config["query_context"] import_chart(session, config, overwrite=overwrite) diff --git a/superset/databases/schemas.py b/superset/databases/schemas.py index 81e3d8902..a457e732d 100644 --- a/superset/databases/schemas.py +++ b/superset/databases/schemas.py @@ -27,9 +27,10 @@ from sqlalchemy import MetaData from sqlalchemy.engine.url import make_url from sqlalchemy.exc import ArgumentError +from superset import db from superset.db_engine_specs import BaseEngineSpec, get_engine_specs from superset.exceptions import CertificateException, SupersetSecurityException -from superset.models.core import ConfigurationMethod, PASSWORD_MASK +from superset.models.core import ConfigurationMethod, Database, PASSWORD_MASK from superset.security.analytics_db_safety import check_sqlalchemy_uri from superset.utils.core import markdown, parse_ssl_cert @@ -620,6 +621,11 @@ class ImportV1DatabaseSchema(Schema): @validates_schema def validate_password(self, data: Dict[str, Any], **kwargs: Any) -> None: """If sqlalchemy_uri has a masked password, password is required""" + uuid = data["uuid"] + existing = db.session.query(Database).filter_by(uuid=uuid).first() + if existing: + return + uri = data["sqlalchemy_uri"] password = make_url(uri).password if password == PASSWORD_MASK and data.get("password") is None: