diff pylons_app/lib/celerylib/__init__.py @ 547:ac32a026c306

simplified task locking, and fixed some bugs for keyworded arguments
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 23 Sep 2010 21:25:30 +0200
parents fb0c3af6031b
children d5efb83590ef
line wrap: on
line diff
--- a/pylons_app/lib/celerylib/__init__.py	Thu Sep 23 02:55:43 2010 +0200
+++ b/pylons_app/lib/celerylib/__init__.py	Thu Sep 23 21:25:30 2010 +0200
@@ -31,21 +31,14 @@
         return ResultWrapper(task(*args, **kwargs))
 
 
-class LockTask(object):
-    """LockTask decorator"""
-    
-    def __init__(self, func):
-        self.func = func
-        
-    def __call__(self, func):
-        return decorator(self.__wrapper, func)
-    
-    def __wrapper(self, func, *fargs, **fkwargs):
-        params = []
-        params.extend(fargs)
-        params.extend(fkwargs.values())
+def locked_task(func):
+    def __wrapper(func, *fargs, **fkwargs):
+        params = list(fargs)
+        params.extend(['%s-%s' % ar for ar in fkwargs.items()])
+            
         lockkey = 'task_%s' % \
-           md5(str(self.func) + '-' + '-'.join(map(str, params))).hexdigest()
+            md5(str(func.__name__) + '-' + \
+                '-'.join(map(str, params))).hexdigest()
         log.info('running task with lockkey %s', lockkey)
         try:
             l = DaemonLock(lockkey)
@@ -55,7 +48,7 @@
             log.info('LockHeld')
             return 'Task with key %s already running' % lockkey   
 
-            
+    return decorator(__wrapper, func)