Merge remote-tracking branch 'refs/remotes/tryggvib/532-exif-creation-date'
[mediagoblin.git] / mediagoblin / init / celery / __init__.py
index f7ef9f3972344f5dc4a4bb02e31f3b1559603066..169cc93595901567237673fac4054463cb9d311d 100644 (file)
@@ -1,5 +1,5 @@
 # GNU MediaGoblin -- federated, autonomous media hosting
-# Copyright (C) 2011 MediaGoblin contributors.  See AUTHORS.
+# Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Affero General Public License as published by
 import os
 import sys
 
+from celery import Celery
+from mediagoblin.tools.pluginapi import hook_runall
 
-MANDATORY_CELERY_IMPORTS = ['mediagoblin.process_media']
+
+MANDATORY_CELERY_IMPORTS = ['mediagoblin.processing.task']
 
 DEFAULT_SETTINGS_MODULE = 'mediagoblin.init.celery.dummy_settings_module'
 
 
-def setup_celery_from_config(app_config, global_config,
-                             settings_module=DEFAULT_SETTINGS_MODULE,
-                             force_celery_always_eager=False,
-                             set_environ=True):
+def get_celery_settings_dict(app_config, global_config,
+                             force_celery_always_eager=False):
     """
-    Take a mediagoblin app config and try to set up a celery settings
-    module from this.
-
-    Args:
-    - app_config: the application config section
-    - global_config: the entire ConfigObj loaded config, all sections
-    - settings_module: the module to populate, as a string
-    - force_celery_always_eager: whether or not to force celery into
-      always eager mode; good for development and small installs
-    - set_environ: if set, this will CELERY_CONFIG_MODULE to the
-      settings_module
+    Get a celery settings dictionary from reading the config
     """
     if 'celery' in global_config:
         celery_conf = global_config['celery']
@@ -47,30 +38,12 @@ def setup_celery_from_config(app_config, global_config,
 
     celery_settings = {}
 
-    # set up mongodb stuff
-    celery_settings['CELERY_RESULT_BACKEND'] = 'mongodb'
-    if 'BROKER_BACKEND' not in celery_settings:
-        celery_settings['BROKER_BACKEND'] = 'mongodb'
-
-    celery_mongo_settings = {}
-
-    if 'db_host' in app_config:
-        celery_mongo_settings['host'] = app_config['db_host']
-        if celery_settings['BROKER_BACKEND'] == 'mongodb':
-            celery_settings['BROKER_HOST'] = app_config['db_host']
-    if 'db_port' in app_config:
-        celery_mongo_settings['port'] = app_config['db_port']
-        if celery_settings['BROKER_BACKEND'] == 'mongodb':
-            celery_settings['BROKER_PORT'] = app_config['db_port']
-    celery_mongo_settings['database'] = app_config['db_name']
-
-    celery_settings['CELERY_MONGODB_BACKEND_SETTINGS'] = celery_mongo_settings
-
-    # Add anything else
+    # Add all celery settings from config
     for key, value in celery_conf.iteritems():
-        key = key.upper()
         celery_settings[key] = value
 
+    # TODO: use default result stuff here if it exists
+
     # add mandatory celery imports
     celery_imports = celery_settings.setdefault('CELERY_IMPORTS', [])
     celery_imports.extend(MANDATORY_CELERY_IMPORTS)
@@ -79,6 +52,43 @@ def setup_celery_from_config(app_config, global_config,
         celery_settings['CELERY_ALWAYS_EAGER'] = True
         celery_settings['CELERY_EAGER_PROPAGATES_EXCEPTIONS'] = True
 
+    return celery_settings
+
+
+def setup_celery_app(app_config, global_config,
+                     settings_module=DEFAULT_SETTINGS_MODULE,
+                     force_celery_always_eager=False):
+    """
+    Setup celery without using terrible setup-celery-module hacks.
+    """
+    celery_settings = get_celery_settings_dict(
+        app_config, global_config, force_celery_always_eager)
+    celery_app = Celery()
+    celery_app.config_from_object(celery_settings)
+
+    hook_runall('celery_setup', celery_app)
+
+
+def setup_celery_from_config(app_config, global_config,
+                             settings_module=DEFAULT_SETTINGS_MODULE,
+                             force_celery_always_eager=False,
+                             set_environ=True):
+    """
+    Take a mediagoblin app config and try to set up a celery settings
+    module from this.
+
+    Args:
+    - app_config: the application config section
+    - global_config: the entire ConfigObj loaded config, all sections
+    - settings_module: the module to populate, as a string
+    - force_celery_always_eager: whether or not to force celery into
+      always eager mode; good for development and small installs
+    - set_environ: if set, this will CELERY_CONFIG_MODULE to the
+      settings_module
+    """
+    celery_settings = get_celery_settings_dict(
+        app_config, global_config, force_celery_always_eager)
+
     __import__(settings_module)
     this_module = sys.modules[settings_module]