diff --git a/openstack_dashboard/api/rest/nova.py b/openstack_dashboard/api/rest/nova.py index a5fbdca969..4074d5893b 100644 --- a/openstack_dashboard/api/rest/nova.py +++ b/openstack_dashboard/api/rest/nova.py @@ -25,6 +25,8 @@ from openstack_dashboard import api from openstack_dashboard.api.rest import json_encoder from openstack_dashboard.api.rest import urls from openstack_dashboard.api.rest import utils as rest_utils +from openstack_dashboard.dashboards.project.instances \ + import utils as instances_utils from openstack_dashboard.usage import quotas @@ -543,6 +545,8 @@ class Flavors(generic.View): get_extras = bool(get_extras and get_extras.lower() == 'true') flavors = api.nova.flavor_list(request, is_public=is_public, get_extras=get_extras) + flavors = instances_utils.sort_flavor_list(request, flavors, + with_menu_label=False) result = {'items': []} for flavor in flavors: d = flavor.to_dict() diff --git a/openstack_dashboard/dashboards/project/instances/utils.py b/openstack_dashboard/dashboards/project/instances/utils.py index 3c60091e70..647a264ed4 100644 --- a/openstack_dashboard/dashboards/project/instances/utils.py +++ b/openstack_dashboard/dashboards/project/instances/utils.py @@ -34,7 +34,7 @@ def flavor_list(request): return [] -def sort_flavor_list(request, flavors): +def sort_flavor_list(request, flavors, with_menu_label=True): """Utility method to sort a list of flavors. By default, returns the available flavors, sorted by RAM usage (ascending). @@ -57,8 +57,12 @@ def sort_flavor_list(request, flavors): return get_key(flavor, sort_key) else: key = sort_key - flavor_list = [(flavor.id, '%s' % flavor.name) - for flavor in sorted(flavors, key=key, reverse=rev)] + + if with_menu_label: + flavor_list = [(flavor.id, '%s' % flavor.name) + for flavor in sorted(flavors, key=key, reverse=rev)] + else: + flavor_list = sorted(flavors, key=key, reverse=rev) return flavor_list except Exception: exceptions.handle(request, diff --git a/openstack_dashboard/test/unit/api/rest/test_nova.py b/openstack_dashboard/test/unit/api/rest/test_nova.py index 4190026864..3a3564d8a1 100644 --- a/openstack_dashboard/test/unit/api/rest/test_nova.py +++ b/openstack_dashboard/test/unit/api/rest/test_nova.py @@ -26,6 +26,19 @@ from openstack_dashboard.test import helpers as test from openstack_dashboard.usage import quotas +# NOTE(flwang): mock.Mock and mock.MagicMock do not support sort, so the test +# case involved sorted will fail. This fake class is for the flavor test cases +# related to sort. +class FakeFlavor(object): + def __init__(self, id, ram=1): + self.id = id + self.ram = ram + self.extras = {} + + def to_dict(self): + return {"id": self.id} + + class NovaRestTestCase(test.TestCase): # @@ -761,8 +774,7 @@ class NovaRestTestCase(test.TestCase): else: request = self.mock_rest_request(GET={'is_public': 'fAlsE'}) self.mock_flavor_list.return_value = [ - mock.Mock(**{'to_dict.return_value': {'id': '1'}}), - mock.Mock(**{'to_dict.return_value': {'id': '2'}}), + FakeFlavor("1"), FakeFlavor("2") ] response = nova.Flavors().get(request) self.assertStatusCode(response, 200) @@ -790,9 +802,9 @@ class NovaRestTestCase(test.TestCase): get_extras = False else: request = self.mock_rest_request(GET={'get_extras': 'fAlsE'}) + self.mock_flavor_list.return_value = [ - mock.Mock(**{'extras': {}, 'to_dict.return_value': {'id': '1'}}), - mock.Mock(**{'extras': {}, 'to_dict.return_value': {'id': '2'}}), + FakeFlavor("1"), FakeFlavor("2") ] response = nova.Flavors().get(request) self.assertStatusCode(response, 200)