You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by hu...@apache.org on 2022/10/03 20:44:31 UTC
[superset] 01/01: pull reference
This is an automated email from the ASF dual-hosted git repository.
hugh pushed a commit to branch fix-engine-params-ref
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 8cbb2062a9c699bca665ac10768f0bfcedba6ba3
Author: hughhhh <hu...@gmail.com>
AuthorDate: Mon Oct 3 16:44:05 2022 -0400
pull reference
---
superset/db_engine_specs/gsheets.py | 18 ++++++++++++++++--
superset/models/core.py | 2 +-
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/superset/db_engine_specs/gsheets.py b/superset/db_engine_specs/gsheets.py
index 78b42d2b3a..3011d36903 100644
--- a/superset/db_engine_specs/gsheets.py
+++ b/superset/db_engine_specs/gsheets.py
@@ -31,6 +31,7 @@ from typing_extensions import TypedDict
from superset import security_manager
from superset.constants import PASSWORD_MASK
+from superset.databases.commands.exceptions import DatabaseExtraJSONValidationError
from superset.databases.schemas import encrypted_field_properties, EncryptedString
from superset.db_engine_specs.sqlite import SqliteEngineSpec
from superset.errors import ErrorLevel, SupersetError, SupersetErrorType
@@ -209,13 +210,26 @@ class GSheetsEngineSpec(SqliteEngineSpec):
spec.components.schema(cls.__name__, schema=cls.parameters_schema)
return spec.to_dict()["components"]["schemas"][cls.__name__]
+ @classmethod
+ def get_engine_parameters(cls, properties: Dict[str, Any]) -> Dict[str, Any]:
+ try:
+ if properties.get("extra"):
+ return json.loads(properties["extra"]).get("engine_params", {})
+ return {}
+ except TypeError as ex:
+ raise DatabaseExtraJSONValidationError(
+ "Unable to parse extra_json data"
+ ) from ex
+
@classmethod
def validate_parameters(
cls,
- properties: GSheetsPropertiesType,
+ properties: Dict[str, Any],
) -> List[SupersetError]:
errors: List[SupersetError] = []
- parameters = properties.get("parameters", {})
+
+ # {'id': 7, 'configuration_method': <ConfigurationMethod.DYNAMIC_FORM: 'dynamic_form'>, 'extra': '{"engine_params":{"catalog":{"query_error_logs":"https://docs.google.com/spreadsheets/d/1XGpBx5-SPwM9mcdqMBTQcQNt-3Aa5-TEusUp5OvwMWs"}},"metadata_params":{},"schemas_allowed_for_file_upload":[]}', 'server_cert': None, 'engine': 'gsheets', 'database_name': 'Google Sheets', 'impersonate_user': True, 'masked_encrypted_extra': '{}', 'driver': 'apsw'}
+ parameters = cls.get_engine_parameters(properties)
encrypted_credentials = parameters.get("service_account_info") or "{}"
# On create the encrypted credentials are a string,
diff --git a/superset/models/core.py b/superset/models/core.py
index b0f8bbb772..008230ef48 100755
--- a/superset/models/core.py
+++ b/superset/models/core.py
@@ -261,7 +261,7 @@ class Database(
# When returning the parameters we should use the masked SQLAlchemy URI and the
# masked ``encrypted_extra`` to prevent exposing sensitive credentials.
masked_uri = make_url_safe(self.sqlalchemy_uri)
- masked_encrypted_extra = self.mask_encrypted_extra(self.encrypted_extra)
+ masked_encrypted_extra = self.masked_encrypted_extra
encrypted_config = {}
if masked_encrypted_extra is not None:
try: