summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit049fdf160fbe176c5ea753499b9e7885b3ebf302 (patch)
tree8abbfa352fbdad0b90a0df609b08bec501a63527
parente6436caf8edb39a3538e90fbed7c9a41396400d2 (diff)
downloadIshtar-049fdf160fbe176c5ea753499b9e7885b3ebf302.tar.bz2
Ishtar-049fdf160fbe176c5ea753499b9e7885b3ebf302.zip
Data importer: manage concat of M2M (many columns)
-rw-r--r--ishtar_common/data_importer.py24
-rw-r--r--ishtar_common/models_imports.py3
-rw-r--r--ishtar_common/utils.py6
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.