Skip to content

Commit 6a1d7f3

Browse files
emyllerclaude
andcommitted
refactor: Define metadata field in MetadataSerializerMixin
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 6a1d7f3

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)