Merge "Add filter to User Credentials table"

This commit is contained in:
Zuul 2025-05-06 15:25:28 +00:00 committed by Gerrit Code Review
commit f4fee82369
9 changed files with 48 additions and 16 deletions

View File

@ -518,9 +518,12 @@ def credential_get(request, credential_id, admin=True):
@profiler.trace
def credentials_list(request, user=None):
def credentials_list(request, user_id=None, filters=None):
manager = keystoneclient(request).credentials
return manager.list(user=user)
kwargs = {"user_id": user_id}
if filters:
kwargs.update(filters)
return manager.list(**kwargs)
@profiler.trace

View File

@ -62,6 +62,13 @@ class DeleteCredentialAction(tables.DeleteAction):
keystone.credential_delete(request, obj_id)
class CredentialFilterAction(tables.FilterAction):
filter_type = "server"
filter_choices = (("user_name", _("User Name ="), True),
("user_id", _("User ID ="), True),
("type", _("Type ="), True),)
def get_user_link(datum):
if datum.user_id is not None:
return urls.reverse("horizon:identity:users:detail",
@ -77,6 +84,7 @@ def get_project_link(datum, request):
class CredentialsTable(tables.DataTable):
user_id = tables.WrappingColumn('user_id', verbose_name=_('User ID'))
user_name = tables.WrappingColumn('user_name',
verbose_name=_('User'),
link=get_user_link)
@ -97,7 +105,8 @@ class CredentialsTable(tables.DataTable):
class Meta(object):
name = "credentialstable"
verbose_name = _("User Credentials")
table_actions = (CreateCredentialAction,
table_actions = (CredentialFilterAction,
CreateCredentialAction,
DeleteCredentialAction)
row_actions = (UpdateCredentialAction,
DeleteCredentialAction)

View File

@ -21,9 +21,9 @@ INDEX_VIEW_TEMPLATE = 'horizon/common/_data_table_view.html'
class UserCredentialsViewTests(test.TestCase):
def _get_credentials(self, user):
def _get_credentials(self, user_id):
credentials = [cred for cred in self.credentials.list()
if cred.user_id == user.id]
if cred.user_id == user_id]
return credentials
@test.create_mocks({api.keystone: ('credentials_list',
@ -31,7 +31,7 @@ class UserCredentialsViewTests(test.TestCase):
def test_index(self):
user = self.users.list()[0]
self.mock_user_get.return_value = user
credentials = self._get_credentials(user)
credentials = self._get_credentials(user.id)
self.mock_credentials_list.return_value = credentials
res = self.client.get(INDEX_URL)

View File

@ -43,14 +43,31 @@ def get_user_name(request, user_id):
return None
@memoized.memoized
def get_user_names(request):
users = keystone.user_list(request)
return {u.name: u.id for u in users}
class CredentialsView(tables.DataTableView):
table_class = credential_tables.CredentialsTable
page_title = _("User Credentials")
policy_rules = (("identity", "identity:list_credentials"),)
def get_data(self):
filters = self.get_filters()
if 'user_name' in filters:
users = get_user_names(self.request)
user_id = users.get(filters['user_name'])
if user_id is not None:
filters = {'user_id': user_id}
else:
return []
try:
credentials = keystone.credentials_list(self.request)
credentials = keystone.credentials_list(
self.request, filters=filters)
for cred in credentials:
cred.project_name = get_project_name(
self.request, cred.project_id)

View File

@ -19,6 +19,7 @@ from openstack_dashboard.dashboards.identity.credentials \
class CredentialsTable(credentials_tables.CredentialsTable):
user_id = tables.WrappingColumn('user_id', hidden=True)
user_name = tables.WrappingColumn('user_name', hidden=True)
class Meta(object):

View File

@ -155,10 +155,11 @@ class GroupsTab(tabs.TableTab):
return user_groups
def get_credentials(request, user):
def get_credentials(request, user_id):
user_credentials = []
try:
user_credentials = api.keystone.credentials_list(request, user=user)
user_credentials = api.keystone.credentials_list(
request, user_id=user_id)
for cred in user_credentials:
cred.project_name = get_project_name(request, cred.project_id)
except Exception:
@ -178,8 +179,8 @@ class CredentialsTab(tabs.TableTab):
policy_rules = (("identity", "identity:list_credentials"),)
def get_credentialstable_data(self):
user = self.tab_group.kwargs['user']
return get_credentials(self.request, user)
user_id = self.tab_group.kwargs['user'].id
return get_credentials(self.request, user_id)
class UserDetailTabs(tabs.DetailTabsGroup):

View File

@ -31,6 +31,7 @@ class DeleteCredentialAction(credentials_tables.DeleteCredentialAction):
class CredentialsTable(credentials_tables.CredentialsTable):
user_id = tables.WrappingColumn('user_id', hidden=True)
user_name = tables.WrappingColumn('user_name', hidden=True)
class Meta(object):

View File

@ -21,9 +21,9 @@ INDEX_VIEW_TEMPLATE = 'horizon/common/_data_table_view.html'
class CredentialsViewTests(test.TestCase):
def _get_credentials(self, user):
def _get_credentials(self, user_id):
credentials = [cred for cred in self.credentials.list()
if cred.user_id == user.id]
if cred.user_id == user_id]
return credentials
@test.create_mocks({api.keystone: ('credentials_list',
@ -31,7 +31,7 @@ class CredentialsViewTests(test.TestCase):
def test_index(self):
user = self.users.list()[0]
self.mock_user_get.return_value = user
credentials = self._get_credentials(user)
credentials = self._get_credentials(user.id)
self.mock_credentials_list.return_value = credentials
res = self.client.get(INDEX_URL)

View File

@ -31,8 +31,8 @@ class CredentialsView(tables.DataTableView):
policy_rules = (("identity", "identity:list_credentials"),)
def get_data(self):
user = self.request.user
return get_credentials(self.request, user)
user_id = self.request.user.id
return get_credentials(self.request, user_id)
class UpdateView(credential_views.UpdateView):