Add field converter

This commit is contained in:
littlewolf 2019-10-15 12:02:17 +03:00
parent 47a4d28cf0
commit 4d908d0bbb

View File

@ -2,8 +2,10 @@ from os.path import exists
from importlib.machinery import SourceFileLoader from importlib.machinery import SourceFileLoader
from django.apps import apps from django.apps import apps
from collections import OrderedDict from collections import OrderedDict
import importlib
from pprint import pprint from pprint import pprint
def transfer_objects(data_type): def transfer_objects(data_type):
models_list = {} models_list = {}
@ -67,19 +69,9 @@ def get_fields_map(card, queryset):
for legacy_object in queryset.iterator(): for legacy_object in queryset.iterator():
app_queryset_dict = {} app_queryset_dict = {}
for app_field, legacy_field in fields_list.items(): for app_field, legacy_field in fields_list.items():
if isinstance(legacy_field, tuple): app_value = convert_field_from_legacy_to_app(legacy_object, legacy_field)
if isinstance(legacy_field[0], tuple): if app_value is not None:
# Группа полей с аргументами app_queryset_dict[app_field] = app_value
pass
else:
print(app_field)
print(legacy_field)
else:
try:
app_queryset_dict[app_field] = getattr(legacy_object, legacy_field)
except Exception as e:
print(f"Attribute {legacy_field} not found in {legacy_object}: {e}")
return
app_queryset_list.append(app_queryset_dict) app_queryset_list.append(app_queryset_dict)
@ -92,7 +84,45 @@ def get_fields_map(card, queryset):
# pprint(len(queryset)) # pprint(len(queryset))
print("==============================") print("==============================")
return card return app_queryset_list
# Convert field
def convert_field_from_legacy_to_app(legacy_object, legacy_field):
result = None
if isinstance(legacy_field, tuple):
if isinstance(legacy_field[0], tuple):
# legacy_attributes = {}
# for legacy_attribute in legacy_field:
print(legacy_field)
else:
if hasattr(legacy_object, legacy_field[0]):
try:
legacy_data = getattr(legacy_object, legacy_field[0])
except Exception as e:
raise AttributeError(f"Attribute {legacy_field} not found in {legacy_object}: {e}")
field_module = legacy_field[-1].split(".")
try:
field_type = getattr(importlib.import_module(".".join(field_module[:-1])), field_module[-1])
except Exception as e:
raise ValueError(f"Cannot set new field type for field {legacy_field}: {e}")
if len(legacy_field) == 3:
result = field_type(**{legacy_field[1]: legacy_data})
elif len(legacy_field) == 2:
result = field_type(legacy_data)
else:
print(f"Attribute {legacy_field} not found in {legacy_object.__dict__}")
else:
if hasattr(legacy_object, legacy_field):
result = getattr(legacy_object, legacy_field)
else:
print(f"Attribute {legacy_field} not found in {legacy_object.__dict__}")
return result
# Get legacy model data # Get legacy model data