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 <[email protected]> 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:
