diff options
Diffstat (limited to 'ishtar_common/data_importer.py')
| -rw-r--r-- | ishtar_common/data_importer.py | 26 | 
1 files changed, 19 insertions, 7 deletions
| diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index d77f28e18..cde464e04 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -34,7 +34,7 @@ RE_FILTER_CEDEX = re.compile("(.*) *(?: *CEDEX|cedex|Cedex|Cédex|cédex *\d*)")  class ImportFormater(object):      def __init__(self, field_name, formater=None, required=True, through=None,                  through_key=None, through_dict=None, through_unicity_keys=None, -                duplicate_field=None, regexp=None, regexp_formater_args=[], +                duplicate_fields=[], regexp=None, regexp_formater_args=[],                  reverse_for_test=None, force_value=None, post_processing=False,                  concat=False, comment=""):          self.field_name = field_name @@ -44,7 +44,7 @@ class ImportFormater(object):          self.through_key = through_key          self.through_dict = through_dict          self.through_unicity_keys = through_unicity_keys -        self.duplicate_field = duplicate_field +        self.duplicate_fields = duplicate_fields          self.regexp = regexp          self.regexp_formater_args = regexp_formater_args          self.reverse_for_test = reverse_for_test @@ -95,10 +95,11 @@ class Formater(object):          return  class UnicodeFormater(Formater): -    def __init__(self, max_length, clean=False, re_filter=None): +    def __init__(self, max_length, clean=False, re_filter=None, notnull=False):          self.max_length = max_length          self.clean = clean          self.re_filter = re_filter +        self.notnull = notnull      def format(self, value):          try: @@ -119,6 +120,8 @@ class UnicodeFormater(Formater):              raise ValueError(_(u"\"%(value)s\" is too long. "\                                 u"The max length is %(length)d characters."                                 ) % {'value':value, 'length':self.max_length}) +        if self.notnull and not value: +            return          return value  class BooleanFormater(Formater): @@ -306,6 +309,8 @@ class DateFormater(Formater):      def format(self, value):          value = value.strip() +        if not value: +            return          try:              return datetime.datetime.strptime(value, self.date_format).date()          except: @@ -698,7 +703,7 @@ class Importer(object):              c_values.append(value) -            if value == None and  formater.required: +            if value == None and formater.required:                  self.c_errors = True                  self.errors.append((idx_line+1, idx_col+1,                                     self.ERRORS['value_required'])) @@ -708,8 +713,7 @@ class Importer(object):              if type(field_name) in (list, tuple):                  field_name = field_name[idx_v]              field_names = [field_name] -            if formater.duplicate_field: -                duplicate_field = formater.duplicate_field +            for duplicate_field in formater.duplicate_fields:                  if type(duplicate_field) in (list, tuple):                      duplicate_field = duplicate_field[idx_v]                  field_names += [duplicate_field] @@ -745,7 +749,15 @@ class Importer(object):                      data[attribute], created = self.get_object(                                     field_object.rel.to, data[attribute], c_path)                  if m2m: -                    m2ms.append((attribute, data.pop(attribute))) +                    val = data.pop(attribute) +                    model = field_object.model +                    if val.__class__ != model and type(val) == dict: +                        if 'history_modifier' in \ +                                model._meta.get_all_field_names(): +                            val['history_modifier'] = self.history_modifier +                        val, created = field_object.model.objects.get_or_create( +                                                                          **val) +                    m2ms.append((attribute, val))              path = tuple(path)              if path in self._defaults:                  for k in self._defaults[path]: | 
