diff options
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 |
commit | b50301535578174f4a9641db3f0778e3765bbf32 (patch) | |
tree | 378e8dd339470c548c696515850fdcea54bcfe6b /ishtar_common/data_importer.py | |
parent | 47f8123aba5c0e967835a204d60cf3aa8077da63 (diff) | |
download | Ishtar-b50301535578174f4a9641db3f0778e3765bbf32.tar.bz2 Ishtar-b50301535578174f4a9641db3f0778e3765bbf32.zip |
Imports: allow column concat
Diffstat (limited to 'ishtar_common/data_importer.py')
-rw-r--r-- | ishtar_common/data_importer.py | 41 |
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): |