diff --git a/apps/news/transfer_data.py b/apps/news/transfer_data.py new file mode 100644 index 00000000..ab02ca7f --- /dev/null +++ b/apps/news/transfer_data.py @@ -0,0 +1,28 @@ +from transfer.serializers.news import NewsSerializer +from transfer.models import PageTexts +from news.models import NewsType +from django.db.models import Value, IntegerField, F +from pprint import pprint + + +def transfer_news(): + news_type, _ = NewsType.objects.get_or_create(name="News") + print(news_type) + # + queryset = PageTexts.objects.all().annotate(news_type=Value(news_type.id, output_field=IntegerField())) + queryset = queryset.annotate(attachment_file_name=F('page__attachment_file_name')) + queryset = queryset.annotate(template=F('page__template')) + pprint(vars(queryset.first())) + print("===================================================================================") + # + serialized_data = NewsSerializer(queryset, many=True) + # data = serialized_data.data + # pprint(serialized_data.data) + for serialized_obj in serialized_data.data: + pprint(serialized_obj) + break + + +data_types = { + "news": [transfer_news] +} diff --git a/apps/transfer/models.py b/apps/transfer/models.py index caab0321..346ef6aa 100644 --- a/apps/transfer/models.py +++ b/apps/transfer/models.py @@ -369,16 +369,16 @@ class GuideFilters(MigrateMixin): managed = False db_table = 'guide_filters' - -class GuideSections(MigrateMixin): - using = 'legacy' - - type = models.CharField(max_length=255) - key_name = models.CharField(max_length=255, blank=True, null=True) - value_name = models.CharField(max_length=255, blank=True, null=True) - right = models.IntegerField(blank=True, null=True) - created_at = models.DateTimeField() - updated_at = models.DateTimeField() +# +# class GuideSections(MigrateMixin): +# using = 'legacy' +# +# type = models.CharField(max_length=255) +# key_name = models.CharField(max_length=255, blank=True, null=True) +# value_name = models.CharField(max_length=255, blank=True, null=True) +# right = models.IntegerField(blank=True, null=True) +# created_at = models.DateTimeField() +# updated_at = models.DateTimeField() # class GuideElements(MigrateMixin): diff --git a/apps/transfer/serializers/__init__.py b/apps/transfer/serializers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/transfer/serializers/news.py b/apps/transfer/serializers/news.py new file mode 100644 index 00000000..877c8979 --- /dev/null +++ b/apps/transfer/serializers/news.py @@ -0,0 +1,37 @@ +from rest_framework import serializers +from news.models import News + + +class NewsSerializer(serializers.ModelSerializer): + image_url = serializers.SerializerMethodField() + preview_image_url = serializers.SerializerMethodField() + description = serializers.SerializerMethodField() + + class Meta: + model = News + fields = ( + "state", + "template", + "image_url", + "preview_image_url", + "title", + "description", + "slug", + "news_type" + ) + + def get_description(self, obj): + if not hasattr(obj, "body"): + return "" + else: + return obj.body + + def get_image_url(self, obj): + if not hasattr(obj, "attachment_file_name") or obj.attachment_file_name is None: + return "" + return obj.attachment_file_name + + def get_preview_image_url(self, obj): + if not hasattr(obj, "attachment_file_name") or obj.attachment_file_name is None: + return "" + return obj.attachment_file_name diff --git a/apps/transfer/tests.py b/apps/transfer/tests.py index 7ce503c2..593d2501 100644 --- a/apps/transfer/tests.py +++ b/apps/transfer/tests.py @@ -1,3 +1,14 @@ from django.test import TestCase - -# Create your tests here. +# from django.core.management import call_command +# +# +# class NewsTransferTestCase(TestCase): +# command = "-n" +# +# databases = {'default', 'legacy'} +# +# def test_transfer(self): +# args = [self.command] +# kwargs = {} +# +# call_command('transfer', *args, **kwargs) diff --git a/apps/transfer/utils.py b/apps/transfer/utils.py index 818a8220..a045f39e 100644 --- a/apps/transfer/utils.py +++ b/apps/transfer/utils.py @@ -7,27 +7,45 @@ from pprint import pprint def transfer_objects(data_type): - models_list = {} for app in apps.get_app_configs(): - if exists(f"{app.path}/transfer.py"): - card_module = SourceFileLoader("transfer", f"{app.path}/transfer.py").load_module() - if not hasattr(card_module, "card") or len(card_module.card) < 1: + if exists(f"{app.path}/transfer_data.py"): + card_module = SourceFileLoader("transfer", f"{app.path}/transfer_data.py").load_module() + if not hasattr(card_module, "data_types") or not isinstance(card_module.data_types, dict) or len(card_module.data_types) < 1: continue - for model, card in card_module.card.items(): - if "data_type" in card and data_type == card["data_type"]: - card['app_label'] = app.label - models_list[model] = card + for module_data_type, transfer_funcs in card_module.data_types.items(): + if data_type == module_data_type: + # card['app_label'] = app.label + # models_list[model] = card + for transfer_func in transfer_funcs: + print(f"========================== FUNCTION {transfer_func.__name__} ================================") + transfer_func() + + # if len(models_list) < 1: + # print(f"Models with data type {data_type} not found in structure") + # exit(1) + + # models_list = sort_by_dependencies(models_list) + # + # for model, card in models_list.items(): + # transfer_data(model, card) + + + + + + + + + + + + + - if len(models_list) < 1: - print(f"Models with data type {data_type} not found in structure") - exit(1) - models_list = sort_by_dependencies(models_list) - for model, card in models_list.items(): - transfer_data(model, card) # TRANSFER DATA FUNCTION