Adding shared-images support

This commit is contained in:
Brian Waldon
2012-04-02 16:26:19 -07:00
parent ca8434f2c3
commit d75a029a01
3 changed files with 88 additions and 16 deletions

View File

@@ -20,25 +20,60 @@ class ImageMember(base.Resource):
def __repr__(self):
return "<ImageMember %s>" % self._info
def delete(self):
self.manager.delete(self)
class ImageMemberManager(base.Manager):
resource_class = ImageMember
def get(self, image, member_id):
url = '/v1/images/%s' % (base.getid(image), member_id)
return self._get(url, 'member')
def list(self, image):
url = '/v1/images/%s/members' % base.getid(image)
return self._list(url, 'members')
def delete(self, image, member):
image_id = base.getid(image)
try:
member_id = base.getid(member)
except AttributeError:
member_id = member
url = '/v1/images/%s/members/%s' % (image_id, member_id)
resp, body = self.api.get(url)
member = body['member']
member['image_id'] = image_id
return ImageMember(self, member, loaded=True)
def list(self, image=None, member=None):
out = []
if image and member:
try:
out.append(self.get(image, member))
#TODO: narrow this down to 404
except:
pass
elif image:
out.extend(self._list_by_image(image))
elif member:
out.extend(self._list_by_member(member))
else:
#TODO: figure out what is appropriate to do here as we are
# unable to provide the requested response
pass
return out
def _list_by_image(self, image):
image_id = base.getid(image)
resp, body = self.api.get('/v1/images/%s/members' % image_id)
out = []
for member in body['members']:
member['image_id'] = image_id
out.append(ImageMember(self, member, loaded=True))
return out
def _list_by_member(self, member):
member_id = base.getid(member)
resp, body = self.api.get('/v1/shared_images/%s' % member_id)
out = []
for member in body['shared_images']:
member['member_id'] = member_id
out.append(ImageMember(self, member, loaded=True))
return out
def delete(self, member):
member_id = member.member_id
image_id = member.image_id
self._delete("/v1/images/%s/members/%s" % (image_id, member_id))
def create(self, image, member_id, can_share=False):

View File

@@ -14,17 +14,39 @@ class ImageMemberManagerTest(unittest.TestCase):
self.mgr = glanceclient.v1.image_members.ImageMemberManager(self.api)
self.image = glanceclient.v1.images.Image(self.api, {'id': '1'}, True)
def test_list(self):
members = self.mgr.list(self.image)
def test_list_by_image(self):
members = self.mgr.list(image=self.image)
expect = [('GET', '/v1/images/1/members', {}, None)]
self.assertEqual(self.api.calls, expect)
self.assertEqual(len(members), 1)
self.assertEqual(members[0].member_id, '1')
self.assertEqual(members[0].image_id, '1')
self.assertEqual(members[0].can_share, False)
def test_list_by_member(self):
members = self.mgr.list(member='1')
expect = [('GET', '/v1/shared_images/1', {}, None)]
self.assertEqual(self.api.calls, expect)
self.assertEqual(len(members), 1)
self.assertEqual(members[0].member_id, '1')
self.assertEqual(members[0].image_id, '1')
self.assertEqual(members[0].can_share, False)
def test_get(self):
member = self.mgr.get(self.image, '1')
expect = [('GET', '/v1/images/1/members/1', {}, None)]
self.assertEqual(self.api.calls, expect)
self.assertEqual(member.member_id, '1')
self.assertEqual(member.image_id, '1')
self.assertEqual(member.can_share, False)
def test_delete(self):
self.mgr.delete(self.image, '1')
expect = [('DELETE', '/v1/images/1/members/1', {}, None)]
member = self.mgr.get(self.image, '1')
self.mgr.delete(member)
expect = [
('GET', '/v1/images/1/members/1', {}, None),
('DELETE', '/v1/images/1/members/1', {}, None),
]
self.assertEqual(self.api.calls, expect)
def test_create(self):

View File

@@ -63,9 +63,24 @@ fixtures = {
'PUT': ({}, None),
},
'/v1/images/1/members/1': {
'GET': (
{},
{'member': {
'member_id': '1',
'can_share': False,
}},
),
'PUT': ({}, None),
'DELETE': ({}, None),
},
'/v1/shared_images/1': {
'GET': (
{},
{'shared_images': [
{'image_id': '1', 'can_share': False},
]},
),
},
}