Merge "Include transaction ID in ClientException.__str__"
This commit is contained in:
commit
d63ec1b38d
@ -35,6 +35,13 @@ class ClientException(Exception):
|
|||||||
self.http_response_content = http_response_content
|
self.http_response_content = http_response_content
|
||||||
self.http_response_headers = http_response_headers
|
self.http_response_headers = http_response_headers
|
||||||
|
|
||||||
|
self.transaction_id = None
|
||||||
|
if self.http_response_headers:
|
||||||
|
for header in ('X-Trans-Id', 'X-Openstack-Request-Id'):
|
||||||
|
if header in self.http_response_headers:
|
||||||
|
self.transaction_id = self.http_response_headers[header]
|
||||||
|
break
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_response(cls, resp, msg=None, body=None):
|
def from_response(cls, resp, msg=None, body=None):
|
||||||
msg = msg or '%s %s' % (resp.status_code, resp.reason)
|
msg = msg or '%s %s' % (resp.status_code, resp.reason)
|
||||||
@ -78,4 +85,7 @@ class ClientException(Exception):
|
|||||||
else:
|
else:
|
||||||
b += ' [first 60 chars of response] %s' \
|
b += ' [first 60 chars of response] %s' \
|
||||||
% self.http_response_content[:60]
|
% self.http_response_content[:60]
|
||||||
return b and '%s: %s' % (a, b) or a
|
c = ''
|
||||||
|
if self.transaction_id:
|
||||||
|
c = ' (txn: %s)' % self.transaction_id
|
||||||
|
return b and '%s: %s%s' % (a, b, c) or (a + c)
|
||||||
|
@ -2058,8 +2058,9 @@ Examples:
|
|||||||
try:
|
try:
|
||||||
globals()['st_%s' % args[0]](parser, argv[1:], output)
|
globals()['st_%s' % args[0]](parser, argv[1:], output)
|
||||||
except ClientException as err:
|
except ClientException as err:
|
||||||
|
trans_id = err.transaction_id
|
||||||
|
err.transaction_id = None # clear it so we aren't overly noisy
|
||||||
output.error(str(err))
|
output.error(str(err))
|
||||||
trans_id = (err.http_response_headers or {}).get('X-Trans-Id')
|
|
||||||
if trans_id:
|
if trans_id:
|
||||||
output.error("Failed Transaction ID: %s",
|
output.error("Failed Transaction ID: %s",
|
||||||
parse_header_string(trans_id))
|
parse_header_string(trans_id))
|
||||||
|
@ -84,6 +84,23 @@ class TestClientException(unittest.TestCase):
|
|||||||
self.assertIs(True, hasattr(exc, key))
|
self.assertIs(True, hasattr(exc, key))
|
||||||
self.assertEqual(getattr(exc, key), value)
|
self.assertEqual(getattr(exc, key), value)
|
||||||
|
|
||||||
|
def test_transaction_id_from_headers(self):
|
||||||
|
exc = c.ClientException('test')
|
||||||
|
self.assertIsNone(exc.transaction_id)
|
||||||
|
|
||||||
|
exc = c.ClientException('test', http_response_headers={})
|
||||||
|
self.assertIsNone(exc.transaction_id)
|
||||||
|
|
||||||
|
exc = c.ClientException('test', http_response_headers={
|
||||||
|
'X-Trans-Id': 'some-id'})
|
||||||
|
self.assertEqual(exc.transaction_id, 'some-id')
|
||||||
|
self.assertIn('(txn: some-id)', str(exc))
|
||||||
|
|
||||||
|
exc = c.ClientException('test', http_response_headers={
|
||||||
|
'X-Openstack-Request-Id': 'some-other-id'})
|
||||||
|
self.assertEqual(exc.transaction_id, 'some-other-id')
|
||||||
|
self.assertIn('(txn: some-other-id)', str(exc))
|
||||||
|
|
||||||
|
|
||||||
class MockHttpResponse(object):
|
class MockHttpResponse(object):
|
||||||
def __init__(self, status=0, headers=None, verify=False):
|
def __init__(self, status=0, headers=None, verify=False):
|
||||||
|
Loading…
Reference in New Issue
Block a user