Browse Source

Now supports using broker URLs, with the -b option (all programs) or CELERY_BROKER_URL

Ask Solem 13 years ago
parent
commit
bb0ec919ba
3 changed files with 29 additions and 4 deletions
  1. 4 0
      celery/app/base.py
  2. 2 0
      celery/app/defaults.py
  3. 23 4
      celery/bin/base.py

+ 4 - 0
celery/app/base.py

@@ -120,6 +120,10 @@ class Settings(datastructures.ConfigurationView):
         """Deprecated compat alias to :attr:`BROKER_TRANSPORT`."""
         return self.BROKER_TRANSPORT
 
+    @property
+    def BROKER_HOST(self):
+        return self.get("BROKER_URL") or self.get("BROKER_HOST")
+
 
 class BaseApp(object):
     """Base class for apps."""

+ 2 - 0
celery/app/defaults.py

@@ -1,3 +1,4 @@
+import os
 import sys
 
 from datetime import timedelta
@@ -45,6 +46,7 @@ class Option(object):
 
 NAMESPACES = {
     "BROKER": {
+        "URL": Option(os.environ.get("CELERY_BROKER_URL"), type="string"),
         "HOST": Option(None, type="string"),
         "PORT": Option(type="int"),
         "USER": Option(None, type="string"),

+ 23 - 4
celery/bin/base.py

@@ -13,6 +13,7 @@ class Command(object):
     :keyword get_app: Callable returning the current app if no app provided.
 
     """
+    _default_broker_url = r'amqp://guest:guest@localhost:5672//'
     #: Arg list used in help.
     args = ''
 
@@ -31,6 +32,10 @@ class Command(object):
             Option("--app",
                     default=None, action="store", dest="app",
                     help="Name of the app instance to use. "),
+            Option("-b", "--broker",
+                    default=None, action="store", dest="broker",
+                    help="Broker URL.  Default is %s" % (
+                            _default_broker_url, )),
             Option("--loader",
                    default=None, action="store", dest="loader",
                    help="Name of the loader class to use. "
@@ -125,6 +130,9 @@ class Command(object):
         loader = (preload_options.pop("loader", None) or
                   os.environ.get("CELERY_LOADER") or
                   "default")
+        broker = preload_options.pop("broker", None)
+        if broker:
+            os.environ["CELERY_BROKER_URL"] = broker
         config_module = preload_options.pop("config_module", None)
         if config_module:
             os.environ["CELERY_CONFIG_MODULE"] = config_module
@@ -151,14 +159,25 @@ class Command(object):
 
     def parse_preload_options(self, args):
         acc = {}
-        preload_options = dict((opt._long_opts[0], opt.dest)
-                                for opt in self.preload_options)
-        for arg in args:
+        opts = {}
+        for opt in self.preload_options:
+            for t in (opt._long_opts, opt._short_opts):
+                opts.update(dict(zip(t, [opt.dest] * len(t))))
+        index = 0
+        length = len(args)
+        while index < length:
+            arg = args[index]
             if arg.startswith('--') and '=' in arg:
                 key, value = arg.split('=', 1)
-                dest = preload_options.get(key)
+                dest = opts.get(key)
                 if dest:
                     acc[dest] = value
+            elif arg.startswith('-'):
+                dest = opts.get(arg)
+                if dest:
+                    acc[dest] = args[index + 1]
+                    index += 1
+            index += 1
         return acc
 
     def _get_default_app(self, *args, **kwargs):