🐛 fix get_primary_key will fail when a module is loaded later. fix #8

This commit is contained in:
chfw 2018-11-17 22:52:43 +00:00
parent 38531382cb
commit 92b65ac022
2 changed files with 14 additions and 9 deletions

View File

@ -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"""

View File

@ -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():