Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cloudpickle/cloudpickle.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__,
Expand Down Expand Up @@ -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 [
Expand Down
14 changes: 14 additions & 0 deletions tests/cloudpickle_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down