Example #1
0
    def get(self, request, image_id):
        image_object = get_object_or_404(Image, pk=image_id)

        if not user_can_download_image(user=request.user, image=image_object):
            return HttpResponse(status=status.HTTP_403_FORBIDDEN)

        image_itk = image_object.get_sitk_image()
        if image_itk is None:
            return HttpResponse(status=status.HTTP_404_NOT_FOUND)
        depth = image_itk.GetDepth()
        image_nparray = SimpleITK.GetArrayFromImage(image_itk)
        if depth > 0:
            # Get middle slice of image if 3D
            image_nparray = image_nparray[depth // 2]
        image = PILImage.fromarray(image_nparray)
        image.thumbnail(
            (
                settings.RETINA_DEFAULT_THUMBNAIL_SIZE,
                settings.RETINA_DEFAULT_THUMBNAIL_SIZE,
            ),
            PILImage.ANTIALIAS,
        )
        response = HttpResponse(content_type="image/png")
        image.save(response, "png")
        return response
Example #2
0
    def get(self, request, image_id):
        image = get_object_or_404(Image, pk=image_id)

        if not user_can_download_image(user=request.user, image=image):
            return HttpResponse(status=status.HTTP_403_FORBIDDEN)

        # This endpoint expects spacing in SimpleITK ordering (x, y, (z)), so reverse image.spacing
        response_json = json.dumps(list(reversed(image.spacing)))
        return HttpResponse(response_json, content_type="application/json")
Example #3
0
    def get_image_itk(image_id, user):
        image_object = get_object_or_404(Image, pk=image_id)

        if not user_can_download_image(user=user, image=image_object):
            raise PermissionDenied

        image_itk = image_object.get_sitk_image()
        if image_itk is None:
            raise Http404

        return image_itk
    def get(self, request, image_id):
        image_object = get_object_or_404(Image, pk=image_id)

        if not user_can_download_image(user=request.user, image=image_object):
            return HttpResponse(status=status.HTTP_403_FORBIDDEN)

        image_itk = image_object.get_sitk_image()
        if image_itk is None:
            return HttpResponse(status=status.HTTP_404_NOT_FOUND)

        spacing = image_itk.GetSpacing()

        return HttpResponse(json.dumps(spacing),
                            content_type="application/json")
Example #5
0
    def get(self, request, image_id):
        image_object = get_object_or_404(Image, pk=image_id)

        if not user_can_download_image(user=request.user, image=image_object):
            return HttpResponse(status=status.HTTP_403_FORBIDDEN)

        image_itk = image_object.get_sitk_image()
        if image_itk is None:
            return HttpResponse(status=status.HTTP_404_NOT_FOUND)

        spacing = image_itk.GetSpacing()

        return HttpResponse(
            json.dumps(spacing), content_type="application/json"
        )
Example #6
0
    def get(self, request, image_id):
        image_object = get_object_or_404(Image, pk=image_id)

        if not user_can_download_image(user=request.user, image=image_object):
            return HttpResponse(status=status.HTTP_403_FORBIDDEN)

        image_itk = image_object.get_sitk_image()
        if image_itk is None:
            return HttpResponse(status=status.HTTP_404_NOT_FOUND)
        depth = image_itk.GetDepth()
        image_nparray = sitk.GetArrayFromImage(image_itk)
        if depth > 0:
            # Get middle slice of image if 3D
            image_nparray = image_nparray[depth // 2]
        image = PILImage.fromarray(image_nparray)
        image.thumbnail((128, 128), PILImage.ANTIALIAS)
        response = HttpResponse(content_type="image/png")
        image.save(response, "png")
        return response
Example #7
0
def serve_images(request, *, pk, path):
    document_root = safe_join(f"/{settings.IMAGE_FILES_SUBDIRECTORY}", pk)
    path = posixpath.normpath(path).lstrip("/")
    name = safe_join(document_root, path)

    try:
        image = Image.objects.get(pk=pk)
    except Image.DoesNotExist:
        raise Http404("File not found.")

    try:
        user, _ = TokenAuthentication().authenticate(request)
    except (AuthenticationFailed, TypeError):
        user = request.user

    if user_can_download_image(user=user, image=image):
        return protected_storage_redirect(name=name)

    raise Http404("File not found.")
Example #8
0
def serve_images(request, *, pk, path):
    document_root = safe_join(f"/{settings.IMAGE_FILES_SUBDIRECTORY}", pk)
    path = posixpath.normpath(path).lstrip("/")
    name = safe_join(document_root, path)

    try:
        image = Image.objects.get(pk=pk)
    except Image.DoesNotExist:
        raise Http404("File not found.")

    try:
        user, _ = TokenAuthentication().authenticate(request)
    except (AuthenticationFailed, TypeError):
        user = request.user

    if user_can_download_image(user=user, image=image):
        return protected_storage_redirect(name=name)

    raise Http404("File not found.")
    def get(self, request, image_id):
        image_object = get_object_or_404(Image, pk=image_id)

        if not user_can_download_image(user=request.user, image=image_object):
            return HttpResponse(status=status.HTTP_403_FORBIDDEN)

        image_itk = image_object.get_sitk_image()
        if image_itk is None:
            return HttpResponse(status=status.HTTP_404_NOT_FOUND)
        npy = sitk.GetArrayFromImage(image_itk)

        bio = BytesIO()
        np.save(bio, npy)
        bio.seek(0)
        # return numpy array as response
        response = HttpResponse(bio.getvalue(),
                                content_type="application/octet-stream")
        bio.close()
        return response
Example #10
0
    def get(self, request, image_id):
        image_object = get_object_or_404(Image, pk=image_id)

        if not user_can_download_image(user=request.user, image=image_object):
            return HttpResponse(status=status.HTTP_403_FORBIDDEN)

        image_itk = image_object.get_sitk_image()
        if image_itk is None:
            return HttpResponse(status=status.HTTP_404_NOT_FOUND)
        npy = sitk.GetArrayFromImage(image_itk)

        bio = BytesIO()
        np.save(bio, npy)
        bio.seek(0)
        # return numpy array as response
        response = HttpResponse(
            bio.getvalue(), content_type="application/octet-stream"
        )
        bio.close()
        return response
Example #11
0
def serve_images(request, *, pk, path):
    document_root = safe_join(settings.MEDIA_ROOT, "images", pk)
    path = posixpath.normpath(path).lstrip("/")
    fullpath = safe_join(document_root, path)

    try:
        imagefile = ImageFile.objects.get(
            file__exact=fullpath[len(settings.MEDIA_ROOT):].lstrip("/"))
    except ImageFile.DoesNotExist:
        raise Http404("File not found.")

    try:
        user, _ = TokenAuthentication().authenticate(request)
    except (AuthenticationFailed, TypeError):
        user = request.user

    if user_can_download_image(user=user, image=imagefile.image):
        return serve_fullpath(fullpath=fullpath)

    raise Http404("File not found.")
Example #12
0
def serve_images(request, *, pk, path, pa="", pb=""):
    document_root = safe_join(
        f"/{settings.IMAGE_FILES_SUBDIRECTORY}", pa, pb, str(pk)
    )
    path = posixpath.normpath(path).lstrip("/")
    name = safe_join(document_root, path)

    try:
        image = Image.objects.get(pk=pk)
    except Image.DoesNotExist:
        raise Http404("Image not found.")

    try:
        user, _ = TokenAuthentication().authenticate(request)
    except (AuthenticationFailed, TypeError):
        user = request.user

    if user_can_download_image(user=user, image=image):
        create_download.apply_async(
            kwargs={"creator_id": user.pk, "image_id": image.pk}
        )
        return protected_storage_redirect(name=name)

    raise PermissionDenied
Example #13
0
 def has_object_permission(self, request, view, obj):
     return user_can_download_image(user=request.user, image=obj)