identity: Remove unnecessary helper

Make better use of argparse and eliminate the need for a helper in the
process.

Change-Id: Ibdc9b4bfbb4d532ddb05bce9b49bcf0580cce76d
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
Stephen Finucane
2025-05-26 16:02:21 +01:00
parent 88b59d8975
commit 2f03c3ea3c
7 changed files with 79 additions and 104 deletions

View File

@@ -348,15 +348,6 @@ def _find_sdk_id(
return resource.id
def get_immutable_options(parsed_args):
options = {}
if parsed_args.immutable:
options['immutable'] = True
if parsed_args.no_immutable:
options['immutable'] = False
return options
def add_user_domain_option_to_parser(parser):
parser.add_argument(
'--user-domain',
@@ -419,17 +410,21 @@ def add_inherited_option_to_parser(parser):
def add_resource_option_to_parser(parser):
enable_group = parser.add_mutually_exclusive_group()
enable_group.add_argument(
immutable_group = parser.add_mutually_exclusive_group()
immutable_group.add_argument(
'--immutable',
action='store_true',
dest='immutable',
default=None,
help=_(
'Make resource immutable. An immutable project may not '
'be deleted or modified except to remove the immutable flag'
),
)
enable_group.add_argument(
immutable_group.add_argument(
'--no-immutable',
action='store_true',
action='store_false',
dest='immutable',
default=None,
help=_('Make resource mutable (default)'),
)

View File

@@ -94,7 +94,9 @@ class CreateDomain(command.ShowOne):
def take_action(self, parsed_args):
identity_client = self.app.client_manager.sdk_connection.identity
options = common.get_immutable_options(parsed_args)
options = {}
if parsed_args.immutable is not None:
options['immutable'] = parsed_args.immutable
try:
domain = identity_client.create_domain(
@@ -242,13 +244,10 @@ class SetDomain(command.Command):
kwargs['name'] = parsed_args.name
if parsed_args.description:
kwargs['description'] = parsed_args.description
if parsed_args.is_enabled is not None:
kwargs['is_enabled'] = parsed_args.is_enabled
options = common.get_immutable_options(parsed_args)
if options:
kwargs['options'] = options
if parsed_args.immutable is not None:
kwargs['options'] = {'immutable': parsed_args.immutable}
identity_client.update_domain(domain.id, **kwargs)

View File

@@ -59,17 +59,22 @@ class CreateProject(command.ShowOne):
enable_group.add_argument(
'--enable',
action='store_true',
dest='enabled',
default=True,
help=_('Enable project'),
)
enable_group.add_argument(
'--disable',
action='store_true',
action='store_false',
dest='enabled',
default=True,
help=_('Disable project'),
)
parser.add_argument(
'--property',
metavar='<key=value>',
action=parseractions.KeyValueAction,
dest='properties',
help=_(
'Add a property to <name> '
'(repeat option to set multiple properties)'
@@ -98,15 +103,9 @@ class CreateProject(command.ShowOne):
parsed_args.parent,
).id
enabled = True
if parsed_args.disable:
enabled = False
options = common.get_immutable_options(parsed_args)
kwargs = {}
if parsed_args.property:
kwargs = parsed_args.property.copy()
if parsed_args.properties:
kwargs = parsed_args.properties.copy()
if 'is_domain' in kwargs.keys():
if kwargs['is_domain'].lower() == "true":
kwargs['is_domain'] = True
@@ -117,13 +116,17 @@ class CreateProject(command.ShowOne):
kwargs['tags'] = list(set(parsed_args.tags))
options = {}
if parsed_args.immutable is not None:
options['immutable'] = parsed_args.immutable
try:
project = identity_client.projects.create(
name=parsed_args.name,
domain=domain,
parent=parent,
description=parsed_args.description,
enabled=enabled,
enabled=parsed_args.enabled,
options=options,
**kwargs,
)
@@ -356,16 +359,21 @@ class SetProject(command.Command):
enable_group.add_argument(
'--enable',
action='store_true',
dest='enabled',
default=None,
help=_('Enable project'),
)
enable_group.add_argument(
'--disable',
action='store_true',
action='store_false',
dest='enabled',
default=None,
help=_('Disable project'),
)
parser.add_argument(
'--property',
metavar='<key=value>',
dest='properties',
action=parseractions.KeyValueAction,
help=_(
'Set a property on <project> '
@@ -388,15 +396,12 @@ class SetProject(command.Command):
kwargs['name'] = parsed_args.name
if parsed_args.description:
kwargs['description'] = parsed_args.description
if parsed_args.enable:
kwargs['enabled'] = True
if parsed_args.disable:
kwargs['enabled'] = False
options = common.get_immutable_options(parsed_args)
if options:
kwargs['options'] = options
if parsed_args.property:
kwargs.update(parsed_args.property)
if parsed_args.enabled is not None:
kwargs['enabled'] = parsed_args.enabled
if parsed_args.immutable is not None:
kwargs['options'] = {'immutable': parsed_args.immutable}
if parsed_args.properties:
kwargs.update(parsed_args.properties)
tag.update_tags_in_args(parsed_args, project, kwargs)
identity_client.projects.update(project.id, **kwargs)

View File

@@ -334,9 +334,12 @@ class CreateRole(command.ShowOne):
if parsed_args.name:
create_kwargs['name'] = parsed_args.name
if parsed_args.description:
create_kwargs['description'] = parsed_args.description
create_kwargs['options'] = common.get_immutable_options(parsed_args)
if parsed_args.immutable is not None:
create_kwargs['options'] = {"immutable": parsed_args.immutable}
try:
role = identity_client.create_role(**create_kwargs)
@@ -585,7 +588,9 @@ class SetRole(command.Command):
)
update_kwargs["domain_id"] = domain_id
update_kwargs["options"] = common.get_immutable_options(parsed_args)
if parsed_args.immutable is not None:
update_kwargs["options"] = {"immutable": parsed_args.immutable}
role = _find_sdk_id(
identity_client.find_role,
name_or_id=parsed_args.role,

View File

@@ -186,7 +186,7 @@ class TestDomainCreate(identity_fakes.TestIdentityv3):
self.domain.name,
]
verifylist = [
('no_immutable', True),
('immutable', False),
('name', self.domain.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -461,7 +461,7 @@ class TestDomainSet(identity_fakes.TestIdentityv3):
self.domain.id,
]
verifylist = [
('no_immutable', True),
('immutable', False),
('domain', self.domain.id),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)

View File

@@ -77,8 +77,7 @@ class TestProjectCreate(TestProject):
]
verifylist = [
('parent', None),
('enable', False),
('disable', False),
('enabled', True),
('name', self.project.name),
('tags', []),
]
@@ -134,8 +133,7 @@ class TestProjectCreate(TestProject):
]
verifylist = [
('description', 'new desc'),
('enable', False),
('disable', False),
('enabled', True),
('name', self.project.name),
('parent', None),
('tags', []),
@@ -172,8 +170,7 @@ class TestProjectCreate(TestProject):
]
verifylist = [
('domain', self.project.domain_id),
('enable', False),
('disable', False),
('enabled', True),
('name', self.project.name),
('parent', None),
('tags', []),
@@ -210,8 +207,7 @@ class TestProjectCreate(TestProject):
]
verifylist = [
('domain', self.project.domain_id),
('enable', False),
('disable', False),
('enabled', True),
('name', self.project.name),
('parent', None),
('tags', []),
@@ -243,8 +239,7 @@ class TestProjectCreate(TestProject):
self.project.name,
]
verifylist = [
('enable', True),
('disable', False),
('enabled', True),
('name', self.project.name),
('parent', None),
('tags', []),
@@ -279,8 +274,7 @@ class TestProjectCreate(TestProject):
self.project.name,
]
verifylist = [
('enable', False),
('disable', True),
('enabled', False),
('name', self.project.name),
('parent', None),
]
@@ -317,7 +311,7 @@ class TestProjectCreate(TestProject):
self.project.name,
]
verifylist = [
('property', {'fee': 'fi', 'fo': 'fum'}),
('properties', {'fee': 'fi', 'fo': 'fum'}),
('name', self.project.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -354,11 +348,10 @@ class TestProjectCreate(TestProject):
]
verifylist = [
('parent', None),
('enable', False),
('disable', False),
('enabled', True),
('name', self.project.name),
('tags', []),
('property', {'is_domain': 'false'}),
('properties', {'is_domain': 'false'}),
('name', self.project.name),
]
@@ -393,11 +386,10 @@ class TestProjectCreate(TestProject):
]
verifylist = [
('parent', None),
('enable', False),
('disable', False),
('enabled', True),
('name', self.project.name),
('tags', []),
('property', {'is_domain': 'true'}),
('properties', {'is_domain': 'true'}),
('name', self.project.name),
]
@@ -432,11 +424,10 @@ class TestProjectCreate(TestProject):
]
verifylist = [
('parent', None),
('enable', False),
('disable', False),
('enabled', True),
('name', self.project.name),
('tags', []),
('property', {'is_domain': 'none'}),
('properties', {'is_domain': 'none'}),
('name', self.project.name),
]
@@ -481,8 +472,7 @@ class TestProjectCreate(TestProject):
verifylist = [
('domain', self.project.domain_id),
('parent', self.parent.name),
('enable', False),
('disable', False),
('enabled', True),
('name', self.project.name),
('tags', []),
]
@@ -544,8 +534,7 @@ class TestProjectCreate(TestProject):
verifylist = [
('domain', self.project.domain_id),
('parent', 'invalid'),
('enable', False),
('disable', False),
('enabled', True),
('name', self.project.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -566,8 +555,7 @@ class TestProjectCreate(TestProject):
]
verifylist = [
('domain', self.project.domain_id),
('enable', False),
('disable', False),
('enabled', True),
('name', self.project.name),
('parent', None),
('tags', ['foo']),
@@ -602,8 +590,7 @@ class TestProjectCreate(TestProject):
verifylist = [
('immutable', True),
('description', None),
('enable', False),
('disable', False),
('enabled', True),
('name', self.project.name),
('parent', None),
('tags', []),
@@ -638,10 +625,9 @@ class TestProjectCreate(TestProject):
self.project.name,
]
verifylist = [
('no_immutable', True),
('immutable', False),
('description', None),
('enable', False),
('disable', False),
('enabled', True),
('name', self.project.name),
('parent', None),
('tags', []),
@@ -981,8 +967,7 @@ class TestProjectSet(TestProject):
]
verifylist = [
('project', self.project.name),
('enable', False),
('disable', False),
('enabled', None),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1001,8 +986,7 @@ class TestProjectSet(TestProject):
verifylist = [
('name', 'qwerty'),
('domain', self.project.domain_id),
('enable', False),
('disable', False),
('enabled', None),
('project', self.project.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1029,8 +1013,7 @@ class TestProjectSet(TestProject):
verifylist = [
('domain', self.project.domain_id),
('description', 'new desc'),
('enable', False),
('disable', False),
('enabled', None),
('project', self.project.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1053,8 +1036,7 @@ class TestProjectSet(TestProject):
]
verifylist = [
('domain', self.project.domain_id),
('enable', True),
('disable', False),
('enabled', True),
('project', self.project.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1077,8 +1059,7 @@ class TestProjectSet(TestProject):
]
verifylist = [
('domain', self.project.domain_id),
('enable', False),
('disable', True),
('enabled', False),
('project', self.project.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1104,7 +1085,7 @@ class TestProjectSet(TestProject):
]
verifylist = [
('domain', self.project.domain_id),
('property', {'fee': 'fi', 'fo': 'fum'}),
('properties', {'fee': 'fi', 'fo': 'fum'}),
('project', self.project.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1132,8 +1113,7 @@ class TestProjectSet(TestProject):
verifylist = [
('name', 'qwerty'),
('domain', self.project.domain_id),
('enable', False),
('disable', False),
('enabled', None),
('project', self.project.name),
('tags', ['foo']),
]
@@ -1160,8 +1140,7 @@ class TestProjectSet(TestProject):
self.project.name,
]
verifylist = [
('enable', False),
('disable', False),
('enabled', None),
('project', self.project.name),
('remove_tag', ['tag1', 'tag2']),
]
@@ -1183,8 +1162,7 @@ class TestProjectSet(TestProject):
verifylist = [
('domain', self.project.domain_id),
('immutable', True),
('enable', False),
('disable', False),
('enabled', None),
('project', self.project.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1207,9 +1185,8 @@ class TestProjectSet(TestProject):
]
verifylist = [
('domain', self.project.domain_id),
('no_immutable', True),
('enable', False),
('disable', False),
('immutable', False),
('enabled', None),
('project', self.project.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)

View File

@@ -494,7 +494,6 @@ class TestRoleCreate(identity_fakes.TestIdentityv3):
# Set expected values
kwargs = {
'name': self.role.name,
'options': {},
}
self.identity_sdk_client.create_role.assert_called_with(**kwargs)
@@ -533,7 +532,6 @@ class TestRoleCreate(identity_fakes.TestIdentityv3):
kwargs = {
'domain_id': self.domain.id,
'name': self.role_with_domain.name,
'options': {},
}
self.identity_sdk_client.create_role.assert_called_with(**kwargs)
@@ -572,7 +570,6 @@ class TestRoleCreate(identity_fakes.TestIdentityv3):
kwargs = {
'name': self.role_with_description.name,
'description': self.role_with_description.description,
'options': {},
}
self.identity_sdk_client.create_role.assert_called_with(**kwargs)
@@ -629,7 +626,7 @@ class TestRoleCreate(identity_fakes.TestIdentityv3):
self.role.name,
]
verifylist = [
('no_immutable', True),
('immutable', False),
('name', self.role.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1437,7 +1434,6 @@ class TestRoleSet(identity_fakes.TestIdentityv3):
kwargs = {
'name': 'over',
'role': self.role.id,
'options': {},
}
self.identity_sdk_client.update_role.assert_called_with(**kwargs)
self.assertIsNone(result)
@@ -1472,7 +1468,6 @@ class TestRoleSet(identity_fakes.TestIdentityv3):
'name': 'over',
'role': self.role_with_domain.id,
'domain_id': self.domain2.id,
'options': {},
}
self.identity_sdk_client.update_role.assert_called_with(**kwargs)
self.assertIsNone(result)
@@ -1501,7 +1496,6 @@ class TestRoleSet(identity_fakes.TestIdentityv3):
'name': 'over',
'description': 'role description',
'role': self.role_with_domain.id,
'options': {},
}
self.identity_sdk_client.update_role.assert_called_with(**kwargs)
self.assertIsNone(result)
@@ -1544,7 +1538,7 @@ class TestRoleSet(identity_fakes.TestIdentityv3):
]
verifylist = [
('name', 'over'),
('no_immutable', True),
('immutable', False),
('role', self.role_with_domain.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)