summaryrefslogtreecommitdiff
path: root/ishtar_common/models_imports.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models_imports.py')
-rw-r--r--ishtar_common/models_imports.py36
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