Add way to unregister components.

This commit is contained in:
Emil Stenström 2015-06-11 20:52:46 +02:00
parent 00bd40aaaf
commit ebf4ac1d20
2 changed files with 19 additions and 1 deletions

View file

@ -1,15 +1,24 @@
class AlreadyRegistered(Exception):
pass
class NotRegistered(Exception):
pass
class ComponentRegistry(object):
def __init__(self):
self._registry = {} # component name -> component_class mapping
def register(self, name=None, component=None):
if name in self._registry:
raise AlreadyRegistered('The component %s is already registered' % name)
raise AlreadyRegistered('The component "%s" is already registered' % name)
self._registry[name] = component
def unregister(self, name):
if name not in self._registry:
raise NotRegistered('The component "%s" is not registered' % name)
del self._registry[name]
# This variable represents the global component registry
registry = ComponentRegistry()

View file

@ -27,3 +27,12 @@ class ComponentRegistryTest(unittest.TestCase):
self.registry.register(name="testcomponent", component=MockComponent)
with self.assertRaises(component.AlreadyRegistered):
self.registry.register(name="testcomponent", component=MockComponent)
def test_simple_unregister(self):
self.registry.register(name="testcomponent", component=MockComponent)
self.registry.unregister(name="testcomponent")
self.assertEqual(self.registry._registry.items(), [])
def test_raises_on_failed_unregister(self):
with self.assertRaises(component.NotRegistered):
self.registry.unregister(name="testcomponent")