Skip to content

Commit d85e4ef

Browse files
authored
ref(issues): Add types to some issues endpoints (#95506)
Stumbled on some untyped files; added types. (Was hoping to be able to collapse that huge `sentry.issues.endpoints...` list in `pyproject.toml` into a `sentry.issues.endpoints.*` wildcard... a few tricky cases left. One day soon.) + bonus `sentry.api.endpoints.team_issue_breakdown` addition, since it's already compliant. Test plan: `mypy`. Only errors shown are pre-existing.
1 parent 0fecadb commit d85e4ef

File tree

5 files changed

+33
-8
lines changed

5 files changed

+33
-8
lines changed

pyproject.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ module = [
170170
"sentry.api.endpoints.project_repo_path_parsing",
171171
"sentry.api.endpoints.release_thresholds.health_checks.*",
172172
"sentry.api.endpoints.team_all_unresolved_issues",
173+
"sentry.api.endpoints.team_issue_breakdown",
173174
"sentry.api.event_search",
174175
"sentry.api.helpers.deprecation",
175176
"sentry.api.helpers.environments",
@@ -260,14 +261,17 @@ module = [
260261
"sentry.issues.constants",
261262
"sentry.issues.endpoints",
262263
"sentry.issues.endpoints.actionable_items",
264+
"sentry.issues.endpoints.bases",
263265
"sentry.issues.endpoints.browser_reporting_collector",
264266
"sentry.issues.endpoints.group_activities",
265267
"sentry.issues.endpoints.group_details",
266268
"sentry.issues.endpoints.group_event_details",
267269
"sentry.issues.endpoints.group_events",
270+
"sentry.issues.endpoints.group_hashes",
268271
"sentry.issues.endpoints.group_notes",
269272
"sentry.issues.endpoints.group_notes_details",
270273
"sentry.issues.endpoints.group_open_periods",
274+
"sentry.issues.endpoints.group_similar_issues",
271275
"sentry.issues.endpoints.group_similar_issues_embeddings",
272276
"sentry.issues.endpoints.group_tombstone",
273277
"sentry.issues.endpoints.group_tombstone_details",
@@ -288,6 +292,7 @@ module = [
288292
"sentry.issues.endpoints.project_stacktrace_link",
289293
"sentry.issues.endpoints.related_issues",
290294
"sentry.issues.endpoints.shared_group_details",
295+
"sentry.issues.endpoints.source_map_debug",
291296
"sentry.issues.endpoints.team_groups_old",
292297
"sentry.issues.escalating.escalating",
293298
"sentry.issues.escalating.escalating_group_forecast",

src/sentry/issues/endpoints/bases.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
from rest_framework.request import Request
2+
from rest_framework.views import APIView
3+
14
from sentry.api.bases.organization import OrganizationPermission
25
from sentry.auth.superuser import is_active_superuser
36
from sentry.models.groupsearchview import GroupSearchView
@@ -12,7 +15,7 @@ class GroupSearchViewPermission(OrganizationPermission):
1215
"DELETE": ["org:read", "org:write", "org:admin"],
1316
}
1417

15-
def has_object_permission(self, request, view, obj):
18+
def has_object_permission(self, request: Request, view: APIView, obj: object) -> bool:
1619
if isinstance(obj, Organization):
1720
return super().has_object_permission(request, view, obj)
1821

src/sentry/issues/endpoints/group_hashes.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
from collections.abc import Sequence
12
from functools import partial
3+
from typing import Any, TypedDict
24

35
from django.contrib.auth.models import AnonymousUser
46
from rest_framework.request import Request
@@ -19,6 +21,11 @@
1921
from sentry.utils.snuba import raw_query
2022

2123

24+
class GroupHashesResult(TypedDict):
25+
id: str
26+
latestEvent: Any
27+
28+
2229
@region_silo_endpoint
2330
class GroupHashesEndpoint(GroupEndpoint):
2431
publish_status = {
@@ -99,15 +106,25 @@ def put(self, request: Request, group: Group) -> Response:
99106
return Response(status=202)
100107

101108
def __handle_results(
102-
self, project_id, group_id, user: User | RpcUser | AnonymousUser | None, full, results
103-
):
109+
self,
110+
project_id: int,
111+
group_id: int,
112+
user: User | RpcUser | AnonymousUser | None,
113+
full: str | bool,
114+
results: Sequence[dict[str, str]],
115+
) -> list[GroupHashesResult]:
104116
return [
105117
self.__handle_result(user, project_id, group_id, full, result) for result in results
106118
]
107119

108120
def __handle_result(
109-
self, user: User | RpcUser | AnonymousUser | None, project_id, group_id, full, result
110-
):
121+
self,
122+
user: User | RpcUser | AnonymousUser | None,
123+
project_id: int,
124+
group_id: int,
125+
full: str | bool,
126+
result: dict[str, str],
127+
) -> GroupHashesResult:
111128
event = eventstore.backend.get_event_by_id(project_id, result["event_id"])
112129

113130
serializer = EventSerializer if full else SimpleEventSerializer

src/sentry/issues/endpoints/group_similar_issues.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
logger = logging.getLogger(__name__)
1414

1515

16-
def _fix_label(label) -> str:
16+
def _fix_label(label: tuple[str, ...] | str) -> str:
1717
if isinstance(label, tuple):
1818
return ":".join(label)
1919
return label

src/sentry/issues/endpoints/source_map_debug.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import TypedDict
1+
from typing import Any, TypedDict
22

33
from drf_spectacular.utils import extend_schema
44
from rest_framework.exceptions import ParseError
@@ -20,7 +20,7 @@
2020
class SourceMapProcessingIssueResponse(TypedDict):
2121
type: str
2222
message: str
23-
data: dict | None
23+
data: dict[str, Any] | None
2424

2525

2626
class SourceMapProcessingResponse(TypedDict):

0 commit comments

Comments
 (0)