Skip to content

Commit

Permalink
Updated pagination support
Browse files Browse the repository at this point in the history
  • Loading branch information
eandersson committed Sep 2, 2021
1 parent 7d31dd5 commit bad5575
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 13 deletions.
2 changes: 1 addition & 1 deletion amqpstorm/management/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def get(self, connection):
"""
return self.http_client.get(API_CONNECTION % connection)

def list(self, name=None, page_size=None, use_regex=False):
def list(self, name=None, page_size=100, use_regex=False):
"""Get Connections.
:param name: Filter by name
Expand Down
2 changes: 1 addition & 1 deletion amqpstorm/management/exchange.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ def get(self, exchange, virtual_host='/'):
)

def list(self, virtual_host='/', show_all=False,
name=None, page_size=None, use_regex=False):
name=None, page_size=100, use_regex=False):
"""List Exchanges.
:param str virtual_host: Virtual host name
Expand Down
24 changes: 14 additions & 10 deletions amqpstorm/management/http_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,28 +42,32 @@ def list(self, path, name=None, page_size=None, use_regex=False):
:return: Response
"""
results = []
params = {
'page': 1,
'pagination': True,
}
params = dict()
if name is not None:
params['name'] = name
if use_regex:
if isinstance(use_regex, bool):
use_regex = str(use_regex)
params['use_regex'] = use_regex.lower()
if page_size is not None:
params['page_size'] = page_size

if page_size is None:
return self._request('get', path, params=params)

results = list()
params['page'] = 1
params['page_size'] = page_size
params['pagination'] = True
first_result = self._request('get', path, params=params)
num_pages = first_result['page_count']
current_page = first_result.get('page', 1)
results.extend(first_result['items'])

for page in range(2, num_pages + 1):
params['page'] = page
while current_page < num_pages:
params['page'] = current_page + 1
next_result = self._request('get', path, params=params)
results.extend(next_result['items'])
current_page = next_result.get['page']
num_pages = next_result['page_count']
results.extend(next_result.get('items', []))

return results

Expand Down
2 changes: 1 addition & 1 deletion amqpstorm/management/queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def get(self, queue, virtual_host='/'):
)

def list(self, virtual_host='/', show_all=False,
name=None, page_size=None, use_regex=False):
name=None, page_size=100, use_regex=False):
"""List Queues.
:param str virtual_host: Virtual host name
Expand Down
22 changes: 22 additions & 0 deletions amqpstorm/tests/functional/management/test_queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,28 @@ def test_api_queue_list_pagination(self):
self.assertIsInstance(queues, list)
self.assertEqual(len(queues), 3)

@setup(queue=False)
def test_api_queue_list_no_pagination(self):
api = ManagementApi(HTTP_URL, USERNAME, PASSWORD)
api.virtual_host.create(self.queue_name)

try:
api.queue.declare('abc', virtual_host=self.queue_name)
api.queue.declare('def', virtual_host=self.queue_name)
api.queue.declare('ghi', virtual_host=self.queue_name)

queues = api.queue.list(
page_size=None, virtual_host=self.queue_name
)
finally:
api.queue.delete('abc', virtual_host=self.queue_name)
api.queue.delete('def', virtual_host=self.queue_name)
api.queue.delete('ghi', virtual_host=self.queue_name)
self.api.virtual_host.delete(self.queue_name)

self.assertIsInstance(queues, list)
self.assertEqual(len(queues), 3)

@setup(queue=False)
def test_api_queue_list_filter_with_regex(self):
api = ManagementApi(HTTP_URL, USERNAME, PASSWORD)
Expand Down
18 changes: 18 additions & 0 deletions examples/management_api/list_queues.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from amqpstorm.management import ManagementApi

if __name__ == '__main__':
API = ManagementApi('http://localhost:15672', 'guest', 'guest')

print('List all queues.')
for queue in API.queue.list():
print('%s: %s' % (queue.get('name'), queue.get('messages')))
print('')

print('List all queues containing the keyword: amqpstorm.')
for queue in API.queue.list(name='amqpstorm'):
print('%s: %s' % (queue.get('name'), queue.get('messages')))
print('')

print('List all queues using regex that starts with: amqpstorm.')
for queue in API.queue.list(name='^amqpstorm', use_regex=True):
print('%s: %s' % (queue.get('name'), queue.get('messages')))

0 comments on commit bad5575

Please sign in to comment.