##// END OF EJS Templates
fixes for issue #149
fixes for issue #149

File last commit:

r1217:a3b2b4b4 default
r1217:a3b2b4b4 default
Show More
__init__.py
104 lines | 2.8 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.
"""
fixes for issue #149
r1217 # 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, either version 3 of the License, or
# (at your option) any later version.
#
fidex corrent variables passed to dnconfig,...
r783 # 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.
fixes for issue #149
r1217 #
fidex corrent variables passed to dnconfig,...
r783 # You should have received a copy of the GNU General Public License
fixes for issue #149
r1217 # along with this program. If not, see <http://www.gnu.org/licenses/>.
fidex corrent variables passed to dnconfig,...
r783
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