From 1a7b28b68dde19b7e78a7e44f14ce6f5e09cdd02 Mon Sep 17 00:00:00 2001 From: "Armen Zambrano G." <44410+armenzg@users.noreply.github.com> Date: Thu, 27 Nov 2025 11:31:44 -0500 Subject: [PATCH 1/2] typing: Remove organization_events_meta.py from soft list --- pyproject.toml | 1 - src/sentry/api/endpoints/organization_events_meta.py | 9 ++++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 0d25b8fe24da2c..db3660876d80da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -312,7 +312,6 @@ ignore_missing_imports = true # - python3 -m tools.mypy_helpers.find_easiest_modules [[tool.mypy.overrides]] module = [ - "sentry.api.endpoints.organization_events_meta", "sentry.api.endpoints.organization_releases", "sentry.api.paginator", "sentry.db.postgres.base", diff --git a/src/sentry/api/endpoints/organization_events_meta.py b/src/sentry/api/endpoints/organization_events_meta.py index 24d8380fc15c4a..86627b7d9eb49d 100644 --- a/src/sentry/api/endpoints/organization_events_meta.py +++ b/src/sentry/api/endpoints/organization_events_meta.py @@ -153,7 +153,9 @@ def get(self, request: Request, organization: Organization) -> Response: query_kwargs["limit"] = 5 try: # Need to escape quotes in case some "joker" has a transaction with quotes - transaction_name = UNESCAPED_QUOTE_RE.sub('\\"', lookup_keys["transaction"]) + transaction_name = UNESCAPED_QUOTE_RE.sub( + '\\"', lookup_keys["transaction"] or "" + ) parsed_terms = parse_search_query(f'transaction:"{transaction_name}"') except ParseError: return Response({"detail": "Invalid transaction search"}, status=400) @@ -282,7 +284,8 @@ def get_span_samples( span_ids.append(top) if len(span_ids) > 0: - query = f"span_id:[{','.join(span_ids)}] {request.query_params.get('query')}" + user_query = request.query_params.get("query") or "" + query = f"span_id:[{','.join(span_ids)}] {user_query}" else: query = request.query_params.get("query") @@ -320,7 +323,7 @@ def get_eap_span_samples( "trace", ] - query_string = request.query_params.get("query") + query_string = request.query_params.get("query") or "" bounds_query_string = f"{column}:>{lower_bound}ms {column}:<{upper_bound}ms {query_string}" rpc_res = Spans.run_table_query( From 3f4af0995bb391e8ddbbde519cdedd3fe2f1fc51 Mon Sep 17 00:00:00 2001 From: "Armen Zambrano G." <44410+armenzg@users.noreply.github.com> Date: Thu, 27 Nov 2025 11:42:43 -0500 Subject: [PATCH 2/2] More typing --- src/sentry/api/endpoints/organization_events_meta.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/sentry/api/endpoints/organization_events_meta.py b/src/sentry/api/endpoints/organization_events_meta.py index 86627b7d9eb49d..0a6226ad41ae86 100644 --- a/src/sentry/api/endpoints/organization_events_meta.py +++ b/src/sentry/api/endpoints/organization_events_meta.py @@ -147,8 +147,10 @@ def get(self, request: Request, organization: Organization) -> Response: with handle_query_errors(): with sentry_sdk.start_span(op="discover.endpoint", name="filter_creation"): projects = self.get_projects(request, organization) + # Filter out None values from environments + environments = [e for e in snuba_params.environments if e is not None] query_kwargs = build_query_params_from_request( - request, organization, projects, snuba_params.environments + request, organization, projects, environments ) query_kwargs["limit"] = 5 try: @@ -200,11 +202,13 @@ def get(self, request: Request, organization: Organization) -> Response: with handle_query_errors(): if use_eap: - result = get_eap_span_samples(request, snuba_params, orderby) + result: EAPResponse | EventsResponse = get_eap_span_samples( + request, snuba_params, orderby + ) dataset = Spans else: result = get_span_samples(request, snuba_params, orderby) - dataset = spans_indexed + dataset = spans_indexed # type: ignore[assignment] return Response( self.handle_results_with_meta( @@ -287,7 +291,7 @@ def get_span_samples( user_query = request.query_params.get("query") or "" query = f"span_id:[{','.join(span_ids)}] {user_query}" else: - query = request.query_params.get("query") + query = request.query_params.get("query") or "" return spans_indexed.query( selected_columns=selected_columns,