Merge "Replace SortedDict with OrderedDict"

This commit is contained in:
Jenkins 2015-09-09 03:33:27 +00:00 committed by Gerrit Code Review
commit dee5c9d3f4
22 changed files with 83 additions and 82 deletions

View File

@ -32,7 +32,6 @@ from django.conf.urls import patterns
from django.conf.urls import url
from django.core.exceptions import ImproperlyConfigured # noqa
from django.core.urlresolvers import reverse
from django.utils.datastructures import SortedDict
from django.utils.encoding import python_2_unicode_compatible
from django.utils.functional import SimpleLazyObject # noqa
from django.utils.importlib import import_module # noqa
@ -491,7 +490,7 @@ class Dashboard(Registry, HorizonComponent):
name=_("Other"),
panels=slugs)
panel_groups.append((new_group.slug, new_group))
return SortedDict(panel_groups)
return collections.OrderedDict(panel_groups)
def get_absolute_url(self):
"""Returns the default URL for this dashboard.
@ -568,7 +567,7 @@ class Dashboard(Registry, HorizonComponent):
panels_to_discover.extend(panel_group.panels)
panel_groups.append((panel_group.slug, panel_group))
self._panel_groups = SortedDict(panel_groups)
self._panel_groups = collections.OrderedDict(panel_groups)
# Do the actual discovery
package = '.'.join(self.__module__.split('.')[:-1])

View File

@ -13,6 +13,7 @@
# under the License.
from collections import defaultdict
from collections import OrderedDict
import logging
import types
import warnings
@ -21,7 +22,6 @@ from django.conf import settings
from django.core import urlresolvers
from django import shortcuts
from django.template.loader import render_to_string # noqa
from django.utils.datastructures import SortedDict
from django.utils.functional import Promise # noqa
from django.utils.http import urlencode # noqa
from django.utils.translation import pgettext_lazy
@ -363,7 +363,7 @@ class LinkAction(BaseAction):
def get_ajax_update_url(self):
table_url = self.table.get_absolute_url()
params = urlencode(
SortedDict([("action", self.name), ("table", self.table.name)])
OrderedDict([("action", self.name), ("table", self.table.name)])
)
return "%s?%s" % (table_url, params)

View File

@ -27,7 +27,6 @@ from django import template
from django.template.defaultfilters import slugify # noqa
from django.template.defaultfilters import truncatechars # noqa
from django.template.loader import render_to_string
from django.utils.datastructures import SortedDict
from django.utils.html import escape
from django.utils import http
from django.utils.http import urlencode
@ -487,7 +486,7 @@ class Row(html.HTMLElement):
.. attribute:: cells
The cells belonging to this row stored in a ``SortedDict`` object.
The cells belonging to this row stored in a ``OrderedDict`` object.
This attribute is populated during instantiation.
.. attribute:: status
@ -555,7 +554,7 @@ class Row(html.HTMLElement):
for column in table.columns.values():
cell = table._meta.cell_class(datum, column, self)
cells.append((column.name or column.auto, cell))
self.cells = SortedDict(cells)
self.cells = collections.OrderedDict(cells)
if self.ajax:
interval = conf.HORIZON_CONFIG['ajax_poll_interval']
@ -610,7 +609,7 @@ class Row(html.HTMLElement):
def get_ajax_update_url(self):
table_url = self.table.get_absolute_url()
params = urlencode(SortedDict([
params = urlencode(collections.OrderedDict([
("action", self.ajax_action_name),
("table", self.table.name),
("obj_id", self.table.get_object_id(self.datum))
@ -805,7 +804,7 @@ class Cell(html.HTMLElement):
def get_ajax_update_url(self):
column = self.column
table_url = column.table.get_absolute_url()
params = urlencode(SortedDict([
params = urlencode(collections.OrderedDict([
("action", self.row.ajax_cell_action_name),
("table", column.table.name),
("cell_name", column.name),
@ -1076,8 +1075,8 @@ class DataTableMetaclass(type):
# Iterate in reverse to preserve final order
for base in reversed(bases):
if hasattr(base, 'base_columns'):
columns[0:0] = base.base_columns.items()
dt_attrs['base_columns'] = SortedDict(columns)
columns = base.base_columns.items() + columns
dt_attrs['base_columns'] = collections.OrderedDict(columns)
# If the table is in a ResourceBrowser, the column number must meet
# these limits because of the width of the browser.
@ -1110,7 +1109,7 @@ class DataTableMetaclass(type):
actions_column.classes.append('actions_column')
columns.append(("actions", actions_column))
# Store this set of columns internally so we can copy them per-instance
dt_attrs['_columns'] = SortedDict(columns)
dt_attrs['_columns'] = collections.OrderedDict(columns)
# Gather and register actions for later access since we only want
# to instantiate them once.
@ -1118,8 +1117,8 @@ class DataTableMetaclass(type):
actions = list(set(opts.row_actions) | set(opts.table_actions) |
set(opts.table_actions_menu))
actions.sort(key=attrgetter('name'))
actions_dict = SortedDict([(action.name, action())
for action in actions])
actions_dict = collections.OrderedDict([(action.name, action())
for action in actions])
dt_attrs['base_actions'] = actions_dict
if opts._filter_action:
# Replace our filter action with the instantiated version
@ -1172,7 +1171,7 @@ class DataTable(object):
column = copy.copy(_column)
column.table = self
columns.append((key, column))
self.columns = SortedDict(columns)
self.columns = collections.OrderedDict(columns)
self._populate_data_cache()
# Associate these actions with this table

View File

@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
import collections
import itertools
import logging
import sys
@ -18,7 +19,6 @@ import six
from django import template
from django.template import loader
from django.utils import datastructures
from horizon.tables import base as horizon_tables
@ -55,12 +55,12 @@ class FormsetRow(horizon_tables.Row):
# We need to be able to handle empty rows, because there may
# be extra empty forms in a formset. The original DataTable breaks
# on this, because it sets self.cells to [], but later expects a
# SortedDict. We just fill self.cells with empty Cells.
# OrderedDict. We just fill self.cells with empty Cells.
cells = []
for column in self.table.columns.values():
cell = self.table._meta.cell_class(None, column, self)
cells.append((column.name or column.auto, cell))
self.cells = datastructures.SortedDict(cells)
self.cells = collections.OrderedDict(cells)
def render(self):
return loader.render_to_string(self.template_path,

View File

@ -12,13 +12,13 @@
# License for the specific language governing permissions and limitations
# under the License.
from collections import OrderedDict
import sys
import six
from django.template.loader import render_to_string
from django.template import TemplateSyntaxError # noqa
from django.utils.datastructures import SortedDict
from horizon import exceptions
from horizon.utils import html
@ -108,7 +108,7 @@ class TabGroup(html.HTMLElement):
tab_instances = []
for tab in self.tabs:
tab_instances.append((tab.slug, tab(self, request)))
self._tabs = SortedDict(tab_instances)
self._tabs = OrderedDict(tab_instances)
if self.sticky:
self.attrs['data-sticky-tabs'] = 'sticky'
if not self._set_active_tab():
@ -428,7 +428,7 @@ class TableTab(Tab):
table_instances = [(table._meta.name,
table(request, **tab_group.kwargs))
for table in self.table_classes]
self._tables = SortedDict(table_instances)
self._tables = OrderedDict(table_instances)
self._table_data_loaded = False
def load_table_data(self):

View File

@ -14,11 +14,11 @@
from __future__ import absolute_import
from collections import OrderedDict
from horizon.contrib import bootstrap_datepicker
from django.conf import settings
from django import template
from django.utils.datastructures import SortedDict
from django.utils.encoding import force_text
from django.utils import translation
from django.utils.translation import ugettext_lazy as _
@ -70,10 +70,10 @@ def horizon_nav(context):
non_empty_groups.append((group, allowed_panels))
if (callable(dash.nav) and dash.nav(context) and
dash.can_access(context)):
dashboards.append((dash, SortedDict(non_empty_groups)))
dashboards.append((dash, OrderedDict(non_empty_groups)))
elif (not callable(dash.nav) and dash.nav and
dash.can_access(context)):
dashboards.append((dash, SortedDict(non_empty_groups)))
dashboards.append((dash, OrderedDict(non_empty_groups)))
return {'components': dashboards,
'user': context['request'].user,
'current': current_dashboard,
@ -125,7 +125,7 @@ def horizon_dashboard_nav(context):
else:
non_empty_groups.append((group.name, allowed_panels))
return {'components': SortedDict(non_empty_groups),
return {'components': OrderedDict(non_empty_groups),
'user': context['request'].user,
'current': context['request'].horizon['panel'].slug,
'request': context['request']}

View File

@ -10,12 +10,12 @@
# License for the specific language governing permissions and limitations
# under the License.
from collections import OrderedDict
import logging
import threading
from ceilometerclient import client as ceilometer_client
from django.conf import settings
from django.utils import datastructures
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
@ -925,7 +925,7 @@ class Meters(object):
# below, I need to define it as a static here. I will be joining this
# to info that I am able to obtain from Ceilometer meters, hopefully
# some day it will be supported all.
meters_info = datastructures.SortedDict([
meters_info = OrderedDict([
("instance", {
'label': '',
'description': _("Existence of instance"),
@ -1061,7 +1061,7 @@ class Meters(object):
# below, I need to define it as a static here. I will be joining this
# to info that I am able to obtain from Ceilometer meters, hopefully
# some day it will be supported all.
return datastructures.SortedDict([
return OrderedDict([
('network', {
'label': '',
'description': _("Existence of network"),
@ -1134,7 +1134,7 @@ class Meters(object):
# below, I need to define it as a static here. I will be joining this
# to info that I am able to obtain from Ceilometer meters, hopefully
# some day it will be supported all.
return datastructures.SortedDict([
return OrderedDict([
('image', {
'label': '',
'description': _("Image existence check"),
@ -1175,7 +1175,7 @@ class Meters(object):
# below, I need to define it as a static here. I will be joining this
# to info that I am able to obtain from Ceilometer meters, hopefully
# some day it will be supported all.
return datastructures.SortedDict([
return OrderedDict([
('volume', {
'label': '',
'description': _("Existence of volume"),
@ -1196,7 +1196,7 @@ class Meters(object):
# below, I need to define it as a static here. I will be joining this
# to info that I am able to obtain from Ceilometer meters, hopefully
# some day it will be supported all.
return datastructures.SortedDict([
return OrderedDict([
('storage.objects', {
'label': '',
'description': _("Number of objects"),
@ -1233,7 +1233,7 @@ class Meters(object):
# below, I need to define it as a static here. I will be joining this
# to info that I am able to obtain from Ceilometer meters, hopefully
# some day it will be supported all.
return datastructures.SortedDict([
return OrderedDict([
('energy', {
'label': '',
'description': _("Amount of energy"),
@ -1254,7 +1254,7 @@ class Meters(object):
# below, I need to define it as a static here. I will be joining this
# to info that I am able to obtain from Ceilometer meters, hopefully
# some day it will be supported all.
return datastructures.SortedDict([
return OrderedDict([
('hardware.ipmi.node.power', {
'label': '',
'description': _("System Current Power"),

View File

@ -14,7 +14,7 @@
from __future__ import absolute_import
from django.utils.datastructures import SortedDict
from collections import OrderedDict
from horizon.utils import memoized
@ -98,7 +98,7 @@ def _rule_list(request, expand_policy, **kwargs):
**kwargs).get('firewall_rules')
if expand_policy and rules:
policies = _policy_list(request, expand_rule=False)
policy_dict = SortedDict((p.id, p) for p in policies)
policy_dict = OrderedDict((p.id, p) for p in policies)
for rule in rules:
rule['policy'] = policy_dict.get(rule['firewall_policy_id'])
return [Rule(r) for r in rules]
@ -170,7 +170,7 @@ def _policy_list(request, expand_rule, **kwargs):
**kwargs).get('firewall_policies')
if expand_rule and policies:
rules = _rule_list(request, expand_policy=False)
rule_dict = SortedDict((rule.id, rule) for rule in rules)
rule_dict = OrderedDict((rule.id, rule) for rule in rules)
for p in policies:
p['rules'] = [rule_dict.get(rule) for rule in p['firewall_rules']]
return [Policy(p) for p in policies]
@ -188,7 +188,7 @@ def _policy_get(request, policy_id, expand_rule):
if policy_rules:
rules = _rule_list(request, expand_policy=False,
firewall_policy_id=policy_id)
rule_dict = SortedDict((rule.id, rule) for rule in rules)
rule_dict = OrderedDict((rule.id, rule) for rule in rules)
policy['rules'] = [rule_dict.get(rule) for rule in policy_rules]
else:
policy['rules'] = []
@ -258,7 +258,7 @@ def _firewall_list(request, expand_policy, **kwargs):
**kwargs).get('firewalls')
if expand_policy and firewalls:
policies = _policy_list(request, expand_rule=False)
policy_dict = SortedDict((p.id, p) for p in policies)
policy_dict = OrderedDict((p.id, p) for p in policies)
for fw in firewalls:
fw['policy'] = policy_dict.get(fw['firewall_policy_id'])
return [Firewall(f) for f in firewalls]

View File

@ -14,7 +14,7 @@
from __future__ import absolute_import
from django.utils.datastructures import SortedDict
from collections import OrderedDict
from django.utils.translation import ugettext_lazy as _
from horizon import messages
@ -171,13 +171,13 @@ def _pool_list(request, expand_subnet=False, expand_vip=False, **kwargs):
pools = neutronclient(request).list_pools(**kwargs).get('pools')
if expand_subnet:
subnets = neutron.subnet_list(request)
subnet_dict = SortedDict((s.id, s) for s in subnets)
subnet_dict = OrderedDict((s.id, s) for s in subnets)
for p in pools:
subnet = subnet_dict.get(p['subnet_id'])
p['subnet_name'] = subnet.cidr if subnet else None
if expand_vip:
vips = vip_list(request)
vip_dict = SortedDict((v.id, v) for v in vips)
vip_dict = OrderedDict((v.id, v) for v in vips)
for p in pools:
p['vip'] = _get_vip(request, p, vip_dict)
return [Pool(p) for p in pools]
@ -342,7 +342,7 @@ def _member_list(request, expand_pool, **kwargs):
members = neutronclient(request).list_members(**kwargs).get('members')
if expand_pool:
pools = _pool_list(request)
pool_dict = SortedDict((p.id, p) for p in pools)
pool_dict = OrderedDict((p.id, p) for p in pools)
for m in members:
m['pool_name'] = pool_dict.get(m['pool_id']).name_or_id
return [Member(m) for m in members]

View File

@ -25,7 +25,6 @@ import logging
import netaddr
from django.conf import settings
from django.utils.datastructures import SortedDict
from django.utils.translation import ugettext_lazy as _
from neutronclient.common import exceptions as neutron_exc
from neutronclient.v2_0 import client as neutron_client
@ -409,7 +408,7 @@ class FloatingIpManager(network_base.FloatingIpManager):
# Get port list to add instance_id to floating IP list
# instance_id is stored in device_id attribute
ports = port_list(self.request, **port_search_opts)
port_dict = SortedDict([(p['id'], p) for p in ports])
port_dict = collections.OrderedDict([(p['id'], p) for p in ports])
for fip in fips:
self._set_instance_info(fip, port_dict.get(fip['port_id']))
return [FloatingIp(fip) for fip in fips]
@ -469,7 +468,8 @@ class FloatingIpManager(network_base.FloatingIpManager):
tenant_id = self.request.user.tenant_id
ports = port_list(self.request, tenant_id=tenant_id)
servers, has_more = nova.server_list(self.request)
server_dict = SortedDict([(s.id, s.name) for s in servers])
server_dict = collections.OrderedDict(
[(s.id, s.name) for s in servers])
reachable_subnets = self._get_reachable_subnets(ports)
if is_service_enabled(self.request,
config_name='enable_lb',

View File

@ -14,7 +14,7 @@
from __future__ import absolute_import
from django.utils.datastructures import SortedDict
from collections import OrderedDict
from horizon.utils.memoized import memoized # noqa
@ -88,12 +88,12 @@ def _vpnservice_list(request, expand_subnet=False, expand_router=False,
**kwargs).get('vpnservices')
if expand_subnet:
subnets = neutron.subnet_list(request)
subnet_dict = SortedDict((s.id, s) for s in subnets)
subnet_dict = OrderedDict((s.id, s) for s in subnets)
for s in vpnservices:
s['subnet_name'] = subnet_dict.get(s['subnet_id']).cidr
if expand_router:
routers = neutron.router_list(request)
router_dict = SortedDict((r.id, r) for r in routers)
router_dict = OrderedDict((r.id, r) for r in routers)
for s in vpnservices:
s['router_name'] = router_dict.get(s['router_id']).name_or_id
if expand_conns:
@ -324,18 +324,18 @@ def _ipsecsiteconnection_list(request, expand_ikepolicies=False,
**kwargs).get('ipsec_site_connections')
if expand_ikepolicies:
ikepolicies = _ikepolicy_list(request, **kwargs)
policy_dict = SortedDict((p.id, p) for p in ikepolicies)
policy_dict = OrderedDict((p.id, p) for p in ikepolicies)
for c in ipsecsiteconnections:
c['ikepolicy_name'] = policy_dict.get(c['ikepolicy_id']).name_or_id
if expand_ipsecpolicies:
ipsecpolicies = _ipsecpolicy_list(request, **kwargs)
policy_dict = SortedDict((p.id, p) for p in ipsecpolicies)
policy_dict = OrderedDict((p.id, p) for p in ipsecpolicies)
for c in ipsecsiteconnections:
c['ipsecpolicy_name'] = policy_dict.get(c['ipsecpolicy_id']
).name_or_id
if expand_vpnservices:
vpnservices = _vpnservice_list(request, **kwargs)
service_dict = SortedDict((s.id, s) for s in vpnservices)
service_dict = OrderedDict((s.id, s) for s in vpnservices)
for c in ipsecsiteconnections:
c['vpnservice_name'] = service_dict.get(c['vpnservice_id']
).name_or_id

View File

@ -15,11 +15,11 @@
"""
Views for managing database instances.
"""
from collections import OrderedDict
import logging
from django.core.urlresolvers import reverse
from django.core.urlresolvers import reverse_lazy
from django.utils.datastructures import SortedDict
from django.utils.translation import ugettext_lazy as _
import six
@ -60,8 +60,8 @@ class IndexView(horizon_tables.DataTableView):
flavors = []
msg = _('Unable to retrieve database size information.')
exceptions.handle(self.request, msg)
return SortedDict((six.text_type(flavor.id), flavor)
for flavor in flavors)
return OrderedDict((six.text_type(flavor.id), flavor)
for flavor in flavors)
def _extra_data(self, instance):
flavor = self.get_flavors().get(instance.flavor["id"])

View File

@ -12,11 +12,11 @@
# License for the specific language governing permissions and limitations
# under the License.
from collections import OrderedDict
import uuid
from django.core.urlresolvers import reverse
from django import http
from django.utils.datastructures import SortedDict
from mox3.mox import IgnoreArg # noqa
from mox3.mox import IsA # noqa
@ -63,7 +63,7 @@ class InstanceViewTest(test.BaseAdminViewTests):
servers = self.servers.list()
tenants = self.tenants.list()
flavors = self.flavors.list()
full_flavors = SortedDict([(f.id, f) for f in flavors])
full_flavors = OrderedDict([(f.id, f) for f in flavors])
search_opts = {'marker': None, 'paginate': True}
api.nova.server_list(IsA(http.HttpRequest),

View File

@ -17,9 +17,9 @@
# License for the specific language governing permissions and limitations
# under the License.
from collections import OrderedDict
from django.core.urlresolvers import reverse
from django.core.urlresolvers import reverse_lazy
from django.utils.datastructures import SortedDict
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
@ -119,8 +119,8 @@ class AdminIndexView(tables.DataTableView):
# If fails to retrieve flavor list, creates an empty list.
flavors = []
full_flavors = SortedDict([(f.id, f) for f in flavors])
tenant_dict = SortedDict([(t.id, t) for t in tenants])
full_flavors = OrderedDict([(f.id, f) for f in flavors])
tenant_dict = OrderedDict([(t.id, t) for t in tenants])
# Loop through instances to get flavor and tenant info.
for inst in instances:
flavor_id = inst.flavor["id"]

View File

@ -12,8 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
from collections import OrderedDict
from django.core.urlresolvers import reverse_lazy
from django.utils.datastructures import SortedDict
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
@ -51,7 +52,7 @@ class IndexView(tables.DataTableView):
"networks' projects.")
exceptions.handle(self.request, msg)
tenant_dict = SortedDict([(t.id, t) for t in tenants])
tenant_dict = OrderedDict([(t.id, t) for t in tenants])
return tenant_dict
def _get_agents_data(self, network):

View File

@ -10,7 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from django.utils.datastructures import SortedDict
from collections import OrderedDict
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
@ -53,7 +53,7 @@ class VolumeTab(tabs.TableTab, volumes_tabs.VolumeTableMixIn):
msg = _('Unable to retrieve volume project information.')
exceptions.handle(self.request, msg)
tenant_dict = SortedDict([(t.id, t) for t in tenants])
tenant_dict = OrderedDict([(t.id, t) for t in tenants])
for volume in volumes:
tenant_id = getattr(volume, "os-vol-tenant-attr:tenant_id", None)
tenant = tenant_dict.get(tenant_id, None)
@ -88,7 +88,7 @@ class VolumeTypesTab(tabs.TableTab, volumes_tabs.VolumeTableMixIn):
msg = _('Unable to retrieve volume type encryption information.')
exceptions.handle(self.request, msg)
vol_type_enc_dict = SortedDict([(e.volume_type_id, e) for e in
vol_type_enc_dict = OrderedDict([(e.volume_type_id, e) for e in
vol_type_enc_list])
for volume_type in volume_types:
vol_type_enc = vol_type_enc_dict.get(volume_type.id, None)

View File

@ -11,9 +11,9 @@
# License for the specific language governing permissions and limitations
# under the License.
from collections import OrderedDict
import logging
from django.utils.datastructures import SortedDict
from django.utils.http import urlencode
from django.utils.translation import ugettext_lazy as _
import six
@ -26,7 +26,7 @@ from openstack_dashboard import api
LOG = logging.getLogger(__name__)
CONSOLES = SortedDict([('VNC', api.nova.server_vnc_console),
CONSOLES = OrderedDict([('VNC', api.nova.server_vnc_console),
('SPICE', api.nova.server_spice_console),
('RDP', api.nova.server_rdp_console),
('SERIAL', api.nova.server_serial_console)])

View File

@ -16,6 +16,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from collections import OrderedDict
import json
import logging
import sys
@ -27,7 +28,6 @@ from django.core.urlresolvers import reverse
from django.forms import widgets
from django import http
import django.test
from django.utils.datastructures import SortedDict
from django.utils import encoding
from django.utils.http import urlencode
from mox3.mox import IgnoreArg # noqa
@ -133,7 +133,7 @@ class InstanceTests(helpers.TestCase):
def test_index_flavor_list_exception(self):
servers = self.servers.list()
flavors = self.flavors.list()
full_flavors = SortedDict([(f.id, f) for f in flavors])
full_flavors = OrderedDict([(f.id, f) for f in flavors])
search_opts = {'marker': None, 'paginate': True}
api.nova.extension_supported('AdminActions',
IsA(http.HttpRequest)) \
@ -4166,7 +4166,7 @@ class InstanceAjaxTests(helpers.TestCase):
instance_id = server.id
flavor_id = server.flavor["id"]
flavors = self.flavors.list()
full_flavors = SortedDict([(f.id, f) for f in flavors])
full_flavors = OrderedDict([(f.id, f) for f in flavors])
api.nova.extension_supported('AdminActions', IsA(http.HttpRequest))\
.MultipleTimes().AndReturn(True)
@ -4197,7 +4197,7 @@ class InstanceAjaxTests(helpers.TestCase):
instance_id = server.id
flavor_id = server.flavor["id"]
flavors = self.flavors.list()
full_flavors = SortedDict([(f.id, f) for f in flavors])
full_flavors = OrderedDict([(f.id, f) for f in flavors])
server.status = 'ERROR'
server.fault = {"message": "NoValidHost",
@ -4275,7 +4275,7 @@ class ConsoleManagerTests(helpers.TestCase):
def setup_consoles(self):
# Need to refresh with mocks or will fail since mox do not detect
# the api_call() as mocked.
console.CONSOLES = SortedDict([
console.CONSOLES = OrderedDict([
('VNC', api.nova.server_vnc_console),
('SPICE', api.nova.server_spice_console),
('RDP', api.nova.server_rdp_console),

View File

@ -19,13 +19,13 @@
"""
Views for managing instances.
"""
from collections import OrderedDict
import logging
from django.core.urlresolvers import reverse
from django.core.urlresolvers import reverse_lazy
from django import http
from django import shortcuts
from django.utils.datastructures import SortedDict
from django.utils.translation import ugettext_lazy as _
from django.views import generic
@ -100,9 +100,9 @@ class IndexView(tables.DataTableView):
images = []
exceptions.handle(self.request, ignore=True)
full_flavors = SortedDict([(str(flavor.id), flavor)
full_flavors = OrderedDict([(str(flavor.id), flavor)
for flavor in flavors])
image_map = SortedDict([(str(image.id), image)
image_map = OrderedDict([(str(image.id), image)
for image in images])
# Loop through instances to get flavor info.
@ -416,7 +416,7 @@ class ResizeView(workflows.WorkflowView):
def get_flavors(self, *args, **kwargs):
try:
flavors = api.nova.flavor_list(self.request)
return SortedDict((str(flavor.id), flavor) for flavor in flavors)
return OrderedDict((str(flavor.id), flavor) for flavor in flavors)
except Exception:
redirect = reverse("horizon:project:instances:index")
exceptions.handle(self.request,

View File

@ -17,9 +17,10 @@
Views for managing Neutron Routers.
"""
from collections import OrderedDict
from django.core.urlresolvers import reverse
from django.core.urlresolvers import reverse_lazy
from django.utils.datastructures import SortedDict
from django.utils.translation import pgettext_lazy
from django.utils.translation import ugettext_lazy as _
@ -68,8 +69,8 @@ class IndexView(tables.DataTableView):
search_opts = {'router:external': True}
ext_nets = api.neutron.network_list(self.request,
**search_opts)
ext_net_dict = SortedDict((n['id'], n.name_or_id)
for n in ext_nets)
ext_net_dict = OrderedDict((n['id'], n.name_or_id)
for n in ext_nets)
except Exception as e:
msg = _('Unable to retrieve a list of external networks "%s".') % e
exceptions.handle(self.request, msg)

View File

@ -12,7 +12,8 @@
# License for the specific language governing permissions and limitations
# under the License.
from django.utils.datastructures import SortedDict
from collections import OrderedDict
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
@ -68,7 +69,7 @@ class VolumeTableMixIn(object):
volumes,
instances,
volume_ids_with_snapshots):
instances = SortedDict([(inst.id, inst) for inst in instances])
instances = OrderedDict([(inst.id, inst) for inst in instances])
for volume in volumes:
if volume_ids_with_snapshots:
if volume.id in volume_ids_with_snapshots:

View File

@ -107,6 +107,7 @@ max-complexity = 20
[hacking]
import_exceptions = collections.defaultdict,
collections.OrderedDict,
django.conf.settings,
django.conf.urls.include,
django.conf.urls.patterns,
@ -115,7 +116,6 @@ import_exceptions = collections.defaultdict,
django.core.urlresolvers.reverse_lazy,
django.template.loader.render_to_string,
django.test.utils.override_settings,
django.utils.datastructures.SortedDict,
django.utils.encoding.force_text,
django.utils.html.conditional_escape,
django.utils.html.escape,