diff options
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): | 
