This is an automated email from the ASF dual-hosted git repository. diegopucci pushed a commit to branch diego/ch78628/fix-disabled-ssh-toggle in repository https://gitbox.apache.org/repos/asf/superset.git
commit beba29db729b7b3ecaa30e8e15133a9239a38d52 Author: geido <[email protected]> AuthorDate: Tue Feb 20 16:25:31 2024 +0200 Clean up --- .../src/features/databases/DatabaseModal/index.tsx | 23 +++++++++------------- superset-frontend/src/views/CRUD/hooks.ts | 2 +- superset/databases/api.py | 2 +- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/superset-frontend/src/features/databases/DatabaseModal/index.tsx b/superset-frontend/src/features/databases/DatabaseModal/index.tsx index 3607e5e400..eab71d02da 100644 --- a/superset-frontend/src/features/databases/DatabaseModal/index.tsx +++ b/superset-frontend/src/features/databases/DatabaseModal/index.tsx @@ -756,6 +756,9 @@ const DatabaseModal: FunctionComponent<DatabaseModalProps> = ({ const onSave = async () => { let dbConfigExtraExtensionOnSaveError; + + setLoading(true); + dbConfigExtraExtension ?.onSave(extraExtensionComponentState, db) .then(({ error }: { error: any }) => { @@ -764,6 +767,7 @@ const DatabaseModal: FunctionComponent<DatabaseModalProps> = ({ addDangerToast(error); } }); + if (dbConfigExtraExtensionOnSaveError) { setLoading(false); return; @@ -783,17 +787,10 @@ const DatabaseModal: FunctionComponent<DatabaseModalProps> = ({ }); } - // only do validation for non ssh tunnel connections - if (!dbToUpdate?.parameters?.ssh) { - // make sure that button spinner animates - setLoading(true); - const errors = await getValidation(dbToUpdate, true); - if ((validationErrors && !isEmpty(validationErrors)) || errors) { - setLoading(false); - return; - } - // end spinner animation + const errors = await getValidation(dbToUpdate, true); + if ((validationErrors && !isEmpty(validationErrors)) || errors) { setLoading(false); + return; } const parameters_schema = isEditMode @@ -850,8 +847,6 @@ const DatabaseModal: FunctionComponent<DatabaseModalProps> = ({ }); } - setLoading(true); - // strictly checking for false as an indication that the toggle got unchecked if (isSSHTunneling && useSSHTunneling === false) { // remove ssh tunnel @@ -1542,8 +1537,8 @@ const DatabaseModal: FunctionComponent<DatabaseModalProps> = ({ typeof dbErrors === 'object' ? Object.values(dbErrors) : typeof dbErrors === 'string' - ? [dbErrors] - : []; + ? [dbErrors] + : []; } else if ( !isEmpty(validationErrors) && validationErrors?.error_type === 'GENERIC_DB_ENGINE_ERROR' diff --git a/superset-frontend/src/views/CRUD/hooks.ts b/superset-frontend/src/views/CRUD/hooks.ts index 85f7c60252..bd6607d31b 100644 --- a/superset-frontend/src/views/CRUD/hooks.ts +++ b/superset-frontend/src/views/CRUD/hooks.ts @@ -745,7 +745,7 @@ export function useDatabaseValidation() { const getValidation = useCallback( (database: Partial<DatabaseObject> | null, onCreate = false) => { if (database?.parameters?.ssh) { - // when ssh tunnel is enabled we don't want to render any validation errors + // TODO: /validate_parameters/ and related utils should support ssh tunnel setValidationErrors(null); return []; } diff --git a/superset/databases/api.py b/superset/databases/api.py index e6aca61a20..4d7d4c531a 100644 --- a/superset/databases/api.py +++ b/superset/databases/api.py @@ -919,7 +919,7 @@ class DatabaseRestApi(BaseSupersetModelRestApi): try: TestConnectionDatabaseCommand(item).run() return self.response(200, message="OK") - except SSHTunnelingNotEnabledError as ex: + except (SSHTunnelingNotEnabledError, SSHTunnelDatabasePortError) as ex: return self.response_400(message=str(ex)) @expose("/<int:pk>/related_objects/", methods=("GET",))
