Merge branch 'feature/migrate-city-objects' of ssh://gl.id-east.ru:222/gm/gm-backend into feature/migrate-city-objects
This commit is contained in:
commit
ec55f7915f
23
apps/news/transfer_data.py
Normal file
23
apps/news/transfer_data.py
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
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")
|
||||||
|
|
||||||
|
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'))
|
||||||
|
|
||||||
|
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}")
|
||||||
|
|
||||||
|
|
||||||
|
data_types = {
|
||||||
|
"news": [transfer_news]
|
||||||
|
}
|
||||||
|
|
@ -369,16 +369,16 @@ class GuideFilters(MigrateMixin):
|
||||||
managed = False
|
managed = False
|
||||||
db_table = 'guide_filters'
|
db_table = 'guide_filters'
|
||||||
|
|
||||||
|
#
|
||||||
class GuideSections(MigrateMixin):
|
# class GuideSections(MigrateMixin):
|
||||||
using = 'legacy'
|
# using = 'legacy'
|
||||||
|
#
|
||||||
type = models.CharField(max_length=255)
|
# type = models.CharField(max_length=255)
|
||||||
key_name = models.CharField(max_length=255, blank=True, null=True)
|
# key_name = models.CharField(max_length=255, blank=True, null=True)
|
||||||
value_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)
|
# right = models.IntegerField(blank=True, null=True)
|
||||||
created_at = models.DateTimeField()
|
# created_at = models.DateTimeField()
|
||||||
updated_at = models.DateTimeField()
|
# updated_at = models.DateTimeField()
|
||||||
|
|
||||||
|
|
||||||
# class GuideElements(MigrateMixin):
|
# class GuideElements(MigrateMixin):
|
||||||
|
|
|
||||||
0
apps/transfer/serializers/__init__.py
Normal file
0
apps/transfer/serializers/__init__.py
Normal file
41
apps/transfer/serializers/news.py
Normal file
41
apps/transfer/serializers/news.py
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
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()
|
||||||
|
title = serializers.SerializerMethodField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = News
|
||||||
|
fields = (
|
||||||
|
"state",
|
||||||
|
"template",
|
||||||
|
"image_url",
|
||||||
|
"preview_image_url",
|
||||||
|
"title",
|
||||||
|
"description",
|
||||||
|
"slug",
|
||||||
|
"news_type"
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_title(self, obj):
|
||||||
|
return f'{"en-GB": {obj.title}}'
|
||||||
|
|
||||||
|
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
|
||||||
|
|
@ -1,3 +1,14 @@
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
# from django.core.management import call_command
|
||||||
# Create your tests here.
|
#
|
||||||
|
#
|
||||||
|
# class NewsTransferTestCase(TestCase):
|
||||||
|
# command = "-n"
|
||||||
|
#
|
||||||
|
# databases = {'default', 'legacy'}
|
||||||
|
#
|
||||||
|
# def test_transfer(self):
|
||||||
|
# args = [self.command]
|
||||||
|
# kwargs = {}
|
||||||
|
#
|
||||||
|
# call_command('transfer', *args, **kwargs)
|
||||||
|
|
|
||||||
|
|
@ -7,27 +7,45 @@ from pprint import pprint
|
||||||
|
|
||||||
|
|
||||||
def transfer_objects(data_type):
|
def transfer_objects(data_type):
|
||||||
models_list = {}
|
|
||||||
|
|
||||||
for app in apps.get_app_configs():
|
for app in apps.get_app_configs():
|
||||||
if exists(f"{app.path}/transfer.py"):
|
if exists(f"{app.path}/transfer_data.py"):
|
||||||
card_module = SourceFileLoader("transfer", f"{app.path}/transfer.py").load_module()
|
card_module = SourceFileLoader("transfer", f"{app.path}/transfer_data.py").load_module()
|
||||||
if not hasattr(card_module, "card") or len(card_module.card) < 1:
|
if not hasattr(card_module, "data_types") or not isinstance(card_module.data_types, dict) or len(card_module.data_types) < 1:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for model, card in card_module.card.items():
|
for module_data_type, transfer_funcs in card_module.data_types.items():
|
||||||
if "data_type" in card and data_type == card["data_type"]:
|
if data_type == module_data_type:
|
||||||
card['app_label'] = app.label
|
# card['app_label'] = app.label
|
||||||
models_list[model] = card
|
# 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
|
# TRANSFER DATA FUNCTION
|
||||||
|
|
@ -67,9 +85,9 @@ def get_fields_map(card, queryset):
|
||||||
fields_list = list(card['fields'].values())[0]
|
fields_list = list(card['fields'].values())[0]
|
||||||
|
|
||||||
app_queryset_list = []
|
app_queryset_list = []
|
||||||
print("==============================================================================")
|
# print("==============================================================================")
|
||||||
pprint(card)
|
# pprint(card)
|
||||||
print("==============================================================================")
|
# print("==============================================================================")
|
||||||
|
|
||||||
for legacy_object in queryset.iterator():
|
for legacy_object in queryset.iterator():
|
||||||
app_queryset_dict = {}
|
app_queryset_dict = {}
|
||||||
|
|
@ -77,19 +95,18 @@ def get_fields_map(card, queryset):
|
||||||
app_value = convert_field_from_legacy_to_app(legacy_object, legacy_field)
|
app_value = convert_field_from_legacy_to_app(legacy_object, legacy_field)
|
||||||
if app_value is not None:
|
if app_value is not None:
|
||||||
app_queryset_dict[app_field] = app_value
|
app_queryset_dict[app_field] = app_value
|
||||||
|
|
||||||
|
if relations is not None:
|
||||||
|
for relation_table, relation_data in relations.items():
|
||||||
|
# print(f"{relation_table.lower()}_set")
|
||||||
|
print(legacy_object.pagetext)
|
||||||
|
# relation_object = getattr(legacy_object, f"{relation_table.lower()}_set")
|
||||||
|
|
||||||
|
# print(relation_object)
|
||||||
|
|
||||||
print("==============================")
|
print("==============================")
|
||||||
pprint(app_queryset_dict)
|
|
||||||
app_queryset_list.append(app_queryset_dict)
|
app_queryset_list.append(app_queryset_dict)
|
||||||
|
|
||||||
# pprint(card)
|
|
||||||
# print("*************************************")
|
|
||||||
# pprint(fields_list)
|
|
||||||
# print("*************************************")
|
|
||||||
# pprint(relations)
|
|
||||||
# print("*************************************")
|
|
||||||
# pprint(len(queryset))
|
|
||||||
|
|
||||||
|
|
||||||
return app_queryset_list
|
return app_queryset_list
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -178,15 +195,23 @@ def get_legacy_data(card):
|
||||||
"""Одиночное поле"""
|
"""Одиночное поле"""
|
||||||
legacy_fields.append(legacy_field[0])
|
legacy_fields.append(legacy_field[0])
|
||||||
|
|
||||||
queryset = legacy_model.objects.only(*legacy_fields)[:50]# TODO: remove after debug
|
queryset = legacy_model.objects.all()[:50]# TODO: remove after debug
|
||||||
|
|
||||||
# Возвращаем зависимости на место
|
# Возвращаем зависимости на место
|
||||||
if relations:
|
if relations is not None:
|
||||||
|
queryset = add_legacy_relation_data(queryset, relations)
|
||||||
card['fields']['relations'] = relations
|
card['fields']['relations'] = relations
|
||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
|
# Add relation data to queryset
|
||||||
|
def add_legacy_relation_data(queryset, relations):
|
||||||
|
for relation_table in relations.keys():
|
||||||
|
queryset = queryset.prefetch_related(relation_table.lower())
|
||||||
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
# Models sort
|
# Models sort
|
||||||
def sort_by_dependencies(data):
|
def sort_by_dependencies(data):
|
||||||
"""Сортировка моделей по зависимостям"""
|
"""Сортировка моделей по зависимостям"""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user