Skip to content

Commit f380d02

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "identity: Fix listing of applications credentials by user"
2 parents efce69b + 94d17b8 commit f380d02

3 files changed

Lines changed: 101 additions & 27 deletions

File tree

openstackclient/identity/common.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,16 @@ def find_domain(identity_client, name_or_id):
189189
)
190190

191191

192+
def find_domain_id_sdk(
193+
identity_client, name_or_id, *, validate_actor_existence=True
194+
):
195+
return _find_sdk_id(
196+
identity_client.find_domain,
197+
name_or_id=name_or_id,
198+
validate_actor_existence=validate_actor_existence,
199+
)
200+
201+
192202
def find_group(identity_client, name_or_id, domain_name_or_id=None):
193203
if domain_name_or_id is None:
194204
return _find_identity_resource(
@@ -229,6 +239,32 @@ def find_user(identity_client, name_or_id, domain_name_or_id=None):
229239
)
230240

231241

242+
def find_user_id_sdk(
243+
identity_client,
244+
name_or_id,
245+
domain_name_or_id=None,
246+
*,
247+
validate_actor_existence=True,
248+
):
249+
if domain_name_or_id is None:
250+
return _find_sdk_id(
251+
identity_client.find_user,
252+
name_or_id=name_or_id,
253+
validate_actor_existence=validate_actor_existence,
254+
)
255+
domain_id = find_domain_id_sdk(
256+
identity_client,
257+
name_or_id=domain_name_or_id,
258+
validate_actor_existence=validate_actor_existence,
259+
)
260+
return _find_sdk_id(
261+
identity_client.find_user,
262+
name_or_id=name_or_id,
263+
validate_actor_existence=validate_actor_existence,
264+
domain_id=domain_id,
265+
)
266+
267+
232268
def _find_identity_resource(
233269
identity_client_manager, name_or_id, resource_type, **kwargs
234270
):
@@ -269,6 +305,22 @@ def _find_identity_resource(
269305
return resource_type(None, {'id': name_or_id, 'name': name_or_id})
270306

271307

308+
def _find_sdk_id(
309+
find_command, name_or_id, *, validate_actor_existence=True, **kwargs
310+
):
311+
try:
312+
resource = find_command(
313+
name_or_id=name_or_id, ignore_missing=False, **kwargs
314+
)
315+
except sdk_exceptions.ForbiddenException:
316+
return name_or_id
317+
except sdk_exceptions.ResourceNotFound as exc:
318+
if not validate_actor_existence:
319+
return name_or_id
320+
raise exceptions.CommandError from exc
321+
return resource.id
322+
323+
272324
def get_immutable_options(parsed_args):
273325
options = {}
274326
if parsed_args.immutable:

openstackclient/identity/v3/application_credential.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,9 +269,9 @@ def get_parser(self, prog_name):
269269
def take_action(self, parsed_args):
270270
identity_client = self.app.client_manager.sdk_connection.identity
271271
if parsed_args.user:
272-
user_id = common.find_user(
272+
user_id = common.find_user_id_sdk(
273273
identity_client, parsed_args.user, parsed_args.user_domain
274-
).id
274+
)
275275
else:
276276
conn = self.app.client_manager.sdk_connection
277277
user_id = conn.config.get_auth().get_user_id(conn.identity)

openstackclient/tests/unit/identity/v3/test_application_credential.py

Lines changed: 47 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
application_credential as _application_credential,
2525
)
2626
from openstack.identity.v3 import role as _role
27+
from openstack.identity.v3 import user as _user
2728
from openstack.test import fakes as sdk_fakes
2829
from openstackclient.identity.v3 import application_credential
2930
from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
@@ -325,6 +326,31 @@ def setUp(self):
325326
self.identity_sdk_client.application_credentials.return_value = [
326327
self.application_credential
327328
]
329+
self.user = sdk_fakes.generate_fake_resource(resource_type=_user.User)
330+
self.identity_sdk_client.find_user.return_value = self.user
331+
332+
self.columns = (
333+
'ID',
334+
'Name',
335+
'Description',
336+
'Project ID',
337+
'Roles',
338+
'Unrestricted',
339+
'Access Rules',
340+
'Expires At',
341+
)
342+
self.data = (
343+
(
344+
self.application_credential.id,
345+
self.application_credential.name,
346+
self.application_credential.description,
347+
self.application_credential.project_id,
348+
'',
349+
self.application_credential.unrestricted,
350+
self.application_credential.access_rules,
351+
self.application_credential.expires_at,
352+
),
353+
)
328354

329355
# Get the command object to test
330356
self.cmd = application_credential.ListApplicationCredential(
@@ -339,39 +365,35 @@ def test_application_credential_list(self):
339365
conn = self.app.client_manager.sdk_connection
340366
user_id = conn.config.get_auth().get_user_id(conn.identity)
341367

342-
# In base command class Lister in cliff, abstract method take_action()
343-
# returns a tuple containing the column names and an iterable
344-
# containing the data to be listed.
345368
columns, data = self.cmd.take_action(parsed_args)
346369

370+
self.assertEqual(self.columns, columns)
371+
self.assertEqual(self.data, tuple(data))
372+
373+
self.identity_sdk_client.find_user.assert_not_called()
347374
self.identity_sdk_client.application_credentials.assert_called_with(
348375
user=user_id
349376
)
350377

351-
collist = (
352-
'ID',
353-
'Name',
354-
'Description',
355-
'Project ID',
356-
'Roles',
357-
'Unrestricted',
358-
'Access Rules',
359-
'Expires At',
378+
def test_application_credential_list_user(self):
379+
arglist = ['--user', self.user.name]
380+
verifylist = []
381+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
382+
383+
conn = self.app.client_manager.sdk_connection
384+
conn.config.get_auth().get_user_id(conn.identity)
385+
386+
columns, data = self.cmd.take_action(parsed_args)
387+
388+
self.assertEqual(self.columns, columns)
389+
self.assertEqual(self.data, tuple(data))
390+
391+
self.identity_sdk_client.find_user.assert_called_once_with(
392+
name_or_id=self.user.name, ignore_missing=False
360393
)
361-
self.assertEqual(collist, columns)
362-
datalist = (
363-
(
364-
self.application_credential.id,
365-
self.application_credential.name,
366-
self.application_credential.description,
367-
self.application_credential.project_id,
368-
self.application_credential.roles,
369-
self.application_credential.unrestricted,
370-
self.application_credential.access_rules,
371-
self.application_credential.expires_at,
372-
),
394+
self.identity_sdk_client.application_credentials.assert_called_with(
395+
user=self.user.id
373396
)
374-
self.assertEqual(datalist, tuple(data))
375397

376398

377399
class TestApplicationCredentialShow(identity_fakes.TestIdentityv3):

0 commit comments

Comments
 (0)