##// END OF EJS Templates
requires file update
requires file update

File last commit:

r1937:afe8cfa3 default
r1968:b6b611e7 rhodecode-0.0.1.2.5 default
Show More
__init__.py
133 lines | 3.8 KiB | text/x-python | PythonLexer
fidex corrent variables passed to dnconfig,...
r783 # -*- coding: utf-8 -*-
"""
code docs, updates
r903 rhodecode.lib.celerylib.__init__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fidex corrent variables passed to dnconfig,...
r783
celery libs for RhodeCode
source code cleanup: remove trailing white space, normalize file endings
r1203
fidex corrent variables passed to dnconfig,...
r783 :created_on: Nov 27, 2010
:author: marcink
backported #340 session cleanup for celery tasks
r1937 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
fidex corrent variables passed to dnconfig,...
r783 :license: GPLv3, see COPYING for more details.
"""
fixed license issue #149
r1206 # 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.
source code cleanup: remove trailing white space, normalize file endings
r1203 #
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.
source code cleanup: remove trailing white space, normalize file endings
r1203 #
fidex corrent variables passed to dnconfig,...
r783 # You should have received a copy of the GNU General Public License
fixed license issue #149
r1206 # 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
fixes issue #197 Relative paths for pidlocks
r1354 from os.path import dirname as dn, join as jn
backported #340 session cleanup for celery tasks
r1937 from pylons import config
Celery is configured by the .ini files and run from paster now...
r776
fidex corrent variables passed to dnconfig,...
r783 from hashlib import md5
from decorator import decorator
fixes for vcs 0.2.0and new slicing methods
r1082
renamed project to rhodecode
r547 from vcs.utils.lazy import LazyProperty
fidex corrent variables passed to dnconfig,...
r783
Fixed problems with unicode cache keys in celery
r1641 from rhodecode.lib import str2bool, safe_str
fidex corrent variables passed to dnconfig,...
r783 from rhodecode.lib.pidlock import DaemonLock, LockHeld
backported #340 session cleanup for celery tasks
r1937 from rhodecode.model import init_model
from rhodecode.model import meta
from rhodecode.model.db import Statistics, Repository, User
from sqlalchemy import engine_from_config
fidex corrent variables passed to dnconfig,...
r783
Another better solution for establishing connection with messaging broker in celery....
r1003 from celery.messaging import establish_connection
fixes for vcs 0.2.0and new slicing methods
r1082
renamed project to rhodecode
r547 log = logging.getLogger(__name__)
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
moved locking of commit stats into the task itself to remove race conditions when lock was not removed before starting another task.
r1264
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
moved locking of commit stats into the task itself to remove race conditions when lock was not removed before starting another task.
r1264
renamed project to rhodecode
r547 def run_task(task, *args, **kwargs):
Celery is configured by the .ini files and run from paster now...
r776 if CELERY_ON:
try:
fixed celery issues, default loader was not set as PylonsLoader
r1004 t = task.apply_async(args=args, kwargs=kwargs)
Celery is configured by the .ini files and run from paster now...
r776 log.info('running task %s:%s', t.task_id, task)
return t
moved locking of commit stats into the task itself to remove race conditions when lock was not removed before starting another task.
r1264
Celery is configured by the .ini files and run from paster now...
r776 except socket.error, e:
fixed Python2.5 socket error
r1414 if isinstance(e, IOError) and e.errno == 111:
Celery is configured by the .ini files and run from paster now...
r776 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
moved locking of commit stats into the task itself to remove race conditions when lock was not removed before starting another task.
r1264 def __get_lockkey(func, *fargs, **fkwargs):
params = list(fargs)
params.extend(['%s-%s' % ar for ar in fkwargs.items()])
func_name = str(func.__name__) if hasattr(func, '__name__') else str(func)
fixes issue #197 Relative paths for pidlocks
r1354 lockkey = 'task_%s.lock' % \
Fixed problems with unicode cache keys in celery
r1641 md5(func_name + '-' + '-'.join(map(safe_str, params))).hexdigest()
moved locking of commit stats into the task itself to remove race conditions when lock was not removed before starting another task.
r1264 return lockkey
renamed project to rhodecode
r547 def locked_task(func):
def __wrapper(func, *fargs, **fkwargs):
moved locking of commit stats into the task itself to remove race conditions when lock was not removed before starting another task.
r1264 lockkey = __get_lockkey(func, *fargs, **fkwargs)
fixes #258 RhodeCode 1.2 assumes egg folder is writable
r1540 lockkey_path = config['here']
fixes issue #197 Relative paths for pidlocks
r1354
renamed project to rhodecode
r547 log.info('running task with lockkey %s', lockkey)
try:
fixes #258 RhodeCode 1.2 assumes egg folder is writable
r1540 l = DaemonLock(file_=jn(lockkey_path, lockkey))
renamed project to rhodecode
r547 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)
backported #340 session cleanup for celery tasks
r1937
def get_session():
if CELERY_ON:
engine = engine_from_config(config, 'sqlalchemy.db1.')
init_model(engine)
sa = meta.Session
return sa
def dbsession(func):
def __wrapper(func, *fargs, **fkwargs):
try:
ret = func(*fargs, **fkwargs)
return ret
finally:
if CELERY_ON:
meta.Session.remove()
return decorator(__wrapper, func)