Merge pull request #861 from nvie/fix-unpickleable-result

Fix unpickleable result
main
Selwin Ong 8 years ago committed by GitHub
commit 7d61bcd76c

@ -441,7 +441,6 @@ class Job(object):
You can exclude serializing the `meta` dictionary by setting
`include_meta=False`.
"""
obj = {}
obj['created_at'] = utcformat(self.created_at or utcnow())
@ -458,7 +457,10 @@ class Job(object):
if self.ended_at is not None:
obj['ended_at'] = utcformat(self.ended_at)
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:
obj['exc_info'] = self.exc_info
if self.timeout is not None:

@ -5,10 +5,17 @@ from __future__ import (absolute_import, division, print_function,
from datetime import datetime
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.helpers import strip_microseconds
from rq.compat import PY2, as_text
from rq.compat import PY2
from rq.exceptions import NoSuchJobError, UnpickleError
from rq.job import Job, get_current_job, JobStatus, cancel_job, requeue_job
from rq.queue import Queue, get_failed_queue
@ -292,6 +299,13 @@ class TestJob(RQTestCase):
serialized2.pop('meta')
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):
"""Ensure that job's result_ttl is set properly"""
job = Job.create(func=fixtures.say_hello, args=('Lionel',), result_ttl=10)

Loading…
Cancel
Save