|
@@ -13,15 +13,25 @@ class MapRoute(object):
|
|
|
|
|
|
|
|
|
def expand_destination(route, routing_table):
|
|
|
+
|
|
|
+
|
|
|
if isinstance(route, basestring):
|
|
|
+ queue, route = route, {}
|
|
|
+ else:
|
|
|
+
|
|
|
+
|
|
|
+ queue = route.pop("queue", None)
|
|
|
+
|
|
|
+ if queue:
|
|
|
try:
|
|
|
- dest = dict(routing_table[route])
|
|
|
+ dest = dict(routing_table[queue])
|
|
|
except KeyError:
|
|
|
raise RouteNotFound(
|
|
|
"Route %s does not exist in the routing table "
|
|
|
"(CELERY_QUEUES)" % route)
|
|
|
dest.setdefault("routing_key", dest.get("binding_key"))
|
|
|
- return dest
|
|
|
+ return dict(route, **dest)
|
|
|
+
|
|
|
return route
|
|
|
|
|
|
|
|
@@ -40,6 +50,16 @@ def prepare(routes):
|
|
|
return map(expand_route, routes)
|
|
|
|
|
|
|
|
|
+def route(routes, options, routing_table, task, args=(), kwargs={}):
|
|
|
+
|
|
|
+ options = expand_destination(options, routing_table)
|
|
|
+ if routes:
|
|
|
+ route = lookup_route(routes, task, args, kwargs)
|
|
|
+
|
|
|
+ return dict(options, **expand_destination(route, routing_table))
|
|
|
+ return options
|
|
|
+
|
|
|
+
|
|
|
def firstmatcher(method):
|
|
|
"""Returns a functions that with a list of instances,
|
|
|
finds the first instance that returns a value for the given method."""
|
|
@@ -59,9 +79,9 @@ _first_route = firstmatcher("route_for_task")
|
|
|
_first_disabled = firstmatcher("disabled")
|
|
|
|
|
|
|
|
|
-def lookup_route(routes, task, task_id=None, args=None, kwargs=None):
|
|
|
- return _first_route(routes, task, task_id, args, kwargs)
|
|
|
+def lookup_route(routes, task, args=None, kwargs=None):
|
|
|
+ return _first_route(routes, task, args, kwargs)
|
|
|
|
|
|
|
|
|
-def lookup_disabled(routes, task, task_id=None, args =None, kwargs=None):
|
|
|
- return _first_disabled(routes, task, task_id, args, kwargs)
|
|
|
+def lookup_disabled(routes, task, args=None, kwargs=None):
|
|
|
+ return _first_disabled(routes, task, args, kwargs)
|