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.py37
1 files changed, 34 insertions, 3 deletions
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py
index f94bc6dc0..4436d4c52 100644
--- a/ishtar_common/models_imports.py
+++ b/ishtar_common/models_imports.py
@@ -17,6 +17,7 @@
# See the file COPYING for details.
+from background_task import background
import csv
import datetime
from importlib import import_module
@@ -39,7 +40,7 @@ from django.utils.functional import cached_property
from django.utils.translation import ugettext_lazy as _, pgettext_lazy
from ishtar_common.utils import create_slug, \
- get_all_related_m2m_objects_with_model
+ get_all_related_m2m_objects_with_model, put_session_message
from ishtar_common.data_importer import Importer, ImportFormater, \
IntegerFormater, FloatFormater, UnicodeFormater, DateFormater, \
TypeFormater, YearFormater, StrToBoolean, FileFormater, InseeFormater
@@ -756,6 +757,7 @@ IMPORT_STATE = (("C", _(u"Created")),
("AP", _(u"Analyse in progress")),
("A", _(u"Analysed")),
("P", _(u"Import pending")),
+ ("IQ", _(u"Import in queue")),
("IP", _(u"Import in progress")),
("FE", _(u"Finished with errors")),
("F", _(u"Finished")),
@@ -768,6 +770,15 @@ ENCODINGS = [(settings.ENCODING, settings.ENCODING),
('utf-8', 'utf-8')]
+@background(schedule=1)
+def delayed_import(import_pk, session_key):
+ try:
+ imp = Import.objects.get(pk=import_pk)
+ except Import.DoesNotExist:
+ pass
+ imp.importation(session_key=session_key)
+
+
class Import(models.Model):
user = models.ForeignKey('IshtarUser', blank=True, null=True,
on_delete=models.SET_NULL)
@@ -843,9 +854,11 @@ class Import(models.Model):
if self.state == 'A':
actions.append(('A', _(u"Re-analyse")))
actions.append(('I', _(u"Launch import")))
+ actions.append(('ID', _(u"Launch import as background task")))
if self.state in ('F', 'FE'):
actions.append(('A', _(u"Re-analyse")))
actions.append(('I', _(u"Re-import")))
+ actions.append(('ID', _(u"Re-import as background task")))
actions.append(('AC', _(u"Archive")))
if self.state == 'AC':
actions.append(('A', _(u"Unarchive")))
@@ -910,11 +923,29 @@ class Import(models.Model):
self.state = 'A'
self.save()
- def importation(self):
+ def delayed_importation(self, session_key):
+ put_session_message(session_key,
+ unicode(_(u"Import added to the queue")),
+ "warning")
+ self.state = 'IQ'
+ self.save()
+ return delayed_import(self.pk, session_key)
+
+ def importation(self, session_key=None):
self.state = 'IP'
self.save()
importer = self.get_importer_instance()
- importer.importation(self.data_table, user=self.user)
+ try:
+ importer.importation(self.data_table, user=self.user)
+ except IOError:
+ if session_key:
+ put_session_message(
+ session_key, unicode(_(u"Error on imported file")),
+ "warning"
+ )
+ self.state = 'FE'
+ self.save()
+ return
# result file
filename = slugify(self.importer_type.name)
now = datetime.datetime.now().isoformat('-').replace(':', '')