keystoneauth/keystoneauth1/exceptions/auth_plugins.py
Jamie Lennox d652305145 Raise error if loader is provided name without id
For v3 if you provide project_name or user_name without the
corresponding id it is going to fail. To get around this OSC and OCC
have been doing pre plugin loading validation checks.

Now that loading is separate from the plugin itself it makes sense that
we can enforce certain requirements on plugin loaders such that only
valid configurations may be loaded.

Change-Id: Ife6ff07214d702d76ce8b1d0e87f60f732aa0230
2015-09-01 13:58:53 +10:00

95 lines
2.9 KiB
Python

# 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 keystoneauth1.exceptions import base
__all__ = ['AuthPluginException',
'MissingAuthPlugin',
'NoMatchingPlugin',
'UnsupportedParameters',
'OptionError',
'MissingRequiredOptions']
class AuthPluginException(base.ClientException):
message = "Unknown error with authentication plugins."
class MissingAuthPlugin(AuthPluginException):
message = "An authenticated request is required but no plugin available."
class NoMatchingPlugin(AuthPluginException):
"""There were no auth plugins that could be created from the parameters
provided.
:param str name: The name of the plugin that was attempted to load.
.. py:attribute:: name
The name of the plugin that was attempted to load.
"""
def __init__(self, name):
self.name = name
msg = 'The plugin %s could not be found' % name
super(NoMatchingPlugin, self).__init__(msg)
class UnsupportedParameters(AuthPluginException):
"""A parameter that was provided or returned is not supported.
:param list(str) names: Names of the unsupported parameters.
.. py:attribute:: names
Names of the unsupported parameters.
"""
def __init__(self, names):
self.names = names
m = 'The following parameters were given that are unsupported: %s'
super(UnsupportedParameters, self).__init__(m % ', '.join(self.names))
class OptionError(AuthPluginException):
"""A requirement of this plugin loader was not met.
This error can be raised by a specific plugin loader during the
load_from_options stage to indicate a parameter problem that can not be
handled by the generic options loader.
The intention here is that a plugin can do checks like if a name parameter
is provided then a domain parameter must also be provided, but that Opt
checking doesn't handle.
"""
class MissingRequiredOptions(OptionError):
"""One or more required options were not provided.
:param list(keystoneauth1.loading.Opt) options: Missing options.
.. py:attribute:: options
List of the missing options.
"""
def __init__(self, options):
self.options = options
names = ", ".join(o.name for o in options)
m = 'Auth plugin requires parameters which were not given: %s'
super(MissingRequiredOptions, self).__init__(m % names)