refactored news transfer

This commit is contained in:
Anatoly 2020-01-16 14:19:56 +03:00
parent 127d15b181
commit 017308da95
2 changed files with 44 additions and 22 deletions

View File

@ -11,6 +11,7 @@ from tag.models import TagCategory, Tag
from translation.models import SiteInterfaceDictionary from translation.models import SiteInterfaceDictionary
from transfer.models import PageTexts, PageCounters, PageMetadata from transfer.models import PageTexts, PageCounters, PageMetadata
from transfer.serializers.news import NewsSerializer from transfer.serializers.news import NewsSerializer
from utils.methods import transform_camelcase_to_underscore
def add_locale(locale, data): def add_locale(locale, data):
@ -36,35 +37,38 @@ def clear_old_news():
images.delete() images.delete()
news.delete() news.delete()
# NewsType.objects.all().delete()
print(f'Deleted {img_num} images') print(f'Deleted {img_num} images')
print(f'Deleted {news_num} news') print(f'Deleted {news_num} news')
def transfer_news(): def transfer_news():
news_type, _ = NewsType.objects.get_or_create(name='news') migrated_news_types = ('News', 'StaticPage', )
queryset = PageTexts.objects.filter( for news_type in migrated_news_types:
page__type='News', news_type_obj, _ = NewsType.objects.get_or_create(
).annotate( name=transform_camelcase_to_underscore(news_type))
page__id=F('page__id'),
news_type_id=Value(news_type.id, output_field=IntegerField()),
page__created_at=F('page__created_at'),
page__account_id=F('page__account_id'),
page__state=F('page__state'),
page__template=F('page__template'),
page__site__country_code_2=F('page__site__country_code_2'),
page__root_title=F('page__root_title'),
page__attachment_suffix_url=F('page__attachment_suffix_url'),
page__published_at=F('page__published_at'),
)
serialized_data = NewsSerializer(data=list(queryset.values()), many=True) queryset = PageTexts.objects.filter(
if serialized_data.is_valid(): page__type=news_type,
serialized_data.save() ).annotate(
else: page__id=F('page__id'),
pprint(f'News serializer errors: {serialized_data.errors}') news_type_id=Value(news_type_obj.id, output_field=IntegerField()),
page__created_at=F('page__created_at'),
page__account_id=F('page__account_id'),
page__state=F('page__state'),
page__template=F('page__template'),
page__site__country_code_2=F('page__site__country_code_2'),
page__root_title=F('page__root_title'),
page__attachment_suffix_url=F('page__attachment_suffix_url'),
page__published_at=F('page__published_at'),
)
serialized_data = NewsSerializer(data=list(queryset.values()), many=True)
if serialized_data.is_valid():
serialized_data.save()
else:
pprint(f'News serializer errors: {serialized_data.errors}')
def update_en_gb_locales(): def update_en_gb_locales():
@ -166,5 +170,5 @@ data_types = {
update_en_gb_locales, update_en_gb_locales,
add_views_count, add_views_count,
add_tags, add_tags,
] ],
} }

View File

@ -4,6 +4,7 @@ import random
import re import re
import string import string
from collections import namedtuple from collections import namedtuple
from functools import reduce
from io import BytesIO from io import BytesIO
import requests import requests
@ -173,6 +174,23 @@ def transform_into_readable_str(raw_string: str, postfix: str = 'SectionNode'):
return f"{''.join([i.capitalize() for i in result])}" return f"{''.join([i.capitalize() for i in result])}"
def transform_camelcase_to_underscore(raw_string: str):
"""
Transform str, i.e:
from
"ContentPage"
to
"content_page"
"""
re_exp = r'[A-Z][^A-Z]*'
result = [i.lower() for i in re.findall(re_exp, raw_string) if i]
if result:
return reduce(lambda x, y: f'{x}_{y}', result)
else:
return raw_string
def section_name_into_index_name(section_name: str): def section_name_into_index_name(section_name: str):
""" """
Transform slug into section name, i.e: Transform slug into section name, i.e: