"""
return True
- def __call__(cls, value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None):
+ def __call__(cls, value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None):
"""
Either returns an existing member, or creates a new enum class.
to an enumeration member (i.e. Color(3)) and for the functional API
(i.e. Color = Enum('Color', names='RED GREEN BLUE')).
+ The value lookup branch is chosen if the enum is final.
+
When used for the functional API:
`value` will be the name of the new class.
`type`, if set, will be mixed in as the first base class.
"""
- if names is None: # simple value lookup
+ if cls._member_map_:
+ # simple value lookup if members exist
+ if names:
+ value = (value, names) + values
return cls.__new__(cls, value)
# otherwise, functional API: we're creating a new Enum type
return cls._create_(
- value,
- names,
+ class_name=value,
+ names=names,
module=module,
qualname=qualname,
type=type,
self.assertIn(e, MinorEnum)
self.assertIs(type(e), MinorEnum)
+ def test_programmatic_function_is_value_call(self):
+ class TwoPart(Enum):
+ ONE = 1, 1.0
+ TWO = 2, 2.0
+ THREE = 3, 3.0
+ self.assertRaisesRegex(ValueError, '1 is not a valid .*TwoPart', TwoPart, 1)
+ self.assertIs(TwoPart((1, 1.0)), TwoPart.ONE)
+ self.assertIs(TwoPart(1, 1.0), TwoPart.ONE)
+ class ThreePart(Enum):
+ ONE = 1, 1.0, 'one'
+ TWO = 2, 2.0, 'two'
+ THREE = 3, 3.0, 'three'
+ self.assertIs(ThreePart((3, 3.0, 'three')), ThreePart.THREE)
+ self.assertIs(ThreePart(3, 3.0, 'three'), ThreePart.THREE)
+
def test_intenum_from_bytes(self):
self.assertIs(IntStooges.from_bytes(b'\x00\x03', 'big'), IntStooges.MOE)
with self.assertRaises(ValueError):
class EvenMoreColor(Color, IntEnum):
chartruese = 7
#
- with self.assertRaisesRegex(TypeError, "<enum .Foo.> cannot extend <enum .Color.>"):
+ with self.assertRaisesRegex(ValueError, "\(.Foo., \(.pink., .black.\)\) is not a valid .*Color"):
Color('Foo', ('pink', 'black'))
def test_exclude_methods(self):
Help on class Color in module %s:
class Color(enum.Enum)
- | Color(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
+ | Color(value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None)
|
| Method resolution order:
| Color
Help on class Color in module %s:
class Color(enum.Enum)
- | Color(value, names=None, *, module=None, qualname=None, type=None, start=1)
+ | Color(value, names=None, *values, module=None, qualname=None, type=None, start=1)
|
| Method resolution order:
| Color