diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-03-21 18:17:22 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-06-17 13:21:27 +0200 | 
| commit | a50f37c7e0a0c8a89a2774d2cdcdf08112e2b0d3 (patch) | |
| tree | db014a6b5f0b731b4722d97d6e1c32eb69edbc60 /ishtar_common/models_imports.py | |
| parent | 92b66c46a54a4f447b36ba7273f7c6b87866dcf0 (diff) | |
| download | Ishtar-a50f37c7e0a0c8a89a2774d2cdcdf08112e2b0d3.tar.bz2 Ishtar-a50f37c7e0a0c8a89a2774d2cdcdf08112e2b0d3.zip  | |
Import: add a progress bar
Diffstat (limited to 'ishtar_common/models_imports.py')
| -rw-r--r-- | ishtar_common/models_imports.py | 28 | 
1 files changed, 24 insertions, 4 deletions
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index 35cf141b0..2d246753b 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -916,7 +916,6 @@ class Import(models.Model):                                      blank=True, null=True, editable=False)      seconds_remaining = models.IntegerField(          _(u"Remaining seconds"), blank=True, null=True, editable=False) -    # used by step by step import      current_line = models.IntegerField(_(u"Current line"), blank=True,                                         null=True)      number_of_line = models.IntegerField(_(u"Number of line"), blank=True, @@ -963,14 +962,32 @@ class Import(models.Model):          if not self.imported_file or not self.imported_file.path:              return          filename = self.imported_file.path -        with open(filename, 'r', encoding=self.encoding) as f: -            reader = csv.reader(f, delimiter=self.csv_sep) -            nb = sum(1 for __ in reader) - self.skip_lines +        encodings = [self.encoding] +        encodings += [coding for coding, c in ENCODINGS +                      if coding != self.encoding] +        for encoding in encodings: +            try: +                with open(filename, 'r', encoding=encoding) as f: +                    reader = csv.reader(f, delimiter=self.csv_sep) +                    nb = sum(1 for __ in reader) - self.skip_lines +            except UnicodeDecodeError: +                pass  # try the next encoding +            except csv.Error: +                raise ImporterError(_(u"Error in the CSV file."))          self.number_of_line = nb          self.save()          return nb +    @property +    def progress_percent(self): +        if not self.current_line or not self.number_of_line: +            return 0 +        return int((float(self.current_line) / float(self.number_of_line)) +                   * 100) +      def add_imported_line(self, idx_line): +        if not self.number_of_line: +            self.get_number_of_lines()          if self.imported_line_numbers and \                  str(idx_line) in self.imported_line_numbers.split(','):              return @@ -979,6 +996,7 @@ class Import(models.Model):          else:              self.imported_line_numbers = ""          self.imported_line_numbers += str(idx_line) +        self.current_line = idx_line          self.save()      def add_changed_line(self, idx_line): @@ -1205,6 +1223,8 @@ class Import(models.Model):                      request=None):          self.state = 'IP'          self.end_date = datetime.datetime.now() +        self.imported_line_numbers = '' +        self.current_line = 0          self.save()          importer = self.get_importer_instance()          try:  | 
