Skip to content

Commit

Permalink
chore: support trailing slashes in database api (#21123)
Browse files Browse the repository at this point in the history
  • Loading branch information
diegomedina248 authored Aug 22, 2022
1 parent e70699f commit 15b9f83
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 26 deletions.
4 changes: 2 additions & 2 deletions docs/static/resources/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -13293,7 +13293,7 @@
]
}
},
"/api/v1/database/test_connection": {
"/api/v1/database/test_connection/": {
"post": {
"description": "Tests a database connection",
"requestBody": {
Expand Down Expand Up @@ -13343,7 +13343,7 @@
]
}
},
"/api/v1/database/validate_parameters": {
"/api/v1/database/validate_parameters/": {
"post": {
"description": "Validates parameters used to connect to a database",
"requestBody": {
Expand Down
2 changes: 1 addition & 1 deletion superset-frontend/src/SqlLab/actions/sqlLab.js
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,7 @@ export function validateQuery(query) {
};

return SupersetClient.post({
endpoint: `/api/v1/database/${query.dbId}/validate_sql`,
endpoint: `/api/v1/database/${query.dbId}/validate_sql/`,
body: JSON.stringify(postPayload),
headers: { 'Content-Type': 'application/json' },
})
Expand Down
4 changes: 2 additions & 2 deletions superset-frontend/src/views/CRUD/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -641,7 +641,7 @@ export const testDatabaseConnection = (
addSuccessToast: (arg0: string) => void,
) => {
SupersetClient.post({
endpoint: 'api/v1/database/test_connection',
endpoint: 'api/v1/database/test_connection/',
body: JSON.stringify(connection),
headers: { 'Content-Type': 'application/json' },
}).then(
Expand Down Expand Up @@ -675,7 +675,7 @@ export function useDatabaseValidation() {
const getValidation = useCallback(
(database: Partial<DatabaseObject> | null, onCreate = false) =>
SupersetClient.post({
endpoint: '/api/v1/database/validate_parameters',
endpoint: '/api/v1/database/validate_parameters/',
body: JSON.stringify(database),
headers: { 'Content-Type': 'application/json' },
})
Expand Down
6 changes: 3 additions & 3 deletions superset/databases/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -662,7 +662,7 @@ def select_star(
self.incr_stats("success", self.select_star.__name__)
return self.response(200, result=result)

@expose("/test_connection", methods=["POST"])
@expose("/test_connection/", methods=["POST"])
@protect()
@statsd_metrics
@event_logger.log_this_with_context(
Expand Down Expand Up @@ -778,7 +778,7 @@ def related_objects(self, pk: int) -> Response:
},
)

@expose("/<int:pk>/validate_sql", methods=["POST"])
@expose("/<int:pk>/validate_sql/", methods=["POST"])
@protect()
@statsd_metrics
@event_logger.log_this_with_context(
Expand Down Expand Up @@ -1121,7 +1121,7 @@ def available(self) -> Response:

return self.response(200, databases=response)

@expose("/validate_parameters", methods=["POST"])
@expose("/validate_parameters/", methods=["POST"])
@protect()
@statsd_metrics
@event_logger.log_this_with_context(
Expand Down
2 changes: 1 addition & 1 deletion superset/templates/superset/models/database/macros.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
.append('<button id="testconn" class="btn btn-sm btn-primary">{{ _("Test Connection") }}</button>');
$("#testconn").click(function(e) {
e.preventDefault();
var url = "/api/v1/database/test_connection";
var url = "/api/v1/database/test_connection/";
var csrf_token = "{{ csrf_token() if csrf_token else '' }}";

$.ajaxSetup({
Expand Down
34 changes: 17 additions & 17 deletions tests/integration_tests/databases/api_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -1359,7 +1359,7 @@ def test_test_connection(self):
"sqlalchemy_uri": example_db.safe_sqlalchemy_uri(),
"server_cert": None,
}
url = "api/v1/database/test_connection"
url = "api/v1/database/test_connection/"
rv = self.post_assert_metric(url, data, "test_connection")
self.assertEqual(rv.status_code, 200)
self.assertEqual(rv.headers["Content-Type"], "application/json; charset=utf-8")
Expand Down Expand Up @@ -1388,7 +1388,7 @@ def test_test_connection_failed(self):
"impersonate_user": False,
"server_cert": None,
}
url = "api/v1/database/test_connection"
url = "api/v1/database/test_connection/"
rv = self.post_assert_metric(url, data, "test_connection")
self.assertEqual(rv.status_code, 422)
self.assertEqual(rv.headers["Content-Type"], "application/json; charset=utf-8")
Expand Down Expand Up @@ -1454,7 +1454,7 @@ def test_test_connection_unsafe_uri(self):
"impersonate_user": False,
"server_cert": None,
}
url = "api/v1/database/test_connection"
url = "api/v1/database/test_connection/"
rv = self.post_assert_metric(url, data, "test_connection")
self.assertEqual(rv.status_code, 400)
response = json.loads(rv.data.decode("utf-8"))
Expand Down Expand Up @@ -1513,7 +1513,7 @@ def test_test_connection_failed_invalid_hostname(
"impersonate_user": False,
"server_cert": None,
}
url = "api/v1/database/test_connection"
url = "api/v1/database/test_connection/"
rv = self.post_assert_metric(url, data, "test_connection")

assert rv.status_code == 422
Expand Down Expand Up @@ -2121,7 +2121,7 @@ def test_available_no_default(self, app, get_available_engine_specs):

def test_validate_parameters_invalid_payload_format(self):
self.login(username="admin")
url = "api/v1/database/validate_parameters"
url = "api/v1/database/validate_parameters/"
rv = self.client.post(url, data="INVALID", content_type="text/plain")
response = json.loads(rv.data.decode("utf-8"))

Expand All @@ -2146,7 +2146,7 @@ def test_validate_parameters_invalid_payload_format(self):

def test_validate_parameters_invalid_payload_schema(self):
self.login(username="admin")
url = "api/v1/database/validate_parameters"
url = "api/v1/database/validate_parameters/"
payload = {"foo": "bar"}
rv = self.client.post(url, json=payload)
response = json.loads(rv.data.decode("utf-8"))
Expand Down Expand Up @@ -2190,7 +2190,7 @@ def test_validate_parameters_invalid_payload_schema(self):

def test_validate_parameters_missing_fields(self):
self.login(username="admin")
url = "api/v1/database/validate_parameters"
url = "api/v1/database/validate_parameters/"
payload = {
"configuration_method": ConfigurationMethod.SQLALCHEMY_FORM,
"engine": "postgresql",
Expand Down Expand Up @@ -2241,7 +2241,7 @@ def test_validate_parameters_valid_payload(
is_port_open.return_value = True

self.login(username="admin")
url = "api/v1/database/validate_parameters"
url = "api/v1/database/validate_parameters/"
payload = {
"engine": "postgresql",
"parameters": defaultdict(dict),
Expand All @@ -2265,7 +2265,7 @@ def test_validate_parameters_valid_payload(

def test_validate_parameters_invalid_port(self):
self.login(username="admin")
url = "api/v1/database/validate_parameters"
url = "api/v1/database/validate_parameters/"
payload = {
"engine": "postgresql",
"parameters": defaultdict(dict),
Expand Down Expand Up @@ -2324,7 +2324,7 @@ def test_validate_parameters_invalid_host(self, is_hostname_valid):
is_hostname_valid.return_value = False

self.login(username="admin")
url = "api/v1/database/validate_parameters"
url = "api/v1/database/validate_parameters/"
payload = {
"engine": "postgresql",
"parameters": defaultdict(dict),
Expand Down Expand Up @@ -2384,7 +2384,7 @@ def test_validate_parameters_invalid_port_range(self, is_hostname_valid):
is_hostname_valid.return_value = True

self.login(username="admin")
url = "api/v1/database/validate_parameters"
url = "api/v1/database/validate_parameters/"
payload = {
"engine": "postgresql",
"parameters": defaultdict(dict),
Expand Down Expand Up @@ -2467,7 +2467,7 @@ def test_validate_sql(self):
pytest.skip("Only presto and PG are implemented")

self.login(username="admin")
uri = f"api/v1/database/{example_db.id}/validate_sql"
uri = f"api/v1/database/{example_db.id}/validate_sql/"
rv = self.client.post(uri, json=request_payload)
response = json.loads(rv.data.decode("utf-8"))
self.assertEqual(rv.status_code, 200)
Expand All @@ -2493,7 +2493,7 @@ def test_validate_sql_errors(self):
pytest.skip("Only presto and PG are implemented")

self.login(username="admin")
uri = f"api/v1/database/{example_db.id}/validate_sql"
uri = f"api/v1/database/{example_db.id}/validate_sql/"
rv = self.client.post(uri, json=request_payload)
response = json.loads(rv.data.decode("utf-8"))
self.assertEqual(rv.status_code, 200)
Expand Down Expand Up @@ -2525,7 +2525,7 @@ def test_validate_sql_not_found(self):
}
self.login(username="admin")
uri = (
f"api/v1/database/{self.get_nonexistent_numeric_id(Database)}/validate_sql"
f"api/v1/database/{self.get_nonexistent_numeric_id(Database)}/validate_sql/"
)
rv = self.client.post(uri, json=request_payload)
self.assertEqual(rv.status_code, 404)
Expand All @@ -2546,7 +2546,7 @@ def test_validate_sql_validation_fails(self):
}
self.login(username="admin")
uri = (
f"api/v1/database/{self.get_nonexistent_numeric_id(Database)}/validate_sql"
f"api/v1/database/{self.get_nonexistent_numeric_id(Database)}/validate_sql/"
)
rv = self.client.post(uri, json=request_payload)
response = json.loads(rv.data.decode("utf-8"))
Expand All @@ -2571,7 +2571,7 @@ def test_validate_sql_endpoint_noconfig(self):

example_db = get_example_database()

uri = f"api/v1/database/{example_db.id}/validate_sql"
uri = f"api/v1/database/{example_db.id}/validate_sql/"
rv = self.client.post(uri, json=request_payload)
response = json.loads(rv.data.decode("utf-8"))
self.assertEqual(rv.status_code, 422)
Expand Down Expand Up @@ -2624,7 +2624,7 @@ def test_validate_sql_endpoint_failure(self, get_validator_by_name):

example_db = get_example_database()

uri = f"api/v1/database/{example_db.id}/validate_sql"
uri = f"api/v1/database/{example_db.id}/validate_sql/"
rv = self.client.post(uri, json=request_payload)
response = json.loads(rv.data.decode("utf-8"))

Expand Down

0 comments on commit 15b9f83

Please sign in to comment.