# HG changeset patch # User Mads Kiilerich # Date 2020-01-25 20:18:59 # Node ID 193138922d5604a667a7bb1d7bc5ddeea30af9bb # Parent 2786730e56e0acaf6424a9c94e343cc551604c23 celery: introduce make_app instead of creating app at import time It is dirty to instantiate things at import time (unless it really is basic singletons). In 0.5.1 (and earlier), such dirtyness made partial test execution fail when other things had global side effects and things didn't use the usual import order: $ py.test kallithea/lib/ collecting ... ――― kallithea/lib/celerypylons/__init__.py ――― kallithea/lib/celerypylons/__init__.py:58: in app.config_from_object(celery_config(tg.config)) kallithea/lib/celerypylons/__init__.py:28: in celery_config assert config['celery.imports'] == 'kallithea.lib.celerylib.tasks', 'Kallithea Celery configuration has not been loaded' data/env/lib/python2.7/site-packages/tg/configuration/tgconfig.py:31: in __getitem__ return self.config_proxy.current_conf()[key] E KeyError: 'celery.imports' Avoid that by running a "factory" function when the celery app actually is needed. diff --git a/kallithea/bin/kallithea_cli_celery.py b/kallithea/bin/kallithea_cli_celery.py --- a/kallithea/bin/kallithea_cli_celery.py +++ b/kallithea/bin/kallithea_cli_celery.py @@ -16,6 +16,7 @@ import click import kallithea import kallithea.bin.kallithea_cli_base as cli_base +from kallithea.lib import celerypylons @cli_base.register_command(config_file_initialize_app=True) @@ -35,6 +36,6 @@ def celery_run(celery_args): raise Exception('Please set use_celery = true in .ini config ' 'file before running this command') - from kallithea.lib import celerypylons - cmd = celerypylons.worker.worker(celerypylons.app) + app = celerypylons.make_app() + cmd = celerypylons.worker.worker(app) return cmd.run_from_argv(None, command='celery-run -c CONFIG_FILE --', argv=list(celery_args)) diff --git a/kallithea/lib/celerypylons/__init__.py b/kallithea/lib/celerypylons/__init__.py --- a/kallithea/lib/celerypylons/__init__.py +++ b/kallithea/lib/celerypylons/__init__.py @@ -53,6 +53,8 @@ def celery_config(config): return celery_config -# Create celery app from the TurboGears configuration file -app = celery.Celery() -app.config_from_object(celery_config(tg.config)) +def make_app(): + """Create celery app from the TurboGears configuration file""" + app = celery.Celery() + app.config_from_object(celery_config(tg.config)) + return app