# HG changeset patch # User Idan Kamara <idankk86@gmail.com> # Date 1380993377 -10800 # Sat Oct 05 20:16:17 2013 +0300 # Node ID e54b474466117e31161db96200ad3e4ae5df7b38 # Parent 5ab71218462393a3de42ca065a0d93a3258e4392 fix pickle breakage with JSONDecodeError pickle doesn't behave correctly with custom Exceptions, we workaround the issue by explicitly defining how to pickle JSONDecodeError. diff --git a/simplejson/scanner.py b/simplejson/scanner.py --- a/simplejson/scanner.py +++ b/simplejson/scanner.py @@ -41,6 +41,9 @@ else: self.endlineno, self.endcolno = None, None + def __reduce__(self): + return self.__class__, (self.msg, self.doc, self.pos, self.end) + def linecol(doc, pos): lineno = doc.count('\n', 0, pos) + 1 diff --git a/simplejson/tests/test_errors.py b/simplejson/tests/test_errors.py --- a/simplejson/tests/test_errors.py +++ b/simplejson/tests/test_errors.py @@ -1,4 +1,4 @@ -import sys +import sys, pickle from unittest import TestCase import simplejson as json @@ -33,3 +33,19 @@ self.fail('Expected JSONDecodeError') self.assertEqual(err.lineno, 1) self.assertEqual(err.colno, 10) + + def test_error_is_pickable(self): + err = None + try: + json.loads('{}\na\nb') + except json.JSONDecodeError: + err = sys.exc_info()[1] + else: + self.fail('Expected JSONDecodeError') + s = pickle.dumps(err) + e = pickle.loads(s) + + self.assertEquals(err.msg, e.msg) + self.assertEquals(err.doc, e.doc) + self.assertEquals(err.pos, e.pos) + self.assertEquals(err.end, e.end)