def get_image_meta_or_404(self, request, image_id): """ Grabs the image metadata for an image with a supplied identifier or raises an HTTPNotFound (404) response :param request: The WSGI/Webob Request object :param image_id: The opaque image identifier :raises HTTPNotFound if image does not exist """ context = request.context try: return registry.get_image_metadata(context, image_id) except exception.NotFound: msg = _("Image with identifier %s not found") % image_id logger.debug(msg) raise webob.exc.HTTPNotFound(msg, request=request, content_type='text/plain') except exception.NotAuthorized: msg = _("Unauthorized image access") logger.debug(msg) raise webob.exc.HTTPForbidden(msg, request=request, content_type='text/plain')
def fetch_image_into_cache(self, image_id): ctx = registry.get_client_context(self.conf, is_admin=True, show_deleted=True) try: image_meta = registry.get_image_metadata(ctx, image_id) if image_meta["status"] != "active": logger.warn(_("Image '%s' is not active. Not caching."), image_id) return False except exception.NotFound: logger.warn(_("No metadata found for image '%s'"), image_id) return False image_data, image_size = get_from_backend(image_meta["location"]) logger.debug(_("Caching image '%s'"), image_id) self.cache.cache_image_iter(image_id, image_data) return True
def queue_image(self, image_id): ctx = \ registry.get_client_context(conf, is_admin=True, show_deleted=True) try: image_meta = registry.get_image_metadata(ctx, image_id) if image_meta['status'] != 'active': logger.warn(_("Image '%s' is not active. Not queueing."), image_id) return False except exception.NotFound: logger.warn(_("No metadata found for image '%s'"), image_id) return False logger.debug(_("Queueing image '%s'"), image_id) self.cache.queue_image(image_id) return True
def fetch_image_into_cache(self, image_id): ctx = registry.get_client_context(self.conf, is_admin=True, show_deleted=True) try: image_meta = registry.get_image_metadata(ctx, image_id) if image_meta['status'] != 'active': logger.warn(_("Image '%s' is not active. Not caching."), image_id) return False except exception.NotFound: logger.warn(_("No metadata found for image '%s'"), image_id) return False image_data, image_size = get_from_backend(image_meta['location']) logger.debug(_("Caching image '%s'"), image_id) self.cache.cache_image_iter(image_id, image_data) return True
def process_request(self, request): """ For requests for an image file, we check the local image cache. If present, we return the image file, appending the image metadata in headers. If not present, we pass the request on to the next application in the pipeline. """ if request.method != 'GET': return None match = get_images_re.match(request.path) if not match: return None image_id = match.group(2) # /images/detail is unfortunately supported, so here we # cut out those requests and anything with a query # parameter... # See LP Bug #879136 if '?' in image_id or image_id == 'detail': return None if self.cache.is_cached(image_id): logger.debug(_("Cache hit for image '%s'"), image_id) image_iterator = self.get_from_cache(image_id) context = request.context try: image_meta = registry.get_image_metadata(context, image_id) response = webob.Response() return self.serializer.show(response, { 'image_iterator': image_iterator, 'image_meta': image_meta }) except exception.NotFound: msg = _("Image cache contained image file for image '%s', " "however the registry did not contain metadata for " "that image!" % image_id) logger.error(msg) return None
def process_request(self, request): """ For requests for an image file, we check the local image cache. If present, we return the image file, appending the image metadata in headers. If not present, we pass the request on to the next application in the pipeline. """ if request.method != 'GET': return None match = get_images_re.match(request.path) if not match: return None image_id = match.group(2) # /images/detail is unfortunately supported, so here we # cut out those requests and anything with a query # parameter... # See LP Bug #879136 if '?' in image_id or image_id == 'detail': return None if self.cache.is_cached(image_id): logger.debug(_("Cache hit for image '%s'"), image_id) image_iterator = self.get_from_cache(image_id) context = request.context try: image_meta = registry.get_image_metadata(context, image_id) response = webob.Response() return self.serializer.show(response, { 'image_iterator': image_iterator, 'image_meta': image_meta}) except exception.NotFound: msg = _("Image cache contained image file for image '%s', " "however the registry did not contain metadata for " "that image!" % image_id) logger.error(msg) return None
def get_image_meta_or_404(self, request, image_id): """ Grabs the image metadata for an image with a supplied identifier or raises an HTTPNotFound (404) response :param request: The WSGI/Webob Request object :param image_id: The opaque image identifier :raises HTTPNotFound if image does not exist """ context = request.context try: return registry.get_image_metadata(context, image_id) except exception.NotFound: msg = _("Image with identifier %s not found") % image_id logger.debug(msg) raise webob.exc.HTTPNotFound( msg, request=request, content_type='text/plain') except exception.NotAuthorized: msg = _("Unauthorized image access") logger.debug(msg) raise webob.exc.HTTPForbidden(msg, request=request, content_type='text/plain')