summaryrefslogtreecommitdiff
path: root/chimere/tasks.py
diff options
context:
space:
mode:
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
commit953310b7e18bdb012dae2fcc0184bc63f1c30c0c (patch)
tree98c7b6d2460060dd1a2a71c3b303e221d4fa258c /chimere/tasks.py
parenta46efae7bf7a9a0f8a2ccaffdfe0d18ffcb2a0d2 (diff)
downloadChimè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.py49
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