Skip to content

Commit

Permalink
feat: validate database parameters (apache#14883)
Browse files Browse the repository at this point in the history
  • Loading branch information
betodealmeida committed May 27, 2021
1 parent 850e17a commit 7d21215
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
7 changes: 6 additions & 1 deletion superset/databases/schemas.py
Expand Up @@ -276,7 +276,9 @@ def build_sqlalchemy_uri(
)
engine_spec = engine_specs[engine]

if not hasattr(engine_spec, "build_sqlalchemy_uri"):
if not hasattr(engine_spec, "build_sqlalchemy_uri") or not hasattr(
engine_spec, "parameters_schema"
):
raise ValidationError(
[
_(
Expand All @@ -286,6 +288,9 @@ def build_sqlalchemy_uri(
]
)

# validate parameters
parameters = engine_spec.parameters_schema.load(parameters) # type: ignore

serialized_encrypted_extra = data.get("encrypted_extra", "{}")
try:
encrypted_extra = json.loads(serialized_encrypted_extra)
Expand Down
21 changes: 21 additions & 0 deletions tests/databases/schema_tests.py
Expand Up @@ -130,3 +130,24 @@ def test_database_parameters_schema_no_mixin(get_engine_specs):
)
]
}


@mock.patch("superset.databases.schemas.get_engine_specs")
def test_database_parameters_schema_mixin_invalid_type(get_engine_specs):
get_engine_specs.return_value = {"dummy_engine": DummyEngine}
payload = {
"engine": "dummy_engine",
"configuration_method": ConfigurationMethod.DYNAMIC_FORM,
"parameters": {
"username": "username",
"password": "password",
"host": "localhost",
"port": "badport",
"database": "dbname",
},
}
schema = DummySchema()
try:
schema.load(payload)
except ValidationError as err:
assert err.messages == {"port": ["Not a valid integer."]}

0 comments on commit 7d21215

Please sign in to comment.