diff --git a/lml/plugin.py b/lml/plugin.py index 7c36802..70629fc 100644 --- a/lml/plugin.py +++ b/lml/plugin.py @@ -255,8 +255,7 @@ class PluginManager(object): a instance of plugin info """ self._logger.debug("load %s later", plugin_info.absolute_import_path) - for key in plugin_info.tags(): - self.registry[key.lower()].append(plugin_info) + self._update_registry_and_expand_tag_groups(plugin_info) def load_me_now(self, key, library=None, **keywords): """ @@ -319,18 +318,21 @@ class PluginManager(object): a instance of plugin info """ self._logger.debug("register %s", _show_me_your_name(plugin_cls)) - primary_tag = None - for index, key in enumerate(plugin_info.tags()): - plugin_info.cls = plugin_cls - self.registry[key.lower()].append(plugin_info) - if index == 0: - primary_tag = key.lower() - self.tag_groups[key.lower()] = primary_tag + plugin_info.cls = plugin_cls + self._update_registry_and_expand_tag_groups(plugin_info) def get_primary_key(self, key): __key = key.lower() return self.tag_groups.get(__key, None) + def _update_registry_and_expand_tag_groups(self, plugin_info): + primary_tag = None + for index, key in enumerate(plugin_info.tags()): + self.registry[key.lower()].append(plugin_info) + if index == 0: + primary_tag = key.lower() + self.tag_groups[key.lower()] = primary_tag + def _register_class(cls): """Reigister a newly created plugin manager""" diff --git a/tests/test_plugin_manager.py b/tests/test_plugin_manager.py index 5b447c6..49ea972 100644 --- a/tests/test_plugin_manager.py +++ b/tests/test_plugin_manager.py @@ -33,6 +33,8 @@ def test_load_me_now(mock_import): manager.load_me_later(plugin_info) actual = manager.load_me_now(test_plugin) eq_(actual, custom_class) + eq_(manager.tag_groups, {"my plugin": "my plugin"}) + eq_(plugin_info, manager.registry["my plugin"][0]) @raises(Exception) @@ -87,6 +89,7 @@ def test_register_a_plugin(): manager.register_a_plugin(TestClass, plugin_info) eq_(plugin_info.cls, TestClass) eq_(manager.registry["my"][0], plugin_info) + eq_(manager.tag_groups, {"my": "my"}) def test_get_a_plugin():