mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Merge pull request #15074 from ansible/pluginloader-cleanups
Cleanup some minor issues in PuginLoader:
This commit is contained in:
commit
f39a1da360
1 changed files with 31 additions and 17 deletions
|
@ -316,6 +316,7 @@ class PluginLoader:
|
||||||
def get(self, name, *args, **kwargs):
|
def get(self, name, *args, **kwargs):
|
||||||
''' instantiates a plugin of the given name using arguments '''
|
''' instantiates a plugin of the given name using arguments '''
|
||||||
|
|
||||||
|
class_only = kwargs.pop('class_only', False)
|
||||||
if name in self.aliases:
|
if name in self.aliases:
|
||||||
name = self.aliases[name]
|
name = self.aliases[name]
|
||||||
path = self.find_plugin(name)
|
path = self.find_plugin(name)
|
||||||
|
@ -325,23 +326,28 @@ class PluginLoader:
|
||||||
if path not in self._module_cache:
|
if path not in self._module_cache:
|
||||||
self._module_cache[path] = self._load_module_source('.'.join([self.package, name]), path)
|
self._module_cache[path] = self._load_module_source('.'.join([self.package, name]), path)
|
||||||
|
|
||||||
if kwargs.get('class_only', False):
|
|
||||||
obj = getattr(self._module_cache[path], self.class_name)
|
obj = getattr(self._module_cache[path], self.class_name)
|
||||||
else:
|
|
||||||
obj = getattr(self._module_cache[path], self.class_name)(*args, **kwargs)
|
|
||||||
if self.base_class:
|
if self.base_class:
|
||||||
# The import path is hardcoded and should be the right place,
|
# The import path is hardcoded and should be the right place,
|
||||||
# so we are not expecting an ImportError.
|
# so we are not expecting an ImportError.
|
||||||
module = __import__(self.package, fromlist=[self.base_class])
|
module = __import__(self.package, fromlist=[self.base_class])
|
||||||
# Check whether this obj has the required base class.
|
# Check whether this obj has the required base class.
|
||||||
if not issubclass(obj.__class__, getattr(module, self.base_class, None)):
|
try:
|
||||||
|
plugin_class = getattr(module, self.base_class)
|
||||||
|
except AttributeError:
|
||||||
return None
|
return None
|
||||||
|
if not issubclass(obj, plugin_class):
|
||||||
|
return None
|
||||||
|
|
||||||
|
if not class_only:
|
||||||
|
obj = obj(*args, **kwargs)
|
||||||
|
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
def all(self, *args, **kwargs):
|
def all(self, *args, **kwargs):
|
||||||
''' instantiates all plugins with the same arguments '''
|
''' instantiates all plugins with the same arguments '''
|
||||||
|
|
||||||
|
class_only = kwargs.pop('class_only', False)
|
||||||
for i in self._get_paths():
|
for i in self._get_paths():
|
||||||
matches = glob.glob(os.path.join(i, "*.py"))
|
matches = glob.glob(os.path.join(i, "*.py"))
|
||||||
matches.sort()
|
matches.sort()
|
||||||
|
@ -353,13 +359,21 @@ class PluginLoader:
|
||||||
if path not in self._module_cache:
|
if path not in self._module_cache:
|
||||||
self._module_cache[path] = self._load_module_source(name, path)
|
self._module_cache[path] = self._load_module_source(name, path)
|
||||||
|
|
||||||
if kwargs.get('class_only', False):
|
|
||||||
obj = getattr(self._module_cache[path], self.class_name)
|
obj = getattr(self._module_cache[path], self.class_name)
|
||||||
else:
|
if self.base_class:
|
||||||
obj = getattr(self._module_cache[path], self.class_name)(*args, **kwargs)
|
# The import path is hardcoded and should be the right place,
|
||||||
|
# so we are not expecting an ImportError.
|
||||||
if self.base_class and self.base_class not in [base.__name__ for base in obj.__class__.__bases__]:
|
module = __import__(self.package, fromlist=[self.base_class])
|
||||||
|
# Check whether this obj has the required base class.
|
||||||
|
try:
|
||||||
|
plugin_class = getattr(module, self.base_class)
|
||||||
|
except AttributeError:
|
||||||
continue
|
continue
|
||||||
|
if not issubclass(obj, plugin_class):
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not class_only:
|
||||||
|
obj = obj(*args, **kwargs)
|
||||||
|
|
||||||
# set extra info on the module, in case we want it later
|
# set extra info on the module, in case we want it later
|
||||||
setattr(obj, '_original_path', path)
|
setattr(obj, '_original_path', path)
|
||||||
|
|
Loading…
Reference in a new issue