diff --git a/pylons_app/lib/celerylib/__init__.py b/pylons_app/lib/celerylib/__init__.py --- a/pylons_app/lib/celerylib/__init__.py +++ b/pylons_app/lib/celerylib/__init__.py @@ -31,21 +31,14 @@ def run_task(task, *args, **kwargs): 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 @@ class LockTask(object): log.info('LockHeld') return 'Task with key %s already running' % lockkey - + return decorator(__wrapper, func) diff --git a/pylons_app/lib/celerylib/tasks.py b/pylons_app/lib/celerylib/tasks.py --- a/pylons_app/lib/celerylib/tasks.py +++ b/pylons_app/lib/celerylib/tasks.py @@ -2,7 +2,7 @@ from celery.decorators import task from celery.task.sets import subtask from celeryconfig import PYLONS_CONFIG as config from pylons.i18n.translation import _ -from pylons_app.lib.celerylib import run_task, LockTask +from pylons_app.lib.celerylib import run_task, locked_task from pylons_app.lib.helpers import person from pylons_app.lib.smtp_mailer import SmtpMailer from pylons_app.lib.utils import OrderedDict @@ -82,7 +82,7 @@ def whoosh_index(repo_location, full_ind @task -@LockTask('get_commits_stats') +@locked_task def get_commits_stats(repo_name, ts_min_y, ts_max_y): author_key_cleaner = lambda k: person(k).replace('"', "") #for js data compatibilty