Merge "Pecan: Fix association of plugins with resources"

This commit is contained in:
Jenkins authored and Gerrit Code Review committed 2016-02-15 09:47:02 +00:00
commit d51a18c4d0
2 files changed
+17 -11

No files matched your search

+16 -10
View File
@@ -570,20 +570,26 @@ class PluginAwareExtensionManager(ExtensionManager):
service_plugins)
return cls._instance
def get_plugin_supported_extension_aliases(self, plugin):
"""Return extension aliases supported by a given plugin"""
aliases = set()
# we also check all classes that the plugins inherit to see if they
# directly provide support for an extension
for item in [plugin] + plugin.__class__.mro():
try:
aliases |= set(
getattr(item, "supported_extension_aliases", []))
except TypeError:
# we land here if a class has a @property decorator for
# supported extension aliases. They only work on objects.
pass
return aliases
def get_supported_extension_aliases(self):
"""Gets extension aliases supported by all plugins."""
aliases = set()
for plugin in self.plugins.values():
# we also check all classes that the plugins inherit to see if they
# directly provide support for an extension
for item in [plugin] + plugin.__class__.mro():
try:
aliases |= set(
getattr(item, "supported_extension_aliases", []))
except TypeError:
# we land here if a class has an @property decorator for
# supported extension aliases. They only work on objects.
pass
aliases |= self.get_plugin_supported_extension_aliases(plugin)
return aliases
@classmethod
+1 -1
View File
@@ -45,7 +45,7 @@ def _plugin_for_resource(collection):
{'collection': collection, 'aliases': ext_res_mappings.keys()})
# find the plugin that supports this extension
for plugin in ext_mgr.plugins.values():
ext_aliases = getattr(plugin, 'supported_extension_aliases', [])
ext_aliases = ext_mgr.get_plugin_supported_extension_aliases(plugin)
for alias in ext_aliases:
if alias in ext_res_mappings:
# This plugin implements this resource