closes issue18042 -- a unique decorator is added to enum.py

The docs also clarify the 'Interesting Example' duplicate-free enum is for
demonstration purposes.
This commit is contained in:
Ethan Furman 2013-07-18 17:05:39 -07:00
parent d85032e25d
commit f24bb35a69
3 changed files with 115 additions and 29 deletions

View file

@ -4,7 +4,7 @@ import sys
from collections import OrderedDict
from types import MappingProxyType
__all__ = ['Enum', 'IntEnum']
__all__ = ['Enum', 'IntEnum', 'unique']
class _RouteClassAttributeToGetattr:
@ -463,3 +463,17 @@ class Enum(metaclass=EnumMeta):
class IntEnum(int, Enum):
"""Enum where members are also (and must be) ints"""
def unique(enumeration):
"""Class decorator for enumerations ensuring unique member values."""
duplicates = []
for name, member in enumeration.__members__.items():
if name != member.name:
duplicates.append((name, member.name))
if duplicates:
alias_details = ', '.join(
["%s -> %s" % (alias, name) for (alias, name) in duplicates])
raise ValueError('duplicate values found in %r: %s' %
(enumeration, alias_details))
return enumeration