chore: deprecate multiple old APIs (#28492)

This commit is contained in:
Daniel Vaz Gaspar 2024-05-14 22:00:45 +01:00 committed by GitHub
parent 4f693c6db0
commit c12deed12e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 35 additions and 82 deletions

View File

@ -411,6 +411,6 @@ This configuration is based on
menu item called “Schedule” to SQL Lab. When the menu item is clicked, a modal will show up where
the user can add the metadata required for scheduling the query.
This information can then be retrieved from the endpoint `/savedqueryviewapi/api/read` and used to
schedule the queries that have `scheduled_queries` in their JSON metadata. For schedulers other than
This information can then be retrieved from the endpoint `/api/v1/saved_query/` and used to
schedule the queries that have `schedule_info` in their JSON metadata. For schedulers other than
Airflow, additional fields can be easily added to the configuration file above.

View File

@ -40,7 +40,7 @@ export default {
'Pick a set of deck.gl charts to layer on top of one another',
),
dataEndpoint:
'/sliceasync/api/read?_flt_0_viz_type=deck_&_flt_7_viz_type=deck_multi',
'api/v1/chart/?q=(filters:!((col:viz_type,opr:sw,value:deck)))',
placeholder: t('Select charts'),
onAsyncErrorMessage: t('Error while fetching charts'),
mutator: (data: {

View File

@ -171,8 +171,8 @@ export function setEditorTabLastUpdate(timestamp) {
export function scheduleQuery(query) {
return dispatch =>
SupersetClient.post({
endpoint: '/savedqueryviewapi/api/create',
postPayload: query,
endpoint: '/api/v1/saved_query/',
jsonPayload: query,
stringify: false,
})
.then(() =>
@ -1214,7 +1214,7 @@ export function popStoredQuery(urlId) {
export function popSavedQuery(saveQueryId) {
return function (dispatch) {
return SupersetClient.get({
endpoint: `/savedqueryviewapi/api/get/${saveQueryId}`,
endpoint: `/api/v1/saved_query/${saveQueryId}`,
})
.then(({ json }) => {
const queryEditorProps = {
@ -1222,7 +1222,15 @@ export function popSavedQuery(saveQueryId) {
loaded: true,
autorun: false,
};
return dispatch(addQueryEditor(queryEditorProps));
const tmpAdaptedProps = {
name: queryEditorProps.name,
dbId: queryEditorProps.database.id,
catalog: queryEditorProps.catalog,
schema: queryEditorProps.schema,
sql: queryEditorProps.sql,
templateParams: queryEditorProps.templateParams,
};
return dispatch(addQueryEditor(tmpAdaptedProps));
})
.catch(() => dispatch(addDangerToast(ERR_MSG_CANT_LOAD_QUERY)));
};

View File

@ -156,7 +156,7 @@ class SupersetAppInitializer: # pylint: disable=too-many-public-methods
from superset.sqllab.api import SqlLabRestApi
from superset.tags.api import TagRestApi
from superset.views.alerts import AlertView, ReportView
from superset.views.all_entities import TaggedObjectsModelView, TaggedObjectView
from superset.views.all_entities import TaggedObjectsModelView
from superset.views.annotations import AnnotationLayerView
from superset.views.api import Api
from superset.views.chart.views import SliceAsync, SliceModelView
@ -309,7 +309,6 @@ class SupersetAppInitializer: # pylint: disable=too-many-public-methods
appbuilder.add_view_no_menu(TableModelView)
appbuilder.add_view_no_menu(TableSchemaView)
appbuilder.add_view_no_menu(TabStateView)
appbuilder.add_view_no_menu(TaggedObjectView)
appbuilder.add_view_no_menu(TaggedObjectsModelView)
appbuilder.add_view_no_menu(TagView)
appbuilder.add_view_no_menu(ReportView)

View File

@ -136,6 +136,7 @@ class SavedQueryRestApi(BaseSupersetModelRestApi):
"schema",
"sql",
"template_parameters",
"extra_json",
]
edit_columns = add_columns
order_columns = [

View File

@ -18,37 +18,22 @@
import logging
from flask_appbuilder import expose
from flask_appbuilder.hooks import before_request
from flask_appbuilder.models.sqla.interface import SQLAInterface
from flask_appbuilder.security.decorators import has_access
from jinja2.sandbox import SandboxedEnvironment
from werkzeug.exceptions import NotFound
from superset import is_feature_enabled
from superset.jinja_context import ExtraCache
from superset.superset_typing import FlaskResponse
from superset.tags.models import Tag
from superset.views.base import SupersetModelView
from .base import BaseSupersetView
logger = logging.getLogger(__name__)
def process_template(content: str) -> str:
env = SandboxedEnvironment()
template = env.from_string(content)
context = {
"current_user_id": ExtraCache.current_user_id,
"current_username": ExtraCache.current_username,
}
return template.render(context)
class TaggedObjectsModelView(SupersetModelView):
route_base = "/superset/all_entities"
datamodel = SQLAInterface(Tag)
class_permission_name = "Tags"
include_route_methods = {"list"}
@has_access
@expose("/")
@ -57,14 +42,3 @@ class TaggedObjectsModelView(SupersetModelView):
return super().list()
return super().render_app_template()
class TaggedObjectView(BaseSupersetView):
@staticmethod
def is_enabled() -> bool:
return is_feature_enabled("TAGGING_SYSTEM")
@before_request
def ensure_enabled(self) -> None:
if not self.is_enabled():
raise NotFound()

View File

@ -562,6 +562,7 @@ class DeprecateModelViewMixin:
def add(self) -> FlaskResponse:
return super().add() # type: ignore
@expose("/show/<pk>", methods=["GET"])
@has_access
@deprecated(eol_version="5.0.0")
def show(self, pk: int) -> FlaskResponse:

View File

@ -23,11 +23,13 @@ from superset.constants import MODEL_VIEW_RW_METHOD_PERMISSION_MAP, RouteMethod
from superset.models.slice import Slice
from superset.superset_typing import FlaskResponse
from superset.utils import core as utils
from superset.views.base import DeleteMixin, SupersetModelView
from superset.views.base import DeleteMixin, DeprecateModelViewMixin, SupersetModelView
from superset.views.chart.mixin import SliceMixin
class SliceModelView(SliceMixin, SupersetModelView, DeleteMixin): # pylint: disable=too-many-ancestors
class SliceModelView(
DeprecateModelViewMixin, SliceMixin, SupersetModelView, DeleteMixin
): # pylint: disable=too-many-ancestors
route_base = "/chart"
datamodel = SQLAInterface(Slice)
include_route_methods = RouteMethod.CRUD_SET | {

View File

@ -31,7 +31,7 @@ from superset.superset_typing import FlaskResponse
from superset.utils import core as utils
from superset.views.base import (
DeleteMixin,
deprecated,
DeprecateModelViewMixin,
SupersetModelView,
YamlExportMixin,
)
@ -75,7 +75,13 @@ def upload_stream_write(form_file_field: "FileStorage", path: str) -> None:
file_description.write(chunk)
class DatabaseView(DatabaseMixin, SupersetModelView, DeleteMixin, YamlExportMixin): # pylint: disable=too-many-ancestors
class DatabaseView(
DeprecateModelViewMixin,
DatabaseMixin,
SupersetModelView,
DeleteMixin,
YamlExportMixin,
): # pylint: disable=too-many-ancestors
datamodel = SQLAInterface(models.Database)
class_permission_name = "Database"
@ -92,34 +98,6 @@ class DatabaseView(DatabaseMixin, SupersetModelView, DeleteMixin, YamlExportMixi
yaml_dict_key = "databases"
@expose("/show/<pk>", methods=["GET"])
@has_access
@deprecated(eol_version="5.0.0")
def show(self, pk: int) -> FlaskResponse:
"""Show database"""
return super().show(pk)
@expose("/add", methods=["GET", "POST"])
@has_access
@deprecated(eol_version="5.0.0")
def add(self) -> FlaskResponse:
return super().add()
@expose("/edit/<pk>", methods=["GET", "POST"])
@has_access
@deprecated(eol_version="5.0.0")
def edit(self, pk: int) -> FlaskResponse:
return super().edit(pk)
@expose("/delete/<pk>", methods=["GET", "POST"])
@has_access
@deprecated(eol_version="5.0.0")
def delete(self, pk: int) -> FlaskResponse:
return super().delete(pk)
def _delete(self, pk: int) -> None:
DeleteMixin._delete(self, pk)
@expose("/list/")
@has_access
def list(self) -> FlaskResponse:

View File

@ -33,6 +33,7 @@ from superset.utils.core import get_user_id
from superset.views.base import (
BaseSupersetView,
DeleteMixin,
DeprecateModelViewMixin,
json_success,
SupersetModelView,
)
@ -40,7 +41,7 @@ from superset.views.base import (
logger = logging.getLogger(__name__)
class SavedQueryView(BaseSupersetView):
class SavedQueryView(DeprecateModelViewMixin, BaseSupersetView):
route_base = "/savedqueryview"
class_permission_name = "SavedQuery"
@ -50,7 +51,7 @@ class SavedQueryView(BaseSupersetView):
return super().render_app_template()
class SavedQueryViewApi(SupersetModelView, DeleteMixin): # pylint: disable=too-many-ancestors
class SavedQueryViewApi(DeprecateModelViewMixin, SupersetModelView, DeleteMixin): # pylint: disable=too-many-ancestors
datamodel = SQLAInterface(SavedQuery)
include_route_methods = RouteMethod.CRUD_SET
route_base = "/savedqueryviewapi"

View File

@ -22,11 +22,9 @@ from flask_appbuilder import expose
from flask_appbuilder.hooks import before_request
from flask_appbuilder.models.sqla.interface import SQLAInterface
from flask_appbuilder.security.decorators import has_access, has_access_api
from jinja2.sandbox import SandboxedEnvironment
from werkzeug.exceptions import NotFound
from superset import db, is_feature_enabled, utils
from superset.jinja_context import ExtraCache
from superset.superset_typing import FlaskResponse
from superset.tags.models import Tag
from superset.views.base import SupersetModelView
@ -36,20 +34,11 @@ from .base import BaseSupersetView, json_success
logger = logging.getLogger(__name__)
def process_template(content: str) -> str:
env = SandboxedEnvironment()
template = env.from_string(content)
context = {
"current_user_id": ExtraCache.current_user_id,
"current_username": ExtraCache.current_username,
}
return template.render(context)
class TagModelView(SupersetModelView):
route_base = "/superset/tags"
datamodel = SQLAInterface(Tag)
class_permission_name = "Tags"
include_route_methods = {"list"}
@has_access
@expose("/")