Skip to content

Commit 83fd3d7

Browse files
emyllerclaude
andcommitted
Inherit MetadataSerializerMixin from Serializer
Make MetadataSerializerMixin inherit from Serializer and define the metadata field directly in the mixin. This eliminates the need to manually define 'metadata = MetadataSerializer(required=False, many=True)' in every serializer that uses the mixin. Changes: - MetadataSerializerMixin now inherits from serializers.Serializer - Added metadata field definition to the mixin - Removed redundant metadata field declarations from: - SegmentSerializer - FeatureSerializerWithMetadata - EnvironmentSerializerWithMetadata - Removed unnecessary MetadataSerializer imports Co-authored-by: Claude <[email protected]>
1 parent 4fb8bad commit 83fd3d7

File tree

4 files changed

+10
-10
lines changed

4 files changed

+10
-10
lines changed

api/environments/serializers.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from environments.models import Environment, EnvironmentAPIKey, Webhook
66
from features.serializers import FeatureStateSerializerFull
7-
from metadata.serializers import MetadataSerializer, MetadataSerializerMixin
7+
from metadata.serializers import MetadataSerializerMixin
88
from organisations.models import Subscription
99
from organisations.subscriptions.serializers.mixins import (
1010
ReadOnlyIfNotValidPlanMixin,
@@ -79,8 +79,6 @@ class EnvironmentSerializerWithMetadata(
7979
DeleteBeforeUpdateWritableNestedModelSerializer,
8080
EnvironmentSerializerLight,
8181
):
82-
metadata = MetadataSerializer(required=False, many=True)
83-
8482
class Meta(EnvironmentSerializerLight.Meta):
8583
fields = EnvironmentSerializerLight.Meta.fields + ("metadata",) # type: ignore[assignment]
8684

api/features/serializers.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
)
2424
from integrations.github.constants import GitHubEventType
2525
from integrations.github.github import call_github_task
26-
from metadata.serializers import MetadataSerializer, MetadataSerializerMixin
26+
from metadata.serializers import MetadataSerializerMixin
2727
from projects.code_references.serializers import (
2828
FeatureFlagCodeReferencesRepositoryCountSerializer,
2929
)
@@ -345,8 +345,6 @@ def get_last_modified_in_current_environment(
345345

346346

347347
class FeatureSerializerWithMetadata(MetadataSerializerMixin, CreateFeatureSerializer):
348-
metadata = MetadataSerializer(required=False, many=True)
349-
350348
code_references_counts = FeatureFlagCodeReferencesRepositoryCountSerializer(
351349
many=True,
352350
read_only=True,

api/metadata/serializers.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,16 @@ def validate(self, attrs: dict[str, Any]) -> dict[str, Any]:
103103
return attrs
104104

105105

106-
class MetadataSerializerMixin:
106+
class MetadataSerializerMixin(serializers.Serializer): # type: ignore[type-arg]
107107
"""
108-
Functionality for serializers that need to handle metadata
108+
Mixin for serializers that need to handle metadata.
109+
110+
Automatically adds a 'metadata' field to any serializer that inherits from this mixin.
111+
Child serializers should include 'metadata' in their Meta.fields.
109112
"""
110113

114+
metadata = MetadataSerializer(required=False, many=True)
115+
111116
def _validate_required_metadata(
112117
self, organisation: Organisation, metadata: list[dict[str, Any]]
113118
) -> None:

api/segments/serializers.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from rest_framework import serializers
88
from rest_framework.exceptions import ValidationError
99

10-
from metadata.serializers import MetadataSerializer, MetadataSerializerMixin
10+
from metadata.serializers import MetadataSerializerMixin
1111
from projects.models import Project
1212
from segments.models import Condition, Segment, SegmentRule
1313

@@ -80,7 +80,6 @@ class Meta:
8080

8181
class SegmentSerializer(MetadataSerializerMixin, WritableNestedModelSerializer):
8282
rules = SegmentRuleSerializer(many=True, required=True, allow_empty=False)
83-
metadata = MetadataSerializer(required=False, many=True)
8483

8584
def __init__(self, *args: Any, **kwargs: Any) -> None:
8685
"""

0 commit comments

Comments
 (0)