Revision f13aab5d

b/snf-cyclades-app/synnefo/api/images.py
206 206

  
207 207
    log.info('delete_image %s', image_id)
208 208
    with image_backend(request.user_uniq) as backend:
209
        backend.delete(image_id)
209
        backend.unregister(image_id)
210 210
    log.info('User %s deleted image %s', request.user_uniq, image_id)
211 211
    return HttpResponse(status=204)
212 212

  
b/snf-cyclades-app/synnefo/api/test/images.py
187 187
    def test_delete_image(self, mimage):
188 188
        response = self.delete("/api/v1.1/images/42", "user")
189 189
        self.assertEqual(response.status_code, 204)
190
        mimage.return_value.delete.assert_called_once_with('42')
190
        mimage.return_value.unregister.assert_called_once_with('42')
191
        mimage.return_value._delete.assert_not_called('42')
191 192

  
192 193

  
193 194
@patch('synnefo.api.util.ImageBackend')
b/snf-cyclades-app/synnefo/plankton/backend.py
297 297
        self.backend.close()
298 298

  
299 299
    @handle_backend_exceptions
300
    def delete(self, image_id):
300
    def _delete(self, image_id):
301
        """Delete an Image.
302

  
303
        This method will delete the Image from the Storage backend.
304

  
305
        """
301 306
        image = self.get_image(image_id)
302 307
        account, container, object = split_location(image['location'])
303 308
        self.backend.delete_object(self.user, account, container, object)
......
511 516

  
512 517
        self._update_meta(location, meta)
513 518
        return self.get_image(image_id)
519

  
520
    @handle_backend_exceptions
521
    def unregister(self, image_id):
522
        """Unregister an image."""
523
        image = self.get_image(image_id)
524
        assert image, "Image not found"
525

  
526
        location = image["location"]
527
        # Unregister the image by removing all metadata from domain
528
        # 'PLANKTON_DOMAIN'
529
        meta = self._get_meta(location)
530
        for k in meta.keys():
531
            meta[k] = ""
532
        self._update_meta(location, meta, False)
b/snf-cyclades-app/synnefo/plankton/tests.py
291 291
    def test_get_image(self, backend):
292 292
        response = self.get("/plankton/images/123")
293 293
        self.assertEqual(response.status_code, 501)
294

  
295
    @assert_backend_closed
296
    def test_delete_image(self, backend):
297
        response = self.delete("/plankton/images/123")
298
        self.assertEqual(response.status_code, 204)
299
        backend.return_value.unregister.assert_called_once_with('123')
300
        backend.return_value._delete.assert_not_called()
b/snf-cyclades-app/synnefo/plankton/urls.py
47 47

  
48 48

  
49 49
def demux_image(request, image_id):
50
    if request.method == 'GET':
50
    if request.method == "GET":
51 51
        return views.get_image(request, image_id)
52
    elif request.method == 'HEAD':
52
    elif request.method == "HEAD":
53 53
        return views.get_image_meta(request, image_id)
54
    elif request.method == 'PUT':
54
    elif request.method == "PUT":
55 55
        return views.update_image(request, image_id)
56
    elif request.method == "DELETE":
57
        return views.delete_image(request, image_id)
56 58
    else:
57
        return HttpResponseNotAllowed(['GET', 'HEAD', 'PUT'])
59
        return HttpResponseNotAllowed(["GET", "HEAD", "PUT", "DELETE"])
58 60

  
59 61

  
60 62
def demux_image_members(request, image_id):
b/snf-cyclades-app/synnefo/plankton/views.py
155 155
    return _create_image_response(image)
156 156

  
157 157

  
158
@plankton_method("DELETE")
159
def delete_image(request, image_id):
160
    """Delete an Image.
161

  
162
    This API call is not described in the Openstack Glance API.
163

  
164
    Implementation notes:
165
      * The implementation does not delete the Image from the storage
166
        backend. Instead it unregisters the image by removing all the
167
        metadata from the plankton metadata domain.
168

  
169
    """
170
    log.info("delete_image '%s'" % image_id)
171
    userid = request.user_uniq
172
    request.backend.unregister(image_id)
173
    log.info("User '%s' deleted image '%s'" % (userid, image_id))
174
    return HttpResponse(status=204)
175

  
176

  
158 177
@plankton_method('PUT')
159 178
def add_image_member(request, image_id, member):
160 179
    """Add a member to an image

Also available in: Unified diff