an enum with value 0 should be interpreted as False
for example: bool(Enum(off=0, on=1)('off')) is False Change-Id: Ieb200b4ecf0eed50b657ecc00f73a69810ad828f Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28586 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
parent
7b9c099321
commit
21bcc7ce98
@ -106,6 +106,9 @@ class EnumMember:
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '<%s%s (%d)>' % (self.enum.name + '.' if self.enum.name else '', self.name, self.value)
|
return '<%s%s (%d)>' % (self.enum.name + '.' if self.enum.name else '', self.name, self.value)
|
||||||
|
|
||||||
|
def __bool__(self):
|
||||||
|
return bool(self.value)
|
||||||
|
|
||||||
# numeric operations: delegate to int. Do we really need any of those?
|
# numeric operations: delegate to int. Do we really need any of those?
|
||||||
def __add__(self, other):
|
def __add__(self, other):
|
||||||
return self.value.__add__(other.value if isinstance(other, EnumMember) else other)
|
return self.value.__add__(other.value if isinstance(other, EnumMember) else other)
|
||||||
@ -242,7 +245,7 @@ class Enum(dict):
|
|||||||
name = ''
|
name = ''
|
||||||
|
|
||||||
def __init__(self, name='', parent=None, **kwds):
|
def __init__(self, name='', parent=None, **kwds):
|
||||||
super(Enum, self).__init__()
|
super().__init__()
|
||||||
if isinstance(name, (dict, Enum)) and parent is None:
|
if isinstance(name, (dict, Enum)) and parent is None:
|
||||||
# swap if only parent is given as positional argument
|
# swap if only parent is given as positional argument
|
||||||
name, parent = '', name
|
name, parent = '', name
|
||||||
@ -309,17 +312,17 @@ class Enum(dict):
|
|||||||
try:
|
try:
|
||||||
return self[key]
|
return self[key]
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
raise AttributeError(str(e))
|
raise AttributeError(str(e)) from None
|
||||||
|
|
||||||
def __setattr__(self, key, value):
|
def __setattr__(self, key, value):
|
||||||
if self.name and key != 'name':
|
if self.name and key != 'name':
|
||||||
raise TypeError('Enum %r can not be changed!' % self.name)
|
raise TypeError('Enum %r can not be changed!' % self.name)
|
||||||
super(Enum, self).__setattr__(key, value)
|
super().__setattr__(key, value)
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
def __setitem__(self, key, value):
|
||||||
if self.name:
|
if self.name:
|
||||||
raise TypeError('Enum %r can not be changed!' % self.name)
|
raise TypeError('Enum %r can not be changed!' % self.name)
|
||||||
super(Enum, self).__setitem__(key, value)
|
super().__setitem__(key, value)
|
||||||
|
|
||||||
def __delitem__(self, key):
|
def __delitem__(self, key):
|
||||||
raise TypeError('Enum %r can not be changed!' % self.name)
|
raise TypeError('Enum %r can not be changed!' % self.name)
|
||||||
|
@ -77,3 +77,9 @@ def test_Enum():
|
|||||||
assert e3.c >= e2.a
|
assert e3.c >= e2.a
|
||||||
assert e3.b <= e2.b
|
assert e3.b <= e2.b
|
||||||
assert Enum({'self': 0, 'other': 1})('self') == 0
|
assert Enum({'self': 0, 'other': 1})('self') == 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_Enum_bool():
|
||||||
|
e = Enum('OffOn', off=0, on=1)
|
||||||
|
assert bool(e(0)) is False
|
||||||
|
assert bool(e(1)) is True
|
||||||
|
Loading…
x
Reference in New Issue
Block a user