Revision 8614814c kamaki/clients/image.py

b/kamaki/clients/image.py
37 37

  
38 38
class ImageClient(Client):
39 39
    """OpenStack Image Service API 1.0 and GRNET Plankton client"""
40
    
40

  
41 41
    def raise_for_status(self, r):
42 42
        if r.status_code == 404:
43 43
            raise ClientError("Image not found", r.status_code)
44
        
44

  
45 45
        # Fallback to the default
46 46
        super(ImageClient, self).raise_for_status(r)
47
    
47

  
48 48
    def list_public(self, detail=False, filters={}, order=''):
49 49
        path = '/images/detail' if detail else '/images/'
50 50
        params = {}
51 51
        params.update(filters)
52
        
52

  
53 53
        if order.startswith('-'):
54 54
            params['sort_dir'] = 'desc'
55 55
            order = order[1:]
56 56
        else:
57 57
            params['sort_dir'] = 'asc'
58
        
58

  
59 59
        if order:
60 60
            params['sort_key'] = order
61
        
61

  
62 62
        r = self.get(path, params=params, success=200)
63 63
        return r.json
64
    
64

  
65 65
    def get_meta(self, image_id):
66 66
        path = '/images/%s' % (image_id,)
67 67
        r = self.head(path, success=200)
68
        
68

  
69 69
        reply = {}
70 70
        properties = {}
71 71
        meta_prefix = 'x-image-meta-'
72 72
        property_prefix = 'x-image-meta-property-'
73
        
73

  
74 74
        for key, val in r.headers.items():
75 75
            key = key.lower()
76 76
            if key.startswith(property_prefix):
......
79 79
            elif key.startswith(meta_prefix):
80 80
                key = key[len(meta_prefix):]
81 81
                reply[key] = val
82
        
82

  
83 83
        if properties:
84 84
            reply['properties'] = properties
85 85
        return reply
86
    
86

  
87 87
    def register(self, name, location, params={}, properties={}):
88 88
        path = '/images/'
89 89
        headers = {}
90 90
        headers['x-image-meta-name'] = name
91 91
        headers['x-image-meta-location'] = location
92
        
92

  
93 93
        for key, val in params.items():
94 94
            if key in ('id', 'store', 'disk_format', 'container_format',
95 95
                       'size', 'checksum', 'is_public', 'owner'):
96 96
                key = 'x-image-meta-' + key.replace('_', '-')
97 97
                headers[key] = val
98
        
98

  
99 99
        for key, val in properties.items():
100 100
            headers['x-image-meta-property-' + key] = val
101
        
101

  
102 102
        self.post(path, headers=headers, success=200)
103
    
103

  
104 104
    def list_members(self, image_id):
105 105
        path = '/images/%s/members' % (image_id,)
106 106
        r = self.get(path, success=200)
......
118 118
    def remove_member(self, image_id, member):
119 119
        path = '/images/%s/members/%s' % (image_id, member)
120 120
        self.delete(path, success=204)
121
    
121

  
122 122
    def set_members(self, image_id, members):
123 123
        path = '/images/%s/members' % image_id
124 124
        req = {'memberships': [{'member_id': member} for member in members]}

Also available in: Unified diff