You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by di...@apache.org on 2024/02/15 20:09:57 UTC

(superset) branch master updated: fix: ID param for DELETE ssh_tunnel endpoint (#27130)

This is an automated email from the ASF dual-hosted git repository.

diegopucci pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 7c7deb960d fix: ID param for DELETE ssh_tunnel endpoint (#27130)
7c7deb960d is described below

commit 7c7deb960dc3ce40a20f739f876ee5de460f20f1
Author: Geido <60...@users.noreply.github.com>
AuthorDate: Thu Feb 15 22:09:51 2024 +0200

    fix: ID param for DELETE ssh_tunnel endpoint (#27130)
    
    Co-authored-by: Michael S. Molina <70...@users.noreply.github.com>
---
 UPDATING.md                            |  1 +
 superset/databases/api.py              | 14 ++++++++++----
 tests/unit_tests/databases/api_test.py |  4 +++-
 3 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/UPDATING.md b/UPDATING.md
index 8f5785ac8c..4dd68340bc 100644
--- a/UPDATING.md
+++ b/UPDATING.md
@@ -30,6 +30,7 @@ assists people when migrating to a new version.
 
 ### Breaking Changes
 
+- [27130](https://github.com/apache/superset/pull/27130): Fixes the DELETE `/database/{id}/ssh_tunnel/`` endpoint to now correctly accept a database ID as a parameter, rather than an SSH tunnel ID.
 - [27117](https://github.com/apache/superset/pull/27117): Removes the following deprecated endpoints: `/superset/sqllab`, `/superset/sqllab/history`, `/sqllab/my_queries` use `/sqllab`, `/sqllab/history`, `/savedqueryview/list/?_flt_0_user={get_user_id()}` instead.
 - [26347](https://github.com/apache/superset/issues/26347): Removes the deprecated `VERSIONED_EXPORT` feature flag. The previous value of the feature flag was `True` and now the feature is permanently enabled.
 - [26328](https://github.com/apache/superset/issues/26328): Removes the deprecated Filter Box code and it's associated dependencies `react-select` and `array-move`. It also removes the `DeprecatedSelect` and `AsyncSelect` components that were exclusively used by filter boxes. Existing filter boxes will be automatically migrated to native filters.
diff --git a/superset/databases/api.py b/superset/databases/api.py
index 62fb729437..2f95bd0442 100644
--- a/superset/databases/api.py
+++ b/superset/databases/api.py
@@ -22,6 +22,7 @@ from io import BytesIO
 from typing import Any, cast, Optional
 from zipfile import is_zipfile, ZipFile
 
+from deprecation import deprecated
 from flask import request, Response, send_file
 from flask_appbuilder.api import expose, protect, rison, safe
 from flask_appbuilder.models.sqla.interface import SQLAInterface
@@ -48,7 +49,6 @@ from superset.commands.database.ssh_tunnel.delete import DeleteSSHTunnelCommand
 from superset.commands.database.ssh_tunnel.exceptions import (
     SSHTunnelDeleteFailedError,
     SSHTunnelingNotEnabledError,
-    SSHTunnelNotFoundError,
 )
 from superset.commands.database.tables import TablesDatabaseCommand
 from superset.commands.database.test_connection import TestConnectionDatabaseCommand
@@ -1447,6 +1447,7 @@ class DatabaseRestApi(BaseSupersetModelRestApi):
     @expose("/<int:pk>/ssh_tunnel/", methods=("DELETE",))
     @protect()
     @statsd_metrics
+    @deprecated(deprecated_in="4.0")
     @event_logger.log_this_with_context(
         action=lambda self, *args, **kwargs: f"{self.__class__.__name__}"
         f".delete_ssh_tunnel",
@@ -1483,10 +1484,15 @@ class DatabaseRestApi(BaseSupersetModelRestApi):
             500:
               $ref: '#/components/responses/500'
         """
+
+        database = DatabaseDAO.find_by_id(pk)
+        if not database:
+            return self.response_404()
         try:
-            DeleteSSHTunnelCommand(pk).run()
-            return self.response(200, message="OK")
-        except SSHTunnelNotFoundError:
+            existing_ssh_tunnel_model = database.ssh_tunnels
+            if existing_ssh_tunnel_model:
+                DeleteSSHTunnelCommand(existing_ssh_tunnel_model.id).run()
+                return self.response(200, message="OK")
             return self.response_404()
         except SSHTunnelDeleteFailedError as ex:
             logger.error(
diff --git a/tests/unit_tests/databases/api_test.py b/tests/unit_tests/databases/api_test.py
index f867f82a98..c0e1723fd8 100644
--- a/tests/unit_tests/databases/api_test.py
+++ b/tests/unit_tests/databases/api_test.py
@@ -458,7 +458,9 @@ def test_delete_ssh_tunnel(
         assert 1 == response_tunnel.database_id
 
         # Delete the recently created SSHTunnel
-        response_delete_tunnel = client.delete("/api/v1/database/1/ssh_tunnel/")
+        response_delete_tunnel = client.delete(
+            f"/api/v1/database/{database.id}/ssh_tunnel/"
+        )
         assert response_delete_tunnel.json["message"] == "OK"
 
         response_tunnel = DatabaseDAO.get_ssh_tunnel(1)