Skip to content

Commit

Permalink
fix: ID param for DELETE ssh_tunnel endpoint (apache#27130)
Browse files Browse the repository at this point in the history
Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com>
  • Loading branch information
2 people authored and sfirke committed Mar 22, 2024
1 parent 9b8f36e commit dc39f84
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 5 deletions.
1 change: 1 addition & 0 deletions UPDATING.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
14 changes: 10 additions & 4 deletions superset/databases/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
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
Expand All @@ -48,7 +49,6 @@
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
Expand Down Expand Up @@ -1447,6 +1447,7 @@ def validate_parameters(self) -> FlaskResponse:
@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",
Expand Down Expand Up @@ -1483,10 +1484,15 @@ def delete_ssh_tunnel(self, pk: int) -> Response:
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(
Expand Down
4 changes: 3 additions & 1 deletion tests/unit_tests/databases/api_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit dc39f84

Please sign in to comment.