Changeset - 193138922d56
[Not reviewed]
default
0 2 0
Mads Kiilerich - 6 years ago 2020-01-25 20:18:59
mads@kiilerich.com
Grafted from: 614f8bed60e9
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 <module>
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.
2 files changed with 6 insertions and 3 deletions:
0 comments (0 inline, 0 general)
kallithea/bin/kallithea_cli_celery.py
Show inline comments
 
@@ -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))
kallithea/lib/celerypylons/__init__.py
Show inline comments
 
@@ -53,6 +53,8 @@ def celery_config(config):
 
    return celery_config
 

	
 

	
 
# Create celery app from the TurboGears configuration file
 
def make_app():
 
    """Create celery app from the TurboGears configuration file"""
 
app = celery.Celery()
 
app.config_from_object(celery_config(tg.config))
 
    return app
0 comments (0 inline, 0 general)