diff options
author | Yury Selivanov <yury@magic.io> | 2017-11-15 22:14:28 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-15 22:14:28 (GMT) |
commit | 43605e6bfa8d49612df4a38460d063d6ba781906 (patch) | |
tree | fb35c0febdb3b6b388b9c4eb6fabec0b7f1f861c /Lib | |
parent | 4bd41c9b52ea0c730e9e294caaf003e54c088c6e (diff) | |
download | cpython-43605e6bfa8d49612df4a38460d063d6ba781906.zip cpython-43605e6bfa8d49612df4a38460d063d6ba781906.tar.gz cpython-43605e6bfa8d49612df4a38460d063d6ba781906.tar.bz2 |
bpo-32034: Make IncompleteReadError & LimitOverrunError pickleable #4409
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/asyncio/streams.py | 6 | ||||
-rw-r--r-- | Lib/test/test_asyncio/test_streams.py | 18 |
2 files changed, 24 insertions, 0 deletions
diff --git a/Lib/asyncio/streams.py b/Lib/asyncio/streams.py index 9fda853..30b751e 100644 --- a/Lib/asyncio/streams.py +++ b/Lib/asyncio/streams.py @@ -35,6 +35,9 @@ class IncompleteReadError(EOFError): self.partial = partial self.expected = expected + def __reduce__(self): + return type(self), (self.partial, self.expected) + class LimitOverrunError(Exception): """Reached the buffer limit while looking for a separator. @@ -46,6 +49,9 @@ class LimitOverrunError(Exception): super().__init__(message) self.consumed = consumed + def __reduce__(self): + return type(self), (self.args[0], self.consumed) + @coroutine def open_connection(host=None, port=None, *, diff --git a/Lib/test/test_asyncio/test_streams.py b/Lib/test/test_asyncio/test_streams.py index b47433a..6d16d20 100644 --- a/Lib/test/test_asyncio/test_streams.py +++ b/Lib/test/test_asyncio/test_streams.py @@ -3,6 +3,7 @@ import gc import os import queue +import pickle import socket import sys import threading @@ -845,6 +846,23 @@ os.close(fd) stream._transport.__repr__.return_value = "<Transport>" self.assertEqual("<StreamReader t=<Transport>>", repr(stream)) + def test_IncompleteReadError_pickleable(self): + e = asyncio.IncompleteReadError(b'abc', 10) + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + with self.subTest(pickle_protocol=proto): + e2 = pickle.loads(pickle.dumps(e, protocol=proto)) + self.assertEqual(str(e), str(e2)) + self.assertEqual(e.partial, e2.partial) + self.assertEqual(e.expected, e2.expected) + + def test_LimitOverrunError_pickleable(self): + e = asyncio.LimitOverrunError('message', 10) + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + with self.subTest(pickle_protocol=proto): + e2 = pickle.loads(pickle.dumps(e, protocol=proto)) + self.assertEqual(str(e), str(e2)) + self.assertEqual(e.consumed, e2.consumed) + if __name__ == '__main__': unittest.main() |