Merge "Pecan: Fix association of plugins with resources"
This commit is contained in:
commit
d51a18c4d0
2 files changed
+17
-11
No files matched your search
+16
-10
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user