From 12668b3dababed103c3ad74fee4b7e81d4be1de3 Mon Sep 17 00:00:00 2001
From: lin-hua-cheng <os.lcheng@gmail.com>
Date: Thu, 22 Oct 2015 17:32:45 -0700
Subject: [PATCH] Fix issue when displaying image_member

image_member doesn't have a _info attribute, glanceclient returns
warlock object instead of a Resource object.

Change-Id: If6e7c4bd404454bd6cbe8c111879c1afa1380211
Closes-Bug: #1509054
---
 openstackclient/image/v2/image.py            | 2 +-
 openstackclient/tests/fakes.py               | 8 ++++++++
 openstackclient/tests/image/v2/test_image.py | 4 +---
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/openstackclient/image/v2/image.py b/openstackclient/image/v2/image.py
index 7d8b14124a..a846f4b328 100644
--- a/openstackclient/image/v2/image.py
+++ b/openstackclient/image/v2/image.py
@@ -105,7 +105,7 @@ class AddProjectToImage(show.ShowOne):
             project_id,
         )
 
-        return zip(*sorted(six.iteritems(image_member._info)))
+        return zip(*sorted(six.iteritems(image_member)))
 
 
 class CreateImage(show.ShowOne):
diff --git a/openstackclient/tests/fakes.py b/openstackclient/tests/fakes.py
index 357c470f66..0f5ef74aa0 100644
--- a/openstackclient/tests/fakes.py
+++ b/openstackclient/tests/fakes.py
@@ -150,3 +150,11 @@ class FakeResponse(requests.Response):
         self._content = json.dumps(data)
         if not isinstance(self._content, six.binary_type):
             self._content = self._content.encode()
+
+
+class FakeModel(dict):
+    def __getattr__(self, key):
+        try:
+            return self[key]
+        except KeyError:
+            raise AttributeError(key)
diff --git a/openstackclient/tests/image/v2/test_image.py b/openstackclient/tests/image/v2/test_image.py
index 4ce854759b..72ba0567b5 100644
--- a/openstackclient/tests/image/v2/test_image.py
+++ b/openstackclient/tests/image/v2/test_image.py
@@ -238,10 +238,8 @@ class TestAddProjectToImage(TestImage):
             copy.deepcopy(image_fakes.IMAGE),
             loaded=True,
         )
-        self.image_members_mock.create.return_value = fakes.FakeResource(
-            None,
+        self.image_members_mock.create.return_value = fakes.FakeModel(
             copy.deepcopy(image_fakes.MEMBER),
-            loaded=True,
         )
         self.project_mock.get.return_value = fakes.FakeResource(
             None,