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 62f1d2b3d7dda99598d053e10b785c463fdcf591)
Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py
index 40794e3..9a7882b 100644
--- a/Lib/test/test_enum.py
+++ b/Lib/test/test_enum.py
@@ -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):