summaryrefslogtreecommitdiff
path: root/ishtar_common/data_importer.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2023-10-05 18:00:23 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-04-16 16:38:32 +0200
commit61a755cf4ae4179fe8ebbfb262cbaf0a4b3d7a67 (patch)
treed2a72b1343e96e04bf34afa69b1fecef584b97eb /ishtar_common/data_importer.py
parentaa2abd6df37846e4735d7b7d3bdea2fdd4ba9928 (diff)
downloadIshtar-61a755cf4ae4179fe8ebbfb262cbaf0a4b3d7a67.tar.bz2
Ishtar-61a755cf4ae4179fe8ebbfb262cbaf0a4b3d7a67.zip
✨ imports: manage ignore_errors
Diffstat (limited to 'ishtar_common/data_importer.py')
-rw-r--r--ishtar_common/data_importer.py56
1 files changed, 35 insertions, 21 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index c4805eed6..df6b52c7c 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -44,8 +44,6 @@ from ishtar_common.utils import get_all_field_names, update_data, get_current_pr
NEW_LINE_BREAK = "#####@@@#####"
-RE_FILTER_CEDEX = re.compile("(.*) *(?: *CEDEX|cedex|Cedex|Cédex|cédex *\d*)")
-
def post_importer_action(func):
def wrapper(self, context, value):
@@ -748,6 +746,7 @@ class Importer(object):
MODEL_CREATION_LIMIT = []
DEFAULTS = {}
PRE_IMPORT_VALUES = {} # values from a form before the import
+ IGNORE_ERRORS = tuple()
ERRORS = {
"header_check": _(
"The given file is not correct. Check the file "
@@ -860,8 +859,10 @@ class Importer(object):
self._add_to_post_save(rel.__class__, rel.pk, idx_line)
except IntegrityError as e:
self.errors.append((idx_line, None, str(e)))
- except ImporterError as msg:
- self.errors.append((idx_line, None, msg))
+ except ImporterError as import_error:
+ msg = str(import_error)
+ if not any(1 for error in self.IGNORE_ERRORS if error in msg):
+ self.errors.append((idx_line, None, msg))
return item
def post_import(self):
@@ -1083,8 +1084,10 @@ class Importer(object):
sys.stdout.flush()
try:
results.append(self._line_processing(idx_line, line))
- except ImporterError as msg:
- self.errors.append((idx_line, None, msg))
+ except ImporterError as import_error:
+ msg = str(import_error)
+ if not any(1 for error in self.IGNORE_ERRORS if error in msg):
+ self.errors.append((idx_line, None, msg))
self.post_import()
for item in self.to_be_close:
item.close()
@@ -1277,8 +1280,10 @@ class Importer(object):
else:
item = GeoVectorData.objects.create(**geodata)
created = True
- except Exception as e:
- self.errors.append((self.idx_line, None, str(e)))
+ except Exception as import_error:
+ msg = str(import_error)
+ if not any(1 for error in self.IGNORE_ERRORS if error in msg):
+ self.errors.append((self.idx_line, None, msg))
return
if self.import_instance and created:
item.imports.add(self.import_instance)
@@ -1402,13 +1407,15 @@ class Importer(object):
c_row.append("")
return data
val = val.replace(NEW_LINE_BREAK, "\n")
- self.errors.append(
- (
- idx_line + 1,
- idx_col + 1,
- str(self.ERRORS["regex_not_match"]) + val,
+ msg = str(self.ERRORS["regex_not_match"]) + val
+ if not any(1 for error in self.IGNORE_ERRORS if error in msg):
+ self.errors.append(
+ (
+ idx_line + 1,
+ idx_col + 1,
+ msg,
+ )
)
- )
c_row.append("")
return data
val_group = []
@@ -1475,10 +1482,12 @@ class Importer(object):
value = func.format(v, archive=self.archive)
else:
value = func.format(v)
- except ValueError as e:
+ except ValueError as import_error:
if formater.required:
self.c_errors = True
- self.errors.append((idx_line + 1, idx_col + 1, str(e)))
+ msg = str(import_error)
+ if not any(1 for error in self.IGNORE_ERRORS if error in msg):
+ self.errors.append((idx_line + 1, idx_col + 1, msg))
c_values.append("")
return data
if formater.value_format and value is not None and value != "":
@@ -1776,7 +1785,9 @@ class Importer(object):
idx_line=idx_line,
)
except Exception as e:
- self.errors.append((self.idx_line, None, str(e)))
+ msg = str(e)
+ if not any(1 for error in self.IGNORE_ERRORS if error in msg):
+ self.errors.append((self.idx_line, None, msg))
return
if not hasattr(field_object, "related_model") or not field_object.related_model:
return
@@ -1804,8 +1815,10 @@ class Importer(object):
field_object.remote_field.model, data[attribute].copy(), c_path,
idx_line=idx_line
)
- except ImporterError as msg:
- self.errors.append((self.idx_line, None, msg))
+ except ImporterError as import_error:
+ msg = str(import_error)
+ if not any(1 for error in self.IGNORE_ERRORS if error in msg):
+ self.errors.append((self.idx_line, None, msg))
data[attribute] = None
def get_object(self, cls, data, path=None, idx_line=None):
@@ -2111,8 +2124,9 @@ class Importer(object):
v._timestamp = self.timestamp
v._queue = "low_priority"
v.save()
- except DatabaseError as e:
- raise IntegrityError(e.message)
+ except DatabaseError as import_error:
+ msg = str(import_error)
+ raise IntegrityError(msg)
if self.simulate:
# put m2m result in data dict
current_data = data