Browse Source

ref(endpoints): Move endpoints to module (#32088)

Marcos Gaeta 2 years ago
parent
commit
c232ab0939

+ 63 - 0
src/sentry/api/endpoints/organization_member/__init__.py

@@ -0,0 +1,63 @@
+from __future__ import annotations
+
+from typing import Iterable
+
+from django.db import transaction
+from rest_framework.request import Request
+
+from sentry import roles
+from sentry.auth.superuser import is_active_superuser
+from sentry.models import Organization, OrganizationMember, OrganizationMemberTeam
+from sentry.roles.manager import Role
+
+
+@transaction.atomic
+def save_team_assignments(organization_member, teams):
+    # teams may be empty
+    OrganizationMemberTeam.objects.filter(organizationmember=organization_member).delete()
+    OrganizationMemberTeam.objects.bulk_create(
+        [
+            OrganizationMemberTeam(team=team, organizationmember=organization_member)
+            for team in teams
+        ]
+    )
+
+
+def get_allowed_roles(
+    request: Request,
+    organization: Organization,
+    member: OrganizationMember | None = None,
+) -> tuple[bool, Iterable[Role]]:
+    can_admin = request.access.has_scope("member:admin")
+
+    allowed_roles = []
+    if can_admin and not is_active_superuser(request):
+        acting_member = member or OrganizationMember.objects.get(
+            user=request.user, organization=organization
+        )
+        if member and roles.get(acting_member.role).priority < roles.get(member.role).priority:
+            can_admin = False
+        else:
+            allowed_roles = acting_member.get_allowed_roles_to_invite()
+            can_admin = bool(allowed_roles)
+    elif is_active_superuser(request):
+        allowed_roles = roles.get_all()
+
+    return can_admin, allowed_roles
+
+
+from .details import OrganizationMemberDetailsEndpoint
+from .index import OrganizationMemberIndexEndpoint
+from .requests.invite.details import OrganizationInviteRequestDetailsEndpoint
+from .requests.invite.index import OrganizationInviteRequestIndexEndpoint
+from .requests.join import OrganizationJoinRequestEndpoint
+
+__all__ = (
+    "OrganizationInviteRequestDetailsEndpoint",
+    "OrganizationInviteRequestIndexEndpoint",
+    "OrganizationJoinRequestEndpoint",
+    "OrganizationMemberDetailsEndpoint",
+    "OrganizationMemberIndexEndpoint",
+    "get_allowed_roles",
+    "save_team_assignments",
+)

+ 2 - 18
src/sentry/api/endpoints/organization_member_details.py → src/sentry/api/endpoints/organization_member/details.py

@@ -39,6 +39,8 @@ from sentry.models import (
 )
 from sentry.utils import metrics
 
+from . import get_allowed_roles
+
 ERR_NO_AUTH = "You cannot remove this member with an unauthenticated API request."
 ERR_INSUFFICIENT_ROLE = "You cannot remove a member who has more access than you."
 ERR_INSUFFICIENT_SCOPE = "You are missing the member:admin scope."
@@ -56,24 +58,6 @@ MEMBER_ID_PARAM = OpenApiParameter(
 )
 
 
-def get_allowed_roles(request, organization, member=None):
-    can_admin = request.access.has_scope("member:admin")
-
-    allowed_roles = []
-    if can_admin and not is_active_superuser(request):
-        acting_member = member or OrganizationMember.objects.get(
-            user=request.user, organization=organization
-        )
-        if member and roles.get(acting_member.role).priority < roles.get(member.role).priority:
-            can_admin = False
-        else:
-            allowed_roles = acting_member.get_allowed_roles_to_invite()
-            can_admin = bool(allowed_roles)
-    elif is_active_superuser(request):
-        allowed_roles = roles.get_all()
-    return (can_admin, allowed_roles)
-
-
 class OrganizationMemberSerializer(serializers.Serializer):
     reinvite = serializers.BooleanField()
     regenerate = serializers.BooleanField()

+ 1 - 14
src/sentry/api/endpoints/organization_member_index.py → src/sentry/api/endpoints/organization_member/index.py

@@ -18,7 +18,6 @@ from sentry.models import (
     ExternalActor,
     InviteStatus,
     OrganizationMember,
-    OrganizationMemberTeam,
     Team,
     TeamStatus,
 )
@@ -28,23 +27,11 @@ from sentry.signals import member_invited
 from sentry.utils import metrics
 from sentry.utils.retries import TimedRetryPolicy
 
-from .organization_member_details import get_allowed_roles
+from . import get_allowed_roles, save_team_assignments
 
 ERR_RATE_LIMITED = "You are being rate limited for too many invitations."
 
 
-@transaction.atomic
-def save_team_assignments(organization_member, teams):
-    # teams may be empty
-    OrganizationMemberTeam.objects.filter(organizationmember=organization_member).delete()
-    OrganizationMemberTeam.objects.bulk_create(
-        [
-            OrganizationMemberTeam(team=team, organizationmember=organization_member)
-            for team in teams
-        ]
-    )
-
-
 class MemberPermission(OrganizationPermission):
     scope_map = {
         "GET": ["member:read", "member:write", "member:admin"],

+ 0 - 0
src/sentry/api/endpoints/organization_member/requests/__init__.py


+ 0 - 0
src/sentry/api/endpoints/organization_member/requests/invite/__init__.py


+ 3 - 3
src/sentry/api/endpoints/organization_invite_request_details.py → src/sentry/api/endpoints/organization_member/requests/invite/details.py

@@ -5,6 +5,7 @@ from rest_framework.request import Request
 from rest_framework.response import Response
 
 from sentry import roles
+from sentry.api.bases import OrganizationMemberEndpoint
 from sentry.api.bases.organization import OrganizationPermission
 from sentry.api.serializers import serialize
 from sentry.api.serializers.models.organization_member import OrganizationMemberWithTeamsSerializer
@@ -12,9 +13,8 @@ from sentry.exceptions import UnableToAcceptMemberInvitationException
 from sentry.models import InviteStatus, Organization, OrganizationMember
 from sentry.utils.audit import get_api_key_for_audit_log
 
-from ..bases import OrganizationMemberEndpoint
-from .organization_member_details import get_allowed_roles
-from .organization_member_index import OrganizationMemberSerializer, save_team_assignments
+from ... import get_allowed_roles, save_team_assignments
+from ...index import OrganizationMemberSerializer
 
 
 class ApproveInviteRequestSerializer(serializers.Serializer):

+ 2 - 1
src/sentry/api/endpoints/organization_invite_request_index.py → src/sentry/api/endpoints/organization_member/requests/invite/index.py

@@ -14,7 +14,8 @@ from sentry.notifications.notifications.organization_request import InviteReques
 from sentry.notifications.utils.tasks import async_send_notification
 from sentry.utils.retries import TimedRetryPolicy
 
-from .organization_member_index import OrganizationMemberSerializer, save_team_assignments
+from ... import save_team_assignments
+from ...index import OrganizationMemberSerializer
 
 
 class InviteRequestPermissions(OrganizationPermission):

+ 0 - 0
src/sentry/api/endpoints/organization_join_request.py → src/sentry/api/endpoints/organization_member/requests/join.py


+ 1 - 1
src/sentry/api/endpoints/organization_user_details.py

@@ -2,7 +2,7 @@ from rest_framework.request import Request
 from rest_framework.response import Response
 
 from sentry.api.bases.organization import OrganizationEndpoint
-from sentry.api.endpoints.organization_member_index import MemberPermission
+from sentry.api.endpoints.organization_member.index import MemberPermission
 from sentry.api.serializers import serialize
 from sentry.models import User
 

+ 7 - 5
src/sentry/api/urls.py

@@ -238,15 +238,17 @@ from .endpoints.organization_integration_serverless_functions import (
     OrganizationIntegrationServerlessFunctionsEndpoint,
 )
 from .endpoints.organization_integrations import OrganizationIntegrationsEndpoint
-from .endpoints.organization_invite_request_details import OrganizationInviteRequestDetailsEndpoint
-from .endpoints.organization_invite_request_index import OrganizationInviteRequestIndexEndpoint
 from .endpoints.organization_issues_count import OrganizationIssuesCountEndpoint
 from .endpoints.organization_issues_resolved_in_release import (
     OrganizationIssuesResolvedInReleaseEndpoint,
 )
-from .endpoints.organization_join_request import OrganizationJoinRequestEndpoint
-from .endpoints.organization_member_details import OrganizationMemberDetailsEndpoint
-from .endpoints.organization_member_index import OrganizationMemberIndexEndpoint
+from .endpoints.organization_member import (
+    OrganizationInviteRequestDetailsEndpoint,
+    OrganizationInviteRequestIndexEndpoint,
+    OrganizationJoinRequestEndpoint,
+    OrganizationMemberDetailsEndpoint,
+    OrganizationMemberIndexEndpoint,
+)
 from .endpoints.organization_member_issues_assigned import OrganizationMemberIssuesAssignedEndpoint
 from .endpoints.organization_member_issues_bookmarked import (
     OrganizationMemberIssuesBookmarkedEndpoint,

Some files were not shown because too many files changed in this diff