Fixed suppression of HTTP exceptions

Change-Id: I9545e790769f5be6bd11e9d95ef5d64627d7ced8
This commit is contained in:
Joe Keen 2015-03-13 12:11:24 -06:00
parent 78de788e52
commit 5e61df0495
1 changed files with 25 additions and 9 deletions

View File

@ -13,12 +13,15 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
import sys
from monascaclient.openstack.common import jsonutils
verbose = 0
log = logging.getLogger(__name__)
class BaseException(Exception):
@ -54,21 +57,34 @@ class HTTPException(BaseException):
def __init__(self, message=None):
super(HTTPException, self).__init__(message)
try:
log.error("exception: {}".format(message))
self.error = jsonutils.loads(message)
if 'error' not in self.error:
raise KeyError('Key "error" not exists')
except KeyError:
# NOTE(jianingy): If key 'error' happens not exist,
# self.message becomes no sense. In this case, we
# return doc of current exception class instead.
self.error = {'error':
{'message': self.__class__.__doc__}}
except Exception:
self.error = {'error':
{'message': self.message or self.__class__.__doc__}}
def __str__(self):
message = self.error['error'].get('message', 'Internal Error')
if 'description' in self.error:
# Python API:
# Expected message format:
# {
# "title": "Foo",
# "description": "Bar"
# }
message = self.error['description']
else:
# Java API:
# Expected message format:
# {
# "conflict":{"code":409,
# "message":"Bar",
# "details":"",
# "internal_code":"Baz"}
# }
for key in self.error:
message = self.error[key].get('message', 'Internal Error')
if verbose:
traceback = self.error['error'].get('traceback', '')
return 'ERROR: %s\n%s' % (message, traceback)