diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-03-23 21:15:18 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-03-27 17:53:27 +0200 |
commit | dd54e92885b013fca72ed568c92da3285511495a (patch) | |
tree | 5f4e7346d6aa41e3059ab6197ee4ab9a05717828 /ishtar_common/models_imports.py | |
parent | 650190359ff0be8f131a1af6410818e7de27ce93 (diff) | |
download | Ishtar-dd54e92885b013fca72ed568c92da3285511495a.tar.bz2 Ishtar-dd54e92885b013fca72ed568c92da3285511495a.zip |
Manage progression step (refs #3975)
Diffstat (limited to 'ishtar_common/models_imports.py')
-rw-r--r-- | ishtar_common/models_imports.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index 10124b024..cd8865eca 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -32,6 +32,7 @@ from django.conf import settings from django.contrib.gis.db import models from django.core.exceptions import SuspiciousOperation from django.core.files.base import ContentFile +from django.core.validators import validate_comma_separated_integer_list from django.db.models.base import ModelBase from django.db.models.signals import pre_delete from django.template.defaultfilters import slugify @@ -831,6 +832,12 @@ class Import(models.Model): # 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, + null=True) + imported_line_numbers = models.TextField( + _(u"Imported line numbers"), blank=True, null=True, + validators=[validate_comma_separated_integer_list] + ) class Meta: verbose_name = _(u"Import") @@ -856,6 +863,35 @@ class Import(models.Model): errors.append(row) return errors + def get_number_of_lines(self): + if self.number_of_line: + return self.number_of_line + if not self.imported_file or not self.imported_file.path: + return + filename = self.imported_file.path + with open(filename, 'r') as f: + reader = unicodecsv.reader( + f, encoding=self.encoding) + nb = sum(1 for row in reader) - self.skip_lines + self.number_of_line = nb + self.save() + return nb + + def add_imported_line(self, idx_line): + if self.imported_line_numbers and \ + idx_line in self.imported_line_numbers.split(','): + return + if self.imported_line_numbers: + self.imported_line_numbers += "," + else: + self.imported_line_numbers = "" + self.imported_line_numbers += str(idx_line) + self.save() + + def line_is_imported(self, idx_line): + return self.imported_line_numbers and \ + str(idx_line) in self.imported_line_numbers.split(',') + def get_actions(self): """ Get available action relevant with the current status |