if isinstance(value, auto):
single = True
value = (value, )
- if isinstance(value, tuple):
+ if type(value) is tuple and any(isinstance(v, auto) for v in value):
+ # insist on an actual tuple, no subclasses, in keeping with only supporting
+ # top-level auto() usage (not contained in any other data structure)
auto_valued = []
for v in value:
if isinstance(v, auto):
self.assertEqual(deep, flags)
self.assertEqual(copied.value, 1 | 2 | 8)
+ def test_namedtuple_as_value(self):
+ from collections import namedtuple
+ TTuple = namedtuple('TTuple', 'id a blist')
+ class NTEnum(Enum):
+ NONE = TTuple(0, 0, [])
+ A = TTuple(1, 2, [4])
+ B = TTuple(2, 4, [0, 1, 2])
+ self.assertEqual(repr(NTEnum.NONE), "<NTEnum.NONE: TTuple(id=0, a=0, blist=[])>")
+ self.assertEqual(NTEnum.NONE.value, TTuple(id=0, a=0, blist=[]))
+ self.assertEqual(
+ [x.value for x in NTEnum],
+ [TTuple(id=0, a=0, blist=[]), TTuple(id=1, a=2, blist=[4]), TTuple(id=2, a=4, blist=[0, 1, 2])],
+ )
class TestOrder(unittest.TestCase):
"test usage of the `_order_` attribute"