diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-05-15 12:18:56 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-05-15 12:18:56 +0200 |
commit | 733eae2fcfd402837bc00db4db7cbcacace6eea0 (patch) | |
tree | 8abbfa352fbdad0b90a0df609b08bec501a63527 | |
parent | 48422c5662e715baaabcb17ad1af05a05d687c74 (diff) | |
download | Ishtar-733eae2fcfd402837bc00db4db7cbcacace6eea0.tar.bz2 Ishtar-733eae2fcfd402837bc00db4db7cbcacace6eea0.zip |
Data importer: manage concat of M2M (many columns)
-rw-r--r-- | ishtar_common/data_importer.py | 24 | ||||
-rw-r--r-- | ishtar_common/models_imports.py | 3 | ||||
-rw-r--r-- | ishtar_common/utils.py | 6 |
3 files changed, 25 insertions, 8 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index 95763ae09..c568f1861 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -36,7 +36,7 @@ from django.db.models import Q from django.template.defaultfilters import slugify from django.utils.translation import ugettext_lazy as _ -from ishtar_common.utils import get_all_field_names, update_data +from ishtar_common.utils import debug_line_no, get_all_field_names, update_data NEW_LINE_BREAK = '#####@@@#####' @@ -1015,13 +1015,21 @@ class Importer(object): for idx, key in enumerate(keys): if idx == (len(keys) - 1): # last if concat: - if key not in current_data: - current_data[key] = "" - if not value: - continue - current_data[key] = (current_data[key] + concat_str) \ - if current_data[key] else u"" - current_data[key] += value + if isinstance(value, (list, tuple)): + if key not in current_data: + current_data[key] = [] + if not value: + continue + current_data[key] += value + else: + if key not in current_data: + current_data[key] = "" + if not value: + continue + current_data[key] = ( + current_data[key] + concat_str) \ + if current_data[key] else u"" + current_data[key] += value elif force_value and value: if concat_str and key in current_data \ and current_data[key]: diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index 5cb72bd18..e4d912c98 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -182,6 +182,7 @@ class ImporterType(models.Model): continue force_news = [] concat_str = [] + concat = [] for target in column.targets.all(): ft = target.formater_type.get_formater_type( target, import_instance=import_instance) @@ -191,6 +192,7 @@ class ImporterType(models.Model): targets.append(target.target) concat_str.append(target.concat_str) force_news.append(target.force_new) + concat.append(target.concat) formater_kwargs = {} if column.regexp_pre_filter: formater_kwargs['regexp'] = re.compile( @@ -198,6 +200,7 @@ class ImporterType(models.Model): if column.value_format: formater_kwargs['value_format'] = \ column.value_format.format_string + formater_kwargs['concat'] = concat formater_kwargs['concat_str'] = concat_str formater_kwargs['duplicate_fields'] = [ (field.field_name, field.force_new, field.concat, diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 401f88f82..4f48cb08b 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -21,6 +21,7 @@ from csv import QUOTE_ALL import datetime from functools import wraps from itertools import chain +from inspect import currentframe, getframeinfo import hashlib import os import random @@ -60,6 +61,11 @@ def dict_to_tuple(dct): return tuple(values) +def debug_line_no(): + cf = currentframe() + return currentframe().f_back.f_lineno + + class BColors: """ Bash colors. Don't forget to finish your colored string with ENDC. |