40 '''Base class for managing bitfields.'''
44 def __init__(self, value=0):
47 def __getattr__(self, name):
50 return 1 << self._fields.index(name)
52 return self.
_value & (1 << self._fields.index(name.upper())) != 0
55 raise AttributeError(
"'%s' object has no attribute '%s'" % (self.__class__.__name__, name))
57 def __setattr__(self, name, value):
60 self.__dict__[name] = value
64 self.
_value |= (1 << self._fields.index(name.upper()))
66 self.
_value &= ~(1 << self._fields.index(name.upper()))
70 raise AttributeError(
"'%s' object has no attribute '%s'" % (self.__class__.__name__, name))
73 return str([(self.
_fields[x], 1 << x)
for x
in range(0, len(self.
_fields))
if (1 << x) & self.
_value])
88 def testDefaultInit(self):
90 self.assertEqual(f.value(), 0)
92 def testDataInit(self):
94 self.assertEqual(f.value(), 15)
96 def testGetAttr(self):
98 self.assertEqual(f.read,
True)
99 self.assertEqual(f.READ, 1)
100 self.assertEqual(f.write,
False)
101 self.assertEqual(f.WRITE, 2)
103 def testBadGetAttr(self):
105 self.assertRaises(AttributeError, getattr, f,
'BAD')
106 self.assertRaises(AttributeError, getattr, f,
'bad')
107 self.assertRaises(AttributeError, getattr, f,
'Read')
109 def testSetAttr(self):
111 self.assertEqual(f.read,
False)
112 self.assertEqual(f.write,
False)
114 self.assertEqual(f.read,
True)
115 self.assertEqual(f.write,
False)
117 def testBadSetAttr(self):
119 self.assertRaises(AttributeError, setattr, f,
'BAD', 0)
120 self.assertRaises(AttributeError, setattr, f,
'bad', 0)
121 self.assertRaises(AttributeError, setattr, f,
'Read', 0)
122 self.assertRaises(AttributeError, setattr, f,
'READ', 0)
124 if __name__ ==
'__main__':