mirror of https://github.com/apache/superset.git
fix(datasets): give possibility to add dataset with slashes in name (#24796)
This commit is contained in:
parent
e2d5046bb7
commit
64ced60f62
|
@ -672,7 +672,7 @@ class DatabaseRestApi(BaseSupersetModelRestApi):
|
|||
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
|
||||
|
@ -735,7 +735,7 @@ class DatabaseRestApi(BaseSupersetModelRestApi):
|
|||
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
|
||||
|
@ -798,8 +798,8 @@ class DatabaseRestApi(BaseSupersetModelRestApi):
|
|||
)
|
||||
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
|
||||
|
|
|
@ -935,7 +935,9 @@ class Superset(BaseSupersetView): # pylint: disable=too-many-public-methods
|
|||
@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.
|
||||
|
|
|
@ -686,6 +686,22 @@ class TestDatabaseApi(SupersetTestCase):
|
|||
# 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.
|
||||
|
|
Loading…
Reference in New Issue