mirror of https://github.com/rq/rq.git
Merge pull request #333 from selwin/explicit-args
Rearranged how explicit kwargs are passed into queue.enqueue(). Fixes #322
This commit is contained in:
commit
7ea106e50e
11
rq/queue.py
11
rq/queue.py
|
@ -190,17 +190,14 @@ class Queue(object):
|
|||
|
||||
# Detect explicit invocations, i.e. of the form:
|
||||
# q.enqueue(foo, args=(1, 2), kwargs={'a': 1}, timeout=30)
|
||||
timeout = None
|
||||
description = None
|
||||
result_ttl = None
|
||||
depends_on = None
|
||||
if 'args' in kwargs or 'kwargs' in kwargs or 'depends_on' in kwargs:
|
||||
assert args == (), 'Extra positional arguments cannot be used when using explicit args and kwargs.' # noqa
|
||||
timeout = kwargs.pop('timeout', None)
|
||||
description = kwargs.pop('description', None)
|
||||
args = kwargs.pop('args', None)
|
||||
result_ttl = kwargs.pop('result_ttl', None)
|
||||
depends_on = kwargs.pop('depends_on', None)
|
||||
|
||||
if 'args' in kwargs or 'kwargs' in kwargs:
|
||||
assert args == (), 'Extra positional arguments cannot be used when using explicit args and kwargs.' # noqa
|
||||
args = kwargs.pop('args', None)
|
||||
kwargs = kwargs.pop('kwargs', None)
|
||||
|
||||
return self.enqueue_call(func=f, args=args, kwargs=kwargs,
|
||||
|
|
|
@ -49,6 +49,10 @@ def access_self():
|
|||
return job.id
|
||||
|
||||
|
||||
def echo(*args, **kwargs):
|
||||
return (args, kwargs)
|
||||
|
||||
|
||||
class Number(object):
|
||||
def __init__(self, value):
|
||||
self.value = value
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from tests import RQTestCase
|
||||
from tests.fixtures import Number, div_by_zero, say_hello, some_calculation
|
||||
from tests.fixtures import Number, div_by_zero, echo, say_hello, some_calculation
|
||||
from rq import Queue, get_failed_queue
|
||||
from rq.job import Job, Status
|
||||
from rq.worker import Worker
|
||||
|
@ -260,6 +260,33 @@ class TestQueue(RQTestCase):
|
|||
job = q.enqueue(say_hello)
|
||||
self.assertEqual(job.get_status(), Status.QUEUED)
|
||||
|
||||
def test_enqueue_explicit_args(self):
|
||||
"""enqueue() works for both implicit/explicit args."""
|
||||
q = Queue()
|
||||
|
||||
# Implicit args/kwargs mode
|
||||
job = q.enqueue(echo, 1, timeout=1, result_ttl=1, bar='baz')
|
||||
self.assertEqual(job.timeout, 1)
|
||||
self.assertEqual(job.result_ttl, 1)
|
||||
self.assertEqual(
|
||||
job.perform(),
|
||||
((1,), {'bar': 'baz'})
|
||||
)
|
||||
|
||||
# Explicit kwargs mode
|
||||
kwargs = {
|
||||
'timeout': 1,
|
||||
'result_ttl': 1,
|
||||
}
|
||||
job = q.enqueue(echo, timeout=2, result_ttl=2, args=[1], kwargs=kwargs)
|
||||
self.assertEqual(job.timeout, 2)
|
||||
self.assertEqual(job.result_ttl, 2)
|
||||
self.assertEqual(
|
||||
job.perform(),
|
||||
((1,), {'timeout': 1, 'result_ttl': 1})
|
||||
)
|
||||
|
||||
|
||||
def test_all_queues(self):
|
||||
"""All queues"""
|
||||
q1 = Queue('first-queue')
|
||||
|
|
Loading…
Reference in New Issue