Skip to content

Commit f857ed4

Browse files
committed
Revert "feat: add limits and totals to API responses (#2615)"
This reverts commit 321d435.
1 parent 041aebe commit f857ed4

File tree

8 files changed

+21
-176
lines changed

8 files changed

+21
-176
lines changed

api/audit/serializers.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
from audit.models import AuditLog
44
from environments.serializers import EnvironmentSerializerLight
5-
from projects.serializers import ProjectListSerializer
5+
from projects.serializers import ProjectSerializer
66
from users.serializers import UserListSerializer
77

88

99
class AuditLogSerializer(serializers.ModelSerializer):
1010
author = UserListSerializer()
1111
environment = EnvironmentSerializerLight()
12-
project = ProjectListSerializer()
12+
project = ProjectSerializer()
1313

1414
class Meta:
1515
model = AuditLog

api/environments/serializers.py

+2-12
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@
1010
ReadOnlyIfNotValidPlanMixin,
1111
)
1212
from projects.models import Project
13-
from projects.serializers import ProjectListSerializer
13+
from projects.serializers import ProjectSerializer
1414
from util.drf_writable_nested.serializers import (
1515
DeleteBeforeUpdateWritableNestedModelSerializer,
1616
)
1717

1818

1919
class EnvironmentSerializerFull(serializers.ModelSerializer):
2020
feature_states = FeatureStateSerializerFull(many=True)
21-
project = ProjectListSerializer()
21+
project = ProjectSerializer()
2222

2323
class Meta:
2424
model = Environment
@@ -86,16 +86,6 @@ def get_project(self, validated_data: dict = None) -> Project:
8686
)
8787

8888

89-
class EnvironmentRetrieveSerializerWithMetadata(EnvironmentSerializerWithMetadata):
90-
total_segment_overrides = serializers.IntegerField()
91-
92-
class Meta(EnvironmentSerializerWithMetadata.Meta):
93-
fields = EnvironmentSerializerWithMetadata.Meta.fields + (
94-
"total_segment_overrides",
95-
)
96-
read_only_fields = ("total_segment_overrides",)
97-
98-
9989
class CreateUpdateEnvironmentSerializer(
10090
ReadOnlyIfNotValidPlanMixin, EnvironmentSerializerWithMetadata
10191
):

api/environments/views.py

+1-13
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
import logging
55

6-
from django.db.models import Count
76
from django.utils.decorators import method_decorator
87
from drf_yasg import openapi
98
from drf_yasg.utils import swagger_auto_schema
@@ -42,7 +41,6 @@
4241
CloneEnvironmentSerializer,
4342
CreateUpdateEnvironmentSerializer,
4443
EnvironmentAPIKeySerializer,
45-
EnvironmentRetrieveSerializerWithMetadata,
4644
EnvironmentSerializerWithMetadata,
4745
WebhookSerializer,
4846
)
@@ -75,8 +73,6 @@ def get_serializer_class(self):
7573
return DeleteAllTraitKeysSerializer
7674
if self.action == "clone":
7775
return CloneEnvironmentSerializer
78-
if self.action == "retrieve":
79-
return EnvironmentRetrieveSerializerWithMetadata
8076
elif self.action in ("create", "update", "partial_update"):
8177
return CreateUpdateEnvironmentSerializer
8278
return EnvironmentSerializerWithMetadata
@@ -102,20 +98,12 @@ def get_queryset(self):
10298
return (
10399
self.request.master_api_key.organisation.projects.environments.all()
104100
)
105-
106101
return self.request.user.get_permitted_environments(
107102
"VIEW_ENVIRONMENT", project=project
108103
)
109104

110105
# Permission class handles validation of permissions for other actions
111-
queryset = Environment.objects.all()
112-
113-
if self.action == "retrieve":
114-
queryset = queryset.annotate(
115-
total_segment_overrides=Count("feature_segments")
116-
)
117-
118-
return queryset
106+
return Environment.objects.all()
119107

120108
def perform_create(self, serializer):
121109
environment = serializer.save()

api/organisations/views.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
PermissionModelSerializer,
5050
UserObjectPermissionsSerializer,
5151
)
52-
from projects.serializers import ProjectListSerializer
52+
from projects.serializers import ProjectSerializer
5353
from users.serializers import UserIdSerializer
5454
from webhooks.mixins import TriggerSampleWebhookMixin
5555
from webhooks.webhooks import WebhookType
@@ -118,7 +118,7 @@ def create(self, request, **kwargs):
118118
def projects(self, request, pk):
119119
organisation = self.get_object()
120120
projects = organisation.projects.all()
121-
return Response(ProjectListSerializer(projects, many=True).data)
121+
return Response(ProjectSerializer(projects, many=True).data)
122122

123123
@action(detail=True, methods=["POST"])
124124
def invite(self, request, pk):

api/projects/serializers.py

+3-23
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from users.serializers import UserListSerializer, UserPermissionGroupSerializer
1313

1414

15-
class ProjectListSerializer(serializers.ModelSerializer):
15+
class ProjectSerializer(serializers.ModelSerializer):
1616
migration_status = serializers.SerializerMethodField(
1717
help_text="Edge migration status of the project; can be one of: "
1818
+ ", ".join([k.value for k in ProjectIdentityMigrationStatus])
@@ -39,8 +39,10 @@ class Meta:
3939
def get_migration_status(self, obj: Project) -> str:
4040
if not settings.PROJECT_METADATA_TABLE_NAME_DYNAMO:
4141
migration_status = ProjectIdentityMigrationStatus.NOT_APPLICABLE.value
42+
4243
elif obj.is_edge_project_by_default:
4344
migration_status = ProjectIdentityMigrationStatus.MIGRATION_COMPLETED.value
45+
4446
else:
4547
migration_status = IdentityMigrator(obj.id).migration_status.value
4648

@@ -56,28 +58,6 @@ def get_use_edge_identities(self, obj: Project) -> bool:
5658
)
5759

5860

59-
class ProjectRetrieveSerializer(ProjectListSerializer):
60-
total_features = serializers.IntegerField()
61-
total_segments = serializers.IntegerField()
62-
63-
class Meta(ProjectListSerializer.Meta):
64-
fields = ProjectListSerializer.Meta.fields + (
65-
"max_segments_allowed",
66-
"max_features_allowed",
67-
"max_segment_overrides_allowed",
68-
"total_features",
69-
"total_segments",
70-
)
71-
72-
read_only_fields = (
73-
"max_segments_allowed",
74-
"max_features_allowed",
75-
"max_segment_overrides_allowed",
76-
"total_features",
77-
"total_segments",
78-
)
79-
80-
8161
class CreateUpdateUserProjectPermissionSerializer(
8262
CreateUpdateUserPermissionSerializerABC
8363
):

api/projects/tests/test_serializers.py

+9-35
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,10 @@
44
from django.utils import timezone
55

66
from environments.dynamodb.types import ProjectIdentityMigrationStatus
7-
from projects.serializers import (
8-
ProjectListSerializer,
9-
ProjectRetrieveSerializer,
10-
)
7+
from projects.serializers import ProjectSerializer
118

129

13-
def test_ProjectListSerializer_get_migration_status_returns_migration_not_applicable_if_not_configured(
10+
def test_ProjectSerializer_get_migration_status_returns_migration_not_applicable_if_not_configured(
1411
mocker, project, settings
1512
):
1613
# Given
@@ -19,7 +16,7 @@ def test_ProjectListSerializer_get_migration_status_returns_migration_not_applic
1916
"projects.serializers.IdentityMigrator", autospec=True
2017
)
2118

22-
serializer = ProjectListSerializer()
19+
serializer = ProjectSerializer()
2320

2421
# When
2522
migration_status = serializer.get_migration_status(project)
@@ -29,7 +26,7 @@ def test_ProjectListSerializer_get_migration_status_returns_migration_not_applic
2926
mocked_identity_migrator.assert_not_called()
3027

3128

32-
def test_ProjectListSerializer_get_migration_status_returns_migration_completed_for_new_projects(
29+
def test_ProjectSerializer_get_migration_status_returns_migration_completed_for_new_projects(
3330
mocker, project, settings
3431
):
3532
# Given
@@ -39,7 +36,7 @@ def test_ProjectListSerializer_get_migration_status_returns_migration_completed_
3936
"projects.serializers.IdentityMigrator", autospec=True
4037
)
4138

42-
serializer = ProjectListSerializer()
39+
serializer = ProjectSerializer()
4340

4441
# When
4542
migration_status = serializer.get_migration_status(project)
@@ -49,7 +46,7 @@ def test_ProjectListSerializer_get_migration_status_returns_migration_completed_
4946
mocked_identity_migrator.assert_not_called()
5047

5148

52-
def test_ProjectListSerializer_get_migration_status_calls_migrator_with_correct_arguments_for_old_projects(
49+
def test_ProjectSerializer_get_migration_status_calls_migrator_with_correct_arguments_for_old_projects(
5350
mocker, project, settings
5451
):
5552
# Given
@@ -60,7 +57,7 @@ def test_ProjectListSerializer_get_migration_status_calls_migrator_with_correct_
6057

6158
settings.EDGE_RELEASE_DATETIME = timezone.now()
6259

63-
serializer = ProjectListSerializer()
60+
serializer = ProjectSerializer()
6461

6562
# When
6663
migration_status = serializer.get_migration_status(project)
@@ -81,32 +78,9 @@ def test_ProjectListSerializer_get_migration_status_calls_migrator_with_correct_
8178
(ProjectIdentityMigrationStatus.NOT_APPLICABLE.value, False),
8279
],
8380
)
84-
def test_ProjectListSerializer_get_use_edge_identities(
85-
project, migration_status, expected
86-
):
81+
def test_ProjectSerializer_get_use_edge_identities(project, migration_status, expected):
8782
# Given
88-
serializer = ProjectListSerializer(context={"migration_status": migration_status})
89-
90-
# When/Then
91-
assert expected is serializer.get_use_edge_identities(project)
92-
93-
94-
@pytest.mark.parametrize(
95-
"migration_status, expected",
96-
[
97-
(ProjectIdentityMigrationStatus.MIGRATION_COMPLETED.value, True),
98-
(ProjectIdentityMigrationStatus.MIGRATION_IN_PROGRESS.value, False),
99-
(ProjectIdentityMigrationStatus.MIGRATION_NOT_STARTED.value, False),
100-
(ProjectIdentityMigrationStatus.NOT_APPLICABLE.value, False),
101-
],
102-
)
103-
def test_ProjectRetrieveSerializer_get_use_edge_identities(
104-
project, migration_status, expected
105-
):
106-
# Given
107-
serializer = ProjectRetrieveSerializer(
108-
context={"migration_status": migration_status}
109-
)
83+
serializer = ProjectSerializer(context={"migration_status": migration_status})
11084

11185
# When/Then
11286
assert expected is serializer.get_use_edge_identities(project)

api/projects/views.py

+2-19
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from __future__ import unicode_literals
33

44
from django.conf import settings
5-
from django.db.models import Count, Q
65
from django.utils.decorators import method_decorator
76
from drf_yasg import openapi
87
from drf_yasg.utils import no_body, swagger_auto_schema
@@ -45,8 +44,7 @@
4544
CreateUpdateUserProjectPermissionSerializer,
4645
ListUserPermissionGroupProjectPermissionSerializer,
4746
ListUserProjectPermissionSerializer,
48-
ProjectListSerializer,
49-
ProjectRetrieveSerializer,
47+
ProjectSerializer,
5048
)
5149

5250

@@ -72,11 +70,7 @@
7270
),
7371
)
7472
class ProjectViewSet(viewsets.ModelViewSet):
75-
def get_serializer_class(self):
76-
if self.action == "retrieve":
77-
return ProjectRetrieveSerializer
78-
return ProjectListSerializer
79-
73+
serializer_class = ProjectSerializer
8074
permission_classes = [ProjectPermissions | MasterAPIKeyProjectPermissions]
8175
pagination_class = None
8276

@@ -89,17 +83,6 @@ def get_queryset(self):
8983
else:
9084
queryset = self.request.user.get_permitted_projects(
9185
permission_key=VIEW_PROJECT
92-
).annotate(
93-
total_features=Count(
94-
"features",
95-
filter=Q(features__deleted_at__isnull=True),
96-
distinct=True,
97-
),
98-
total_segments=Count(
99-
"segments",
100-
filter=Q(segments__deleted_at__isnull=True),
101-
distinct=True,
102-
),
10386
)
10487

10588
organisation_id = self.request.query_params.get("organisation")

api/tests/unit/projects/test_unit_projects_views.py

-70
This file was deleted.

0 commit comments

Comments
 (0)