From 4a4fe40b648f9795fc3fe12e7b2c65a21e5e2857 Mon Sep 17 00:00:00 2001 From: Kanagaraj Manickam Date: Thu, 5 Nov 2015 18:10:50 +0530 Subject: [PATCH] Adds error_code in heat exceptions Tags a given exception with error code. It helps to report or handle the exception based the code. implements blueprint: heat-template-validate-improvements Change-Id: Iea6599c1602e57ce4020303e56c839d1a6a8ac52 --- heat/common/exception.py | 4 ++++ heat/tests/test_common_exception.py | 34 +++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 heat/tests/test_common_exception.py diff --git a/heat/common/exception.py b/heat/common/exception.py index 516b96acc..f7b2d1a75 100644 --- a/heat/common/exception.py +++ b/heat/common/exception.py @@ -55,12 +55,16 @@ class HeatException(Exception): provided to the constructor. """ message = _("An unknown exception occurred.") + error_code = None def __init__(self, **kwargs): self.kwargs = kwargs try: self.message = self.msg_fmt % kwargs + + if self.error_code: + self.message = 'HEAT-E%s %s' % (self.error_code, self.message) except KeyError: exc_info = sys.exc_info() # kwargs doesn't match a variable in the message diff --git a/heat/tests/test_common_exception.py b/heat/tests/test_common_exception.py new file mode 100644 index 000000000..cd56f6038 --- /dev/null +++ b/heat/tests/test_common_exception.py @@ -0,0 +1,34 @@ +# +# 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 heat.common import exception +from heat.tests import common + + +class TestException(common.HeatTestCase): + + class SampleExceptionNoErorCode(exception.HeatException): + msg_fmt = 'Test exception' + + class SampleException(SampleExceptionNoErorCode): + error_code = 100 + + def test_heat_exception_no_error_code(self): + ex = TestException.SampleExceptionNoErorCode() + self.assertEqual('Test exception', + ex.message) + + def test_heat_exception_with_error_code(self): + ex = TestException.SampleException() + self.assertEqual('HEAT-E100 Test exception', + ex.message)