This is an automated email from the ASF dual-hosted git repository. hugh pushed a commit to branch pexdax/snowflake-add-validation in repository https://gitbox.apache.org/repos/asf/superset.git
commit 76f14a71ebd86a315faf5bbb8fd5c96df0f731ff Author: hughhhh <[email protected]> AuthorDate: Thu Oct 7 14:20:05 2021 -0400 add logic to check for required fields --- superset/databases/commands/validate.py | 2 +- superset/db_engine_specs/snowflake.py | 26 ++++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/superset/databases/commands/validate.py b/superset/databases/commands/validate.py index ac58162..e2dcc58 100644 --- a/superset/databases/commands/validate.py +++ b/superset/databases/commands/validate.py @@ -36,7 +36,7 @@ from superset.errors import ErrorLevel, SupersetError, SupersetErrorType from superset.extensions import event_logger from superset.models.core import Database -BYPASS_VALIDATION_ENGINES = {"bigquery", "snowflake"} +BYPASS_VALIDATION_ENGINES = {"bigquery"} class ValidateDatabaseParametersCommand(BaseCommand): diff --git a/superset/db_engine_specs/snowflake.py b/superset/db_engine_specs/snowflake.py index d0018d5..21727d9 100644 --- a/superset/db_engine_specs/snowflake.py +++ b/superset/db_engine_specs/snowflake.py @@ -28,7 +28,7 @@ from sqlalchemy.engine.url import make_url, URL from typing_extensions import TypedDict from superset.db_engine_specs.postgres import PostgresBaseEngineSpec -from superset.errors import SupersetError, SupersetErrorType +from superset.errors import ErrorLevel, SupersetError, SupersetErrorType from superset.models.sql_lab import Query from superset.utils import core as utils @@ -233,7 +233,29 @@ class SnowflakeEngineSpec(PostgresBaseEngineSpec): def validate_parameters( cls, parameters: SnowflakeParametersType # pylint: disable=unused-argument ) -> List[SupersetError]: - return [] + errors: List[SupersetError] = [] + required = { + "host", + "warehouse", + "username", + "database", + "account", + "role", + "password", + } + present = {key for key in parameters if parameters.get(key, ())} + missing = sorted(required - present) + + if missing: + errors.append( + SupersetError( + message=f'One or more parameters are missing: {", ".join(missing)}', + error_type=SupersetErrorType.CONNECTION_MISSING_PARAMETERS_ERROR, + level=ErrorLevel.WARNING, + extra={"missing": missing}, + ), + ) + return errors @classmethod def parameters_json_schema(cls) -> Any:
