From 017308da9566e6edfb50d2ef8f62a273479e20af Mon Sep 17 00:00:00 2001 From: Anatoly Date: Thu, 16 Jan 2020 14:19:56 +0300 Subject: [PATCH] refactored news transfer --- apps/news/transfer_data.py | 48 +++++++++++++++++++++----------------- apps/utils/methods.py | 18 ++++++++++++++ 2 files changed, 44 insertions(+), 22 deletions(-) diff --git a/apps/news/transfer_data.py b/apps/news/transfer_data.py index f4e16739..3586e357 100644 --- a/apps/news/transfer_data.py +++ b/apps/news/transfer_data.py @@ -11,6 +11,7 @@ from tag.models import TagCategory, Tag from translation.models import SiteInterfaceDictionary from transfer.models import PageTexts, PageCounters, PageMetadata from transfer.serializers.news import NewsSerializer +from utils.methods import transform_camelcase_to_underscore def add_locale(locale, data): @@ -36,35 +37,38 @@ def clear_old_news(): images.delete() news.delete() - # NewsType.objects.all().delete() print(f'Deleted {img_num} images') print(f'Deleted {news_num} news') def transfer_news(): - news_type, _ = NewsType.objects.get_or_create(name='news') + migrated_news_types = ('News', 'StaticPage', ) - queryset = PageTexts.objects.filter( - page__type='News', - ).annotate( - 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'), - ) + for news_type in migrated_news_types: + news_type_obj, _ = NewsType.objects.get_or_create( + name=transform_camelcase_to_underscore(news_type)) - 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}') + queryset = PageTexts.objects.filter( + page__type=news_type, + ).annotate( + page__id=F('page__id'), + 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(): @@ -166,5 +170,5 @@ data_types = { update_en_gb_locales, add_views_count, add_tags, - ] + ], } diff --git a/apps/utils/methods.py b/apps/utils/methods.py index 741fd23b..b9855545 100644 --- a/apps/utils/methods.py +++ b/apps/utils/methods.py @@ -4,6 +4,7 @@ import random import re import string from collections import namedtuple +from functools import reduce from io import BytesIO 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])}" +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): """ Transform slug into section name, i.e: