diff options
| 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 | 
| commit | 61a755cf4ae4179fe8ebbfb262cbaf0a4b3d7a67 (patch) | |
| tree | d2a72b1343e96e04bf34afa69b1fecef584b97eb /ishtar_common/data_importer.py | |
| parent | aa2abd6df37846e4735d7b7d3bdea2fdd4ba9928 (diff) | |
| download | Ishtar-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.py | 56 | 
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  | 
