This repository was archived by the owner on Sep 26, 2019. It is now read-only.
File tree Expand file tree Collapse file tree 2 files changed +51
-0
lines changed
Expand file tree Collapse file tree 2 files changed +51
-0
lines changed Original file line number Diff line number Diff line change 1+ import copy
2+
3+
4+ class DictRegistry (object ):
5+ """A simple registry for a mapping of objects."""
6+
7+ def __init__ (self ):
8+ self ._items = {}
9+
10+ def register_item (self , key , item ):
11+ """Add item to the registry."""
12+ if key in self ._items :
13+ raise ValueError (
14+ 'Item already registered with key {0}' .format (key ))
15+ self ._items [key ] = item
16+
17+ @property
18+ def registered_items (self ):
19+ """All the items that have been registered.
20+
21+ This cannot be used to modify the contents of the registry.
22+ """
23+ return copy .copy (self ._items )
Original file line number Diff line number Diff line change 1+ from cloudinit .registry import DictRegistry
2+ from cloudinit .tests import TestCase
3+ from cloudinit .tests .util import mock
4+
5+
6+ class TestDictRegistry (TestCase ):
7+
8+ def test_added_item_included_in_output (self ):
9+ registry = DictRegistry ()
10+ item_key , item_to_register = 'test_key' , mock .Mock ()
11+ registry .register_item (item_key , item_to_register )
12+ self .assertEqual ({item_key : item_to_register },
13+ registry .registered_items )
14+
15+ def test_registry_starts_out_empty (self ):
16+ self .assertEqual ({}, DictRegistry ().registered_items )
17+
18+ def test_modifying_registered_items_isnt_exposed_to_other_callers (self ):
19+ registry = DictRegistry ()
20+ registry .registered_items ['test_item' ] = mock .Mock ()
21+ self .assertEqual ({}, registry .registered_items )
22+
23+ def test_keys_cannot_be_replaced (self ):
24+ registry = DictRegistry ()
25+ item_key = 'test_key'
26+ registry .register_item (item_key , mock .Mock ())
27+ self .assertRaises (ValueError ,
28+ registry .register_item , item_key , mock .Mock ())
You can’t perform that action at this time.
0 commit comments