news transfer
This commit is contained in:
parent
c521839389
commit
8c3306628e
|
|
@ -4,6 +4,7 @@ from django.db.models import Aggregate, CharField, Value
|
|||
from django.db.models import IntegerField, F
|
||||
|
||||
from news.models import NewsType
|
||||
from tag.models import TagCategory
|
||||
from transfer.models import PageTexts
|
||||
from transfer.serializers.news import NewsSerializer
|
||||
|
||||
|
|
@ -23,16 +24,21 @@ class GroupConcat(Aggregate):
|
|||
|
||||
def transfer_news():
|
||||
news_type, _ = NewsType.objects.get_or_create(name='News')
|
||||
tag_cat, _ = TagCategory.objects.get_or_create(index_name='tag', public=True)
|
||||
news_type.tag_categories.add(tag_cat)
|
||||
news_type.save()
|
||||
|
||||
queryset = PageTexts.objects.filter(
|
||||
page__type='News',
|
||||
).annotate(
|
||||
news_type=Value(news_type.id, output_field=IntegerField()),
|
||||
tag_cat_id=Value(tag_cat.id, output_field=IntegerField()),
|
||||
news_type_id=Value(news_type.id, output_field=IntegerField()),
|
||||
country_code=F('page__site__country_code_2'),
|
||||
news_title=F('page__root_title'),
|
||||
image=F('page__attachment_suffix_url'),
|
||||
template=F('page__template'),
|
||||
tags=GroupConcat('page__tags__id'),
|
||||
)[:100]
|
||||
)
|
||||
|
||||
serialized_data = NewsSerializer(data=list(queryset.values()), many=True)
|
||||
if serialized_data.is_valid():
|
||||
|
|
|
|||
|
|
@ -1,15 +1,18 @@
|
|||
from rest_framework import serializers
|
||||
|
||||
from gallery.models import Image
|
||||
from location.models import Country
|
||||
from news.models import News
|
||||
from tag.models import TagCategory
|
||||
from news.models import News, NewsGallery
|
||||
from tag.models import Tag
|
||||
from transfer.models import PageMetadata
|
||||
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()
|
||||
id = serializers.IntegerField()
|
||||
tag_cat_id = serializers.IntegerField()
|
||||
news_type_id = serializers.IntegerField()
|
||||
news_title = serializers.CharField()
|
||||
title = serializers.CharField()
|
||||
body = serializers.CharField(allow_null=True)
|
||||
|
|
@ -25,8 +28,8 @@ class NewsSerializer(serializers.Serializer):
|
|||
def create(self, validated_data):
|
||||
|
||||
payload = {
|
||||
'old_id': validated_data['old_id'],
|
||||
'news_type': validated_data['news_type'],
|
||||
'old_id': validated_data['id'],
|
||||
'news_type_id': validated_data['news_type_id'],
|
||||
'title': {validated_data['locale']: validated_data['news_title']},
|
||||
'subtitle': {validated_data['locale']: validated_data['title']},
|
||||
'description': self.get_description(validated_data),
|
||||
|
|
@ -39,23 +42,47 @@ class NewsSerializer(serializers.Serializer):
|
|||
obj = News.objects.create(**payload)
|
||||
|
||||
tags = self.get_tags(validated_data)
|
||||
for tag in tags:
|
||||
obj.tags.add(tag)
|
||||
obj.save()
|
||||
|
||||
self.make_gallery(validated_data, obj)
|
||||
return obj
|
||||
|
||||
# TODO: теги
|
||||
# TODO: галерея с картинкой
|
||||
@staticmethod
|
||||
def make_gallery(data, obj):
|
||||
if not data['image'] or data['image'] == 'default/missing.png':
|
||||
return
|
||||
|
||||
img = Image.objects.create(
|
||||
image=data['image'],
|
||||
title=data['news_title'],
|
||||
)
|
||||
NewsGallery.objects.create(
|
||||
news=obj,
|
||||
image=img,
|
||||
is_main=True,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def get_tags(data):
|
||||
results = []
|
||||
if not data['tags']:
|
||||
return None
|
||||
tag_cat, _ = TagCategory.objects.get_or_create(
|
||||
public=True,
|
||||
label={'en-GB': 'tag'},
|
||||
index_name='tag',
|
||||
country='tag',
|
||||
)
|
||||
return results
|
||||
|
||||
meta_ids = (int(_id) for _id in data['tags'].split(','))
|
||||
tags = PageMetadata.objects.filter(
|
||||
id__in=meta_ids,
|
||||
key='tag',
|
||||
value__isnull=False,
|
||||
)
|
||||
for old_tag in tags:
|
||||
tag, _ = Tag.objects.get_or_create(
|
||||
category_id=data['tag_cat_id'],
|
||||
label={data['locale']: old_tag.value},
|
||||
)
|
||||
results.append(tag)
|
||||
return results
|
||||
|
||||
@staticmethod
|
||||
def get_description(data):
|
||||
|
|
|
|||
|
|
@ -329,8 +329,8 @@ REDOC_SETTINGS = {
|
|||
# RabbitMQ
|
||||
# BROKER_URL = 'amqp://rabbitmq:5672'
|
||||
# Redis
|
||||
BROKER_URL = 'redis://localhost:6379/1'
|
||||
# BROKER_URL = 'redis://redis:6379/1'
|
||||
# BROKER_URL = 'redis://localhost:6379/1'
|
||||
BROKER_URL = 'redis://redis:6379/1'
|
||||
CELERY_RESULT_BACKEND = BROKER_URL
|
||||
CELERY_BROKER_URL = BROKER_URL
|
||||
CELERY_ACCEPT_CONTENT = ['application/json']
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ DOMAIN_URI = 'gm.id-east.ru'
|
|||
# ELASTICSEARCH SETTINGS
|
||||
ELASTICSEARCH_DSL = {
|
||||
'default': {
|
||||
'hosts': 'localhost:9200'
|
||||
# 'hosts': 'elasticsearch:9200'
|
||||
# 'hosts': 'localhost:9200'
|
||||
'hosts': 'elasticsearch:9200'
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user