Skip to content

Instantly share code, notes, and snippets.

@ditansu
Created June 13, 2019 18:49
Show Gist options
  • Save ditansu/1add0ec06ff629a9fbfc9e3008287922 to your computer and use it in GitHub Desktop.
Save ditansu/1add0ec06ff629a9fbfc9e3008287922 to your computer and use it in GitHub Desktop.
from rest_framework import serializers
from chat import models
from chat.utils import choice_to_human_readable
from core.helpers import snake_to_camel
class VariantSerializer(serializers.ModelSerializer):
text = serializers.SerializerMethodField()
def get_text(self, obj):
return choice_to_human_readable(obj.text)
class Meta:
model = models.Variant
fields = (model._meta.pk.name, 'text', 'order', 'action')
class RangeSerializer(serializers.ModelSerializer):
variant_id = serializers.SerializerMethodField()
unit_type = serializers.SerializerMethodField()
def get_variant_id(self, instance: models.Range):
step: models.Step = instance.step
return step.step_variant_link.first().pk
def get_unit_type(self, obj):
unit_type = obj.unit_type
return snake_to_camel(unit_type)
class Meta:
model = models.Range
fields = ('variant_id',
'range_from',
'range_to',
'initial_value',
'unit_string',
'unit_type',
)
class MessageSerializer(serializers.ModelSerializer):
imageURL = serializers.ImageField(source='image') # NoQA
videoURL = serializers.FileField(source='video') # NoQA
linkURL = serializers.URLField(source='link') # NoQA
class Meta:
model = models.Message
fields = ('content_type', 'message_type', 'text', 'imageURL', 'videoURL', 'linkURL')
class AnalyticsSerializer(serializers.Serializer):
scenario_name = serializers.CharField(required=True)
event_name = serializers.CharField(required=True)
user_property_name = serializers.CharField(allow_null=True, required=False)
event_property_name = serializers.CharField(allow_null=True, required=False)
class StepSerializer(serializers.ModelSerializer):
messages = MessageSerializer(many=True, required=False)
variants = VariantSerializer(many=True, required=True)
range = RangeSerializer(many=False, required=False)
analytics = AnalyticsSerializer(required=False)
class Meta:
model = models.Step
fields = (model._meta.pk.name,
'is_finish',
'type',
'analytics',
'messages',
'variants',
'range',
)
class NextStepRequestSerializer(serializers.Serializer):
variant_id = serializers.UUIDField()
text = serializers.CharField(allow_null=True, required=False)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment