From 3a9bd12e3d294450e703ed87937e8e2c6308216e Mon Sep 17 00:00:00 2001 From: "Michael S. Molina" <70410625+michael-s-molina@users.noreply.github.com> Date: Mon, 10 Jan 2022 14:24:22 -0300 Subject: [PATCH] fix: Returns 404 instead of 500 for unknown dashboard filter state keys (#17878) * fix: Returns 404 instead of 500 for unknown dashboard filter state keys * Reduces hierarchies of if-expression * Removes unnecessary check Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com> * Removes unused variable * Fixes type error * Removes unused import Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com> --- superset/dashboards/filter_state/commands/get.py | 15 +++++---------- .../dashboards/filter_state/api_tests.py | 4 ++-- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/superset/dashboards/filter_state/commands/get.py b/superset/dashboards/filter_state/commands/get.py index 3087389cc..bb3e95aaa 100644 --- a/superset/dashboards/filter_state/commands/get.py +++ b/superset/dashboards/filter_state/commands/get.py @@ -17,7 +17,6 @@ from typing import Optional from superset.dashboards.dao import DashboardDAO -from superset.dashboards.filter_state.commands.entry import Entry from superset.extensions import cache_manager from superset.key_value.commands.get import GetKeyValueCommand from superset.key_value.utils import cache_key @@ -25,12 +24,8 @@ from superset.key_value.utils import cache_key class GetFilterStateCommand(GetKeyValueCommand): def get(self, resource_id: int, key: str, refresh_timeout: bool) -> Optional[str]: - dashboard = DashboardDAO.get_by_id_or_slug(str(resource_id)) - if dashboard: - entry: Entry = cache_manager.filter_state_cache.get( - cache_key(resource_id, key) - ) - if refresh_timeout: - cache_manager.filter_state_cache.set(key, entry) - return entry["value"] - return None + DashboardDAO.get_by_id_or_slug(str(resource_id)) + entry = cache_manager.filter_state_cache.get(cache_key(resource_id, key)) or {} + if entry and refresh_timeout: + cache_manager.filter_state_cache.set(key, entry) + return entry.get("value") diff --git a/tests/integration_tests/dashboards/filter_state/api_tests.py b/tests/integration_tests/dashboards/filter_state/api_tests.py index dce062059..ae667ec73 100644 --- a/tests/integration_tests/dashboards/filter_state/api_tests.py +++ b/tests/integration_tests/dashboards/filter_state/api_tests.py @@ -145,9 +145,9 @@ def test_put_not_owner(client, dashboard_id: int): assert resp.status_code == 403 -def test_get_key_not_found(client): +def test_get_key_not_found(client, dashboard_id: int): login(client, "admin") - resp = client.get("unknown-key") + resp = client.get(f"api/v1/dashboard/{dashboard_id}/filter_state/unknown-key/") assert resp.status_code == 404