##// END OF EJS Templates
dirty fix for issue #87
dirty fix for issue #87

File last commit:

r783:71113f64 beta
r825:81ca8a76 beta
Show More
__init__.py
106 lines | 2.9 KiB | text/x-python | PythonLexer
fidex corrent variables passed to dnconfig,...
r783 # -*- coding: utf-8 -*-
"""
package.rhodecode.lib.celerylib.__init__
~~~~~~~~~~~~~~
celery libs for RhodeCode
:created_on: Nov 27, 2010
:author: marcink
:copyright: (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
:license: GPLv3, see COPYING for more details.
"""
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2
# of the License or (at your opinion) any later version of the license.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
Celery is configured by the .ini files and run from paster now...
r776 import os
import sys
import socket
import traceback
import logging
fidex corrent variables passed to dnconfig,...
r783 from hashlib import md5
from decorator import decorator
renamed project to rhodecode
r547 from vcs.utils.lazy import LazyProperty
fidex corrent variables passed to dnconfig,...
r783
from rhodecode.lib.pidlock import DaemonLock, LockHeld
Celery is configured by the .ini files and run from paster now...
r776 from pylons import config
renamed project to rhodecode
r547 log = logging.getLogger(__name__)
Celery is configured by the .ini files and run from paster now...
r776 def str2bool(v):
return v.lower() in ["yes", "true", "t", "1"] if v else None
fidex corrent variables passed to dnconfig,...
r783 try:
CELERY_ON = str2bool(config['app_conf'].get('use_celery'))
except KeyError:
CELERY_ON = False
Celery is configured by the .ini files and run from paster now...
r776
renamed project to rhodecode
r547 class ResultWrapper(object):
def __init__(self, task):
self.task = task
Celery is configured by the .ini files and run from paster now...
r776
renamed project to rhodecode
r547 @LazyProperty
def result(self):
return self.task
def run_task(task, *args, **kwargs):
Celery is configured by the .ini files and run from paster now...
r776 if CELERY_ON:
try:
t = task.delay(*args, **kwargs)
log.info('running task %s:%s', t.task_id, task)
return t
except socket.error, e:
if e.errno == 111:
log.debug('Unable to connect to celeryd. Sync execution')
else:
log.error(traceback.format_exc())
except KeyError, e:
log.debug('Unable to connect to celeryd. Sync execution')
except Exception, e:
log.error(traceback.format_exc())
log.debug('executing task %s in sync mode', task)
more error catching on celery run_task
r558 return ResultWrapper(task(*args, **kwargs))
renamed project to rhodecode
r547
def locked_task(func):
def __wrapper(func, *fargs, **fkwargs):
params = list(fargs)
params.extend(['%s-%s' % ar for ar in fkwargs.items()])
Celery is configured by the .ini files and run from paster now...
r776
renamed project to rhodecode
r547 lockkey = 'task_%s' % \
md5(str(func.__name__) + '-' + \
'-'.join(map(str, params))).hexdigest()
log.info('running task with lockkey %s', lockkey)
try:
l = DaemonLock(lockkey)
ret = func(*fargs, **fkwargs)
l.release()
return ret
except LockHeld:
log.info('LockHeld')
Celery is configured by the .ini files and run from paster now...
r776 return 'Task with key %s already running' % lockkey
renamed project to rhodecode
r547
Celery is configured by the .ini files and run from paster now...
r776 return decorator(__wrapper, func)
renamed project to rhodecode
r547
Celery is configured by the .ini files and run from paster now...
r776