Merge branch 'master' of github.com:nvie/rq

main
Selwin Ong 8 years ago
commit 4a9bc6e76a

@ -441,7 +441,6 @@ class Job(object):
You can exclude serializing the `meta` dictionary by setting You can exclude serializing the `meta` dictionary by setting
`include_meta=False`. `include_meta=False`.
""" """
obj = {} obj = {}
obj['created_at'] = utcformat(self.created_at or utcnow()) obj['created_at'] = utcformat(self.created_at or utcnow())
@ -458,7 +457,10 @@ class Job(object):
if self.ended_at is not None: if self.ended_at is not None:
obj['ended_at'] = utcformat(self.ended_at) obj['ended_at'] = utcformat(self.ended_at)
if self._result is not None: if self._result is not None:
obj['result'] = dumps(self._result) try:
obj['result'] = dumps(self._result)
except:
obj['result'] = 'Unpickleable return value'
if self.exc_info is not None: if self.exc_info is not None:
obj['exc_info'] = self.exc_info obj['exc_info'] = self.exc_info
if self.timeout is not None: if self.timeout is not None:

@ -5,10 +5,17 @@ from __future__ import (absolute_import, division, print_function,
from datetime import datetime from datetime import datetime
import time import time
import sys
is_py2 = sys.version[0] == '2'
if is_py2:
import Queue as queue
else:
import queue as queue
from tests import fixtures, RQTestCase from tests import fixtures, RQTestCase
from tests.helpers import strip_microseconds from tests.helpers import strip_microseconds
from rq.compat import PY2, as_text from rq.compat import PY2
from rq.exceptions import NoSuchJobError, UnpickleError from rq.exceptions import NoSuchJobError, UnpickleError
from rq.job import Job, get_current_job, JobStatus, cancel_job, requeue_job from rq.job import Job, get_current_job, JobStatus, cancel_job, requeue_job
from rq.queue import Queue, get_failed_queue from rq.queue import Queue, get_failed_queue
@ -292,6 +299,13 @@ class TestJob(RQTestCase):
serialized2.pop('meta') serialized2.pop('meta')
self.assertDictEqual(serialized, serialized2) self.assertDictEqual(serialized, serialized2)
def test_unpickleable_result(self):
"""Unpickleable job result doesn't crash job.to_dict()"""
job = Job.create(func=fixtures.say_hello, args=('Lionel',))
job._result = queue.Queue()
data = job.to_dict()
self.assertEqual(data['result'], 'Unpickleable return value')
def test_result_ttl_is_persisted(self): def test_result_ttl_is_persisted(self):
"""Ensure that job's result_ttl is set properly""" """Ensure that job's result_ttl is set properly"""
job = Job.create(func=fixtures.say_hello, args=('Lionel',), result_ttl=10) job = Job.create(func=fixtures.say_hello, args=('Lionel',), result_ttl=10)

Loading…
Cancel
Save