Merge "Implements filter_first in routers"
This commit is contained in:
commit
152d38758a
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue