56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
from rest_framework import serializers
|
|
from recipe.models import Recipe
|
|
from utils.legacy_parser import parse_legacy_news_content
|
|
|
|
|
|
class RecipeSerializer(serializers.ModelSerializer):
|
|
locale = serializers.CharField()
|
|
body = serializers.CharField(allow_null=True)
|
|
title = serializers.CharField()
|
|
state = serializers.CharField()
|
|
created_at = serializers.DateTimeField(source="published_at", format='%m-%d-%Y %H:%M:%S')
|
|
|
|
class Meta:
|
|
model = Recipe
|
|
fields = (
|
|
"body",
|
|
"title",
|
|
"state",
|
|
"created_at",
|
|
'locale',
|
|
)
|
|
|
|
def validate(self, data):
|
|
data["state"] = self.get_state(data)
|
|
data["title"] = self.get_title(data)
|
|
data["description"] = self.get_description(data)
|
|
data.pop("body")
|
|
data.pop("locale")
|
|
return data
|
|
|
|
def create(self, validated_data):
|
|
return Recipe.objects.create(**validated_data)
|
|
|
|
def get_state(self, obj):
|
|
if obj["state"] == "published":
|
|
return Recipe.PUBLISHED
|
|
elif obj["state"] == "hidden":
|
|
return Recipe.HIDDEN
|
|
elif obj["state"] == "published_exclusive":
|
|
return Recipe.PUBLISHED_EXCLUSIVE
|
|
else:
|
|
return Recipe.WAITING
|
|
|
|
def get_title(self, obj):
|
|
# tit = obj.get("title")
|
|
# return {"en-GB": tit}
|
|
return {obj['locale']: obj['title']}
|
|
|
|
def get_description(self, obj):
|
|
# desc = obj.get("body")
|
|
# return {"en-GB": desc}
|
|
content = None
|
|
if obj['body']:
|
|
content = parse_legacy_news_content(obj['body'])
|
|
return {obj['locale']: content}
|