Skip to content

Commit 0491f7d

Browse files
authored
chore(api-idorslug): Switch option check to from sentry.api.utils import id_or_slug_path_params_enabled wrapper (#68484)
I switched over all the options checks with the wrapper I created in #68233 For: getsentry/team-core-product-foundations#263 Some places, I was able to get the `organization_slug` from arguments passed in or from previous conversions. We will have to add Sentry's slug and id in the option.
1 parent f148855 commit 0491f7d

File tree

12 files changed

+80
-31
lines changed

12 files changed

+80
-31
lines changed

src/sentry/api/bases/doc_integrations.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
from django.http import Http404
44
from rest_framework.request import Request
55

6-
from sentry import options
76
from sentry.api.base import Endpoint
87
from sentry.api.bases.integration import PARANOID_GET
98
from sentry.api.permissions import SentryPermission, StaffPermissionMixin
9+
from sentry.api.utils import id_or_slug_path_params_enabled
1010
from sentry.api.validators.doc_integration import METADATA_PROPERTIES
1111
from sentry.auth.superuser import is_active_superuser
1212
from sentry.models.integrations.doc_integration import DocIntegration
@@ -78,7 +78,7 @@ class DocIntegrationBaseEndpoint(DocIntegrationsBaseEndpoint):
7878

7979
def convert_args(self, request: Request, doc_integration_slug: str, *args, **kwargs):
8080
try:
81-
if options.get("api.id-or-slug-enabled"):
81+
if id_or_slug_path_params_enabled(self.convert_args.__qualname__):
8282
doc_integration = DocIntegration.objects.get(slug__id_or_slug=doc_integration_slug)
8383
else:
8484
doc_integration = DocIntegration.objects.get(slug=doc_integration_slug)

src/sentry/api/bases/group.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
from rest_framework.request import Request
66

7-
from sentry import options
87
from sentry.api.api_owners import ApiOwner
98
from sentry.api.base import Endpoint
109
from sentry.api.bases.project import ProjectPermission
1110
from sentry.api.exceptions import ResourceDoesNotExist
11+
from sentry.api.utils import id_or_slug_path_params_enabled
1212
from sentry.models.group import Group, GroupStatus, get_group_with_redirect
1313
from sentry.models.grouplink import GroupLink
1414
from sentry.models.organization import Organization
@@ -53,7 +53,12 @@ def convert_args(self, request: Request, issue_id, organization_slug=None, *args
5353
# `issue_id` keyword argument.
5454
if organization_slug:
5555
try:
56-
if options.get("api.id-or-slug-enabled") and str(organization_slug).isnumeric():
56+
if (
57+
id_or_slug_path_params_enabled(
58+
self.convert_args.__qualname__, str(organization_slug)
59+
)
60+
and str(organization_slug).isnumeric()
61+
):
5762
organization = Organization.objects.get_from_cache(id=organization_slug)
5863
else:
5964
organization = Organization.objects.get_from_cache(slug=organization_slug)

src/sentry/api/bases/organization.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,15 @@
1111
from rest_framework.permissions import BasePermission
1212
from rest_framework.request import Request
1313

14-
from sentry import options
1514
from sentry.api.base import Endpoint
1615
from sentry.api.exceptions import ResourceDoesNotExist
1716
from sentry.api.helpers.environments import get_environments
1817
from sentry.api.permissions import SentryPermission, StaffPermissionMixin
19-
from sentry.api.utils import get_date_range_from_params, is_member_disabled_from_limit
18+
from sentry.api.utils import (
19+
get_date_range_from_params,
20+
id_or_slug_path_params_enabled,
21+
is_member_disabled_from_limit,
22+
)
2023
from sentry.auth.staff import is_active_staff
2124
from sentry.auth.superuser import is_active_superuser
2225
from sentry.constants import ALL_ACCESS_PROJECT_ID, ALL_ACCESS_PROJECTS_SLUG, ObjectStatus
@@ -251,7 +254,10 @@ def convert_args(
251254
if not organization_slug:
252255
raise ResourceDoesNotExist
253256

254-
if options.get("api.id-or-slug-enabled") and str(organization_slug).isnumeric():
257+
if (
258+
id_or_slug_path_params_enabled(self.convert_args.__qualname__, str(organization_slug))
259+
and str(organization_slug).isnumeric()
260+
):
255261
# It is ok that `get_organization_by_id` doesn't check for visibility as we
256262
# don't check the visibility in `get_organization_by_slug` either (only_active=False).
257263
organization_context = organization_service.get_organization_by_id(
@@ -547,7 +553,12 @@ def convert_args(
547553
raise ResourceDoesNotExist
548554

549555
try:
550-
if options.get("api.id-or-slug-enabled") and str(organization_slug).isnumeric():
556+
if (
557+
id_or_slug_path_params_enabled(
558+
self.convert_args.__qualname__, str(organization_slug)
559+
)
560+
and str(organization_slug).isnumeric()
561+
):
551562
organization = Organization.objects.get_from_cache(id=organization_slug)
552563
else:
553564
organization = Organization.objects.get_from_cache(slug=organization_slug)

src/sentry/api/bases/project.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@
88
from rest_framework.response import Response
99
from sentry_sdk import Scope
1010

11-
from sentry import options
1211
from sentry.api.base import Endpoint
1312
from sentry.api.exceptions import ProjectMoved, ResourceDoesNotExist
1413
from sentry.api.helpers.environments import get_environments
1514
from sentry.api.permissions import StaffPermissionMixin
16-
from sentry.api.utils import get_date_range_from_params
15+
from sentry.api.utils import get_date_range_from_params, id_or_slug_path_params_enabled
1716
from sentry.constants import ObjectStatus
1817
from sentry.exceptions import InvalidParams
1918
from sentry.models.project import Project
@@ -118,7 +117,9 @@ def convert_args(
118117
**kwargs,
119118
):
120119
try:
121-
if options.get("api.id-or-slug-enabled"):
120+
if id_or_slug_path_params_enabled(
121+
self.convert_args.__qualname__, str(organization_slug)
122+
):
122123
project = (
123124
Project.objects.filter(
124125
organization__slug__id_or_slug=organization_slug,
@@ -139,7 +140,9 @@ def convert_args(
139140
try:
140141
# Project may have been renamed
141142
redirect = ProjectRedirect.objects.select_related("project")
142-
if options.get("api.id-or-slug-enabled"):
143+
if id_or_slug_path_params_enabled(
144+
self.convert_args.__qualname__, str(organization_slug)
145+
):
143146
redirect = redirect.get(
144147
organization__id=organization_slug,
145148
redirect_slug__id_or_slug=project_slug,

src/sentry/api/bases/sentryapps.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
from rest_framework.response import Response
1111
from rest_framework.serializers import ValidationError
1212

13-
from sentry import options
1413
from sentry.api.authentication import ClientIdSecretAuthentication
1514
from sentry.api.base import Endpoint
1615
from sentry.api.bases.integration import PARANOID_GET
1716
from sentry.api.permissions import SentryPermission, StaffPermissionMixin
17+
from sentry.api.utils import id_or_slug_path_params_enabled
1818
from sentry.auth.staff import is_active_staff
1919
from sentry.auth.superuser import is_active_superuser, superuser_has_permission
2020
from sentry.coreapi import APIError
@@ -252,7 +252,7 @@ class SentryAppBaseEndpoint(IntegrationPlatformEndpoint):
252252

253253
def convert_args(self, request: Request, sentry_app_slug: str | int, *args: Any, **kwargs: Any):
254254
try:
255-
if options.get("api.id-or-slug-enabled"):
255+
if id_or_slug_path_params_enabled(self.convert_args.__qualname__):
256256
sentry_app = SentryApp.objects.get(slug__id_or_slug=sentry_app_slug)
257257
else:
258258
sentry_app = SentryApp.objects.get(slug=sentry_app_slug)
@@ -270,7 +270,10 @@ def convert_args(self, request: Request, sentry_app_slug: str | int, *args: Any,
270270

271271
class RegionSentryAppBaseEndpoint(IntegrationPlatformEndpoint):
272272
def convert_args(self, request: Request, sentry_app_slug: str | int, *args: Any, **kwargs: Any):
273-
if options.get("api.id-or-slug-enabled") and str(sentry_app_slug).isnumeric():
273+
if (
274+
id_or_slug_path_params_enabled(self.convert_args.__qualname__)
275+
and str(sentry_app_slug).isnumeric()
276+
):
274277
sentry_app = app_service.get_sentry_app_by_id(id=int(sentry_app_slug))
275278
else:
276279
sentry_app = app_service.get_sentry_app_by_slug(slug=sentry_app_slug)
@@ -321,7 +324,10 @@ def convert_args(self, request: Request, organization_slug, *args, **kwargs):
321324
if not is_active_superuser(request):
322325
extra_args["user_id"] = request.user.id
323326

324-
if options.get("api.id-or-slug-enabled") and str(organization_slug).isnumeric():
327+
if (
328+
id_or_slug_path_params_enabled(self.convert_args.__qualname__, str(organization_slug))
329+
and str(organization_slug).isnumeric()
330+
):
325331
organization = organization_service.get_org_by_id(
326332
id=int(organization_slug), **extra_args
327333
)

src/sentry/api/bases/team.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
from rest_framework.permissions import BasePermission
22
from rest_framework.request import Request
33

4-
from sentry import options
54
from sentry.api.base import Endpoint
65
from sentry.api.exceptions import ResourceDoesNotExist
6+
from sentry.api.utils import id_or_slug_path_params_enabled
77
from sentry.models.team import Team, TeamStatus
88
from sentry.utils.sdk import bind_organization_context
99

@@ -38,7 +38,7 @@ class TeamEndpoint(Endpoint):
3838

3939
def convert_args(self, request: Request, organization_slug, team_slug, *args, **kwargs):
4040
try:
41-
if options.get("api.id-or-slug-enabled"):
41+
if id_or_slug_path_params_enabled(self.convert_args.__qualname__):
4242
team = (
4343
Team.objects.filter(
4444
organization__slug__id_or_slug=organization_slug, slug__id_or_slug=team_slug

src/sentry/api/endpoints/organization_region.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
from rest_framework.response import Response
55
from sentry_sdk import capture_message
66

7-
from sentry import options
87
from sentry.api.api_owners import ApiOwner
98
from sentry.api.api_publish_status import ApiPublishStatus
109
from sentry.api.base import Endpoint, control_silo_endpoint
1110
from sentry.api.exceptions import ResourceDoesNotExist
1211
from sentry.api.permissions import SentryPermission
12+
from sentry.api.utils import id_or_slug_path_params_enabled
1313
from sentry.models.organizationmapping import OrganizationMapping
1414
from sentry.models.organizationmembermapping import OrganizationMemberMapping
1515
from sentry.types.region import get_region_by_name
@@ -61,7 +61,12 @@ def convert_args(
6161

6262
try:
6363
# We don't use the lookup since OrganizationMapping uses a BigIntField for organization_id instead of a ForeignKey
64-
if options.get("api.id-or-slug-enabled") and str(organization_slug).isnumeric():
64+
if (
65+
id_or_slug_path_params_enabled(
66+
self.convert_args.__qualname__, str(organization_slug)
67+
)
68+
and str(organization_slug).isnumeric()
69+
):
6570
org_mapping = OrganizationMapping.objects.get(organization_id=organization_slug)
6671
else:
6772
org_mapping = OrganizationMapping.objects.get(slug=organization_slug)

src/sentry/api/endpoints/organization_sentry_function_details.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
from rest_framework.exceptions import ParseError
44
from rest_framework.response import Response
55

6-
from sentry import features, options
6+
from sentry import features
77
from sentry.api.api_owners import ApiOwner
88
from sentry.api.api_publish_status import ApiPublishStatus
99
from sentry.api.base import region_silo_endpoint
1010
from sentry.api.bases import OrganizationEndpoint
1111
from sentry.api.endpoints.organization_sentry_function import SentryFunctionSerializer
1212
from sentry.api.serializers import serialize
13+
from sentry.api.utils import id_or_slug_path_params_enabled
1314
from sentry.models.sentryfunction import SentryFunction
1415
from sentry.utils.cloudfunctions import delete_function, update_function
1516

@@ -27,7 +28,7 @@ def convert_args(self, request, organization_slug, function_slug, *args, **kwarg
2728
args, kwargs = super().convert_args(request, organization_slug, *args, **kwargs)
2829

2930
try:
30-
if options.get("api.id-or-slug-enabled"):
31+
if id_or_slug_path_params_enabled(self.convert_args.__qualname__):
3132
function = SentryFunction.objects.get(
3233
slug__id_or_slug=function_slug, organization=kwargs["organization"].id
3334
)

src/sentry/monitors/endpoints/base.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
from rest_framework.permissions import BasePermission
66
from rest_framework.request import Request
77

8-
from sentry import options
98
from sentry.api.base import Endpoint
109
from sentry.api.bases.organization import OrganizationPermission
1110
from sentry.api.bases.project import ProjectEndpoint, ProjectPermission
1211
from sentry.api.exceptions import ParameterValidationError, ResourceDoesNotExist
12+
from sentry.api.utils import id_or_slug_path_params_enabled
1313
from sentry.constants import ObjectStatus
1414
from sentry.models.environment import Environment
1515
from sentry.models.organization import Organization
@@ -57,7 +57,12 @@ def convert_args(
5757
**kwargs,
5858
):
5959
try:
60-
if options.get("api.id-or-slug-enabled") and str(organization_slug).isnumeric():
60+
if (
61+
id_or_slug_path_params_enabled(
62+
self.convert_args.__qualname__, str(organization_slug)
63+
)
64+
and str(organization_slug).isnumeric()
65+
):
6166
organization = Organization.objects.get_from_cache(id=organization_slug)
6267
else:
6368
organization = Organization.objects.get_from_cache(slug=organization_slug)
@@ -121,7 +126,7 @@ def convert_args(
121126
):
122127
args, kwargs = super().convert_args(request, *args, **kwargs)
123128
try:
124-
if options.get("api.id-or-slug-enabled"):
129+
if id_or_slug_path_params_enabled(self.convert_args.__qualname__):
125130
kwargs["monitor"] = Monitor.objects.get(
126131
project_id=kwargs["project"].id, slug__id_or_slug=monitor_slug
127132
)
@@ -195,7 +200,9 @@ def get_monitor_by_org_id_or_slug(organization: Organization, monitor_slug: str
195200
# end up with multiple monitors here. Since we have no idea which project the user wants,
196201
# we just get the oldest monitor and use that.
197202
# This is a temporary measure until we remove these org level endpoints
198-
if options.get("api.id-or-slug-enabled"):
203+
if id_or_slug_path_params_enabled(
204+
ProjectMonitorEnvironmentEndpoint.convert_args.__qualname__, str(organization.slug)
205+
):
199206
monitors = list(
200207
Monitor.objects.filter(organization_id=organization.id, slug__id_or_slug=monitor_slug)
201208
)

src/sentry/monitors/endpoints/monitor_ingest_checkin_attachment.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from rest_framework.response import Response
88
from sentry_sdk import configure_scope
99

10-
from sentry import options
1110
from sentry.api.api_owners import ApiOwner
1211
from sentry.api.api_publish_status import ApiPublishStatus
1312
from sentry.api.authentication import (
@@ -19,6 +18,7 @@
1918
from sentry.api.base import Endpoint, region_silo_endpoint
2019
from sentry.api.exceptions import ParameterValidationError, ResourceDoesNotExist
2120
from sentry.api.serializers import serialize
21+
from sentry.api.utils import id_or_slug_path_params_enabled
2222
from sentry.constants import ObjectStatus
2323
from sentry.models.files.file import File
2424
from sentry.models.organization import Organization
@@ -95,7 +95,12 @@ def convert_args(
9595
if organization_slug:
9696
try:
9797
# Try lookup by slug first. This requires organization context.
98-
if options.get("api.id-or-slug-enabled") and str(organization_slug).isnumeric():
98+
if (
99+
id_or_slug_path_params_enabled(
100+
self.convert_args.__qualname__, str(organization_slug)
101+
)
102+
and str(organization_slug).isnumeric()
103+
):
99104
organization = Organization.objects.get_from_cache(id=organization_slug)
100105
else:
101106
organization = Organization.objects.get_from_cache(slug=organization_slug)

src/sentry/web/frontend/base.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@
2525
from rest_framework.request import Request
2626

2727
from sentry import options
28-
from sentry.api.utils import generate_organization_url, is_member_disabled_from_limit
28+
from sentry.api.utils import (
29+
generate_organization_url,
30+
id_or_slug_path_params_enabled,
31+
is_member_disabled_from_limit,
32+
)
2933
from sentry.auth import access
3034
from sentry.auth.superuser import is_active_superuser
3135
from sentry.constants import ObjectStatus
@@ -252,7 +256,9 @@ def get_active_project(
252256
self, request: HttpRequest, organization: RpcOrganization, project_slug: str | int
253257
) -> Project | None:
254258
try:
255-
if options.get("api.id-or-slug-enabled"):
259+
if id_or_slug_path_params_enabled(
260+
self.convert_args.__qualname__, str(organization.slug)
261+
):
256262
project = Project.objects.get(
257263
slug__id_or_slug=project_slug, organization=organization
258264
)

tests/sentry/api/test_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ def test_ea_org_option_enabled(self):
277277

278278
@override_options({"api.id-or-slug-enabled-ea-org": ["sentry"]})
279279
@override_options({"api.id-or-slug-enabled-ea-endpoints": ["TestEndpoint.convert_args"]})
280-
def test_ea_org_and_endpointoption_enabled(self):
280+
def test_ea_org_and_endpoint_option_enabled(self):
281281
assert not id_or_slug_path_params_enabled("NotTestEndpoint.convert_args", "not-sentry")
282282
assert not id_or_slug_path_params_enabled("NotTestEndpoint.convert_args", "sentry")
283283
assert not id_or_slug_path_params_enabled("TestEndpoint.convert_args", "not-sentry")

0 commit comments

Comments
 (0)