diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-03-29 16:55:17 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-03-29 16:55:17 +0200 |
commit | 953310b7e18bdb012dae2fcc0184bc63f1c30c0c (patch) | |
tree | 98c7b6d2460060dd1a2a71c3b303e221d4fa258c /chimere/tasks.py | |
parent | a46efae7bf7a9a0f8a2ccaffdfe0d18ffcb2a0d2 (diff) | |
download | Chimère-953310b7e18bdb012dae2fcc0184bc63f1c30c0c.tar.bz2 Chimère-953310b7e18bdb012dae2fcc0184bc63f1c30c0c.zip |
Work on OSM export - simplify KML import
Diffstat (limited to 'chimere/tasks.py')
-rw-r--r-- | chimere/tasks.py | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/chimere/tasks.py b/chimere/tasks.py index ba88304..58af162 100644 --- a/chimere/tasks.py +++ b/chimere/tasks.py @@ -24,12 +24,33 @@ from django.utils.translation import ugettext_lazy as _ from chimere.models import Importer -IMPORT_MESSAGES = {'import_pending':[_(u"Import pending")], +def single_instance_task(timeout): + def task_exc(func): + def wrapper(*args, **kwargs): + lock_id = "celery-single-instance-" + func.__name__ + acquire_lock = lambda: cache.add(lock_id, "true", timeout) + release_lock = lambda: cache.delete(lock_id) + if acquire_lock(): + try: + func() + finally: + release_lock() + return wrapper + return task_exc + +IMPORT_MESSAGES = { + 'import_pending':[_(u"Import pending")], 'import_process':[_(u"Import processing")], 'import_done':[_(u"Import successfuly done"), _(u" %(new)d new item(s), %(updated)d updated item(s)")], 'import_failed':[_(u"Import failed"), "%s"], - 'import_cancel':[_(u"Import canceled")] + 'import_cancel':[_(u"Import canceled")], + 'export_pending':[_(u"Export pending")], + 'export_process':[_(u"Export processing")], + 'export_done':[_(u"Export successfuly done"), + _(u" %(updated)d updated item(s)")], + 'export_failed':[_(u"Export failed"), "%s"], + 'export_cancel':[_(u"Export canceled")] } @task() @@ -55,3 +76,27 @@ def importing(importer_pk): 'updated':updated_item} importer.save() return True + +@task() +@single_instance_task(60*10) +def exporting(importer_pk): + try: + importer = Importer.objects.get(pk=importer_pk) + except ObjectDoesNotExist: + # importer doesn't exists anymore: too late! + return + if importer.state != IMPORT_MESSAGES['export_pending'][0]: + # import canceled or done + return + importer.state = unicode(IMPORT_MESSAGES['export_process'][0]) + importer.save() + updated_item, error = importer.manager.put() + if error: + importer.state = unicode(IMPORT_MESSAGES['export_failed'][0]) \ + + u" - " + unicode(IMPORT_MESSAGES['export_failed'][1]) % error + importer.save() + return + importer.state = unicode(IMPORT_MESSAGES['export_done'][0]) + u" - " \ + + unicode(IMPORT_MESSAGES['export_done'][1]) % {'updated':updated_item} + importer.save() + return True |