74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
from rest_framework import serializers
|
|
|
|
from news.models import News
|
|
from utils.legacy_parser import parse_legacy_news_content
|
|
from utils.slug_generator import generate_unique_slug
|
|
|
|
|
|
class NewsSerializer(serializers.ModelSerializer):
|
|
locale = serializers.CharField()
|
|
slug = 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({
|
|
'slug': generate_unique_slug(News, data['slug']),
|
|
'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}
|