Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add api support for queue operations #6

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CONTRIBUTORS.txt
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
Micah Hausler ([email protected])
Vaseem Shaikh ([email protected])
104 changes: 102 additions & 2 deletions rabbitmq_admin/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,13 @@ def list_vhosts(self):
A list of all vhosts.
"""
return self._api_get('/api/vhosts')


def list_feature_flags(self):
"""
A list of all feature flags
"""
return self._api_get('/api/feature-flags')

def get_vhost(self, name):
"""
Details about an individual vhost.
Expand Down Expand Up @@ -490,7 +496,7 @@ def get_policy_for_vhost(self, vhost, name):
def create_policy_for_vhost(
self, vhost, name,
definition,
pattern=None,
pattern='',
priority=0,
apply_to='all'):
"""
Expand Down Expand Up @@ -561,3 +567,97 @@ def is_vhost_alive(self, vhost):
return self._api_get('/api/aliveness-test/{0}'.format(
urllib.parse.quote_plus(vhost)
))

def create_queue_for_vhost(self, queue, vhost, body):
"""
Create an individual queue.
The body should look like:
::

{
"auto_delete":false,
"durable":true,
"arguments":{},
"node":"rabbit@rabbit1"
}

All keys are optional.

:param queue: The queue name
:type queue: str

:param vhost: The vhost name
:type vhost: str

:param body: A body for the queue.
:type body: dict
"""
self._api_put(
'/api/queues/{0}/{1}'.format(
urllib.parse.quote_plus(vhost),
urllib.parse.quote_plus(queue)),
data=body
)

def get_queue_for_vhost(self, queue, vhost):
"""
An individual queue

:param queue: The queue name
:type queue: str

:param vhost: The vhost name
:type vhost: str
"""
return self._api_get('/api/queues/{0}/{1}'.format(
urllib.parse.quote_plus(vhost),
urllib.parse.quote_plus(queue)
))

def list_queues(self):
"""
A list of all queues.
"""
return self._api_get('/api/queues')

def list_queues_for_vhost(self, vhost):
"""
A list of all queues in a given virtual host.

:param vhost: The vhost name
:type vhost: str
"""
return self._api_get('/api/queues/{0}'.format(
urllib.parse.quote_plus(vhost)
))

def delete_queue_for_vhost(self, queue, vhost, if_unused=False, if_empty=False):
"""
Delete an individual queue. You can add the parameter
``if_unused=True``. This prevents the delete from succeeding if the
queue has consumers.

``if_empty=True``. This prevents the delete from succeeding if the
queue contains messages.

:param queue: The queue name
:type queue: str

:param vhost: The vhost name
:type vhost: str

:param if_unused: Set to ``True`` to only delete if it is unused
:type if_unused: bool

:param if_empty: Set to ``True`` to only delete if it is empty
:type if_empty: bool
"""
self._api_delete(
'/api/queues/{0}/{1}'.format(
urllib.parse.quote_plus(vhost),
urllib.parse.quote_plus(queue)),
params={
'if-unused': if_unused,
'if-empty': if_empty
},
)
39 changes: 38 additions & 1 deletion rabbitmq_admin/tests/api_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class AdminAPITests(TestCase):
-p 15672:15672 \
-e RABBITMQ_DEFAULT_USER=guest \
-e RABBITMQ_DEFAULT_PASS=guest \
-name rabbit1 \
--name rabbit1 \
rabbitmq:3-management

"""
Expand Down Expand Up @@ -435,3 +435,40 @@ def test_is_vhost_alive(self):
self.api.is_vhost_alive('/'),
{'status': 'ok'}
)

def test_list_queues(self):
self.assertEqual(
len(self.api.list_queues()),
0
)

def test_list_queues_for_vhost(self):
self.assertEqual(
len(self.api.list_queues_for_vhost('/')),
0
)

def test_get_create_delete_queue_for_vhost(self):
name = 'my_queue'
body = {
"auto_delete": False,
"durable": True,
"arguments": {},
"node": "rabbit@rabbit1"
}

self.api.create_queue_for_vhost(name, '/', body)
self.assertEqual(
len(self.api.list_queues_for_vhost('/')),
1
)
self.assertEqual(
self.api.get_queue_for_vhost(name, '/').get('name'),
name
)

self.api.delete_queue_for_vhost(name, '/')
self.assertEqual(
len(self.api.list_queues_for_vhost('/')),
0
)
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ def get_version():
else:
raise RuntimeError('Unable to find version string in {0}.'.format(VERSION_FILE))


install_requires = [
'requests>=2.7.0',
'six>=1.8.0'
Expand Down