mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
bpo-44342: [Enum] changed pickling from by-value to by-name (GH-26658) (GH-26660)
by-value lookups could fail on complex enums, necessitating a check for
__reduce__ and possibly sabotaging the final enum;
by-name lookups should never fail, and sabotaging is no longer necessary
for class-based enum creation.
(cherry picked from commit 62f1d2b3d7)
Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
This commit is contained in:
parent
3e137426de
commit
b613132861
3 changed files with 9 additions and 25 deletions
|
|
@ -830,7 +830,7 @@ def test_pickle_by_name(self):
|
|||
class ReplaceGlobalInt(IntEnum):
|
||||
ONE = 1
|
||||
TWO = 2
|
||||
ReplaceGlobalInt.__reduce_ex__ = enum._reduce_ex_by_name
|
||||
ReplaceGlobalInt.__reduce_ex__ = enum._reduce_ex_by_global_name
|
||||
for proto in range(HIGHEST_PROTOCOL):
|
||||
self.assertEqual(ReplaceGlobalInt.TWO.__reduce_ex__(proto), 'TWO')
|
||||
|
||||
|
|
@ -1527,10 +1527,10 @@ class NEI(NamedInt, Enum):
|
|||
NI5 = NamedInt('test', 5)
|
||||
self.assertEqual(NI5, 5)
|
||||
self.assertEqual(NEI.y.value, 2)
|
||||
test_pickle_exception(self.assertRaises, TypeError, NEI.x)
|
||||
test_pickle_exception(self.assertRaises, PicklingError, NEI)
|
||||
test_pickle_dump_load(self.assertIs, NEI.y)
|
||||
test_pickle_dump_load(self.assertIs, NEI)
|
||||
|
||||
def test_subclasses_without_direct_pickle_support_using_name(self):
|
||||
def test_subclasses_with_direct_pickle_support(self):
|
||||
class NamedInt(int):
|
||||
__qualname__ = 'NamedInt'
|
||||
def __new__(cls, *args):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue