Fix [ui] Actions screen pagination supports only descending order

* fix action pagination order - added reverse flag,
  same mechanism in horizon glance code.

Change-Id: Ibe7c2c5196c330c49dce42347c38721c176c17ab
Closes-Bug: #1546021
This commit is contained in:
Gal Margalit 2016-02-22 14:37:42 +00:00
parent 22818f5a83
commit ba78e5d2f6
2 changed files with 18 additions and 5 deletions

View File

@ -83,7 +83,8 @@ class IndexView(tables.DataTableView):
marker=marker,
sort_keys='name',
sort_dirs=sort_dir,
paginate=True
paginate=True,
reversed_order=True
)
if prev_marker is not None:
@ -92,7 +93,7 @@ class IndexView(tables.DataTableView):
key=lambda action: getattr(
action, 'name'
),
reverse=True
reverse=False
)
except Exception as e:

View File

@ -47,8 +47,8 @@ def mistralclient(request):
@handle_errors(_("Unable to retrieve list"), [])
def pagination_list(entity, request, marker='', sort_keys='',
sort_dirs='asc', paginate=False):
def pagination_list(entity, request, marker='', sort_keys='', sort_dirs='asc',
paginate=False, reversed_order=False):
"""Retrieve a listing of specific entity and handles pagination.
:param entity: Requested entity (String)
@ -58,6 +58,7 @@ def pagination_list(entity, request, marker='', sort_keys='',
:param sort_dirs: Sorting Directions (asc/desc). Default:asc
:param paginate: If true will perform pagination based on settings.
Default:False
:param reversed_order: flag to reverse list. Default:False
"""
limit = getattr(settings, 'API_RESULT_LIMIT', 1000)
@ -68,6 +69,9 @@ def pagination_list(entity, request, marker='', sort_keys='',
else:
request_size = limit
if reversed_order:
sort_dirs = 'desc' if sort_dirs == 'asc' else 'asc'
api = mistralclient(request)
entities_iter = getattr(api, entity).list(
marker, limit, sort_keys, sort_dirs
@ -85,11 +89,19 @@ def pagination_list(entity, request, marker='', sort_keys='',
if marker is not None:
has_prev_data = True
# first page condition when reached via prev back
elif sort_dirs == 'asc' and marker is not None:
elif reversed_order and marker is not None:
has_more_data = True
# 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 ent:
(getattr(ent, sort_keys) or '').lower(),
reverse=(sort_dirs == 'desc')
)
else:
entities = list(entities_iter)