gault-millau/apps/transfer/serializers/recipe.py
2019-10-26 22:02:38 +03:00

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}