diff --git a/superset/db_engine_specs/base.py b/superset/db_engine_specs/base.py index a7463a48e31e7..f93614e3beb1e 100644 --- a/superset/db_engine_specs/base.py +++ b/superset/db_engine_specs/base.py @@ -1372,7 +1372,9 @@ def build_sqlalchemy_uri( ) @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 0fca504e7e0c0..7320eab6db9db 100644 --- a/superset/db_engine_specs/bigquery.py +++ b/superset/db_engine_specs/bigquery.py @@ -49,7 +49,7 @@ 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 540974f9de375..ee8e822477a8f 100755 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -246,7 +246,8 @@ def parameters(self) -> Dict[str, Any]: 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 aea98d3f2cf20..8f17fdc225802 100644 --- a/tests/databases/api_tests.py +++ b/tests/databases/api_tests.py @@ -1448,6 +1448,7 @@ def test_available(self, app, get_available_engine_specs): "x-encrypted-extra": True, } }, + "required": ["credentials_info"], "type": "object", }, "preferred": True,