Merge "Fix duplicating <network_entity>_list() calls in api.network"

This commit is contained in:
Jenkins 2017-05-24 09:25:38 +00:00 committed by Gerrit Code Review
commit cd931258b4
3 changed files with 17 additions and 7 deletions

View File

@ -19,6 +19,7 @@ introduced to abstract the differences between them for seamless consumption by
different dashboard implementations.
"""
from horizon.utils.memoized import memoized
from openstack_dashboard.api import base
from openstack_dashboard.api import neutron
@ -49,6 +50,7 @@ def floating_ip_pools_list(request):
return NetworkClient(request).floating_ips.list_pools()
@memoized
def tenant_floating_ip_list(request, all_tenants=False):
return NetworkClient(request).floating_ips.list(all_tenants=all_tenants)
@ -99,6 +101,7 @@ def floating_ip_supported(request):
return nwc.enabled and nwc.floating_ips.is_supported()
@memoized
def security_group_list(request):
return NetworkClient(request).secgroups.list()

View File

@ -616,7 +616,7 @@ def list_resources_with_long_filters(list_method,
# We consider only the filter condition from (filter_attr,
# filter_values) and do not consider other filter conditions
# which may be specified in **params.
if type(filter_values) != list:
if not isinstance(filter_values, (list, tuple, set, frozenset)):
filter_values = [filter_values]
# Length of each query filter is:
@ -753,6 +753,7 @@ def network_delete(request, network_id):
@profiler.trace
@memoized
def subnet_list(request, **params):
LOG.debug("subnet_list(): params=%s", params)
subnets = neutronclient(request).list_subnets(**params).get('subnets')
@ -889,6 +890,7 @@ def subnetpool_delete(request, subnetpool_id):
@profiler.trace
@memoized
def port_list(request, **params):
LOG.debug("port_list(): params=%s", params)
ports = neutronclient(request).list_ports(**params).get('ports')
@ -1133,18 +1135,23 @@ def servers_update_addresses(request, servers, all_tenants=False):
# Get all (filtered for relevant servers) information from Neutron
try:
# NOTE(e0ne): we need tuple here to work with @memoized decorator.
# @memoized works with hashable arguments only.
ports = list_resources_with_long_filters(
port_list, 'device_id', [instance.id for instance in servers],
port_list, 'device_id',
tuple([instance.id for instance in servers]),
request=request)
fips = FloatingIpManager(request)
if fips.is_supported():
floating_ips = list_resources_with_long_filters(
fips.list, 'port_id', [port.id for port in ports],
fips.list, 'port_id', tuple([port.id for port in ports]),
all_tenants=all_tenants)
else:
floating_ips = []
# NOTE(e0ne): we need frozenset here to work with @memoized decorator.
# @memoized works with hashable arguments only
networks = list_resources_with_long_filters(
network_list, 'id', set([port.network_id for port in ports]),
network_list, 'id', frozenset([port.network_id for port in ports]),
request=request)
except Exception as e:
LOG.error('Unable to connect to Neutron: %s', e)

View File

@ -115,10 +115,10 @@ class NetworkApiNeutronTests(NetworkApiNeutronTestBase):
tenant_id = self.request.user.tenant_id
servers = self.servers.list()
server_ids = [server.id for server in servers]
server_ids = tuple([server.id for server in servers])
server_ports = [p for p in self.api_ports.list()
if p['device_id'] in server_ids]
server_port_ids = [p['id'] for p in server_ports]
server_port_ids = tuple([p['id'] for p in server_ports])
if router_enabled:
assoc_fips = [fip for fip in self.api_floating_ips.list()
if fip['port_id'] in server_port_ids]
@ -134,7 +134,7 @@ class NetworkApiNeutronTests(NetworkApiNeutronTestBase):
.AndReturn({'floatingips': assoc_fips})
self.qclient.list_ports(tenant_id=tenant_id) \
.AndReturn({'ports': self.api_ports.list()})
self.qclient.list_networks(id=set(server_network_ids)) \
self.qclient.list_networks(id=frozenset(server_network_ids)) \
.AndReturn({'networks': server_networks})
self.qclient.list_subnets() \
.AndReturn({'subnets': self.api_subnets.list()})