Skip to content

Commit 328bd55

Browse files
ref: fix typing for organization_member.requests.invite.details (#86145)
<!-- Describe your PR here. -->
1 parent 5a35f69 commit 328bd55

File tree

5 files changed

+20
-9
lines changed

5 files changed

+20
-9
lines changed

pyproject.toml

-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@ module = [
121121
"sentry.api.endpoints.organization_events_meta",
122122
"sentry.api.endpoints.organization_events_spans_performance",
123123
"sentry.api.endpoints.organization_member.details",
124-
"sentry.api.endpoints.organization_member.requests.invite.details",
125124
"sentry.api.endpoints.organization_projects",
126125
"sentry.api.endpoints.organization_releases",
127126
"sentry.api.endpoints.organization_request_project_creation",

src/sentry/api/bases/organizationmember.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from typing import Any, NotRequired, TypedDict
3+
from typing import Any, Literal, NotRequired, TypedDict
44

55
from rest_framework import serializers
66
from rest_framework.fields import empty
@@ -108,7 +108,7 @@ def _get_member(
108108
self,
109109
request: Request,
110110
organization: Organization,
111-
member_id: int | str,
111+
member_id: int | Literal["me"],
112112
invite_status: InviteStatus | None = None,
113113
) -> OrganizationMember:
114114
kwargs: _FilterKwargs = {"organization": organization}

src/sentry/api/endpoints/organization_member/details.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from __future__ import annotations
22

3+
from typing import Literal
4+
35
from django.db import router, transaction
46
from django.db.models import Q
57
from drf_spectacular.utils import extend_schema, inline_serializer
@@ -105,7 +107,7 @@ def _get_member(
105107
self,
106108
request: Request,
107109
organization: Organization,
108-
member_id: int | str,
110+
member_id: int | Literal["me"],
109111
invite_status: InviteStatus | None = None,
110112
) -> OrganizationMember:
111113
try:

src/sentry/api/endpoints/organization_member/requests/invite/details.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from __future__ import annotations
22

3+
from typing import Literal
4+
35
from rest_framework import serializers, status
46
from rest_framework.request import Request
57
from rest_framework.response import Response
@@ -57,9 +59,11 @@ def _get_member(
5759
self,
5860
request: Request,
5961
organization: Organization,
60-
member_id: int | str,
62+
member_id: int | Literal["me"],
6163
invite_status: InviteStatus | None = None,
6264
) -> OrganizationMember:
65+
if member_id == "me": # not supported for invites!
66+
raise OrganizationMember.DoesNotExist()
6367
try:
6468
return OrganizationMember.objects.get_member_invite_query(member_id).get(
6569
organization=organization
@@ -130,7 +134,7 @@ def put(
130134
if "approve" in request.data:
131135
allowed_roles = get_allowed_org_roles(request, organization)
132136

133-
serializer = ApproveInviteRequestSerializer(
137+
approve_serializer = ApproveInviteRequestSerializer(
134138
data=request.data,
135139
context={
136140
"request": request,
@@ -140,10 +144,10 @@ def put(
140144
},
141145
)
142146

143-
if not serializer.is_valid():
144-
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
147+
if not approve_serializer.is_valid():
148+
return Response(approve_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
145149

146-
result = serializer.validated_data
150+
result = approve_serializer.validated_data
147151

148152
if result.get("approve") and not member.invite_approved:
149153
api_key = get_api_key_for_audit_log(request)

tests/sentry/api/endpoints/test_organization_invite_request_details.py

+6
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ def test_get_invalid(self):
5858
resp = self.get_response(self.org.slug, "123")
5959
assert resp.status_code == 404
6060

61+
def test_me_not_supported(self):
62+
self.login_as(user=self.user)
63+
# the serializer allows this value but it makes no sense for this view
64+
resp = self.get_response(self.org.slug, "me")
65+
assert resp.status_code == 404
66+
6167
def test_get_invite_request(self):
6268
self.login_as(user=self.user)
6369
resp = self.get_response(self.org.slug, self.invite_request.id)

0 commit comments

Comments
 (0)