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  | 
