Skip to content

Commit

Permalink
move common methods into import_element
Browse files Browse the repository at this point in the history
  • Loading branch information
MyPyDavid committed Nov 21, 2023
1 parent 5b0031a commit 742bc34
Showing 1 changed file with 20 additions and 10 deletions.
30 changes: 20 additions & 10 deletions rdmo/management/imports.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import copy
import logging
from collections import defaultdict
from typing import Optional

from django.db import models
from django.forms.models import model_to_dict

from rdmo.conditions.imports import import_helper_condition
from rdmo.core.imports import common_import_methods, get_lang_field_values, set_lang_field
from rdmo.core.imports import get_lang_field_values, get_or_return_instance, make_import_info_msg, set_lang_field
from rdmo.domain.imports import import_helper_attribute
from rdmo.options.imports import import_helper_option, import_helper_optionset
from rdmo.questions.imports import (
Expand All @@ -18,6 +20,8 @@
from rdmo.tasks.imports import import_helper_task
from rdmo.views.imports import import_helper_view

from .constants import RDMO_MODEL_PATH_MAPPER

logger = logging.getLogger(__name__)


Expand All @@ -44,7 +48,7 @@
}


def import_elements(uploaded_elements, save=True, user=None):
def import_elements(uploaded_elements: list[dict], save: bool = True, user: Optional[models.Model] = None):
imported_elements = []
for element in uploaded_elements:
model = element.get('model')
Expand All @@ -56,7 +60,7 @@ def import_elements(uploaded_elements, save=True, user=None):
return imported_elements


def filter_warnings(element, elements):
def filter_warnings(element: dict, elements: list[dict]):
# remove warnings regarding elements which are in the elements list
warnings = []
for uri, messages in element['warnings'].items():
Expand All @@ -71,7 +75,7 @@ def import_element(
model_path: Optional[str] = None,
element: Optional[dict] = None,
save: bool = True,
user = None
user: Optional[models.Model] = None
):

if element is None:
Expand All @@ -83,17 +87,23 @@ def import_element(
if model_path is None:
return element

model = RDMO_MODEL_PATH_MAPPER[model_path]
import_helper = ELEMENT_IMPORT_HELPERS[model_path]
import_method = import_helper.import_method
model_path = import_helper.dotted_path
validators = import_helper.validators
lang_field_names = import_helper.lang_fields
uri = element.get('uri')

instance, _msg, _created, original_instance = common_import_methods(
model_path,
uri=uri
)
# get or create instance from uri and model_path
instance, _created = get_or_return_instance(model, uri=uri)

# keep a copy of the original
# when the element is updated
# needs to be created here, else the changes will be overwritten
original_instance = copy.deepcopy(instance) if not _created else None

_msg = make_import_info_msg(model._meta.verbose_name, _created, uri=uri)

# prepare original element when updated (maybe rename into lookup)
_updated = not _created
original_element = {}
Expand All @@ -119,7 +129,7 @@ def import_element(

if _updated:
element['updated'] = _updated
# make json serializable, keep only strings
# keep only strings, make json serializable
original_element_json = {k: val for k, val in original_element.items() if isinstance(val, str)}
element['original'] = original_element_json

Expand Down

0 comments on commit 742bc34

Please sign in to comment.