|
|
@ -4,17 +4,18 @@ from __future__ import (absolute_import, division, print_function,
|
|
|
|
|
|
|
|
|
|
|
|
from datetime import datetime
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
|
|
from rq.compat import as_text, PY2
|
|
|
|
from tests import RQTestCase
|
|
|
|
|
|
|
|
from tests.fixtures import (CallableObject, Number, access_self,
|
|
|
|
|
|
|
|
long_running_job, say_hello, some_calculation)
|
|
|
|
|
|
|
|
from tests.helpers import strip_microseconds
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from rq.compat import PY2, as_text
|
|
|
|
from rq.exceptions import NoSuchJobError, UnpickleError
|
|
|
|
from rq.exceptions import NoSuchJobError, UnpickleError
|
|
|
|
from rq.job import get_current_job, Job
|
|
|
|
from rq.job import Job, get_current_job
|
|
|
|
from rq.queue import Queue
|
|
|
|
from rq.queue import Queue
|
|
|
|
from rq.registry import DeferredJobRegistry
|
|
|
|
from rq.registry import DeferredJobRegistry
|
|
|
|
from rq.utils import utcformat
|
|
|
|
from rq.utils import utcformat
|
|
|
|
|
|
|
|
from rq.worker import Worker
|
|
|
|
from tests import RQTestCase
|
|
|
|
|
|
|
|
from tests.fixtures import (access_self, CallableObject, Number, say_hello,
|
|
|
|
|
|
|
|
some_calculation, long_running_job)
|
|
|
|
|
|
|
|
from tests.helpers import strip_microseconds
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
from cPickle import loads, dumps
|
|
|
|
from cPickle import loads, dumps
|
|
|
@ -291,25 +292,20 @@ class TestJob(RQTestCase):
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
self.assertEqual(job.description, "tests.fixtures.say_hello('Lionel')")
|
|
|
|
self.assertEqual(job.description, "tests.fixtures.say_hello('Lionel')")
|
|
|
|
|
|
|
|
|
|
|
|
def test_job_access_within_job_function(self):
|
|
|
|
def test_job_access_outside_job_fails(self):
|
|
|
|
"""The current job is accessible within the job function."""
|
|
|
|
"""The current job is accessible only within a job context."""
|
|
|
|
# Executing the job function from outside of RQ throws an exception
|
|
|
|
|
|
|
|
self.assertIsNone(get_current_job())
|
|
|
|
self.assertIsNone(get_current_job())
|
|
|
|
|
|
|
|
|
|
|
|
# Executing the job function from within the job works (and in
|
|
|
|
def test_job_access_within_job_function(self):
|
|
|
|
# this case leads to the job ID being returned)
|
|
|
|
"""The current job is accessible within the job function."""
|
|
|
|
job = Job.create(func=access_self)
|
|
|
|
q = Queue()
|
|
|
|
job.save()
|
|
|
|
q.enqueue(access_self) # access_self calls get_current_job() and asserts
|
|
|
|
id = job.perform()
|
|
|
|
w = Worker([q])
|
|
|
|
self.assertEqual(job.id, id)
|
|
|
|
w.work(burst=True)
|
|
|
|
self.assertEqual(job.func, access_self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Ensure that get_current_job also works from within synchronous jobs
|
|
|
|
def test_job_access_within_synchronous_job_function(self):
|
|
|
|
queue = Queue(async=False)
|
|
|
|
queue = Queue(async=False)
|
|
|
|
job = queue.enqueue(access_self)
|
|
|
|
queue.enqueue(access_self)
|
|
|
|
id = job.perform()
|
|
|
|
|
|
|
|
self.assertEqual(job.id, id)
|
|
|
|
|
|
|
|
self.assertEqual(job.func, access_self)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_result_ttl(self):
|
|
|
|
def test_get_result_ttl(self):
|
|
|
|
"""Getting job result TTL."""
|
|
|
|
"""Getting job result TTL."""
|
|
|
|