diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b379fe71e2aeba0a01d845a5917e605e553d235..edfe613cbf68b7b9ddb3e7f24c6b8a0cebed9c10 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ * bugfix: a race condition during connection setup itself * moved __version__ to coolamqp root * split `compile_definitions` into a separate package +* exceptions will display their reply_text correctly if fed a memoryview # v0.100: diff --git a/coolamqp/exceptions.py b/coolamqp/exceptions.py index f55e68d732cc6ea6df9cbd841a80c93e57e73b46..34f5404c5dd1229363953b7ec4ea2d0e2b8e10bb 100644 --- a/coolamqp/exceptions.py +++ b/coolamqp/exceptions.py @@ -27,11 +27,22 @@ class AMQPError(CoolAMQPError): return self.reply_code in HARD_ERRORS def __str__(self): # type: () -> str - return 'AMQP error %s: %s' % (self.reply_code, self.reply_text) + return 'AMQP error %s: %s' % (self.reply_code, self.__get_reply_text()) + + def __get_reply_text(self): # type: () -> str + if isinstance(self.reply_text, memoryview): + reply_text = self.reply_text.tobytes().decode('utf8') + else: + reply_text = self.reply_text + + if isinstance(self.reply_text, bytes): + reply_text = self.reply_text.decode('utf8') + + return reply_text def __repr__(self): # type: () -> str return 'AMQPError(' + repr(self.reply_code) + ', ' + repr( - self.reply_text) + \ + self.__get_reply_text()) + \ ', ' + repr(self.class_id) + ', ' + repr(self.method_id) + ')' def __init__(self, *args):