This is an automated email from the ASF dual-hosted git repository.
dpgaspar 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 0cb60aea8f chore: deprecate old Dataset related endpoints (#28453)
0cb60aea8f is described below
commit 0cb60aea8fc6ca9545aa54ed4a3ed49c9087b294
Author: Daniel Vaz Gaspar <[email protected]>
AuthorDate: Mon May 13 20:09:47 2024 +0100
chore: deprecate old Dataset related endpoints (#28453)
---
superset/connectors/sqla/views.py | 12 +++++--
superset/views/base.py | 66 ++++++++++++++++++++++++++++++++++++++-
2 files changed, 74 insertions(+), 4 deletions(-)
diff --git a/superset/connectors/sqla/views.py
b/superset/connectors/sqla/views.py
index fe2934ec0b..07a8780150 100644
--- a/superset/connectors/sqla/views.py
+++ b/superset/connectors/sqla/views.py
@@ -20,11 +20,14 @@ import logging
import re
from flask import flash, redirect
-from flask_appbuilder import CompactCRUDMixin, expose, permission_name
+from flask_appbuilder import CompactCRUDMixin, expose
from flask_appbuilder.fields import QuerySelectField
from flask_appbuilder.fieldwidgets import Select2Widget
from flask_appbuilder.models.sqla.interface import SQLAInterface
-from flask_appbuilder.security.decorators import has_access
+from flask_appbuilder.security.decorators import (
+ has_access,
+ permission_name,
+)
from flask_babel import lazy_gettext as _
from markupsafe import Markup
from wtforms.validators import DataRequired, Regexp
@@ -38,6 +41,7 @@ from superset.views.base import (
BaseSupersetView,
DatasourceFilter,
DeleteMixin,
+ DeprecateModelViewMixin,
ListWidgetWithCheckboxes,
SupersetModelView,
YamlExportMixin,
@@ -60,6 +64,7 @@ class SelectDataRequired(DataRequired): # pylint:
disable=too-few-public-method
class TableColumnInlineView( # pylint: disable=too-many-ancestors
+ DeprecateModelViewMixin,
CompactCRUDMixin,
SupersetModelView,
):
@@ -196,6 +201,7 @@ class TableColumnInlineView( # pylint:
disable=too-many-ancestors
class SqlMetricInlineView( # pylint: disable=too-many-ancestors
+ DeprecateModelViewMixin,
CompactCRUDMixin,
SupersetModelView,
):
@@ -283,7 +289,7 @@ class RowLevelSecurityView(BaseSupersetView):
class TableModelView( # pylint: disable=too-many-ancestors
- SupersetModelView, DeleteMixin, YamlExportMixin
+ DeprecateModelViewMixin, SupersetModelView, DeleteMixin, YamlExportMixin
):
datamodel = SQLAInterface(models.SqlaTable)
class_permission_name = "Dataset"
diff --git a/superset/views/base.py b/superset/views/base.py
index 1df5b6a665..8171140e80 100644
--- a/superset/views/base.py
+++ b/superset/views/base.py
@@ -39,10 +39,16 @@ from flask import (
send_file,
session,
)
-from flask_appbuilder import BaseView, Model, ModelView
+from flask_appbuilder import BaseView, expose, Model, ModelView
from flask_appbuilder.actions import action
+from flask_appbuilder.baseviews import expose_api
from flask_appbuilder.forms import DynamicForm
from flask_appbuilder.models.sqla.filters import BaseFilter
+from flask_appbuilder.security.decorators import (
+ has_access,
+ has_access_api,
+ permission_name,
+)
from flask_appbuilder.security.sqla.models import User
from flask_appbuilder.widgets import ListWidget
from flask_babel import get_locale, gettext as __, lazy_gettext as _
@@ -549,6 +555,64 @@ class SupersetListWidget(ListWidget): # pylint:
disable=too-few-public-methods
template = "superset/fab_overrides/list.html"
+class DeprecateModelViewMixin:
+ @expose("/add", methods=["GET", "POST"])
+ @has_access
+ @deprecated(eol_version="5.0.0")
+ def add(self) -> FlaskResponse:
+ return super().add() # type: ignore
+
+ @has_access
+ @deprecated(eol_version="5.0.0")
+ def show(self, pk: int) -> FlaskResponse:
+ return super().show(pk) # type: ignore
+
+ @expose("/edit/<pk>", methods=["GET", "POST"])
+ @has_access
+ @deprecated(eol_version="5.0.0")
+ def edit(self, pk: int) -> FlaskResponse:
+ return super().edit(pk) # type: ignore
+
+ @expose("/delete/<pk>", methods=["GET", "POST"])
+ @has_access
+ @deprecated(eol_version="5.0.0")
+ def delete(self, pk: int) -> FlaskResponse:
+ return super().delete(pk) # type: ignore
+
+ @expose_api(name="read", url="/api/read", methods=["GET"])
+ @has_access_api
+ @permission_name("list")
+ @deprecated(eol_version="5.0.0")
+ def api_read(self) -> FlaskResponse:
+ return super().api_read() # type: ignore
+
+ @expose_api(name="get", url="/api/get/<pk>", methods=["GET"])
+ @has_access_api
+ @permission_name("show")
+ def api_get(self, pk: int) -> FlaskResponse:
+ return super().api_get(pk) # type: ignore
+
+ @expose_api(name="create", url="/api/create", methods=["POST"])
+ @has_access_api
+ @permission_name("add")
+ def api_create(self) -> FlaskResponse:
+ return super().api_create() # type: ignore
+
+ @expose_api(name="update", url="/api/update/<pk>", methods=["PUT"])
+ @has_access_api
+ @permission_name("write")
+ @deprecated(eol_version="5.0.0")
+ def api_update(self, pk: int) -> FlaskResponse:
+ return super().api_update(pk) # type: ignore
+
+ @expose_api(name="delete", url="/api/delete/<pk>", methods=["DELETE"])
+ @has_access_api
+ @permission_name("delete")
+ @deprecated(eol_version="5.0.0")
+ def api_delete(self, pk: int) -> FlaskResponse:
+ return super().delete(pk) # type: ignore
+
+
class SupersetModelView(ModelView):
page_size = 100
list_widget = SupersetListWidget