Skip to content

Commit 4b8607e

Browse files
committed
image: Replace remaining use of keystoneclient
Change-Id: I967ffba07a603c2b64d9a90220b8697b3c486bf7 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
1 parent 9613070 commit 4b8607e

2 files changed

Lines changed: 52 additions & 66 deletions

File tree

openstackclient/image/v2/image.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -264,13 +264,13 @@ def take_action(
264264
self, parsed_args: argparse.Namespace
265265
) -> tuple[Sequence[str], Iterable[Any]]:
266266
image_client = self.app.client_manager.image
267-
identity_client = self.app.client_manager.identity
267+
identity_client = self.app.client_manager.sdk_connection.identity
268268

269-
project_id = identity_common.find_project(
269+
project_id = identity_common.find_project_id_sdk(
270270
identity_client,
271271
parsed_args.project,
272272
parsed_args.project_domain,
273-
).id
273+
)
274274

275275
image = image_client.find_image(
276276
parsed_args.image,
@@ -449,8 +449,8 @@ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
449449
def _take_action_image(
450450
self, parsed_args: argparse.Namespace
451451
) -> dict[str, Any]:
452-
identity_client = self.app.client_manager.identity
453452
image_client = self.app.client_manager.image
453+
identity_client = self.app.client_manager.sdk_connection.identity
454454

455455
# Build an attribute dict from the parsed args, only include
456456
# attributes that were actually set on the command line
@@ -491,11 +491,11 @@ def _take_action_image(
491491
kwargs['visibility'] = parsed_args.visibility
492492

493493
if parsed_args.project:
494-
kwargs['owner_id'] = identity_common.find_project(
494+
kwargs['owner_id'] = identity_common.find_project_id_sdk(
495495
identity_client,
496496
parsed_args.project,
497497
parsed_args.project_domain,
498-
).id
498+
)
499499

500500
if parsed_args.use_import:
501501
kwargs['use_import'] = True
@@ -879,8 +879,8 @@ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
879879
def take_action(
880880
self, parsed_args: argparse.Namespace
881881
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
882-
identity_client = self.app.client_manager.identity
883882
image_client = self.app.client_manager.image
883+
identity_client = self.app.client_manager.sdk_connection.identity
884884

885885
kwargs = {}
886886
if parsed_args.visibility is not None:
@@ -904,11 +904,11 @@ def take_action(
904904
kwargs['tag'] = parsed_args.tag
905905
project_id = None
906906
if parsed_args.project:
907-
project_id = identity_common.find_project(
907+
project_id = identity_common.find_project_id_sdk(
908908
identity_client,
909909
parsed_args.project,
910910
parsed_args.project_domain,
911-
).id
911+
)
912912
kwargs['owner'] = project_id
913913
if parsed_args.is_hidden:
914914
kwargs['is_hidden'] = parsed_args.is_hidden
@@ -1036,13 +1036,13 @@ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
10361036

10371037
def take_action(self, parsed_args: argparse.Namespace) -> None:
10381038
image_client = self.app.client_manager.image
1039-
identity_client = self.app.client_manager.identity
1039+
identity_client = self.app.client_manager.sdk_connection.identity
10401040

1041-
project_id = identity_common.find_project(
1041+
project_id = identity_common.find_project_id_sdk(
10421042
identity_client,
10431043
parsed_args.project,
10441044
parsed_args.project_domain,
1045-
).id
1045+
)
10461046

10471047
image = image_client.find_image(
10481048
parsed_args.image,
@@ -1320,8 +1320,8 @@ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
13201320
return parser
13211321

13221322
def take_action(self, parsed_args: argparse.Namespace) -> None:
1323-
identity_client = self.app.client_manager.identity
13241323
image_client = self.app.client_manager.image
1324+
identity_client = self.app.client_manager.sdk_connection.identity
13251325

13261326
for deadopt in self.deadopts:
13271327
if getattr(parsed_args, f"dead_{deadopt.replace('-', '_')}", None):
@@ -1339,11 +1339,11 @@ def take_action(self, parsed_args: argparse.Namespace) -> None:
13391339
)
13401340
project_id = None
13411341
if parsed_args.project:
1342-
project_id = identity_common.find_project(
1342+
project_id = identity_common.find_project_id_sdk(
13431343
identity_client,
13441344
parsed_args.project,
13451345
parsed_args.project_domain,
1346-
).id
1346+
)
13471347

13481348
# handle activation status changes
13491349

openstackclient/tests/unit/image/v2/test_image.py

Lines changed: 37 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -19,31 +19,18 @@
1919

2020
from openstack.block_storage.v2 import volume as _volume
2121
from openstack import exceptions as sdk_exceptions
22+
from openstack.identity.v3 import domain as _domain
23+
from openstack.identity.v3 import project as _project
2224
from openstack.test import fakes as sdk_fakes
2325
from osc_lib.cli import format_columns
2426
from osc_lib import exceptions
2527

2628
from openstackclient.image.v2 import image as _image
27-
from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
2829
from openstackclient.tests.unit.image.v2 import fakes as image_fakes
2930
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
3031

3132

32-
class TestImage(image_fakes.TestImagev2, volume_fakes.TestVolume):
33-
def setUp(self):
34-
super().setUp()
35-
36-
# Get shortcut to the Mocks in identity client
37-
self.project_mock = self.identity_client.projects
38-
self.project_mock.reset_mock()
39-
self.domain_mock = self.identity_client.domains
40-
self.domain_mock.reset_mock()
41-
42-
43-
class TestImageCreate(TestImage):
44-
project = identity_fakes.FakeProject.create_one_project()
45-
domain = identity_fakes.FakeDomain.create_one_domain()
46-
33+
class TestImageCreate(image_fakes.TestImagev2, volume_fakes.TestVolume):
4734
def setUp(self):
4835
super().setUp()
4936

@@ -52,11 +39,12 @@ def setUp(self):
5239
self.image_client.update_image.return_value = self.new_image
5340
self.image_client.get_image.return_value = self.new_image
5441

55-
self.project_mock.get.return_value = self.project
42+
self.project = sdk_fakes.generate_fake_resource(_project.Project)
43+
self.identity_sdk_client.find_project.return_value = self.project
5644

57-
self.domain_mock.get.return_value = self.domain
45+
self.domain = sdk_fakes.generate_fake_resource(_domain.Domain)
5846

59-
(self.expected_columns, self.expected_data) = zip(
47+
self.expected_columns, self.expected_data = zip(
6048
*sorted(_image._format_image(self.new_image).items())
6149
)
6250

@@ -149,8 +137,9 @@ def test_image_reserve_options(self, raw_input):
149137
self.assertCountEqual(self.expected_data, data)
150138

151139
def test_image_create_with_unexist_project(self):
152-
self.project_mock.get.side_effect = exceptions.NotFound(None)
153-
self.project_mock.find.side_effect = exceptions.NotFound(None)
140+
self.identity_sdk_client.find_project.side_effect = (
141+
sdk_exceptions.ResourceNotFound()
142+
)
154143

155144
arglist = [
156145
'--container-format',
@@ -410,9 +399,9 @@ def test_image_create_from_volume_v31(self, mock_get_data_f):
410399
)
411400

412401

413-
class TestAddProjectToImage(TestImage):
414-
project = identity_fakes.FakeProject.create_one_project()
415-
domain = identity_fakes.FakeDomain.create_one_domain()
402+
class TestAddProjectToImage(image_fakes.TestImagev2):
403+
project = sdk_fakes.generate_fake_resource(_project.Project)
404+
domain = sdk_fakes.generate_fake_resource(_domain.Domain)
416405
_image = image_fakes.create_one_image()
417406
new_member = image_fakes.create_one_image_member(
418407
attrs={'image_id': _image.id, 'member_id': project.id}
@@ -444,8 +433,7 @@ def setUp(self):
444433

445434
# Update the image_id in the MEMBER dict
446435
self.image_client.add_member.return_value = self.new_member
447-
self.project_mock.get.return_value = self.project
448-
self.domain_mock.get.return_value = self.domain
436+
self.identity_sdk_client.find_project.return_value = self.project
449437
# Get the command object to test
450438
self.cmd = _image.AddProjectToImage(self.app, None)
451439

@@ -497,7 +485,7 @@ def test_add_project_to_image_with_option(self):
497485
self.assertEqual(self.datalist, data)
498486

499487

500-
class TestImageDelete(TestImage):
488+
class TestImageDelete(image_fakes.TestImagev2):
501489
def setUp(self):
502490
super().setUp()
503491

@@ -617,7 +605,7 @@ def test_image_delete_multi_images_exception(self):
617605
self.image_client.delete_image.assert_has_calls(calls)
618606

619607

620-
class TestImageList(TestImage):
608+
class TestImageList(image_fakes.TestImagev2):
621609
_image = image_fakes.create_one_image()
622610

623611
columns = (
@@ -1008,8 +996,8 @@ def test_image_list_tag_option(self):
1008996
self.image_client.images.assert_called_with(tag=['abc', 'cba'])
1009997

1010998

1011-
class TestListImageProjects(TestImage):
1012-
project = identity_fakes.FakeProject.create_one_project()
999+
class TestListImageProjects(image_fakes.TestImagev2):
1000+
project = sdk_fakes.generate_fake_resource(_project.Project)
10131001
_image = image_fakes.create_one_image()
10141002
member = image_fakes.create_one_image_member(
10151003
attrs={'image_id': _image.id, 'member_id': project.id}
@@ -1046,9 +1034,9 @@ def test_image_member_list(self):
10461034
self.assertEqual(self.datalist, list(data))
10471035

10481036

1049-
class TestRemoveProjectImage(TestImage):
1050-
project = identity_fakes.FakeProject.create_one_project()
1051-
domain = identity_fakes.FakeDomain.create_one_domain()
1037+
class TestRemoveProjectImage(image_fakes.TestImagev2):
1038+
project = sdk_fakes.generate_fake_resource(_project.Project)
1039+
domain = sdk_fakes.generate_fake_resource(_domain.Domain)
10521040

10531041
def setUp(self):
10541042
super().setUp()
@@ -1057,8 +1045,7 @@ def setUp(self):
10571045
# This is the return value for utils.find_resource()
10581046
self.image_client.find_image.return_value = self._image
10591047

1060-
self.project_mock.get.return_value = self.project
1061-
self.domain_mock.get.return_value = self.domain
1048+
self.identity_sdk_client.find_project.return_value = self.project
10621049
self.image_client.remove_member.return_value = None
10631050
# Get the command object to test
10641051
self.cmd = _image.RemoveProjectImage(self.app, None)
@@ -1109,7 +1096,7 @@ def test_remove_project_image_with_options(self):
11091096
self.assertIsNone(result)
11101097

11111098

1112-
class TestShowProjectImage(TestImage):
1099+
class TestShowProjectImage(image_fakes.TestImagev2):
11131100
_image = image_fakes.create_one_image()
11141101
new_member = image_fakes.create_one_image_member(
11151102
attrs={'image_id': _image.id, 'member_id': 'member1'}
@@ -1169,17 +1156,15 @@ def test_show_project_image(self):
11691156
self.assertEqual(self.datalist, data)
11701157

11711158

1172-
class TestImageSet(TestImage):
1173-
project = identity_fakes.FakeProject.create_one_project()
1174-
domain = identity_fakes.FakeDomain.create_one_domain()
1159+
class TestImageSet(image_fakes.TestImagev2):
1160+
project = sdk_fakes.generate_fake_resource(_project.Project)
1161+
domain = sdk_fakes.generate_fake_resource(_domain.Domain)
11751162
_image = image_fakes.create_one_image({'tags': []})
11761163

11771164
def setUp(self):
11781165
super().setUp()
11791166

1180-
self.project_mock.get.return_value = self.project
1181-
1182-
self.domain_mock.get.return_value = self.domain
1167+
self.identity_sdk_client.find_project.return_value = self.project
11831168

11841169
self.image_client.find_image.return_value = self._image
11851170

@@ -1453,8 +1438,9 @@ def test_image_set_options(self):
14531438
self.assertIsNone(result)
14541439

14551440
def test_image_set_with_unexist_project(self):
1456-
self.project_mock.get.side_effect = exceptions.NotFound(None)
1457-
self.project_mock.find.side_effect = exceptions.NotFound(None)
1441+
self.identity_sdk_client.find_project.side_effect = (
1442+
sdk_exceptions.ResourceNotFound()
1443+
)
14581444

14591445
arglist = [
14601446
'--project',
@@ -1823,7 +1809,7 @@ def test_image_set_unhidden(self):
18231809
self.assertIsNone(result)
18241810

18251811

1826-
class TestImageShow(TestImage):
1812+
class TestImageShow(image_fakes.TestImagev2):
18271813
new_image = image_fakes.create_one_image(attrs={'size': 1000})
18281814

18291815
_data = image_fakes.create_one_image()
@@ -1891,7 +1877,7 @@ def test_image_show_human_readable(self):
18911877
self.assertEqual(data[size_index], '1K')
18921878

18931879

1894-
class TestImageUnset(TestImage):
1880+
class TestImageUnset(image_fakes.TestImagev2):
18951881
def setUp(self):
18961882
super().setUp()
18971883

@@ -1994,7 +1980,7 @@ def test_image_unset_mixed_option(self):
19941980
self.assertIsNone(result)
19951981

19961982

1997-
class TestImageStage(TestImage):
1983+
class TestImageStage(image_fakes.TestImagev2):
19981984
image = image_fakes.create_one_image({})
19991985

20001986
def setUp(self):
@@ -2048,7 +2034,7 @@ def test_stage_image__from_stdin(self, mock_get_data_from_stdin):
20482034
)
20492035

20502036

2051-
class TestImageImport(TestImage):
2037+
class TestImageImport(image_fakes.TestImagev2):
20522038
image = image_fakes.create_one_image(
20532039
{
20542040
'container_format': 'bare',
@@ -2325,7 +2311,7 @@ def test_import_image__glance_download(self):
23252311
)
23262312

23272313

2328-
class TestImageSave(TestImage):
2314+
class TestImageSave(image_fakes.TestImagev2):
23292315
image = image_fakes.create_one_image({})
23302316

23312317
def setUp(self):
@@ -2375,7 +2361,7 @@ def test_save_data_with_chunk_size(self):
23752361
)
23762362

23772363

2378-
class TestImageGetData(TestImage):
2364+
class TestImageGetData(image_fakes.TestImagev2):
23792365
def test_get_data_from_stdin(self):
23802366
fd = io.BytesIO(b"some initial binary data: \x00\x01")
23812367

@@ -2401,7 +2387,7 @@ def test_get_data_from_stdin__interactive(self):
24012387
self.assertIsNone(test_fd)
24022388

24032389

2404-
class TestStoresInfo(TestImage):
2390+
class TestStoresInfo(image_fakes.TestImagev2):
24052391
stores_info = image_fakes.create_one_stores_info()
24062392

24072393
def setUp(self):

0 commit comments

Comments
 (0)