Merge "Provide a means to get all installed plugins"
This commit is contained in:
@@ -20,6 +20,8 @@ __all__ = [
|
||||
# auth.base
|
||||
'AUTH_INTERFACE',
|
||||
'BaseAuthPlugin',
|
||||
'get_available_plugin_names',
|
||||
'get_available_plugin_classes',
|
||||
'get_plugin_class',
|
||||
'IDENTITY_AUTH_HEADER_NAME',
|
||||
'PLUGIN_NAMESPACE',
|
||||
|
@@ -27,6 +27,34 @@ PLUGIN_NAMESPACE = 'keystoneclient.auth.plugin'
|
||||
IDENTITY_AUTH_HEADER_NAME = 'X-Auth-Token'
|
||||
|
||||
|
||||
def get_available_plugin_names():
|
||||
"""Get the names of all the plugins that are available on the system.
|
||||
|
||||
This is particularly useful for help and error text to prompt a user for
|
||||
example what plugins they may specify.
|
||||
|
||||
:returns: A list of names.
|
||||
:rtype: frozenset
|
||||
"""
|
||||
mgr = stevedore.ExtensionManager(namespace=PLUGIN_NAMESPACE,
|
||||
invoke_on_load=False)
|
||||
return frozenset(mgr.names())
|
||||
|
||||
|
||||
def get_available_plugin_classes():
|
||||
"""Retrieve all the plugin classes available on the system.
|
||||
|
||||
:returns: A dict with plugin entrypoint name as the key and the plugin
|
||||
class as the value.
|
||||
:rtype: dict
|
||||
"""
|
||||
mgr = stevedore.ExtensionManager(namespace=PLUGIN_NAMESPACE,
|
||||
propagate_map_exceptions=True,
|
||||
invoke_on_load=False)
|
||||
|
||||
return dict(mgr.map(lambda ext: (ext.entry_point.name, ext.plugin)))
|
||||
|
||||
|
||||
def get_plugin_class(name):
|
||||
"""Retrieve a plugin class by its entrypoint name.
|
||||
|
||||
|
36
keystoneclient/tests/unit/auth/test_auth.py
Normal file
36
keystoneclient/tests/unit/auth/test_auth.py
Normal file
@@ -0,0 +1,36 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from keystoneclient import auth
|
||||
from keystoneclient.auth import identity
|
||||
from keystoneclient.tests.unit.auth import utils
|
||||
|
||||
|
||||
class AuthTests(utils.TestCase):
|
||||
|
||||
def test_plugin_names_in_available(self):
|
||||
plugins = auth.get_available_plugin_names()
|
||||
|
||||
for p in ('password', 'v2password', 'v3password',
|
||||
'token', 'v2token', 'v3token'):
|
||||
self.assertIn(p, plugins)
|
||||
|
||||
def test_plugin_classes_in_available(self):
|
||||
plugins = auth.get_available_plugin_classes()
|
||||
|
||||
self.assertIs(plugins['password'], identity.Password)
|
||||
self.assertIs(plugins['v2password'], identity.V2Password)
|
||||
self.assertIs(plugins['v3password'], identity.V3Password)
|
||||
|
||||
self.assertIs(plugins['token'], identity.Token)
|
||||
self.assertIs(plugins['v2token'], identity.V2Token)
|
||||
self.assertIs(plugins['v3token'], identity.V3Token)
|
Reference in New Issue
Block a user