Merge "Adds the ability to sort images with multiple keys"
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
# under the License.
|
||||
|
||||
import copy
|
||||
import datetime
|
||||
import functools
|
||||
import uuid
|
||||
|
||||
@@ -339,13 +340,29 @@ def _do_pagination(context, images, marker, limit, show_deleted,
|
||||
|
||||
|
||||
def _sort_images(images, sort_key, sort_dir):
|
||||
reverse = False
|
||||
if images and not (sort_key in images[0]):
|
||||
raise exception.InvalidSortKey()
|
||||
keyfn = lambda x: (x[sort_key] if x[sort_key] is not None else '',
|
||||
x['created_at'], x['id'])
|
||||
reverse = sort_dir == 'desc'
|
||||
images.sort(key=keyfn, reverse=reverse)
|
||||
|
||||
for key in ['created_at', 'id']:
|
||||
if key not in sort_key:
|
||||
sort_key.append(key)
|
||||
|
||||
for key in sort_key:
|
||||
if images and not (key in images[0]):
|
||||
raise exception.InvalidSortKey()
|
||||
|
||||
def sort_func(element):
|
||||
keys = []
|
||||
for key in sort_key:
|
||||
if element[key] is not None:
|
||||
keys.append(element[key])
|
||||
else:
|
||||
if key in ['created_at', 'updated_at', 'deleted_at']:
|
||||
keys.append(datetime.datetime.min)
|
||||
else:
|
||||
keys.append('')
|
||||
return tuple(keys)
|
||||
|
||||
images.sort(key=sort_func, reverse=reverse)
|
||||
|
||||
return images
|
||||
|
||||
@@ -377,7 +394,7 @@ def image_get(context, image_id, session=None, force_show_deleted=False):
|
||||
|
||||
@log_call
|
||||
def image_get_all(context, filters=None, marker=None, limit=None,
|
||||
sort_key='created_at', sort_dir='desc',
|
||||
sort_key=['created_at'], sort_dir='desc',
|
||||
member_status='accepted', is_public=None,
|
||||
admin_as_user=False, return_tag=False):
|
||||
filters = filters or {}
|
||||
@@ -977,7 +994,6 @@ def _sort_tasks(tasks, sort_key, sort_dir):
|
||||
x['created_at'], x['id'])
|
||||
reverse = sort_dir == 'desc'
|
||||
tasks.sort(key=keyfn, reverse=reverse)
|
||||
|
||||
return tasks
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user