summaryrefslogtreecommitdiffstats
path: root/Lib/enum.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/enum.py')
-rw-r--r--Lib/enum.py33
1 files changed, 25 insertions, 8 deletions
diff --git a/Lib/enum.py b/Lib/enum.py
index a66c344..c1ccf53 100644
--- a/Lib/enum.py
+++ b/Lib/enum.py
@@ -171,7 +171,8 @@ class auto:
"""
Instances are replaced with an appropriate value in Enum class suites.
"""
- value = _auto_null
+ def __init__(self, value=_auto_null):
+ self.value = value
def __repr__(self):
return "auto(%r)" % self.value
@@ -427,15 +428,31 @@ class _EnumDict(dict):
elif isinstance(value, member):
# unwrap value here -- it will become a member
value = value.value
+ non_auto_store = True
+ single = False
if isinstance(value, auto):
- if value.value == _auto_null:
- value.value = self._generate_next_value(
- key, 1, len(self._member_names), self._last_values[:],
- )
- self._auto_called = True
- value = value.value
+ single = True
+ value = (value, )
+ if isinstance(value, tuple):
+ auto_valued = []
+ for v in value:
+ if isinstance(v, auto):
+ non_auto_store = False
+ if v.value == _auto_null:
+ v.value = self._generate_next_value(
+ key, 1, len(self._member_names), self._last_values[:],
+ )
+ self._auto_called = True
+ v = v.value
+ self._last_values.append(v)
+ auto_valued.append(v)
+ if single:
+ value = auto_valued[0]
+ else:
+ value = tuple(auto_valued)
self._member_names[key] = None
- self._last_values.append(value)
+ if non_auto_store:
+ self._last_values.append(value)
super().__setitem__(key, value)
def update(self, members, **more_members):