Skip to content

Commit 867d69b

Browse files
Zylphrexandrewshie-sentry
authored andcommitted
feat(eap): Support eap autocompleting booleans (#83433)
Booleans support only true/false so hard code those in the autocomplete response.
1 parent 4712869 commit 867d69b

File tree

2 files changed

+56
-9
lines changed

2 files changed

+56
-9
lines changed

Diff for: src/sentry/api/endpoints/organization_spans_fields.py

+31-9
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from sentry.api.serializers import serialize
2727
from sentry.api.utils import handle_query_errors
2828
from sentry.models.organization import Organization
29+
from sentry.search.eap import constants
2930
from sentry.search.eap.columns import translate_internal_to_public_alias
3031
from sentry.search.eap.spans import SearchResolver
3132
from sentry.search.eap.types import SearchResolverConfig
@@ -406,13 +407,13 @@ def __init__(
406407
):
407408
super().__init__(organization, snuba_params, key, query, max_span_tag_values)
408409
self.resolver = SearchResolver(params=snuba_params, config=SearchResolverConfig())
409-
self.attribute_key = self.resolve_attribute_key(key, snuba_params)
410+
self.search_type, self.attribute_key = self.resolve_attribute_key(key, snuba_params)
410411

411-
def resolve_attribute_key(self, key: str, snuba_params: SnubaParams) -> AttributeKey | None:
412+
def resolve_attribute_key(
413+
self, key: str, snuba_params: SnubaParams
414+
) -> tuple[constants.SearchType, AttributeKey]:
412415
resolved, _ = self.resolver.resolve_attribute(key)
413-
if resolved.search_type != "string":
414-
return None
415-
return resolved.proto_definition
416+
return resolved.search_type, resolved.proto_definition
416417

417418
def execute(self) -> list[TagValue]:
418419
if self.key in self.PROJECT_ID_KEYS:
@@ -421,12 +422,33 @@ def execute(self) -> list[TagValue]:
421422
if self.key in self.PROJECT_SLUG_KEYS:
422423
return self.project_slug_autocomplete_function()
423424

424-
return self.default_autocomplete_function()
425+
if self.search_type == "boolean":
426+
return self.boolean_autocomplete_function()
425427

426-
def default_autocomplete_function(self) -> list[TagValue]:
427-
if self.attribute_key is None:
428-
return []
428+
if self.search_type == "string":
429+
return self.string_autocomplete_function()
430+
431+
return []
432+
433+
def boolean_autocomplete_function(self) -> list[TagValue]:
434+
return [
435+
TagValue(
436+
key=self.key,
437+
value="false",
438+
times_seen=None,
439+
first_seen=None,
440+
last_seen=None,
441+
),
442+
TagValue(
443+
key=self.key,
444+
value="true",
445+
times_seen=None,
446+
first_seen=None,
447+
last_seen=None,
448+
),
449+
]
429450

451+
def string_autocomplete_function(self) -> list[TagValue]:
430452
start_timestamp = Timestamp()
431453
start_timestamp.FromDatetime(
432454
self.snuba_params.start_date.replace(hour=0, minute=0, second=0, microsecond=0)

Diff for: tests/sentry/api/endpoints/test_organization_spans_fields.py

+25
Original file line numberDiff line numberDiff line change
@@ -892,3 +892,28 @@ def do_request(self, key: str, query=None, features=None, **kwargs):
892892
format="json",
893893
**kwargs,
894894
)
895+
896+
def test_boolean_autocomplete(self):
897+
keys = ["is_transaction"]
898+
self.project
899+
for key in keys:
900+
response = self.do_request(key)
901+
assert response.status_code == 200, response.data
902+
assert response.data == [
903+
{
904+
"count": mock.ANY,
905+
"key": key,
906+
"value": "false",
907+
"name": "false",
908+
"firstSeen": mock.ANY,
909+
"lastSeen": mock.ANY,
910+
},
911+
{
912+
"count": mock.ANY,
913+
"key": key,
914+
"value": "true",
915+
"name": "true",
916+
"firstSeen": mock.ANY,
917+
"lastSeen": mock.ANY,
918+
},
919+
]

0 commit comments

Comments
 (0)