From 71d1ba005cd499b1d2c2c32ad68dddcef02eb371 Mon Sep 17 00:00:00 2001 From: nikkikapadia Date: Fri, 6 Jun 2025 16:29:12 -0400 Subject: [PATCH 1/3] remove no project error return --- src/sentry/discover/compare_tables.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/sentry/discover/compare_tables.py b/src/sentry/discover/compare_tables.py index 3511b95b54563d..a48c9dd310517b 100644 --- a/src/sentry/discover/compare_tables.py +++ b/src/sentry/discover/compare_tables.py @@ -14,7 +14,6 @@ from sentry.models.dashboard import Dashboard from sentry.models.dashboard_widget import DashboardWidget, DashboardWidgetQuery from sentry.models.organization import Organization -from sentry.models.project import Project from sentry.search.eap.types import EAPResponse, SearchResolverConfig from sentry.search.events.types import SAMPLING_MODES, EventsResponse, SnubaParams from sentry.snuba import metrics_enhanced_performance, spans_rpc @@ -97,16 +96,12 @@ def compare_tables_for_dashboard_widget_queries( widget: DashboardWidget = widget_query.widget dashboard: Dashboard = widget.dashboard organization: Organization = dashboard.organization - projects: list[Project] = list(dashboard.projects.all()) - if len(list(projects)) == 0: - return { - "passed": False, - "reason": CompareTableResult.NO_PROJECT, - "fields": None, - "widget_query": widget_query, - "mismatches": None, - "query": None, - } + projects = dashboard.projects.all() + + if not projects.exists(): + projects_list = [] + else: + projects_list = list(projects) fields = widget_query.fields if len(fields) == 0: @@ -127,7 +122,7 @@ def compare_tables_for_dashboard_widget_queries( snuba_params = SnubaParams( environments=environments, - projects=list(projects), + projects=projects_list, organization=organization, stats_period="7d", ) From e7bc54fac2e6a5cb1cdb43fb9c76e22b7abde24e Mon Sep 17 00:00:00 2001 From: nikkikapadia Date: Mon, 9 Jun 2025 10:37:20 -0400 Subject: [PATCH 2/3] use all org projects when no projects passed in --- src/sentry/discover/compare_tables.py | 22 +++++++++++---- tests/sentry/discover/test_compare_tables.py | 29 ++++++++++++++++++++ 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/src/sentry/discover/compare_tables.py b/src/sentry/discover/compare_tables.py index a48c9dd310517b..1f33153a3b60f6 100644 --- a/src/sentry/discover/compare_tables.py +++ b/src/sentry/discover/compare_tables.py @@ -4,6 +4,7 @@ import sentry_sdk +from sentry.constants import ObjectStatus from sentry.discover.arithmetic import is_equation from sentry.discover.dataset_split import _get_equation_list, _get_field_list from sentry.discover.translation.mep_to_eap import ( @@ -14,6 +15,7 @@ from sentry.models.dashboard import Dashboard from sentry.models.dashboard_widget import DashboardWidget, DashboardWidgetQuery from sentry.models.organization import Organization +from sentry.models.project import Project from sentry.search.eap.types import EAPResponse, SearchResolverConfig from sentry.search.events.types import SAMPLING_MODES, EventsResponse, SnubaParams from sentry.snuba import metrics_enhanced_performance, spans_rpc @@ -96,12 +98,20 @@ def compare_tables_for_dashboard_widget_queries( widget: DashboardWidget = widget_query.widget dashboard: Dashboard = widget.dashboard organization: Organization = dashboard.organization - projects = dashboard.projects.all() + # if the dashboard has no projects, we will use all projects in the organization + projects = dashboard.projects.all() or Project.objects.filter( + organization_id=dashboard.organization.id, status=ObjectStatus.ACTIVE + ) - if not projects.exists(): - projects_list = [] - else: - projects_list = list(projects) + if len(list(projects)) == 0: + return { + "passed": False, + "reason": CompareTableResult.NO_PROJECT, + "fields": None, + "widget_query": widget_query, + "mismatches": None, + "query": None, + } fields = widget_query.fields if len(fields) == 0: @@ -122,7 +132,7 @@ def compare_tables_for_dashboard_widget_queries( snuba_params = SnubaParams( environments=environments, - projects=projects_list, + projects=projects, organization=organization, stats_period="7d", ) diff --git a/tests/sentry/discover/test_compare_tables.py b/tests/sentry/discover/test_compare_tables.py index 12f20b54b7197c..9a42888e7c1425 100644 --- a/tests/sentry/discover/test_compare_tables.py +++ b/tests/sentry/discover/test_compare_tables.py @@ -32,7 +32,29 @@ def setUp(self): self.dashboard = self.create_dashboard( organization=self.organization, filters={"environment": []} ) + self.dashboard_2 = self.create_dashboard( + organization=self.organization, filters={"environment": []} + ) self.dashboard.projects.set([self.project]) + self.dashboard_2.projects.set([]) + + self.successful_widget_2 = DashboardWidget.objects.create( + dashboard=self.dashboard_2, + title="Test Successful Widget 2", + order=0, + display_type=DashboardWidgetDisplayTypes.TABLE, + widget_type=DashboardWidgetTypes.TRANSACTION_LIKE, + ) + + self.successful_widget_query_2 = DashboardWidgetQuery.objects.create( + widget=self.successful_widget_2, + name="Test Successful Widget Query 2", + order=0, + conditions="", + aggregates=["count()"], + columns=["count()", "transaction"], + fields=["count()", "transaction"], + ) self.successful_widget = DashboardWidget.objects.create( dashboard=self.dashboard, @@ -299,3 +321,10 @@ def test_compare_non_existent_eap_widget_query(self): assert comparison_result["passed"] is False assert comparison_result["reason"] == CompareTableResult.QUERY_FAILED assert comparison_result["mismatches"] is not None and [] == comparison_result["mismatches"] + + def test_compare_widget_query_with_no_project(self): + comparison_result = compare_tables_for_dashboard_widget_queries( + self.successful_widget_query_2 + ) + assert comparison_result["passed"] is True + assert comparison_result["mismatches"] == [] From e96f1f40d6f70bd8b35ae952734c0432f24b895c Mon Sep 17 00:00:00 2001 From: nikkikapadia Date: Mon, 9 Jun 2025 10:48:42 -0400 Subject: [PATCH 3/3] accidentally removed list assignment --- src/sentry/discover/compare_tables.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sentry/discover/compare_tables.py b/src/sentry/discover/compare_tables.py index 1f33153a3b60f6..4081fd422077a4 100644 --- a/src/sentry/discover/compare_tables.py +++ b/src/sentry/discover/compare_tables.py @@ -132,7 +132,7 @@ def compare_tables_for_dashboard_widget_queries( snuba_params = SnubaParams( environments=environments, - projects=projects, + projects=list(projects), organization=organization, stats_period="7d", )