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:

Reply via email to