From: Christopher Allan Webber Date: Sun, 26 Jun 2011 19:45:19 +0000 (-0500) Subject: Celery wasn't really being properly connected during tests. X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=9ea5c28b7a3bb74cebd923353b9e4c780e658d74;p=mediagoblin.git Celery wasn't really being properly connected during tests. Lots of fixes to do this. - setup_celery_from_config no longer responsible for checking 'celery_setup_elsewhere'; that's the app's job. (This was a problem because more than the app was relying on using this function) - Allow us to specifically set the config file we're setting up celery from with setup_self - Set up celery_always_eager. This is something we strongly want while doing tests. - Instead of setting up the app in the get_test_app method, let's set that up simply by importing from_tests, which should itself up via from_celery being the environment variable being set. --- diff --git a/mediagoblin/celery_setup/__init__.py b/mediagoblin/celery_setup/__init__.py index b6e35e99..e35dbce2 100644 --- a/mediagoblin/celery_setup/__init__.py +++ b/mediagoblin/celery_setup/__init__.py @@ -40,10 +40,6 @@ def setup_celery_from_config(app_config, global_config, - set_environ: if set, this will CELERY_CONFIG_MODULE to the settings_module """ - if app_config.get('celery_setup_elsewhere') == True: - # Don't setup celery based on our config file. - return - if global_config.has_key('celery'): celery_conf = global_config['celery'] else: diff --git a/mediagoblin/celery_setup/from_celery.py b/mediagoblin/celery_setup/from_celery.py index 046aaa50..ed0a409e 100644 --- a/mediagoblin/celery_setup/from_celery.py +++ b/mediagoblin/celery_setup/from_celery.py @@ -23,7 +23,8 @@ from mediagoblin.celery_setup import setup_celery_from_config OUR_MODULENAME = __name__ -def setup_self(check_environ_for_conf=True, module_name=OUR_MODULENAME): +def setup_self(check_environ_for_conf=True, module_name=OUR_MODULENAME, + default_conf_file='mediagoblin.ini'): """ Transform this module into a celery config module by reading the mediagoblin config file. Set the environment variable @@ -36,9 +37,9 @@ def setup_self(check_environ_for_conf=True, module_name=OUR_MODULENAME): """ if check_environ_for_conf: mgoblin_conf_file = os.path.abspath( - os.environ.get('MEDIAGOBLIN_CONFIG', 'mediagoblin.ini')) + os.environ.get('MEDIAGOBLIN_CONFIG', default_conf_file)) else: - mgoblin_conf_file = 'mediagoblin.ini' + mgoblin_conf_file = default_conf_file if not os.path.exists(mgoblin_conf_file): raise IOError( @@ -48,6 +49,7 @@ def setup_self(check_environ_for_conf=True, module_name=OUR_MODULENAME): # this is the module that gets set up. os.environ['CELERY_CONFIG_MODULE'] = module_name app.MediaGoblinApp(mgoblin_conf_file, setup_celery=False) + setup_celery_from_config( mg_globals.app_config, mg_globals.global_config, settings_module=module_name, diff --git a/mediagoblin/celery_setup/from_tests.py b/mediagoblin/celery_setup/from_tests.py index 43032f41..0f305df2 100644 --- a/mediagoblin/celery_setup/from_tests.py +++ b/mediagoblin/celery_setup/from_tests.py @@ -16,11 +16,15 @@ import os +from mediagoblin.tests.tools import TEST_APP_CONFIG from mediagoblin.celery_setup.from_celery import setup_self OUR_MODULENAME = __name__ +CELERY_SETUP = False if os.environ.get('CELERY_CONFIG_MODULE') == OUR_MODULENAME: - setup_self(check_environ_for_conf=False, module_name=OUR_MODULENAME) + setup_self(check_environ_for_conf=False, module_name=OUR_MODULENAME, + default_conf_file=TEST_APP_CONFIG) + CELERY_SETUP = True diff --git a/mediagoblin/tests/test_mgoblin_app.ini b/mediagoblin/tests/test_mgoblin_app.ini index 94eafb5a..e022d47b 100644 --- a/mediagoblin/tests/test_mgoblin_app.ini +++ b/mediagoblin/tests/test_mgoblin_app.ini @@ -7,6 +7,9 @@ email_sender_address = "notice@mediagoblin.example.org" email_debug_mode = true db_name = __mediagoblin_tests__ -# Celery shouldn't be set up by the paste app factory as it's set up -# elsewhere +# Celery shouldn't be set up by the application as it's setup via +# mediagoblin.celery_setup.from_celery celery_setup_elsewhere = true + +[celery] +celery_always_eager = true diff --git a/mediagoblin/tests/tools.py b/mediagoblin/tests/tools.py index ebb5f1b5..64f773f0 100644 --- a/mediagoblin/tests/tools.py +++ b/mediagoblin/tests/tools.py @@ -21,9 +21,8 @@ import os, shutil from paste.deploy import loadapp from webtest import TestApp -from mediagoblin import util, mg_globals +from mediagoblin import util from mediagoblin.config import read_mediagoblin_config -from mediagoblin.celery_setup import setup_celery_from_config from mediagoblin.decorators import _make_safe from mediagoblin.db.open import setup_connection_and_db_from_config @@ -36,7 +35,6 @@ TEST_APP_CONFIG = pkg_resources.resource_filename( TEST_USER_DEV = pkg_resources.resource_filename( 'mediagoblin.tests', 'test_user_dev') MGOBLIN_APP = None -CELERY_SETUP = False USER_DEV_DIRECTORIES_TO_SETUP = [ 'media/public', 'media/queue', @@ -60,8 +58,10 @@ def suicide_if_bad_celery_environ(): def get_test_app(dump_old_app=True): suicide_if_bad_celery_environ() + # Leave this imported as it sets up celery. + from mediagoblin.celery_setup import from_tests + global MGOBLIN_APP - global CELERY_SETUP # Just return the old app if that exists and it's okay to set up # and return @@ -103,13 +103,6 @@ def get_test_app(dump_old_app=True): app = TestApp(test_app) MGOBLIN_APP = app - # setup celery - if not CELERY_SETUP: - setup_celery_from_config( - mg_globals.app_config, mg_globals.global_config, - set_environ=True) - CELERY_SETUP = True - return app