258 lines
7.1 KiB
Python
258 lines
7.1 KiB
Python
|
"""Pika specific exceptions"""
|
||
|
|
||
|
|
||
|
class AMQPError(Exception):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return 'An unspecified AMQP error has occurred'
|
||
|
|
||
|
|
||
|
class AMQPConnectionError(AMQPError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
if len(self.args) == 1:
|
||
|
if self.args[0] == 1:
|
||
|
return ('No connection could be opened after 1 '
|
||
|
'connection attempt')
|
||
|
elif isinstance(self.args[0], int):
|
||
|
return ('No connection could be opened after %s '
|
||
|
'connection attempts' % self.args[0])
|
||
|
else:
|
||
|
return 'No connection could be opened: %s' % self.args[0]
|
||
|
elif len(self.args) == 2:
|
||
|
return '%s: %s' % (self.args[0], self.args[1])
|
||
|
|
||
|
|
||
|
class IncompatibleProtocolError(AMQPConnectionError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return ('The protocol returned by the server is not supported: %s' %
|
||
|
(self.args,))
|
||
|
|
||
|
|
||
|
class AuthenticationError(AMQPConnectionError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return ('Server and client could not negotiate use of the %s '
|
||
|
'authentication mechanism' % self.args[0])
|
||
|
|
||
|
|
||
|
class ProbableAuthenticationError(AMQPConnectionError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return ('Client was disconnected at a connection stage indicating a '
|
||
|
'probable authentication error: %s' % (self.args,))
|
||
|
|
||
|
|
||
|
class ProbableAccessDeniedError(AMQPConnectionError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return ('Client was disconnected at a connection stage indicating a '
|
||
|
'probable denial of access to the specified virtual host: %s' %
|
||
|
(self.args,))
|
||
|
|
||
|
|
||
|
class NoFreeChannels(AMQPConnectionError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return 'The connection has run out of free channels'
|
||
|
|
||
|
|
||
|
class ConnectionClosed(AMQPConnectionError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
if len(self.args) == 2:
|
||
|
return 'The AMQP connection was closed (%s) %s' % (self.args[0],
|
||
|
self.args[1])
|
||
|
else:
|
||
|
return 'The AMQP connection was closed: %s' % (self.args,)
|
||
|
|
||
|
|
||
|
class AMQPChannelError(AMQPError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return 'An unspecified AMQP channel error has occurred'
|
||
|
|
||
|
|
||
|
class ChannelClosed(AMQPChannelError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
if len(self.args) == 2:
|
||
|
return 'The channel was closed (%s) %s' % (self.args[0],
|
||
|
self.args[1])
|
||
|
else:
|
||
|
return 'The channel was closed: %s' % (self.args,)
|
||
|
|
||
|
|
||
|
class ChannelAlreadyClosing(AMQPChannelError):
|
||
|
"""Raised when `Channel.close` is called while channel is already closing"""
|
||
|
pass
|
||
|
|
||
|
|
||
|
class DuplicateConsumerTag(AMQPChannelError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return ('The consumer tag specified already exists for this '
|
||
|
'channel: %s' % self.args[0])
|
||
|
|
||
|
|
||
|
class ConsumerCancelled(AMQPChannelError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return 'Server cancelled consumer'
|
||
|
|
||
|
|
||
|
class UnroutableError(AMQPChannelError):
|
||
|
"""Exception containing one or more unroutable messages returned by broker
|
||
|
via Basic.Return.
|
||
|
|
||
|
Used by BlockingChannel.
|
||
|
|
||
|
In publisher-acknowledgements mode, this is raised upon receipt of Basic.Ack
|
||
|
from broker; in the event of Basic.Nack from broker, `NackError` is raised
|
||
|
instead
|
||
|
"""
|
||
|
|
||
|
def __init__(self, messages):
|
||
|
"""
|
||
|
:param messages: sequence of returned unroutable messages
|
||
|
:type messages: sequence of `blocking_connection.ReturnedMessage`
|
||
|
objects
|
||
|
"""
|
||
|
super(UnroutableError, self).__init__(
|
||
|
"%s unroutable message(s) returned" % (len(messages)))
|
||
|
|
||
|
self.messages = messages
|
||
|
|
||
|
def __repr__(self):
|
||
|
return '%s: %i unroutable messages returned by broker' % (
|
||
|
self.__class__.__name__, len(self.messages))
|
||
|
|
||
|
|
||
|
class NackError(AMQPChannelError):
|
||
|
"""This exception is raised when a message published in
|
||
|
publisher-acknowledgements mode is Nack'ed by the broker.
|
||
|
|
||
|
Used by BlockingChannel.
|
||
|
"""
|
||
|
|
||
|
def __init__(self, messages):
|
||
|
"""
|
||
|
:param messages: sequence of returned unroutable messages
|
||
|
:type messages: sequence of `blocking_connection.ReturnedMessage`
|
||
|
objects
|
||
|
"""
|
||
|
super(NackError, self).__init__(
|
||
|
"%s message(s) NACKed" % (len(messages)))
|
||
|
|
||
|
self.messages = messages
|
||
|
|
||
|
def __repr__(self):
|
||
|
return '%s: %i unroutable messages returned by broker' % (
|
||
|
self.__class__.__name__, len(self.messages))
|
||
|
|
||
|
|
||
|
class InvalidChannelNumber(AMQPError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return 'An invalid channel number has been specified: %s' % self.args[0]
|
||
|
|
||
|
|
||
|
class ProtocolSyntaxError(AMQPError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return 'An unspecified protocol syntax error occurred'
|
||
|
|
||
|
|
||
|
class UnexpectedFrameError(ProtocolSyntaxError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return 'Received a frame out of sequence: %r' % self.args[0]
|
||
|
|
||
|
|
||
|
class ProtocolVersionMismatch(ProtocolSyntaxError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return 'Protocol versions did not match: %r vs %r' % (self.args[0],
|
||
|
self.args[1])
|
||
|
|
||
|
|
||
|
class BodyTooLongError(ProtocolSyntaxError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return ('Received too many bytes for a message delivery: '
|
||
|
'Received %i, expected %i' % (self.args[0], self.args[1]))
|
||
|
|
||
|
|
||
|
class InvalidFrameError(ProtocolSyntaxError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return 'Invalid frame received: %r' % self.args[0]
|
||
|
|
||
|
|
||
|
class InvalidFieldTypeException(ProtocolSyntaxError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return 'Unsupported field kind %s' % self.args[0]
|
||
|
|
||
|
|
||
|
class UnsupportedAMQPFieldException(ProtocolSyntaxError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return 'Unsupported field kind %s' % type(self.args[1])
|
||
|
|
||
|
|
||
|
class UnspportedAMQPFieldException(UnsupportedAMQPFieldException):
|
||
|
"""Deprecated version of UnsupportedAMQPFieldException"""
|
||
|
|
||
|
|
||
|
class MethodNotImplemented(AMQPError):
|
||
|
pass
|
||
|
|
||
|
|
||
|
class ChannelError(Exception):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return 'An unspecified error occurred with the Channel'
|
||
|
|
||
|
|
||
|
class InvalidMinimumFrameSize(ProtocolSyntaxError):
|
||
|
""" DEPRECATED; pika.connection.Parameters.frame_max property setter now
|
||
|
raises the standard `ValueError` exception when the value is out of bounds.
|
||
|
"""
|
||
|
|
||
|
def __repr__(self):
|
||
|
return 'AMQP Minimum Frame Size is 4096 Bytes'
|
||
|
|
||
|
|
||
|
class InvalidMaximumFrameSize(ProtocolSyntaxError):
|
||
|
""" DEPRECATED; pika.connection.Parameters.frame_max property setter now
|
||
|
raises the standard `ValueError` exception when the value is out of bounds.
|
||
|
"""
|
||
|
|
||
|
def __repr__(self):
|
||
|
return 'AMQP Maximum Frame Size is 131072 Bytes'
|
||
|
|
||
|
|
||
|
class RecursionError(Exception):
|
||
|
"""The requested operation would result in unsupported recursion or
|
||
|
reentrancy.
|
||
|
|
||
|
Used by BlockingConnection/BlockingChannel
|
||
|
|
||
|
"""
|
||
|
|
||
|
|
||
|
class ShortStringTooLong(AMQPError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return ('AMQP Short String can contain up to 255 bytes: '
|
||
|
'%.300s' % self.args[0])
|
||
|
|
||
|
|
||
|
class DuplicateGetOkCallback(ChannelError):
|
||
|
|
||
|
def __repr__(self):
|
||
|
return ('basic_get can only be called again after the callback for the'
|
||
|
'previous basic_get is executed')
|