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(':', '') | 
