File tree Expand file tree Collapse file tree 1 file changed +52
-13
lines changed Expand file tree Collapse file tree 1 file changed +52
-13
lines changed Original file line number Diff line number Diff line change 1
1
class NamedNumbers :
2
+ """Base for Enum and Flags."""
3
+
2
4
def __init__ (self , value ):
3
5
self .value = value
4
6
def __int__ (self ):
7
+ """
8
+ >>> n = NamedNumbers(42)
9
+
10
+ >>> int(n)
11
+ 42
12
+ """
5
13
return self .value
6
14
7
15
class Enum (NamedNumbers ):
8
- """enum
9
-
10
- class Foo(Enum):
11
- FOO=1
12
- BAR=2
16
+ """Enumeration."""
13
17
14
- >>> e = Foo(Foo.BAR)
15
- >>> str(e)
16
- "BAR"
17
- """
18
18
def __str__ (self ):
19
+ """
20
+ >>> class Foo(Enum):
21
+ ... ONE = 1
22
+ ... TWO = 2
23
+
24
+ >>> Foo.ONE
25
+ 1
26
+
27
+ >>> str(Foo(Foo.TWO))
28
+ 'TWO'
29
+
30
+ >>> str(Foo(3))
31
+ '3'
32
+ """
33
+
19
34
for n , v in self .__class__ .__dict__ .iteritems ():
20
35
if v == self .value :
21
36
return n
22
- return "?"
37
+ return str ( self . value )
23
38
# TODO __repr__
24
39
25
40
class Flags (NamedNumbers ):
41
+ """Bit flags."""
42
+
26
43
def __str__ (self ):
44
+ """
45
+ >>> class MyFlags(Flags):
46
+ ... NONE = 0x0
47
+ ... EXECUTE = 0x1
48
+ ... WRITE = 0x2
49
+ ... READ = 0x4
50
+
51
+ >>> str(MyFlags(5))
52
+ 'EXECUTE,READ'
53
+
54
+ >>> str(MyFlags(0))
55
+ 'NONE'
56
+
57
+ >>> str(MyFlags(9)) # doctest: +SKIP
58
+ 'EXECUTE,0x8'
59
+ """
60
+
27
61
has = {}
28
62
for n , v in self .__class__ .__dict__ .iteritems ():
29
- if isinstance (v , int ) and self .value & v : # FIXME long
30
- has [v ] = n
63
+ if isinstance (v , int ): # FIXME long
64
+ if self .value & v or (self .value == 0 and v == 0 ):
65
+ has [v ] = n
66
+
31
67
names = [has [v ] for v in sorted (has .keys ())]
32
- # TODO zero is a special case
33
68
# TODO unknown values?
34
69
return "," .join (names )
70
+
71
+ if __name__ == "__main__" :
72
+ import doctest
73
+ doctest .testmod ()
You can’t perform that action at this time.
0 commit comments