From e49e5d02f4fe979aa0dbf18deadc267ab79e5816 Mon Sep 17 00:00:00 2001 From: Jeremy Fincher Date: Tue, 28 Oct 2003 23:14:49 +0000 Subject: [PATCH] Changes to ToggleDictionary. --- src/plugins.py | 46 +++++++++++++++++++++++++------------------- test/test_plugins.py | 5 ++--- 2 files changed, 28 insertions(+), 23 deletions(-) diff --git a/src/plugins.py b/src/plugins.py index 3ac05454f..068787268 100644 --- a/src/plugins.py +++ b/src/plugins.py @@ -192,33 +192,39 @@ class ToggleDictionary(object): """I am ToggleDictionary! Hear me roar! """ def __init__(self, toggles): - if toggles.keys() == []: - raise ValueError - self.toggles = {} - self.toggles['Default'] = toggles + if not toggles: + raise ValueError, 'At least one toggle must be provided.' + self.channels = {} + self.defaults = toggles - def get(self, key, channel='Default'): - if channel != 'Default': - try: - return self.toggles[channel][key] - except KeyError: - return self.toggles['Default'][key] + def _getDict(self, channel): + if channel is None: + return self.defaults else: - return self.toggles[channel][key] + if channel not in self.channels: + self.channels[channel] = self.defaults.copy() + return self.channels[channel] - def toggle(self, key, value=None, channel='Default'): - if value is not None and value != True and value != False: - raise ValueError - if not self.toggles.has_key(channel): - self.toggles[channel] = self.toggles['Default'].copy() + def get(self, key, channel=None): + return self._getDict(channel)[key] + + def toggle(self, key, value=None, channel=None): + d = self._getDict(channel) if value is None: - self.toggles[channel][key] = not self.toggles[channel][key] + d[key] = not d[key] # Raises KeyError, we want this. else: - self.toggles[channel][key] = value + # I considered this, to save the if statement: + # d[key] = (d[key] ^ d[key]) or value + # But didn't, so people can provide non-boolean keys. + if key in d: + d[key] = value + else: + raise KeyError, key - def toString(self, channel='Default'): + def toString(self, channel=None): resp = [] - for k,v in self.toggles[channel].iteritems(): + d = self._getDict(channel) + for (k, v) in d.iteritems(): if v: resp.append('%s: On' % k) else: diff --git a/test/test_plugins.py b/test/test_plugins.py index 2ac6a76db..5510b7bc3 100644 --- a/test/test_plugins.py +++ b/test/test_plugins.py @@ -44,7 +44,7 @@ class ToggleDictionaryTestCase(unittest.TestCase): self.assertEqual(t.get('foo', '#baz'), True) t.toggle('foo', channel='#baz') self.assertEqual(t.get('foo', '#baz'), False) - self.assertRaises(ValueError, t.toggle, 'foo', value='lak') + #self.assertRaises(TypeError, t.toggle, 'foo', value='lak') def test__init__(self): self.assertRaises(TypeError, plugins.ToggleDictionary.__init__) @@ -53,8 +53,7 @@ class ToggleDictionaryTestCase(unittest.TestCase): def testToggle(self): t = plugins.ToggleDictionary({'foo': True}) self.assertRaises(KeyError, t.toggle, 'bar') - t.toggle('bar', value=False) - self.assertEqual(t.get('bar'), False) + self.assertRaises(KeyError, t.toggle, 'bar', value=False) def testToString(self): t = plugins.ToggleDictionary({'foo': True, 'bar': False})