From 1d7fd7c754c48f39534984d1792698f2dce17e10 Mon Sep 17 00:00:00 2001 From: Pengju Jiao Date: Tue, 5 Sep 2017 10:25:10 +0800 Subject: [PATCH] Fix checkpoints pagination error Currently, previous page in checkpoints pagination not work, it always throw an error in the web page. It is because that checkpoints in karbor do not need reverse the order (checkpoints are sorted by 'timestamp@id' in the backend, so we can not do the reverse only be the id or name) This patch will fix it. Change-Id: I45c3e7337bf2ee9d3f2fbf9ee7a438884b8b8ca9 Closes-Bug: #1714909 --- karbor_dashboard/api/karbor.py | 25 ++++++++++++++++--------- karbor_dashboard/checkpoints/views.py | 2 +- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/karbor_dashboard/api/karbor.py b/karbor_dashboard/api/karbor.py index 5f2423c..4d273d8 100644 --- a/karbor_dashboard/api/karbor.py +++ b/karbor_dashboard/api/karbor.py @@ -54,6 +54,19 @@ def karborclient(request): def update_pagination(entities, page_size, marker, sort_dir, sort_key, reversed_order): + entities, has_more_data, has_prev_data = get_pagination_info( + entities, page_size, marker, reversed_order) + + # restore the original ordering here + if reversed_order: + entities = sorted(entities, key=lambda entity: + (getattr(entity, sort_key) or '').lower(), + reverse=(sort_dir == 'asc')) + + return entities, has_more_data, has_prev_data + + +def get_pagination_info(entities, page_size, marker, reversed_order): has_more_data = has_prev_data = False if len(entities) > page_size: has_more_data = True @@ -66,13 +79,6 @@ def update_pagination(entities, page_size, marker, sort_dir, sort_key, # last page condition elif marker is not None: has_prev_data = True - - # restore the original ordering here - if reversed_order: - entities = sorted(entities, key=lambda entity: - (getattr(entity, sort_key) or '').lower(), - reverse=(sort_dir == 'asc')) - return entities, has_more_data, has_prev_data @@ -409,8 +415,9 @@ def checkpoint_list_paged(request, provider_id=None, search_opts=None, sort_key=sort_key, sort_dir=sort_dir, sort=sort) - checkpoints, has_more_data, has_prev_data = update_pagination( - checkpoints, page_size, marker, sort_dir, sort_key, reversed_order) + checkpoints, has_more_data, has_prev_data = \ + get_pagination_info( + checkpoints, page_size, marker, reversed_order) else: checkpoints = karborclient(request).checkpoints.list( provider_id=provider_id, diff --git a/karbor_dashboard/checkpoints/views.py b/karbor_dashboard/checkpoints/views.py index 9315d39..8239b15 100644 --- a/karbor_dashboard/checkpoints/views.py +++ b/karbor_dashboard/checkpoints/views.py @@ -159,7 +159,7 @@ class IndexView(horizon_tables.DataTableView): marker=marker, paginate=True, sort_dir='asc', - sort_key='name', + sort_key='id', reversed_order=reversed_order) provider = karborclient.provider_get(self.request, provider_id) for checkpoint in checkpoints: