Skip to content

Commit c57e6e2

Browse files
asottileserhiy-storchaka
authored andcommitted
bpo-35312: Make lib2to3.pgen2.parse.ParseError round-trip pickle-able. (GH-10710)
1 parent d4f9cf5 commit c57e6e2

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

Lib/lib2to3/pgen2/parse.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ def __init__(self, msg, type, value, context):
2424
self.value = value
2525
self.context = context
2626

27+
def __reduce__(self):
28+
return type(self), (self.msg, self.type, self.value, self.context)
29+
2730
class Parser(object):
2831
"""Parser engine.
2932

Lib/lib2to3/tests/test_parser.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,18 @@ def test_multiline_str_literals(self):
622622
self.validate(s)
623623

624624

625+
class TestPickleableException(unittest.TestCase):
626+
def test_ParseError(self):
627+
err = ParseError('msg', 2, None, (1, 'context'))
628+
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
629+
err2 = pickle.loads(pickle.dumps(err, protocol=proto))
630+
self.assertEqual(err.args, err2.args)
631+
self.assertEqual(err.msg, err2.msg)
632+
self.assertEqual(err.type, err2.type)
633+
self.assertEqual(err.value, err2.value)
634+
self.assertEqual(err.context, err2.context)
635+
636+
625637
def diff_texts(a, b, filename):
626638
a = a.splitlines()
627639
b = b.splitlines()
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Make ``lib2to3.pgen2.parse.ParseError`` round-trip pickle-able. Patch by Anthony Sottile.

0 commit comments

Comments
 (0)