~ubuntu-branches/ubuntu/raring/python-glanceclient/raring-proposed

« back to all changes in this revision

Viewing changes to glanceclient/v1/image_members.py

  • Committer: Package Import Robot
  • Author(s): Chuck Short
  • Date: 2012-05-29 08:34:09 UTC
  • Revision ID: package-import@ubuntu.com-20120529083409-42y5dlpvwd94521t
Tags: upstream-2012.2~f1
ImportĀ upstreamĀ versionĀ 2012.2~f1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2012 OpenStack LLC.
 
2
# All Rights Reserved.
 
3
#
 
4
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
 
5
#    not use this file except in compliance with the License. You may obtain
 
6
#    a copy of the License at
 
7
#
 
8
#         http://www.apache.org/licenses/LICENSE-2.0
 
9
#
 
10
#    Unless required by applicable law or agreed to in writing, software
 
11
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 
12
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 
13
#    License for the specific language governing permissions and limitations
 
14
#    under the License.
 
15
 
 
16
from glanceclient.common import base
 
17
 
 
18
 
 
19
class ImageMember(base.Resource):
 
20
    def __repr__(self):
 
21
        return "<ImageMember %s>" % self._info
 
22
 
 
23
    @property
 
24
    def id(self):
 
25
        return self.member_id
 
26
 
 
27
    def delete(self):
 
28
        self.manager.delete(self)
 
29
 
 
30
 
 
31
class ImageMemberManager(base.Manager):
 
32
    resource_class = ImageMember
 
33
 
 
34
    def get(self, image, member_id):
 
35
        image_id = base.getid(image)
 
36
        url = '/v1/images/%s/members/%s' % (image_id, member_id)
 
37
        resp, body = self.api.json_request('GET', url)
 
38
        member = body['member']
 
39
        member['image_id'] = image_id
 
40
        return ImageMember(self, member, loaded=True)
 
41
 
 
42
    def list(self, image=None, member=None):
 
43
        out = []
 
44
        if image and member:
 
45
            try:
 
46
                out.append(self.get(image, member))
 
47
            #TODO: narrow this down to 404
 
48
            except:
 
49
                pass
 
50
        elif image:
 
51
            out.extend(self._list_by_image(image))
 
52
        elif member:
 
53
            out.extend(self._list_by_member(member))
 
54
        else:
 
55
            #TODO: figure out what is appropriate to do here as we are
 
56
            # unable to provide the requested response
 
57
            pass
 
58
        return out
 
59
 
 
60
    def _list_by_image(self, image):
 
61
        image_id = base.getid(image)
 
62
        url = '/v1/images/%s/members' % image_id
 
63
        resp, body = self.api.json_request('GET', url)
 
64
        out = []
 
65
        for member in body['members']:
 
66
            member['image_id'] = image_id
 
67
            out.append(ImageMember(self, member, loaded=True))
 
68
        return out
 
69
 
 
70
    def _list_by_member(self, member):
 
71
        member_id = base.getid(member)
 
72
        url = '/v1/shared-images/%s' % member_id
 
73
        resp, body = self.api.json_request('GET', url)
 
74
        out = []
 
75
        for member in body['shared_images']:
 
76
            member['member_id'] = member_id
 
77
            out.append(ImageMember(self, member, loaded=True))
 
78
        return out
 
79
 
 
80
    def delete(self, image_id, member_id):
 
81
        self._delete("/v1/images/%s/members/%s" % (image_id, member_id))
 
82
 
 
83
    def create(self, image, member_id, can_share=False):
 
84
        """Create an image"""
 
85
        url = '/v1/images/%s/members/%s' % (base.getid(image), member_id)
 
86
        body = {'member': {'can_share': can_share}}
 
87
        self._update(url, body=body)
 
88
 
 
89
    def replace(self, image, members):
 
90
        memberships = []
 
91
        for member in members:
 
92
            try:
 
93
                obj = {
 
94
                    'member_id': member.member_id,
 
95
                    'can_share': member.can_share,
 
96
                }
 
97
            except AttributeError:
 
98
                obj = {'member_id': member['member_id']}
 
99
                if 'can_share' in member:
 
100
                    obj['can_share'] = member['can_share']
 
101
            memberships.append(obj)
 
102
        url = '/v1/images/%s/members' % base.getid(image)
 
103
        self.api.json_request('PUT', url, {}, {'memberships': memberships})