Skip to content

Commit

Permalink
fix(datasets): give possibility to add dataset with slashes in name (a…
Browse files Browse the repository at this point in the history
  • Loading branch information
Always-prog authored Jul 28, 2023
1 parent e2d5046 commit 64ced60
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 5 deletions.
8 changes: 4 additions & 4 deletions superset/databases/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -672,7 +672,7 @@ def tables(self, pk: int, **kwargs: Any) -> FlaskResponse:
except DatabaseTablesUnexpectedError as ex:
return self.response_422(ex.message)

@expose("/<int:pk>/table/<table_name>/<schema_name>/", methods=("GET",))
@expose("/<int:pk>/table/<path:table_name>/<schema_name>/", methods=("GET",))
@protect()
@check_datasource_access
@safe
Expand Down Expand Up @@ -735,7 +735,7 @@ def table_metadata(
self.incr_stats("success", self.table_metadata.__name__)
return self.response(200, **table_info)

@expose("/<int:pk>/table_extra/<table_name>/<schema_name>/", methods=("GET",))
@expose("/<int:pk>/table_extra/<path:table_name>/<schema_name>/", methods=("GET",))
@protect()
@check_datasource_access
@safe
Expand Down Expand Up @@ -798,8 +798,8 @@ def table_extra_metadata(
)
return self.response(200, **payload)

@expose("/<int:pk>/select_star/<table_name>/", methods=("GET",))
@expose("/<int:pk>/select_star/<table_name>/<schema_name>/", methods=("GET",))
@expose("/<int:pk>/select_star/<path:table_name>/", methods=("GET",))
@expose("/<int:pk>/select_star/<path:table_name>/<schema_name>/", methods=("GET",))
@protect()
@check_datasource_access
@safe
Expand Down
4 changes: 3 additions & 1 deletion superset/views/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -935,7 +935,9 @@ def theme(self) -> FlaskResponse:
@has_access
@event_logger.log_this
@expose("/fetch_datasource_metadata")
@deprecated(new_target="api/v1/database/<int:pk>/table/<table_name>/<schema_name>/")
@deprecated(
new_target="api/v1/database/<int:pk>/table/<path:table_name>/<schema_name>/"
)
def fetch_datasource_metadata(self) -> FlaskResponse:
"""
Fetch the datasource metadata.
Expand Down
16 changes: 16 additions & 0 deletions tests/integration_tests/databases/api_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -686,6 +686,22 @@ def test_if_ssh_tunneling_flag_is_not_active_it_raises_new_exception(
# the DB should not be created
assert model is None

def test_get_table_details_with_slash_in_table_name(self):
table_name = "table_with/slash"
database = get_example_database()
query = f'CREATE TABLE IF NOT EXISTS "{table_name}" (col VARCHAR(256))'
if database.backend == "mysql":
query = query.replace('"', "`")

with database.get_sqla_engine_with_context() as engine:
engine.execute(query)

self.login(username="admin")
uri = f"api/v1/database/{database.id}/table/{table_name}/null/"
rv = self.client.get(uri)

self.assertEqual(rv.status_code, 200)

def test_create_database_invalid_configuration_method(self):
"""
Database API: Test create with an invalid configuration method.
Expand Down

0 comments on commit 64ced60

Please sign in to comment.