use msg_fmt not message in Exceptions

This doesn't solve the problem yet, but clarifies
the format string from the final string.

Partial-bug: #1243883
Change-Id: Ia0f19423248304984cc53926dfb87c6a49c90e11
This commit is contained in:
Angus Salkeld 2013-10-23 23:47:59 -10:00
parent 8c7872e148
commit c5e93e6c6b
9 changed files with 55 additions and 55 deletions

View File

@ -30,7 +30,7 @@ logger = logging.getLogger(__name__)
class LoadbalancerBuildError(exception.HeatException): class LoadbalancerBuildError(exception.HeatException):
message = _("There was an error building the loadbalancer:%(lb_name)s.") msg_fmt = _("There was an error building the loadbalancer:%(lb_name)s.")
class CloudLoadBalancer(rackspace_resource.RackspaceResource): class CloudLoadBalancer(rackspace_resource.RackspaceResource):

View File

@ -105,7 +105,7 @@ class HeatException(Exception):
self.kwargs = kwargs self.kwargs = kwargs
try: try:
self.message = self.message % kwargs self.message = self.msg_fmt % kwargs
except KeyError: except KeyError:
exc_info = sys.exc_info() exc_info = sys.exc_info()
#kwargs doesn't match a variable in the message #kwargs doesn't match a variable in the message
@ -125,156 +125,156 @@ class HeatException(Exception):
class MissingCredentialError(HeatException): class MissingCredentialError(HeatException):
message = _("Missing required credential: %(required)s") msg_fmt = _("Missing required credential: %(required)s")
class BadAuthStrategy(HeatException): class BadAuthStrategy(HeatException):
message = _("Incorrect auth strategy, expected \"%(expected)s\" but " msg_fmt = _("Incorrect auth strategy, expected \"%(expected)s\" but "
"received \"%(received)s\"") "received \"%(received)s\"")
class AuthBadRequest(HeatException): class AuthBadRequest(HeatException):
message = _("Connect error/bad request to Auth service at URL %(url)s.") msg_fmt = _("Connect error/bad request to Auth service at URL %(url)s.")
class AuthUrlNotFound(HeatException): class AuthUrlNotFound(HeatException):
message = _("Auth service at URL %(url)s not found.") msg_fmt = _("Auth service at URL %(url)s not found.")
class AuthorizationFailure(HeatException): class AuthorizationFailure(HeatException):
message = _("Authorization failed.") msg_fmt = _("Authorization failed.")
class NotAuthenticated(HeatException): class NotAuthenticated(HeatException):
message = _("You are not authenticated.") msg_fmt = _("You are not authenticated.")
class Forbidden(HeatException): class Forbidden(HeatException):
message = _("You are not authorized to complete this action.") msg_fmt = _("You are not authorized to complete this action.")
#NOTE(bcwaldon): here for backwards-compatability, need to deprecate. #NOTE(bcwaldon): here for backwards-compatability, need to deprecate.
class NotAuthorized(Forbidden): class NotAuthorized(Forbidden):
message = _("You are not authorized to complete this action.") msg_fmt = _("You are not authorized to complete this action.")
class Invalid(HeatException): class Invalid(HeatException):
message = _("Data supplied was not valid: %(reason)s") msg_fmt = _("Data supplied was not valid: %(reason)s")
class AuthorizationRedirect(HeatException): class AuthorizationRedirect(HeatException):
message = _("Redirecting to %(uri)s for authorization.") msg_fmt = _("Redirecting to %(uri)s for authorization.")
class ClientConfigurationError(HeatException): class ClientConfigurationError(HeatException):
message = _("There was an error configuring the client.") msg_fmt = _("There was an error configuring the client.")
class RequestUriTooLong(HeatException): class RequestUriTooLong(HeatException):
message = _("The URI was too long.") msg_fmt = _("The URI was too long.")
class ServerError(HeatException): class ServerError(HeatException):
message = _("The request returned 500 Internal Server Error" msg_fmt = _("The request returned 500 Internal Server Error"
"\n\nThe response body:\n%(body)s") "\n\nThe response body:\n%(body)s")
class MaxRedirectsExceeded(HeatException): class MaxRedirectsExceeded(HeatException):
message = _("Maximum redirects (%(redirects)s) was exceeded.") msg_fmt = _("Maximum redirects (%(redirects)s) was exceeded.")
class InvalidRedirect(HeatException): class InvalidRedirect(HeatException):
message = _("Received invalid HTTP redirect.") msg_fmt = _("Received invalid HTTP redirect.")
class NoServiceEndpoint(HeatException): class NoServiceEndpoint(HeatException):
message = _("Response from Keystone does not contain a Heat endpoint.") msg_fmt = _("Response from Keystone does not contain a Heat endpoint.")
class RegionAmbiguity(HeatException): class RegionAmbiguity(HeatException):
message = _("Multiple 'image' service matches for region %(region)s. This " msg_fmt = _("Multiple 'image' service matches for region %(region)s. This "
"generally means that a region is required and you have not " "generally means that a region is required and you have not "
"supplied one.") "supplied one.")
class UserParameterMissing(HeatException): class UserParameterMissing(HeatException):
message = _("The Parameter (%(key)s) was not provided.") msg_fmt = _("The Parameter (%(key)s) was not provided.")
class UnknownUserParameter(HeatException): class UnknownUserParameter(HeatException):
message = _("The Parameter (%(key)s) was not defined in template.") msg_fmt = _("The Parameter (%(key)s) was not defined in template.")
class InvalidTemplateParameter(HeatException): class InvalidTemplateParameter(HeatException):
message = _("The Parameter (%(key)s) has no attributes.") msg_fmt = _("The Parameter (%(key)s) has no attributes.")
class InvalidTemplateAttribute(HeatException): class InvalidTemplateAttribute(HeatException):
message = _("The Referenced Attribute (%(resource)s %(key)s)" msg_fmt = _("The Referenced Attribute (%(resource)s %(key)s)"
" is incorrect.") " is incorrect.")
class InvalidTemplateReference(HeatException): class InvalidTemplateReference(HeatException):
message = _("The specified reference \"%(resource)s\" (in %(key)s)" msg_fmt = _("The specified reference \"%(resource)s\" (in %(key)s)"
" is incorrect.") " is incorrect.")
class UserKeyPairMissing(HeatException): class UserKeyPairMissing(HeatException):
message = _("The Key (%(key_name)s) could not be found.") msg_fmt = _("The Key (%(key_name)s) could not be found.")
class FlavorMissing(HeatException): class FlavorMissing(HeatException):
message = _("The Flavor ID (%(flavor_id)s) could not be found.") msg_fmt = _("The Flavor ID (%(flavor_id)s) could not be found.")
class ImageNotFound(HeatException): class ImageNotFound(HeatException):
message = _("The Image (%(image_name)s) could not be found.") msg_fmt = _("The Image (%(image_name)s) could not be found.")
class NoUniqueImageFound(HeatException): class NoUniqueImageFound(HeatException):
message = _("Multiple images were found with name (%(image_name)s).") msg_fmt = _("Multiple images were found with name (%(image_name)s).")
class InvalidTenant(HeatException): class InvalidTenant(HeatException):
message = _("Searching Tenant %(target)s " msg_fmt = _("Searching Tenant %(target)s "
"from Tenant %(actual)s forbidden.") "from Tenant %(actual)s forbidden.")
class StackNotFound(HeatException): class StackNotFound(HeatException):
message = _("The Stack (%(stack_name)s) could not be found.") msg_fmt = _("The Stack (%(stack_name)s) could not be found.")
class StackExists(HeatException): class StackExists(HeatException):
message = _("The Stack (%(stack_name)s) already exists.") msg_fmt = _("The Stack (%(stack_name)s) already exists.")
class StackValidationFailed(HeatException): class StackValidationFailed(HeatException):
message = _("%(message)s") msg_fmt = _("%(message)s")
class ResourceNotFound(HeatException): class ResourceNotFound(HeatException):
message = _("The Resource (%(resource_name)s) could not be found " msg_fmt = _("The Resource (%(resource_name)s) could not be found "
"in Stack %(stack_name)s.") "in Stack %(stack_name)s.")
class ResourceTypeNotFound(HeatException): class ResourceTypeNotFound(HeatException):
message = _("The Resource Type (%(type_name)s) could not be found.") msg_fmt = _("The Resource Type (%(type_name)s) could not be found.")
class ResourceNotAvailable(HeatException): class ResourceNotAvailable(HeatException):
message = _("The Resource (%(resource_name)s) is not available.") msg_fmt = _("The Resource (%(resource_name)s) is not available.")
class PhysicalResourceNotFound(HeatException): class PhysicalResourceNotFound(HeatException):
message = _("The Resource (%(resource_id)s) could not be found.") msg_fmt = _("The Resource (%(resource_id)s) could not be found.")
class WatchRuleNotFound(HeatException): class WatchRuleNotFound(HeatException):
message = _("The Watch Rule (%(watch_name)s) could not be found.") msg_fmt = _("The Watch Rule (%(watch_name)s) could not be found.")
class ResourceFailure(HeatException): class ResourceFailure(HeatException):
message = _("%(exc_type)s: %(message)s") msg_fmt = _("%(exc_type)s: %(message)s")
def __init__(self, exception, resource, action=None): def __init__(self, exception, resource, action=None):
if isinstance(exception, ResourceFailure): if isinstance(exception, ResourceFailure):
@ -288,14 +288,14 @@ class ResourceFailure(HeatException):
class NotSupported(HeatException): class NotSupported(HeatException):
message = _("%(feature)s is not supported.") msg_fmt = _("%(feature)s is not supported.")
class ResourcePropertyConflict(HeatException): class ResourcePropertyConflict(HeatException):
message = _('Cannot define the following properties at the same time: %s.') msg_fmt = _('Cannot define the following properties at the same time: %s.')
def __init__(self, *args): def __init__(self, *args):
self.message = self.message % ", ".join(args) self.msg_fmt = self.msg_fmt % ", ".join(args)
super(ResourcePropertyConflict, self).__init__() super(ResourcePropertyConflict, self).__init__()
@ -310,7 +310,7 @@ class HTTPExceptionDisguise(Exception):
class EgressRuleNotAllowed(HeatException): class EgressRuleNotAllowed(HeatException):
message = _("Egress rules are only allowed when " msg_fmt = _("Egress rules are only allowed when "
"Neutron is used and the 'VpcId' property is set.") "Neutron is used and the 'VpcId' property is set.")
@ -324,12 +324,12 @@ class NotFound(Error):
class InvalidContentType(HeatException): class InvalidContentType(HeatException):
message = "Invalid content type %(content_type)s" msg_fmt = "Invalid content type %(content_type)s"
class RequestLimitExceeded(HeatException): class RequestLimitExceeded(HeatException):
message = _('Request limit exceeded: %(message)s') msg_fmt = _('Request limit exceeded: %(message)s')
class StackResourceLimitExceeded(HeatException): class StackResourceLimitExceeded(HeatException):
message = _('Maximum resources per stack exceeded.') msg_fmt = _('Maximum resources per stack exceeded.')

View File

@ -22,7 +22,7 @@ from heat.openstack.common.gettextutils import _
class CircularDependencyException(exception.HeatException): class CircularDependencyException(exception.HeatException):
message = _("Circular Dependency Found: %(cycle)s") msg_fmt = _("Circular Dependency Found: %(cycle)s")
class Node(object): class Node(object):

View File

@ -267,7 +267,7 @@ class EngineService(service.Service):
if len(tmpl[tpl.RESOURCES]) > cfg.CONF.max_resources_per_stack: if len(tmpl[tpl.RESOURCES]) > cfg.CONF.max_resources_per_stack:
raise exception.RequestLimitExceeded( raise exception.RequestLimitExceeded(
message=exception.StackResourceLimitExceeded.message) message=exception.StackResourceLimitExceeded.msg_fmt)
# Extract the common query parameters # Extract the common query parameters
common_params = api.extract_args(args) common_params = api.extract_args(args)
@ -319,7 +319,7 @@ class EngineService(service.Service):
tmpl = parser.Template(template, files=files) tmpl = parser.Template(template, files=files)
if len(tmpl[tpl.RESOURCES]) > cfg.CONF.max_resources_per_stack: if len(tmpl[tpl.RESOURCES]) > cfg.CONF.max_resources_per_stack:
raise exception.RequestLimitExceeded( raise exception.RequestLimitExceeded(
message=exception.StackResourceLimitExceeded.message) message=exception.StackResourceLimitExceeded.msg_fmt)
stack_name = current_stack.name stack_name = current_stack.name
common_params = api.extract_args(args) common_params = api.extract_args(args)
env = environment.Environment(params) env = environment.Environment(params)

View File

@ -85,7 +85,7 @@ class StackResource(resource.Resource):
self.stack.root_stack.total_resources() > self.stack.root_stack.total_resources() >
cfg.CONF.max_resources_per_stack)): cfg.CONF.max_resources_per_stack)):
raise exception.RequestLimitExceeded( raise exception.RequestLimitExceeded(
message=exception.StackResourceLimitExceeded.message) message=exception.StackResourceLimitExceeded.msg_fmt)
self._outputs_to_attribs(child_template) self._outputs_to_attribs(child_template)
# Note we disable rollback for nested stacks, since they # Note we disable rollback for nested stacks, since they
@ -133,7 +133,7 @@ class StackResource(resource.Resource):
new_size = nested_stack.root_stack.total_resources() + res_diff new_size = nested_stack.root_stack.total_resources() + res_diff
if new_size > cfg.CONF.max_resources_per_stack: if new_size > cfg.CONF.max_resources_per_stack:
raise exception.RequestLimitExceeded( raise exception.RequestLimitExceeded(
message=exception.StackResourceLimitExceeded.message) message=exception.StackResourceLimitExceeded.msg_fmt)
# Note we disable rollback for nested stacks, since they # Note we disable rollback for nested stacks, since they
# should be rolled back by the parent stack on failure # should be rolled back by the parent stack on failure

View File

@ -484,7 +484,7 @@ class StackServiceCreateUpdateDeleteTest(HeatTestCase):
ex = self.assertRaises(exception.RequestLimitExceeded, ex = self.assertRaises(exception.RequestLimitExceeded,
self.man.create_stack, self.ctx, stack_name, self.man.create_stack, self.ctx, stack_name,
template, params, None, {}) template, params, None, {})
self.assertIn(exception.StackResourceLimitExceeded.message, self.assertIn(exception.StackResourceLimitExceeded.msg_fmt,
str(ex)) str(ex))
def test_stack_validate(self): def test_stack_validate(self):
@ -652,7 +652,7 @@ class StackServiceCreateUpdateDeleteTest(HeatTestCase):
self.man.update_stack, self.ctx, self.man.update_stack, self.ctx,
old_stack.identifier(), template, params, None, old_stack.identifier(), template, params, None,
{}) {})
self.assertIn(exception.StackResourceLimitExceeded.message, self.assertIn(exception.StackResourceLimitExceeded.msg_fmt,
str(ex)) str(ex))
def test_stack_update_verify_err(self): def test_stack_update_verify_err(self):

View File

@ -21,7 +21,7 @@ from heat.tests import common
class TestException(exception.HeatException): class TestException(exception.HeatException):
message = _("Testing message %(text)s") msg_fmt = _("Testing message %(text)s")
class TestHeatException(common.HeatTestCase): class TestHeatException(common.HeatTestCase):

View File

@ -53,7 +53,7 @@ class FaultMiddlewareTest(HeatTestCase):
msg = u'Error with non-ascii chars \x80' msg = u'Error with non-ascii chars \x80'
class TestException(heat_exc.HeatException): class TestException(heat_exc.HeatException):
message = msg msg_fmt = msg
wrapper = fault.FaultWrapper(None) wrapper = fault.FaultWrapper(None)
msg = wrapper._error(TestException()) msg = wrapper._error(TestException())

View File

@ -297,7 +297,7 @@ Outputs:
prop_diff = {'TemplateURL': 'https://server.test/new.template'} prop_diff = {'TemplateURL': 'https://server.test/new.template'}
ex = self.assertRaises(exception.RequestLimitExceeded, ex = self.assertRaises(exception.RequestLimitExceeded,
rsrc.handle_update, new_res, {}, prop_diff) rsrc.handle_update, new_res, {}, prop_diff)
self.assertIn(exception.StackResourceLimitExceeded.message, self.assertIn(exception.StackResourceLimitExceeded.msg_fmt,
str(ex)) str(ex))
rsrc.delete() rsrc.delete()