diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-08-13 17:41:51 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-08-13 17:41:51 +0200 |
commit | c50083de33ee424f82d65c06a5764c3f6a9c3b2d (patch) | |
tree | 801d74c7b88686d366fa14606b68c991b4aeee3a /ishtar_common/data_importer.py | |
parent | 75e05d42ac78163b6132c761fe9e9d6d780bbbc7 (diff) | |
download | Ishtar-c50083de33ee424f82d65c06a5764c3f6a9c3b2d.tar.bz2 Ishtar-c50083de33ee424f82d65c06a5764c3f6a9c3b2d.zip |
Imports: do not stop on m2m error. Fix model and error report on M2M - Document add M2M import field.
Diffstat (limited to 'ishtar_common/data_importer.py')
-rw-r--r-- | ishtar_common/data_importer.py | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index defa5b091..af8cc461e 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -1068,6 +1068,7 @@ class Importer(object): sys.stdout.write("\n") results = [] for idx_line, line in enumerate(table): + self.idx_line = idx_line if line_to_process is not None: if line_to_process != idx_line: continue @@ -1381,6 +1382,8 @@ class Importer(object): many_values = data.pop(attribute) if hasattr(field_object, 'rel'): model = field_object.rel.to + elif hasattr(field_object, 'related_model'): + model = field_object.related_model elif hasattr(field_object, 'to'): model = field_object.to elif hasattr(field_object, 'model'): @@ -1489,6 +1492,12 @@ class Importer(object): unicode( _(u"Importer configuration error: " u"\"{}\".")).format(e.message)) + except Exception as e: + msg = unicode( + _(u"Import error: {} - \"{}\".") + ).format(model, e.message.decode('utf-8')) + e.message = msg + raise e else: get_v = v.copy() if 'defaults' in get_v: @@ -1566,8 +1575,11 @@ class Importer(object): _(u"Importer configuration error: field \"{}\" does not exist " u"for {}.")).format(attribute, cls._meta.verbose_name)) if field_object.many_to_many: - m2ms += self._get_field_m2m(attribute, data, c_path, - new_created, field_object) + try: + m2ms += self._get_field_m2m(attribute, data, c_path, + new_created, field_object) + except Exception as e: + self.errors.append((self.idx_line, None, e.message)) return if not hasattr(field_object, 'rel') or not field_object.rel: return @@ -1664,7 +1676,7 @@ class Importer(object): defaults = {} if path in self._defaults: for k in self._defaults[path]: - if k not in data or not data[k]: + if (k not in data or not data[k]) and self._defaults[path][k]: defaults[k] = self._defaults[path][k] if 'history_modifier' in create_dict: @@ -1698,7 +1710,10 @@ class Importer(object): for k in dct.keys(): if k not in self.UNICITY_KEYS \ and k != 'defaults': - defaults[k] = dct.pop(k) + if dct[k]: + defaults[k] = dct.pop(k) + else: + dct.pop(k) if self.simulate: q = cls.objects.filter(**dct) |