You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by be...@apache.org on 2024/03/19 14:10:14 UTC
(superset) 01/01: fix: guest queries
This is an automated email from the ASF dual-hosted git repository.
beto pushed a commit to branch guest-user-fixes
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 486557a8b2b02ff11bf4c39a3e059cfe0fcf9aed
Author: Beto Dealmeida <ro...@dealmeida.net>
AuthorDate: Tue Mar 19 10:06:49 2024 -0400
fix: guest queries
---
superset/security/manager.py | 24 ++++++++++++++----------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/superset/security/manager.py b/superset/security/manager.py
index 94719cb524..a532431433 100644
--- a/superset/security/manager.py
+++ b/superset/security/manager.py
@@ -68,6 +68,7 @@ from superset.security.guest_token import (
GuestTokenUser,
GuestUser,
)
+from superset.superset_typing import Metric
from superset.utils.core import (
DatasourceName,
DatasourceType,
@@ -144,6 +145,13 @@ RoleModelView.edit_columns = ["name", "permissions", "user"]
RoleModelView.related_views = []
+def freeze_metric(metric: Metric) -> str:
+ """
+ Used to compare metric sets.
+ """
+ return json.dumps(metric, sort_keys=True)
+
+
def query_context_modified(query_context: "QueryContext") -> bool:
"""
Check if a query context has been modified.
@@ -154,9 +162,9 @@ def query_context_modified(query_context: "QueryContext") -> bool:
form_data = query_context.form_data
stored_chart = query_context.slice_
- # sanity checks
+ # native filter requests
if form_data is None or stored_chart is None:
- return True
+ return False
# cannot request a different chart
if form_data.get("slice_id") != stored_chart.id:
@@ -164,11 +172,10 @@ def query_context_modified(query_context: "QueryContext") -> bool:
# compare form_data
requested_metrics = {
- frozenset(metric.items()) if isinstance(metric, dict) else metric
- for metric in form_data.get("metrics") or []
+ freeze_metric(metric) for metric in form_data.get("metrics") or []
}
stored_metrics = {
- frozenset(metric.items()) if isinstance(metric, dict) else metric
+ freeze_metric(metric)
for metric in stored_chart.params_dict.get("metrics") or []
}
if not requested_metrics.issubset(stored_metrics):
@@ -176,7 +183,7 @@ def query_context_modified(query_context: "QueryContext") -> bool:
# compare queries in query_context
queries_metrics = {
- frozenset(metric.items()) if isinstance(metric, dict) else metric
+ freeze_metric(metric)
for query in query_context.queries
for metric in query.metrics or []
}
@@ -185,10 +192,7 @@ def query_context_modified(query_context: "QueryContext") -> bool:
stored_query_context = json.loads(cast(str, stored_chart.query_context))
for query in stored_query_context.get("queries") or []:
stored_metrics.update(
- {
- frozenset(metric.items()) if isinstance(metric, dict) else metric
- for metric in query.get("metrics") or []
- }
+ {freeze_metric(metric) for metric in query.get("metrics") or []}
)
return not queries_metrics.issubset(stored_metrics)