diff options
author | Bob Ippolito <bob@redivi.com> | 2013-10-05 11:53:43 -0700 |
---|---|---|
committer | Bob Ippolito <bob@redivi.com> | 2013-10-05 11:53:43 -0700 |
commit | 475ef1c3b3a7a1bee8b9339336a077ce905ddc4f (patch) | |
tree | 3a157de5d07e2ba1319c69baf396946a51d2bef0 | |
parent | 35816bfe2d0ddeb5ddcc68239683cbb35b7e3ff2 (diff) | |
parent | e787c8b9d1155023089937314fd2b965821f2108 (diff) | |
download | simplejson-475ef1c3b3a7a1bee8b9339336a077ce905ddc4f.tar.gz |
Merge pull request #78 from idank/master
fix pickle breakage with JSONDecodeError
-rw-r--r-- | simplejson/scanner.py | 3 | ||||
-rw-r--r-- | simplejson/tests/test_errors.py | 18 |
2 files changed, 20 insertions, 1 deletions
diff --git a/simplejson/scanner.py b/simplejson/scanner.py index 6a0099f..b7918b3 100644 --- a/simplejson/scanner.py +++ b/simplejson/scanner.py @@ -41,6 +41,9 @@ class JSONDecodeError(ValueError): 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 index 6bc2fc8..e86121d 100644 --- 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 @@ class TestErrors(TestCase): 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) |