def _reserve(self, req, image_meta): """ Adds the image metadata to the registry and assigns an image identifier if one is not supplied in the request headers. Sets the image's status to `queued`. :param req: The WSGI/Webob Request object :param id: The opaque image identifier :param image_meta: The image metadata :raises HTTPConflict if image already exists :raises HTTPBadRequest if image metadata is not valid """ location = self._external_source(image_meta, req) image_meta['status'] = ('active' if image_meta.get('size') == 0 else 'queued') if location: store = get_store_from_location(location) # check the store exists before we hit the registry, but we # don't actually care what it is at this point self.get_store_or_400(req, store) # retrieve the image size from remote store (if not provided) image_meta['size'] = self._get_size(req.context, image_meta, location) else: # Ensure that the size attribute is set to zero for directly # uploadable images (if not provided). The size will be set # to a non-zero value during upload image_meta['size'] = image_meta.get('size', 0) try: image_meta = registry.add_image_metadata(req.context, image_meta) self.notifier.info("image.create", redact_loc(image_meta)) return image_meta except exception.Duplicate: msg = (_("An image with identifier %s already exists") % image_meta['id']) LOG.debug(msg) raise HTTPConflict(explanation=msg, request=req, content_type="text/plain") except exception.Invalid as e: msg = (_("Failed to reserve image. Got error: %(e)s") % locals()) for line in msg.split('\n'): LOG.debug(line) raise HTTPBadRequest(explanation=msg, request=req, content_type="text/plain") except exception.Forbidden: msg = _("Forbidden to reserve image.") LOG.debug(msg) raise HTTPForbidden(explanation=msg, request=req, content_type="text/plain")
def _reserve(self, req, image_meta): """ Adds the image metadata to the registry and assigns an image identifier if one is not supplied in the request headers. Sets the image's status to `queued`. :param req: The WSGI/Webob Request object :param id: The opaque image identifier :raises HTTPConflict if image already exists :raises HTTPBadRequest if image metadata is not valid """ location = image_meta.get('location') if location: store = get_store_from_location(location) # check the store exists before we hit the registry, but we # don't actually care what it is at this point self.get_store_or_400(req, store) # retrieve the image size from remote store (if not provided) image_meta['size'] = image_meta.get('size', 0) \ or get_size_from_backend(location) else: # Ensure that the size attribute is set to zero for uploadable # images (if not provided). The size will be set to a non-zero # value during upload image_meta['size'] = image_meta.get('size', 0) image_meta['status'] = 'queued' try: image_meta = registry.add_image_metadata(req.context, image_meta) return image_meta except exception.Duplicate: msg = (_("An image with identifier %s already exists") % image_meta['id']) logger.error(msg) raise HTTPConflict(msg, request=req, content_type="text/plain") except exception.Invalid, e: msg = (_("Failed to reserve image. Got error: %(e)s") % locals()) for line in msg.split('\n'): logger.error(line) raise HTTPBadRequest(msg, request=req, content_type="text/plain")
def _reserve(self, req, image_meta): """ Adds the image metadata to the registry and assigns an image identifier if one is not supplied in the request headers. Sets the image's status to `queued`. :param req: The WSGI/Webob Request object :param id: The opaque image identifier :raises HTTPConflict if image already exists :raises HTTPBadRequest if image metadata is not valid """ location = image_meta.get("location") if location: store = get_store_from_location(location) # check the store exists before we hit the registry, but we # don't actually care what it is at this point self.get_store_or_400(req, store) image_meta["status"] = "queued" # Ensure that the size attribute is set to zero for all # queued instances. The size will be set to a non-zero # value during upload image_meta["size"] = image_meta.get("size", 0) try: image_meta = registry.add_image_metadata(self.options, req.context, image_meta) return image_meta except exception.Duplicate: msg = _("An image with identifier %s already exists") % image_meta["id"] logger.error(msg) raise HTTPConflict(msg, request=req, content_type="text/plain") except exception.Invalid, e: msg = _("Failed to reserve image. Got error: %(e)s") % locals() for line in msg.split("\n"): logger.error(line) raise HTTPBadRequest(msg, request=req, content_type="text/plain")