Merge "Implements filter_first in routers"

This commit is contained in:
Jenkins 2016-08-31 11:05:51 +00:00 committed by Gerrit Code Review
commit 152d38758a
2 changed files with 32 additions and 13 deletions

View File

@ -188,6 +188,13 @@ class RouterTests(test.BaseAdminViewTests, r_test.RouterTests):
self.assertIn('Deleted Router: ' + router.name,
res.content.decode('utf-8'))
@test.update_settings(ADMIN_FILTER_DATA_FIRST=True)
def test_routers_list_with_admin_filter_first(self):
res = self.client.get(self.INDEX_URL)
self.assertTemplateUsed(res, '%s/routers/index.html' % self.DASHBOARD)
routers = res.context['table'].data
self.assertItemsEqual(routers, [])
class RouterRouteTest(test.BaseAdminViewTests, r_test.RouterRouteTests):
DASHBOARD = 'admin'

View File

@ -16,6 +16,7 @@
Views for managing Neutron Routers.
"""
from django.conf import settings
from django.core.urlresolvers import reverse_lazy
from django.utils.translation import ugettext_lazy as _
@ -33,22 +34,23 @@ class IndexView(r_views.IndexView, n_views.IndexView):
template_name = 'admin/routers/index.html'
FILTERS_MAPPING = {'admin_state_up': {_("up"): True, _("down"): False}}
def needs_filter_first(self, table):
return getattr(self, '_needs_filter_first', False)
def _get_routers(self):
try:
routers = []
filters = self.get_filters(filters_map=self.FILTERS_MAPPING)
if 'project' in filters:
tenants = api.keystone.tenant_list(self.request)[0]
tenants_filter_ids = [t.id for t in tenants
if t.name == filters['project']]
if not tenants_filter_ids:
return []
del filters['project']
for tenant_id in tenants_filter_ids:
filters['tenant_id'] = tenant_id
routers += api.neutron.router_list(self.request, **filters)
else:
routers = api.neutron.router_list(self.request, **filters)
# If admin_filter_first is set and if there are not other filters
# selected, then search criteria must be provided and return an
# empty list
filter_first = getattr(settings, 'ADMIN_FILTER_DATA_FIRST', False)
if filter_first and not filters:
self._needs_filter_first = True
return []
self._needs_filter_first = False
routers = api.neutron.router_list(self.request, **filters)
except Exception:
routers = []
exceptions.handle(self.request,
@ -74,6 +76,16 @@ class IndexView(r_views.IndexView, n_views.IndexView):
routers = self._get_routers()
return routers
def get_filters(self, filters=None, filters_map=None):
filters = super(IndexView, self).get_filters(filters, filters_map)
if 'project' in filters:
tenants = api.keystone.tenant_list(self.request)[0]
tenants_filter_ids = [t.id for t in tenants
if t.name == filters['project']]
del filters['project']
filters['tenant_id'] = tenants_filter_ids
return filters
class DetailView(r_views.DetailView):
tab_group_class = rtabs.RouterDetailTabs