Files @ df5a67678b96
Branch filter:

Location: kallithea/kallithea/lib/paster_commands/celeryd.py

mads
celeryd: let the gearbox command use db session as most other gearbox commands do

304aae43194c changed the common gearbox wrapper so make_app_without_logging
only was run for commands tagged as requires_db_session. That broke celeryd -
even a plain 'gearbox celeryd -c my.ini' would fail on the safety check in
celerypylons asserting on tg.config having 'celery.imports' configuration.

The gearbox celeryd command did not really require a db session - it just
required app configuration so it could create db sessions on the fly.

To to get the missing make_app_without_logging invocation back, set
requires_db_session (the default for our gearbox commands).

requires_db_session not only calls make_app_without_logging (which undo the
effect from 304aae43194c), it also calls setup_cache_regions,
engine_from_config, and init_model. These were also invoked explicitly in
celeryd code - these double invocations are dropped too.

Also, make_app_without_logging will call into tg and thus invoke the
setup_configuration hook which will set kallithea.CELERY_ON and call
load_rcextensions. The celeryd code for doing that is thus dropped.
# -*- coding: utf-8 -*-

import argparse

import kallithea
from kallithea.lib.paster_commands.common import BasePasterCommand
from kallithea.lib.utils2 import str2bool

__all__ = ['Command']


class Command(BasePasterCommand):
    """Kallithea: Celery worker for asynchronous tasks"""

    # Starts the celery worker using configuration from a paste.deploy
    # configuration file.

    def take_action(self, args):
        if not kallithea.CELERY_ON:
            raise Exception('Please set use_celery = true in .ini config '
                            'file before running celeryd')

        from kallithea.lib import celerypylons
        cmd = celerypylons.worker.worker(celerypylons.app.app_or_default())

        celery_args = args.celery_args
        if '--' in celery_args:
            celery_args.remove('--')

        return cmd.run_from_argv('kallithea celery worker', celery_args)

    def get_parser(self, prog_name):
        parser = super(Command, self).get_parser(prog_name)

        parser.add_argument('celery_args', nargs=argparse.REMAINDER,
            help="Pass extra options to Celery after a '--' separator",
            )

        return parser