Merge "Add filters to search for enabled/disabled users and projects"

This commit is contained in:
Zuul
2025-05-19 14:17:22 +00:00
committed by Gerrit Code Review
5 changed files with 85 additions and 3 deletions

@ -240,6 +240,20 @@ class ListProject(command.Lister):
'keys and directions.'
),
)
parser.add_argument(
'--enabled',
action='store_true',
dest='is_enabled',
default=None,
help=_('List only enabled projects'),
)
parser.add_argument(
'--disabled',
action='store_false',
dest='is_enabled',
default=None,
help=_('List only disabled projects'),
)
tag.add_tag_filtering_option_to_parser(parser, _('projects'))
return parser
@ -277,6 +291,9 @@ class ListProject(command.Lister):
kwargs['user'] = user_id
if parsed_args.is_enabled is not None:
kwargs['is_enabled'] = parsed_args.is_enabled
tag.get_tag_filtering_args(parsed_args, kwargs)
if parsed_args.my_projects:

@ -412,6 +412,24 @@ class ListUser(command.Lister):
default=False,
help=_('List additional fields in output'),
)
parser.add_argument(
'--enabled',
action='store_true',
dest='is_enabled',
default=None,
help=_(
'List only enabled users, does nothing with --project and --group'
),
)
parser.add_argument(
'--disabled',
action='store_false',
dest='is_enabled',
default=None,
help=_(
'List only disabled users, does nothing with --project and --group'
),
)
return parser
def take_action(self, parsed_args):
@ -431,6 +449,9 @@ class ListUser(command.Lister):
ignore_missing=False,
).id
if parsed_args.is_enabled is not None:
enabled = parsed_args.is_enabled
if parsed_args.project:
if domain is not None:
project = identity_client.find_project(
@ -469,9 +490,15 @@ class ListUser(command.Lister):
group=group,
)
else:
data = identity_client.users(
domain_id=domain,
)
if parsed_args.is_enabled is not None:
data = identity_client.users(
domain_id=domain,
is_enabled=enabled,
)
else:
data = identity_client.users(
domain_id=domain,
)
# Column handling
if parsed_args.long:

@ -941,6 +941,22 @@ class TestProjectList(TestProject):
)
self.assertEqual(datalist, tuple(data))
def test_project_list_with_option_enabled(self):
arglist = ['--enabled']
verifylist = [('is_enabled', True)]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action()
# returns a tuple containing the column names and an iterable
# containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
kwargs = {'is_enabled': True}
self.projects_mock.list.assert_called_with(**kwargs)
self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, tuple(data))
class TestProjectSet(TestProject):
domain = identity_fakes.FakeDomain.create_one_domain()

@ -1035,6 +1035,24 @@ class TestUserList(identity_fakes.TestIdentityv3):
self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, tuple(data))
def test_user_list_with_option_enabled(self):
arglist = ['--enabled']
verifylist = [('is_enabled', True)]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action()
# returns a tuple containing the column names and an iterable
# containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
kwargs = {'domain_id': None, 'is_enabled': True}
self.identity_sdk_client.users.assert_called_with(**kwargs)
self.identity_sdk_client.find_user.assert_not_called()
self.identity_sdk_client.group_users.assert_not_called()
self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, tuple(data))
class TestUserSet(identity_fakes.TestIdentityv3):
project = sdk_fakes.generate_fake_resource(_project.Project)

@ -0,0 +1,4 @@
---
features:
- |
Add filters to search for enabled and disabled users and projects.