gault-millau/apps/transfer/serializers/news.py
2019-10-24 17:08:00 +03:00

71 lines
1.9 KiB
Python

from rest_framework import serializers
from news.models import News
from utils.legacy_parser import parse_legacy_news_content
class NewsSerializer(serializers.ModelSerializer):
locale = serializers.CharField()
body = serializers.CharField(allow_null=True)
title = serializers.CharField()
template = serializers.CharField()
state = serializers.CharField()
created_at = serializers.DateTimeField(source='start', format='%m-%d-%Y %H:%M:%S')
class Meta:
model = News
fields = (
'created_at',
'state',
'template',
'title',
'body',
'slug',
'news_type',
'locale',
)
def validate(self, data):
data.update({
'state': self.get_state(data),
'template': self.get_template(data),
'title': self.get_title(data),
'description': self.get_description(data),
})
data.pop('body')
data.pop('locale')
return data
def create(self, validated_data):
return News.objects.create(**validated_data)
@staticmethod
def get_template(data):
templates = {
'main': News.MAIN,
'main.pdf.erb': News.MAIN_PDF_ERB,
}
return templates.get(data['template'], News.MAIN)
@staticmethod
def get_state(data):
states = {
'new': News.WAITING,
'published': News.PUBLISHED,
'hidden': News.HIDDEN,
'published_exclusive': News.PUBLISHED_EXCLUSIVE,
'scheduled_exclusively': News.WAITING,
}
return states.get(data['state'], News.WAITING)
@staticmethod
def get_title(data):
return {data['locale']: data['title']}
@staticmethod
def get_description(data):
content = None
if data['body']:
content = parse_legacy_news_content(data['body'])
return {data['locale']: content}