Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: remove QueryView (ModelView) #10162

Merged
merged 3 commits into from
Jul 21, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 0 additions & 9 deletions superset/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,6 @@ def init_views(self) -> None:
AlertLogModelView,
)
from superset.views.sql_lab import (
QueryView,
SavedQueryViewApi,
SavedQueryView,
TabStateView,
Expand Down Expand Up @@ -249,14 +248,6 @@ def init_views(self) -> None:
category_label=__("Manage"),
category_icon="",
)
appbuilder.add_view(
QueryView,
"Queries",
label=__("Queries"),
category="Manage",
category_label=__("Manage"),
icon="fa-search",
)
if self.config["ENABLE_ROW_LEVEL_SECURITY"]:
appbuilder.add_view(
RowLevelSecurityFiltersModelView,
Expand Down
48 changes: 2 additions & 46 deletions superset/views/sql_lab.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,64 +14,20 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
from typing import Any

import simplejson as json
from flask import g, 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 flask_sqlalchemy import BaseQuery

from superset import db, get_feature_flags, security_manager
from superset import db, get_feature_flags
from superset.constants import RouteMethod
from superset.models.sql_lab import Query, SavedQuery, TableSchema, TabState
from superset.typing import FlaskResponse
from superset.utils import core as utils

from .base import (
BaseFilter,
BaseSupersetView,
DeleteMixin,
json_success,
SupersetModelView,
)


class QueryFilter(BaseFilter): # pylint: disable=too-few-public-methods
def apply(self, query: BaseQuery, value: Any) -> BaseQuery:
"""
Filter queries to only those owned by current user. If
can_access_all_queries permission is set a user can list all queries

:returns: query
"""
if not security_manager.can_access_all_queries():
query = query.filter(Query.user_id == g.user.get_user_id())
return query


class QueryView(SupersetModelView):
datamodel = SQLAInterface(Query)
include_route_methods = {RouteMethod.SHOW, RouteMethod.LIST, RouteMethod.API_READ}

list_title = _("List Query")
show_title = _("Show Query")
add_title = _("Add Query")
edit_title = _("Edit Query")

list_columns = ["username", "database_name", "status", "start_time", "end_time"]
order_columns = ["status", "start_time", "end_time"]
base_filters = [["id", QueryFilter, lambda: []]]
label_columns = {
"user": _("User"),
"username": _("User"),
"database_name": _("Database"),
"status": _("Status"),
"start_time": _("Start Time"),
"end_time": _("End Time"),
}
from .base import BaseSupersetView, DeleteMixin, json_success, SupersetModelView


class SavedQueryView(
Expand Down
20 changes: 10 additions & 10 deletions tests/sqllab_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -411,26 +411,26 @@ def test_sql_limit(self):
)
self.assertEqual(len(data["data"]), test_limit)

def test_queryview_filter(self) -> None:
def test_query_api_filter(self) -> None:
"""
Test queryview api without can_only_access_owned_queries perm added to
Test query api without can_only_access_owned_queries perm added to
Admin and make sure all queries show up.
"""
self.run_some_queries()
self.login(username="admin")

url = "/queryview/api/read"
url = "/api/v1/query/"
data = self.get_json_resp(url)
admin = security_manager.find_user("admin")
gamma_sqllab = security_manager.find_user("gamma_sqllab")
self.assertEqual(3, len(data["result"]))
user_queries = [result.get("username") for result in data["result"]]
user_queries = [result.get("user").get("username") for result in data["result"]]
assert admin.username in user_queries
assert gamma_sqllab.username in user_queries

def test_queryview_can_access_all_queries(self) -> None:
def test_query_api_can_access_all_queries(self) -> None:
"""
Test queryview api with can_access_all_queries perm added to
Test query api with can_access_all_queries perm added to
gamma and make sure all queries show up.
"""
session = db.session
Expand All @@ -448,7 +448,7 @@ def test_queryview_can_access_all_queries(self) -> None:
# Test search_queries for Admin user
self.run_some_queries()
self.login("gamma_sqllab")
url = "/queryview/api/read"
url = "/api/v1/query/"
data = self.get_json_resp(url)
self.assertEqual(3, len(data["result"]))

Expand All @@ -462,16 +462,16 @@ def test_queryview_can_access_all_queries(self) -> None:

session.commit()

def test_queryview_admin_can_access_all_queries(self) -> None:
def test_query_admin_can_access_all_queries(self) -> None:
"""
Test queryview api with all_query_access perm added to
Test query api with all_query_access perm added to
Admin and make sure only Admin queries show up. This is the default
"""
# Test search_queries for Admin user
self.run_some_queries()
self.login("admin")

url = "/queryview/api/read"
url = "/api/v1/query/"
data = self.get_json_resp(url)
admin = security_manager.find_user("admin")
self.assertEqual(3, len(data["result"]))
Expand Down