From 2633f55b870c45a59cd659d5c58caf3e474c073a Mon Sep 17 00:00:00 2001 From: Jake Wang Date: Fri, 18 Sep 2026 18:53:04 -0400 Subject: [PATCH] Fix serialization of composite flag members --- cloudpickle/cloudpickle.py | 4 ++-- tests/cloudpickle_test.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/cloudpickle/cloudpickle.py b/cloudpickle/cloudpickle.py index 08882306..0d5137dc 100644 --- a/cloudpickle/cloudpickle.py +++ b/cloudpickle/cloudpickle.py @@ -689,7 +689,7 @@ def _class_getnewargs(obj): def _enum_getnewargs(obj): - members = {e.name: e.value for e in obj} + members = {name: e.value for name, e in obj.__members__.items()} return ( obj.__bases__, obj.__name__, @@ -802,7 +802,7 @@ def _class_getstate(obj): def _enum_getstate(obj): clsdict, slotstate = _class_getstate(obj) - members = {e.name: e.value for e in obj} + members = {name: e.value for name, e in obj.__members__.items()} # Cleanup the clsdict that will be passed to _make_skeleton_enum: # Those attributes are already handled by the metaclass. for attrname in [ diff --git a/tests/cloudpickle_test.py b/tests/cloudpickle_test.py index e2097d1c..8d7805b0 100644 --- a/tests/cloudpickle_test.py +++ b/tests/cloudpickle_test.py @@ -2404,6 +2404,20 @@ def test_locally_defined_intenum(self): assert green1 is not ClonedDynamicColor.BLUE assert ClonedDynamicColor is DynamicColor + def test_locally_defined_flags(self): + members = {"NONE": 0, "FIRST": 11, "SECOND": 37, "THIRD": 389, "ALIAS": 37} + + def check_members(flags): + assert flags.ALIAS is flags.SECOND + return {name: member.value for name, member in flags.__members__.items()} + + with subprocess_worker(protocol=self.protocol) as worker: + for enum_type in (enum.Flag, enum.IntFlag): + flags = enum_type("DynamicFlags", members) + restored = pickle_depickle(flags.SECOND, protocol=self.protocol) + assert restored is flags.SECOND + assert worker.run(check_members, flags) == members + def test_interactively_defined_enum(self): code = """if __name__ == "__main__": from enum import Enum