Exemplo n.º 1
0
 def route(self, options, task, args=(), kwargs={}):
     options = self.expand_destination(options)  # expands 'queue'
     if self.routes:
         route = self.lookup_route(task, args, kwargs)
         if route:  # expands 'queue' in route.
             return lpmerge(self.expand_destination(route), options)
     if "queue" not in options:
         options = lpmerge(self.expand_destination(self.app.conf.CELERY_DEFAULT_QUEUE), options)
     return options
Exemplo n.º 2
0
 def route(self, options, task, args=(), kwargs={}):
     options = self.expand_destination(options)  # expands 'queue'
     if self.routes:
         route = self.lookup_route(task, args, kwargs, options)
         if route:  # expands 'queue' in route.
             return lpmerge(self.expand_destination(route), options)
     if 'queue' not in options:
         options = lpmerge(self.expand_destination(
                           self.app.conf.task_default_queue), options)
     return options
Exemplo n.º 3
0
 def route(self, options, task, args=(), kwargs={}):
     options = self.expand_destination(options)  # expands 'queue'
     if self.routes:
         route = self.lookup_route(task, args, kwargs)
         if route:  # expands 'queue' in route.
             return lpmerge(self.expand_destination(route), options)
     if 'queue' not in options:
         options = lpmerge(self.expand_destination(
                           self.app.conf.CELERY_DEFAULT_QUEUE), options)
     return options
Exemplo n.º 4
0
    def expand_destination(self, route):
        # Route can be a queue name: convenient for direct exchanges.
        if isinstance(route, basestring):
            queue, route = route, {}
        else:
            # can use defaults from configured queue, but override specific
            # things (like the routing_key): great for topic exchanges.
            queue = route.pop("queue", None)

        if queue:  # expand config from configured queue.
            try:
                dest = dict(self.queues[queue])
            except KeyError:
                if not self.create_missing:
                    raise QueueNotFound(
                        "Queue %r is not defined in CELERY_QUEUES" % queue)
                for key in "exchange", "routing_key":
                    if route.get(key) is None:
                        route[key] = queue
                dest = dict(self.app.amqp.queues.add(queue, **route))
            # needs to be declared by publisher
            dest["queue"] = queue
            # routing_key and binding_key are synonyms.
            dest.setdefault("routing_key", dest.get("binding_key"))
            return lpmerge(dest, route)
        return route
Exemplo n.º 5
0
    def expand_destination(self, route):
        # Route can be a queue name: convenient for direct exchanges.
        if isinstance(route, basestring):
            queue, route = route, {}
        else:
            # can use defaults from configured queue, but override specific
            # things (like the routing_key): great for topic exchanges.
            queue = route.pop("queue", None)

        if queue:  # expand config from configured queue.
            try:
                dest = dict(self.queues[queue])
            except KeyError:
                if not self.create_missing:
                    raise QueueNotFound(
                        "Queue %r is not defined in CELERY_QUEUES" % queue)
                for key in "exchange", "routing_key":
                    if route.get(key) is None:
                        route[key] = queue
                dest = dict(self.app.amqp.queues.add(queue, **route))
            # needs to be declared by publisher
            dest["queue"] = queue
            # routing_key and binding_key are synonyms.
            dest.setdefault("routing_key", dest.get("binding_key"))
            return lpmerge(dest, route)
        return route
Exemplo n.º 6
0
 def route(self, options, task, args=(), kwargs={}):
     options = self.expand_destination(options)  # expands 'queue'
     if self.routes:
         route = self.lookup_route(task, args, kwargs)
         if route:  # expands 'queue' in route.
             return lpmerge(self.expand_destination(route), options)
     return options
Exemplo n.º 7
0
    def TaskPublisher(self, *args, **kwargs):
        """Returns publisher used to send tasks.

        You should use `app.send_task` instead.

        """
        conf = self.app.conf
        _, default_queue = self.get_default_queue()
        defaults = {"exchange": default_queue["exchange"],
                    "exchange_type": default_queue["exchange_type"],
                    "routing_key": conf.CELERY_DEFAULT_ROUTING_KEY,
                    "serializer": conf.CELERY_TASK_SERIALIZER,
                    "compression": conf.CELERY_MESSAGE_COMPRESSION,
                    "retry": conf.CELERY_TASK_PUBLISH_RETRY,
                    "retry_policy": conf.CELERY_TASK_PUBLISH_RETRY_POLICY,
                    "enable_utc": conf.CELERY_ENABLE_UTC,
                    "app": self.app}
        return TaskPublisher(*args, **lpmerge(defaults, kwargs))
Exemplo n.º 8
0
    def expand_destination(self, route):
        # Route can be a queue name: convenient for direct exchanges.
        if isinstance(route, string_t):
            queue, route = route, {}
        else:
            # can use defaults from configured queue, but override specific
            # things (like the routing_key): great for topic exchanges.
            queue = route.pop('queue', None)

        if queue:  # expand config from configured queue.
            try:
                dest = self.queues[queue].as_dict()
            except KeyError:
                if not self.create_missing:
                    raise QueueNotFound(
                        'Queue {0!r} missing from CELERY_QUEUES'.format(queue))
                for key in 'exchange', 'routing_key':
                    if route.get(key) is None:
                        route[key] = queue
                dest = self.app.amqp.queues.add(queue, **route).as_dict()
            # needs to be declared by publisher
            dest['queue'] = queue
            return lpmerge(dest, route)
        return route
Exemplo n.º 9
0
    def expand_destination(self, route):
        # Route can be a queue name: convenient for direct exchanges.
        if isinstance(route, basestring):
            queue, route = route, {}
        else:
            # can use defaults from configured queue, but override specific
            # things (like the routing_key): great for topic exchanges.
            queue = route.pop('queue', None)

        if queue:  # expand config from configured queue.
            try:
                dest = self.queues[queue].as_dict()
            except KeyError:
                if not self.create_missing:
                    raise QueueNotFound(
                        'Queue %r is not defined in CELERY_QUEUES' % queue)
                for key in 'exchange', 'routing_key':
                    if route.get(key) is None:
                        route[key] = queue
                dest = self.app.amqp.queues.add(queue, **route).as_dict()
            # needs to be declared by publisher
            dest['queue'] = queue
            return lpmerge(dest, route)
        return route
Exemplo n.º 10
0
Arquivo: base.py Projeto: frac/celery
 def merge(self, l, r):
     """Like `dict(a, **b)` except it will keep values from `a`
     if the value in `b` is :const:`None`."""
     return lpmerge(l, r)
Exemplo n.º 11
0
 def merge(self, l, r):
     """Like `dict(a, **b)` except it will keep values from `a`
     if the value in `b` is :const:`None`."""
     return lpmerge(l, r)
Exemplo n.º 12
0
 def TaskConsumer(self, *args, **kwargs):
     """Returns consumer for a single task queue."""
     default_queue_name, default_queue = self.get_default_queue()
     defaults = dict({"queue": default_queue_name}, **default_queue)
     defaults["routing_key"] = defaults.pop("binding_key", None)
     return self.Consumer(*args, **lpmerge(defaults, kwargs))