diff --git a/superset/db_engine_specs/base.py b/superset/db_engine_specs/base.py index a7463a48e3..f93614e3be 100644 --- a/superset/db_engine_specs/base.py +++ b/superset/db_engine_specs/base.py @@ -1372,7 +1372,9 @@ class BasicParametersMixin: ) @classmethod - def get_parameters_from_uri(cls, uri: str) -> BasicParametersType: + def get_parameters_from_uri( + cls, uri: str, encrypted_extra: Optional[Dict[str, Any]] = None + ) -> BasicParametersType: url = make_url(uri) encryption = all( item in url.query.items() for item in cls.encryption_parameters.items() diff --git a/superset/db_engine_specs/bigquery.py b/superset/db_engine_specs/bigquery.py index 0fca504e7e..7320eab6db 100644 --- a/superset/db_engine_specs/bigquery.py +++ b/superset/db_engine_specs/bigquery.py @@ -49,7 +49,7 @@ ma_plugin = MarshmallowPlugin() class BigQueryParametersSchema(Schema): credentials_info = EncryptedField( - description="Contents of BigQuery JSON credentials.", + required=True, description="Contents of BigQuery JSON credentials.", ) diff --git a/superset/models/core.py b/superset/models/core.py index 540974f9de..ee8e822477 100755 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -246,7 +246,8 @@ class Database( self.db_engine_spec, "get_parameters_from_uri" ): uri = make_url(self.sqlalchemy_uri_decrypted) - return {**parameters, **self.db_engine_spec.get_parameters_from_uri(uri)} # type: ignore + encrypted_extra = self.get_encrypted_extra() + return {**parameters, **self.db_engine_spec.get_parameters_from_uri(uri, encrypted_extra=encrypted_extra)} # type: ignore return parameters diff --git a/tests/databases/api_tests.py b/tests/databases/api_tests.py index aea98d3f2c..8f17fdc225 100644 --- a/tests/databases/api_tests.py +++ b/tests/databases/api_tests.py @@ -1448,6 +1448,7 @@ class TestDatabaseApi(SupersetTestCase): "x-encrypted-extra": True, } }, + "required": ["credentials_info"], "type": "object", }, "preferred": True,