diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-03-01 23:23:04 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-03-08 11:39:56 +0100 |
commit | 92a5278be4b7868b636d0c6b1a32993128060da5 (patch) | |
tree | 155137fba4e0500201eaf3da0cbc4bddc527aedf /ishtar_common/models_imports.py | |
parent | 430bfa8e741f6fbebc40ab9c2006d63be7be8bfd (diff) | |
download | Ishtar-92a5278be4b7868b636d0c6b1a32993128060da5.tar.bz2 Ishtar-92a5278be4b7868b636d0c6b1a32993128060da5.zip |
Importer: add a delayed import action (refs #3951)
Diffstat (limited to 'ishtar_common/models_imports.py')
-rw-r--r-- | ishtar_common/models_imports.py | 37 |
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(':', '') |