'Declare queue, create if needed. This method creates or checks a
queue. When creating a new queue the client can specify various
properties that control the durability of the queue and its contents,
and the level of sharing for the queue.
Leave the queue name empty for a auto-named queue in RabbitMQ
:param callable callback: callback(pika.frame.Method) for method
Queue.DeclareOk; MUST be None when nowait=True.
:param queue: The queue name
:type queue: str or unicode
:param bool passive: Only check to see if the queue exists
:param bool durable: Survive reboots of the broker
:param bool exclusive: Only allow access by the current connection
:param bool auto_delete: Delete after consumer cancels or disconnects
:param bool nowait: Do not wait for a Queue.DeclareOk
:param dict arguments: Custom key/value arguments for the queue'

def queue_declare(self, callback, queue='', passive=False, durable=False, exclusive=False, auto_delete=False, nowait=False, arguments=None):

    if queue:
        condition = (spec.Queue.DeclareOk, {'queue': queue})
    else:
        condition = spec.Queue.DeclareOk
    replies = ([condition] if (nowait is False) else [])
    self._validate_channel_and_callback(callback)
    return self._rpc(spec.Queue.Declare(0, queue, passive, durable, exclusive, auto_delete, nowait, (arguments or dict())), callback, replies)
