summaryrefslogtreecommitdiff
path: root/ishtar_common/data_importer.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2015-10-28 11:48:24 +0100
committerÉtienne Loks <etienne.loks@proxience.com>2015-10-28 11:48:24 +0100
commit0986fc9a02c8c36572d0021ae5c95e9bf1358293 (patch)
tree378e8dd339470c548c696515850fdcea54bcfe6b /ishtar_common/data_importer.py
parentb91ada3c47d839f896733c6d2049ed2d1ecc6d7f (diff)
downloadIshtar-0986fc9a02c8c36572d0021ae5c95e9bf1358293.tar.bz2
Ishtar-0986fc9a02c8c36572d0021ae5c95e9bf1358293.zip
Imports: allow column concat
Diffstat (limited to 'ishtar_common/data_importer.py')
-rw-r--r--ishtar_common/data_importer.py41
1 files changed, 32 insertions, 9 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index 40356f519..d4e527ec6 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -43,8 +43,8 @@ class ImportFormater(object):
through_key=None, through_dict=None,
through_unicity_keys=None, duplicate_fields=[], regexp=None,
regexp_formater_args=[], force_value=None,
- post_processing=False, concat=False, comment="",
- force_new=None):
+ post_processing=False, concat=False, concat_str=False,
+ comment="", force_new=None):
self.field_name = field_name
self.formater = formater
self.required = required
@@ -61,6 +61,7 @@ class ImportFormater(object):
self.post_processing = post_processing
# concatenate with existing value
self.concat = concat
+ self.concat_str = concat_str
self.comment = comment
self.force_new = force_new
@@ -684,7 +685,7 @@ class Importer(object):
options = formater.model.__module__ + '.' + \
formater.model.__name__
elif formater_name == 'UnicodeFormater':
- options = unicode(formater.max_length)
+ options = unicode(formater.max_length or '')
elif formater_name == 'DateFormater':
options = formater.date_formats[0]
formater_model, created = \
@@ -701,6 +702,7 @@ class Importer(object):
column=column, target=target, formater_type=formater_model,
force_new=getattr(formater, 'force_new', False),
concat=getattr(formater, 'concat', False),
+ concat_str=getattr(formater, 'concat_str', ''),
regexp_filter=regexp_filter,
comment=line.comment)
return True
@@ -732,6 +734,7 @@ class Importer(object):
self.DB_TARGETS = {}
self.match_table = {}
self.concats = set()
+ self.concat_str = {}
if import_instance and import_instance.imported_images:
self.archive = import_instance.imported_images
self._defaults = self.DEFAULTS.copy()
@@ -824,7 +827,7 @@ class Importer(object):
@classmethod
def _field_name_to_data_dict(
cls, field_name, value, data, force_value=False, concat=False,
- force_new=False):
+ concat_str=u"", force_new=False):
field_names = field_name
if type(field_names) not in (list, tuple):
field_names = [field_name]
@@ -838,13 +841,21 @@ class Importer(object):
current_data[key] = ""
if not value:
continue
- current_data[key] = (current_data[key] + u"\n") \
+ current_data[key] = (current_data[key] + concat_str) \
if current_data[key] else u""
current_data[key] += value
elif force_value and value:
- current_data[key] = value
+ if concat_str and key in current_data \
+ and current_data[key]:
+ current_data[key] = unicode(current_data[key]) + \
+ concat_str + unicode(value)
+ else:
+ current_data[key] = value
elif key not in current_data or not current_data[key]:
current_data[key] = value
+ elif concat_str:
+ current_data[key] = unicode(current_data[key]) +\
+ concat_str + unicode(value)
if force_new:
current_data['__force_new'] = True
elif key not in current_data:
@@ -1063,6 +1074,11 @@ class Importer(object):
force_new = force_new[idx_v]
if formater.concat:
self.concats.add(field_name)
+ concat_str = formater.concat_str
+ if type(formater.concat_str) in (list, tuple):
+ concat_str = concat_str[idx_v]
+ if concat_str:
+ self.concat_str[field_name] = concat_str
if self.DB_TARGETS:
formater.reinit_db_target(
@@ -1114,13 +1130,19 @@ class Importer(object):
field_names = [field_name]
force_news = [force_new]
+ concats = [formater.concat]
+ concat_str = [concat_str]
for duplicate_field in formater.duplicate_fields:
if type(duplicate_field[0]) in (list, tuple):
- duplicate_field, force_new = duplicate_field[idx_v]
+ duplicate_field, force_new, concat, conc_str = \
+ duplicate_field[idx_v]
else:
- duplicate_field, force_new = duplicate_field
+ duplicate_field, force_new, concat, conc_str = \
+ duplicate_field
field_names += [duplicate_field]
force_news += [force_new]
+ concats += [concat]
+ concat_str += [conc_str]
if formater.through:
self._throughs.append((formater, value))
@@ -1128,7 +1150,8 @@ class Importer(object):
for idx, field_name in enumerate(field_names):
self._field_name_to_data_dict(
field_name, value, data, formater.force_value,
- force_new=force_news[idx], concat=formater.concat)
+ force_new=force_news[idx], concat=concats[idx],
+ concat_str=concat_str[idx])
c_row.append(u" ; ".join([v for v in c_values]))
def get_field(self, cls, attribute, data, m2ms, c_path):