예제 #1
0
    def show(self, req, id):
        """
        Returns an iterator that can be used to retrieve an image's
        data along with the image metadata.

        :param req: The WSGI/Webob Request object
        :param id: The opaque image identifier

        :raises HTTPNotFound if image is not available to user
        """
        self._enforce(req, 'get_image')
        self._enforce(req, 'download_image')
        image_meta = self.get_active_image_meta_or_404(req, id)

        if image_meta.get('size') == 0:
            image_iterator = iter([])
        else:
            image_iterator, size = self._get_from_store(req.context,
                                                        image_meta['location'])
            image_iterator = utils.cooperative_iter(image_iterator)
            image_meta['size'] = size or image_meta['size']

        del image_meta['location']
        return {
            'image_iterator': image_iterator,
            'image_meta': image_meta,
        }
예제 #2
0
파일: images.py 프로젝트: jiangyh/glance
    def show(self, req, id):
        """
        Returns an iterator that can be used to retrieve an image's
        data along with the image metadata.

        :param req: The WSGI/Webob Request object
        :param id: The opaque image identifier

        :raises HTTPNotFound if image is not available to user
        """
        self._enforce(req, "get_image")
        self._enforce(req, "download_image")
        image_meta = self.get_active_image_meta_or_404(req, id)

        self._enforce_read_protected_props(image_meta, req)

        if image_meta.get("size") == 0:
            image_iterator = iter([])
        else:
            image_iterator, size = self._get_from_store(req.context, image_meta["location"])
            image_iterator = utils.cooperative_iter(image_iterator)
            image_meta["size"] = size or image_meta["size"]

        image_meta = redact_loc(image_meta)
        return {"image_iterator": image_iterator, "image_meta": image_meta}
예제 #3
0
    def show(self, req, id):
        """
        Returns an iterator that can be used to retrieve an image's
        data along with the image metadata.

        :param req: The WSGI/Webob Request object
        :param id: The opaque image identifier

        :raises HTTPNotFound if image is not available to user
        """
        self._enforce(req, 'get_image')
        self._enforce(req, 'download_image')
        image_meta = self.get_active_image_meta_or_404(req, id)

        self._enforce_read_protected_props(image_meta, req)

        if image_meta.get('size') == 0:
            image_iterator = iter([])
        else:
            image_iterator, size = self._get_from_store(req.context,
                                                        image_meta['location'])
            image_iterator = utils.cooperative_iter(image_iterator)
            image_meta['size'] = size or image_meta['size']

        image_meta = redact_loc(image_meta)
        return {
            'image_iterator': image_iterator,
            'image_meta': image_meta,
        }
예제 #4
0
파일: images.py 프로젝트: amoid/glance
    def show(self, req, id):
        """
        Returns an iterator that can be used to retrieve an image's
        data along with the image metadata.

        :param req: The WSGI/Webob Request object
        :param id: The opaque image identifier

        :raises HTTPNotFound if image is not available to user
        """

        self._enforce(req, "get_image")

        try:
            image_meta = self.get_active_image_meta_or_404(req, id)
        except HTTPNotFound:
            # provision for backward-compatibility breaking issue
            # catch the 404 exception and raise it after enforcing
            # the policy
            with excutils.save_and_reraise_exception():
                self._enforce(req, "download_image")
        else:
            target = utils.create_mashup_dict(image_meta)
            self._enforce(req, "download_image", target=target)

        self._enforce_read_protected_props(image_meta, req)

        if image_meta.get("size") == 0:
            image_iterator = iter([])
        else:
            image_iterator, size = self._get_from_store(req.context, image_meta["location"])
            image_iterator = utils.cooperative_iter(image_iterator)
            image_meta["size"] = size or image_meta["size"]
        image_meta = redact_loc(image_meta)
        return {"image_iterator": image_iterator, "image_meta": image_meta}