Revision 7b6e977c

b/kamaki/cli/commands/image_cli.py
202 202
        if self['update']:
203 203
            self.client.reregister(location, name, params, properties)
204 204
        else:
205
            self.client.register(name, location, params, properties)
205
            r = self.client.register(name, location, params, properties)
206
            print_dict(r)
206 207

  
207 208
    def main(self, name, location):
208 209
        super(self.__class__, self)._run()
b/kamaki/clients/image/__init__.py
32 32
# or implied, of GRNET S.A.
33 33

  
34 34
from kamaki.clients import Client, ClientError
35
from kamaki.clients.utils import path4url
35
from kamaki.clients.utils import path4url, filter_in
36 36

  
37 37

  
38 38
class ImageClient(Client):
......
109 109
            disc_format, container_format, size, checksum, is_public, owner
110 110

  
111 111
        :param properties: (dict) image properties (X-Image-Meta-Property)
112

  
113
        :returns: (dict) details of the created image
112 114
        """
113 115
        path = path4url('images') + '/'
114 116
        self.set_header('X-Image-Meta-Name', name)
......
124 126
        for key, val in properties.items():
125 127
            async_headers['x-image-meta-property-%s' % key] = val
126 128

  
127
        self.post(path, success=200, async_headers=async_headers)
129
        r = self.post(path, success=200, async_headers=async_headers)
130
        return filter_in(r.headers, 'X-Image-')
128 131

  
129 132
    def list_members(self, image_id):
130 133
        """
b/kamaki/clients/image/test.py
35 35
from unittest import TestCase
36 36
from itertools import product
37 37

  
38
example_image_headers = {
39
    'x-image-meta-id': '3edd4d15-41b4-4a39-9601-015ef56b3bb3',
40
    'x-image-meta-checksum': 'df23837c30889252c0aed80b6f770a53a86',
41
    'x-image-meta-container-format': 'bare',
42
    'x-image-meta-location': 'pithos://a13528163db/con/obj_13.0',
43
    'x-image-meta-disk-format': 'diskdump',
44
    'x-image-meta-is-public': 'True',
45
    'x-image-meta-status': 'available',
46
    'x-image-meta-deleted-at': '',
47
    'x-image-meta-updated-at': '2013-04-11 15:22:39',
48
    'x-image-meta-created-at': '2013-04-11 15:22:37',
49
    'x-image-meta-owner': 'a13529bb3c3db',
50
    'x-image-meta-size': '1073741824',
51
    'x-image-meta-name': 'img_1365686546.0',
52
    'extraheaders': 'should be ignored'
53
}
38 54
example_images = [
39 55
    {
40 56
        "status": "available",
......
185 201
    @patch('%s.post' % image_pkg, return_value=FR())
186 202
    def test_register(self, post, SH):
187 203
        img0 = example_images_detailed[0]
204
        FR.headers = example_image_headers
188 205
        img0_location = img0['location']
189 206
        img0_name = 'A new img0 name'
190 207
        prfx = 'x-image-meta-'
......
206 223
                    async_headers['%s%s' % (prfx, k)] = args[i]
207 224
                    props['%s%s' % (proprfx, args[i])] = k
208 225
            async_headers.update(props)
209
        self.client.register(
226
        r = self.client.register(
210 227
            img0_name, img0_location,
211 228
            params=params, properties=props)
229
        expectedict = dict(example_image_headers)
230
        expectedict.pop('extraheaders')
231
        self.assert_dicts_are_equal(expectedict, r)
212 232
        self.assertEqual(
213 233
            post.mock_calls[-1],
214 234
            call('/images/', async_headers=async_headers, success=200))
b/kamaki/clients/livetest/image.py
39 39
from kamaki.clients import ClientError
40 40

  
41 41

  
42
IMGMETA = set([
43
    'id', 'name', 'checksum', 'container-format', 'location', 'disk-format',
44
    'is-public', 'status', 'deleted-at', 'updated-at', 'created-at', 'owner',
45
    'size'])
46

  
47

  
42 48
class Image(livetest.Generic):
43 49
    def setUp(self):
44 50
        self.now = time.mktime(time.gmtime())
......
49 55
        cyclades_url = self['compute', 'url']
50 56
        self.cyclades = CycladesClient(cyclades_url, self['token'])
51 57
        self._imglist = {}
58
        self._imgdetails = {}
52 59

  
53 60
    def test_000(self):
54 61
        self._prepare_img()
......
73 80
        print('\t- ok')
74 81
        f.close()
75 82

  
76
        self.client.register(
83
        r = self.client.register(
77 84
            self.imgname,
78 85
            self.location,
79 86
            params=dict(is_public=True))
80
        img = self._get_img_by_name(self.imgname)
81
        self._imglist[self.imgname] = img
87
        self._imglist[self.imgname] = dict(
88
            name=r['x-image-meta-name'], id=r['x-image-meta-id'])
89
        self._imgdetails[self.imgname] = r
82 90

  
83 91
    def tearDown(self):
84 92
        for img in self._imglist.values():
......
200 208
        self.assertTrue(self._imglist)
201 209
        for img in self._imglist.values():
202 210
            self.assertTrue(img is not None)
211
            r = set(self._imgdetails[img['name']].keys())
212
            self.assertTrue(
213
                r.issubset(['x-image-meta-%s' % k for k in IMGMETA]))
203 214

  
204 215
    def test_set_members(self):
205 216
        """Test set_members"""

Also available in: Unified diff