@@ -66,6 +66,14 @@ def to_str(self) -> str:
66
66
def __str__ (self ):
67
67
return self .name
68
68
69
+ @classmethod
70
+ def all (cls ):
71
+ """Iterate over all members
72
+
73
+ .. versionadded:: 0.0.6
74
+ """
75
+ yield from cls .__members__ .values ()
76
+
69
77
def __format__ (self , format_spec ):
70
78
if format_spec == '' :
71
79
return str (self )
@@ -110,7 +118,9 @@ def is_iterable(self) -> bool:
110
118
"""
111
119
if self == TallyType .all_tally :
112
120
return True
113
- return self .name is None
121
+ mask = 1 << (self .bit_length () - 1 )
122
+ return self ^ mask != 0
123
+
114
124
115
125
@classmethod
116
126
def all (cls ) -> Iterator [TallyType ]:
@@ -133,7 +143,7 @@ def from_str(s: str) -> TallyType:
133
143
>>> TallyType.from_str('rh_tally')
134
144
<TallyType.rh_tally: 1>
135
145
>>> TallyType.from_str('rh|txt_tally')
136
- <TallyType.txt_tally| rh_tally: 3>
146
+ <TallyType.rh_tally|txt_tally : 3>
137
147
>>> TallyType.from_str('rh|txt|lh')
138
148
<TallyType.all_tally: 7>
139
149
>>> TallyType.from_str('all')
@@ -175,6 +185,16 @@ def __iter__(self) -> Iterator[TallyType]:
175
185
if ttype in self :
176
186
yield ttype
177
187
188
+ def __repr__ (self ):
189
+ if not self .is_iterable :
190
+ return super ().__repr__ ()
191
+ if self .name is not None :
192
+ members = self .name
193
+ else :
194
+ members = '|' .join ([m .name for m in self ])
195
+ return f'<{ self .__class__ .__name__ } .{ members } : { self .value } >'
196
+
197
+
178
198
class TallyState (enum .IntFlag ):
179
199
OFF = 0 #: Off
180
200
PREVIEW = 1 #: Preview
0 commit comments