gault-millau/apps/transfer/serializers/news.py
2019-10-30 13:53:12 +03:00

93 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from rest_framework import serializers
from location.models import Country
from news.models import News
from tag.models import TagCategory
from utils.legacy_parser import parse_legacy_news_content
from utils.slug_generator import generate_unique_slug
class NewsSerializer(serializers.Serializer):
old_id = serializers.IntegerField()
news_type = serializers.IntegerField()
news_title = serializers.CharField()
title = serializers.CharField()
body = serializers.CharField(allow_null=True)
created_at = serializers.DateTimeField(format='%m-%d-%Y %H:%M:%S')
slug = serializers.CharField()
state = serializers.CharField()
template = serializers.CharField()
country_code = serializers.CharField(allow_null=True)
locale = serializers.CharField()
image = serializers.CharField()
tags = serializers.CharField(allow_null=True)
def create(self, validated_data):
payload = {
'old_id': validated_data['old_id'],
'news_type': validated_data['news_type'],
'title': {validated_data['locale']: validated_data['news_title']},
'subtitle': {validated_data['locale']: validated_data['title']},
'description': self.get_description(validated_data),
'start': validated_data['created_at'],
'slug': generate_unique_slug(News, validated_data['slug']),
'state': self.get_state(validated_data),
'template': self.get_template(validated_data),
'country': self.get_country(validated_data),
}
obj = News.objects.create(**payload)
tags = self.get_tags(validated_data)
return obj
# TODO: теги
# TODO: галерея с картинкой
@staticmethod
def get_tags(data):
if not data['tags']:
return None
tag_cat, _ = TagCategory.objects.get_or_create(
public=True,
label={'en-GB': 'tag'},
index_name='tag',
country='tag',
)
@staticmethod
def get_description(data):
if data['body']:
content = parse_legacy_news_content(data['body'])
return {data['locale']: content}
return None
@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_template(data):
templates = {
'main': News.MAIN,
'main.pdf.erb': News.MAIN_PDF_ERB,
}
return templates.get(data['template'], News.MAIN)
@staticmethod
def get_country(data):
return Country.objects.filter(code__iexact=data['country_code']).first()
@staticmethod
def get_title(data):
return {data['locale']: data['title']}