You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by mi...@apache.org on 2023/08/31 11:45:58 UTC

[superset] branch master updated: fix: Partially reverts #25007 (#25124)

This is an automated email from the ASF dual-hosted git repository.

michaelsmolina 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 1144ac15c9 fix: Partially reverts #25007 (#25124)
1144ac15c9 is described below

commit 1144ac15c9106b27d48b9363d80b0793ccb0507e
Author: Michael S. Molina <70...@users.noreply.github.com>
AuthorDate: Thu Aug 31 08:45:50 2023 -0300

    fix: Partially reverts #25007 (#25124)
---
 superset/initialization/__init__.py |  2 ++
 superset/views/sql_lab/views.py     | 38 +++++++++++++++++++++++++++++++++++--
 2 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/superset/initialization/__init__.py b/superset/initialization/__init__.py
index 4398c0c6be..61205f38df 100644
--- a/superset/initialization/__init__.py
+++ b/superset/initialization/__init__.py
@@ -187,6 +187,7 @@ class SupersetAppInitializer:  # pylint: disable=too-many-public-methods
         from superset.views.redirects import R
         from superset.views.sql_lab.views import (
             SavedQueryView,
+            SavedQueryViewApi,
             SqlLab,
             TableSchemaView,
             TabStateView,
@@ -312,6 +313,7 @@ class SupersetAppInitializer:  # pylint: disable=too-many-public-methods
         appbuilder.add_view_no_menu(R)
         appbuilder.add_view_no_menu(ProfileView)
         appbuilder.add_view_no_menu(SavedQueryView)
+        appbuilder.add_view_no_menu(SavedQueryViewApi)
         appbuilder.add_view_no_menu(SliceAsync)
         appbuilder.add_view_no_menu(SqlLab)
         appbuilder.add_view_no_menu(SqlMetricInlineView)
diff --git a/superset/views/sql_lab/views.py b/superset/views/sql_lab/views.py
index 62558f5ab5..f07705bac3 100644
--- a/superset/views/sql_lab/views.py
+++ b/superset/views/sql_lab/views.py
@@ -19,16 +19,23 @@ import logging
 import simplejson as json
 from flask import redirect, request, Response
 from flask_appbuilder import expose
+from flask_appbuilder.models.sqla.interface import SQLAInterface
 from flask_appbuilder.security.decorators import has_access, has_access_api
 from flask_babel import lazy_gettext as _
 from sqlalchemy import and_
 
 from superset import db
-from superset.models.sql_lab import Query, TableSchema, TabState
+from superset.constants import MODEL_VIEW_RW_METHOD_PERMISSION_MAP, RouteMethod
+from superset.models.sql_lab import Query, SavedQuery, TableSchema, TabState
 from superset.superset_typing import FlaskResponse
 from superset.utils import core as utils
 from superset.utils.core import get_user_id
-from superset.views.base import BaseSupersetView, json_success
+from superset.views.base import (
+    BaseSupersetView,
+    DeleteMixin,
+    json_success,
+    SupersetModelView,
+)
 
 logger = logging.getLogger(__name__)
 
@@ -43,6 +50,33 @@ class SavedQueryView(BaseSupersetView):
         return super().render_app_template()
 
 
+class SavedQueryViewApi(
+    SupersetModelView, DeleteMixin
+):  # pylint: disable=too-many-ancestors
+    datamodel = SQLAInterface(SavedQuery)
+    include_route_methods = RouteMethod.CRUD_SET
+    route_base = "/savedqueryviewapi"
+    class_permission_name = "SavedQuery"
+
+    include_route_methods = {
+        RouteMethod.API_READ,
+        RouteMethod.API_CREATE,
+        RouteMethod.API_UPDATE,
+        RouteMethod.API_GET,
+    }
+
+    method_permission_name = MODEL_VIEW_RW_METHOD_PERMISSION_MAP
+
+    add_columns = ["label", "db_id", "schema", "description", "sql", "extra_json"]
+    edit_columns = add_columns
+    show_columns = add_columns + ["id"]
+
+    @has_access_api
+    @expose("show/<pk>")
+    def show(self, pk: int) -> FlaskResponse:
+        return super().show(pk)
+
+
 def _get_owner_id(tab_state_id: int) -> int:
     return db.session.query(TabState.user_id).filter_by(id=tab_state_id).scalar()