|
| 1 | +import json |
| 2 | +import typing |
| 3 | + |
1 | 4 | from rest_framework import serializers
|
2 | 5 |
|
3 | 6 | from features.feature_health.models import (
|
|
8 | 11 | from features.feature_health.providers.services import (
|
9 | 12 | get_webhook_path_from_provider,
|
10 | 13 | )
|
| 14 | +from features.feature_health.types import ( |
| 15 | + FeatureHealthEventReasonTextBlock, |
| 16 | + FeatureHealthEventReasonUrlBlock, |
| 17 | +) |
11 | 18 |
|
| 19 | +FeatureHealthEventReasonStr: typing.TypeAlias = str |
12 | 20 |
|
13 |
| -class FeatureHealthEventReasonTextBlockSerializer(serializers.Serializer): |
| 21 | + |
| 22 | +class FeatureHealthEventReasonTextBlockSerializer( |
| 23 | + serializers.Serializer[FeatureHealthEventReasonTextBlock] |
| 24 | +): |
14 | 25 | text = serializers.CharField()
|
15 | 26 | title = serializers.CharField(required=False)
|
16 | 27 |
|
17 | 28 |
|
18 |
| -class FeatureHealthEventReasonUrlBlockSerializer(serializers.Serializer): |
| 29 | +class FeatureHealthEventReasonUrlBlockSerializer( |
| 30 | + serializers.Serializer[FeatureHealthEventReasonUrlBlock] |
| 31 | +): |
19 | 32 | url = serializers.CharField()
|
20 | 33 | title = serializers.CharField(required=False)
|
21 | 34 |
|
22 | 35 |
|
23 |
| -class FeatureHealthEventReasonSerializer(serializers.Serializer): |
| 36 | +class FeatureHealthEventReasonSerializer( |
| 37 | + serializers.Serializer[FeatureHealthEventReasonStr] |
| 38 | +): |
24 | 39 | text_blocks = serializers.ListField(
|
25 | 40 | child=FeatureHealthEventReasonTextBlockSerializer(),
|
26 | 41 | )
|
27 | 42 | url_blocks = serializers.ListField(
|
28 | 43 | child=FeatureHealthEventReasonUrlBlockSerializer(),
|
29 | 44 | )
|
30 | 45 |
|
| 46 | + def to_representation( |
| 47 | + self, |
| 48 | + instance: FeatureHealthEventReasonStr, |
| 49 | + ) -> dict[str, typing.Any]: |
| 50 | + return super().to_representation(json.loads(instance)) |
| 51 | + |
31 | 52 |
|
32 |
| -class FeatureHealthEventSerializer(serializers.ModelSerializer): |
33 |
| - reason = FeatureHealthEventReasonSerializer() |
| 53 | +class FeatureHealthEventSerializer(serializers.ModelSerializer[FeatureHealthEvent]): |
| 54 | + reason = FeatureHealthEventReasonSerializer(allow_null=True) |
34 | 55 |
|
35 | 56 | class Meta:
|
36 | 57 | model = FeatureHealthEvent
|
|
0 commit comments