예제 #1
0
    def test_file_too_large_throws_error(self, tmpdir):
        image = ImageFactoryWithImageFile()

        # Remove zraw file
        old_raw = image.files.get(file__endswith=".zraw")
        raw_file_name = Path(old_raw.file.name).name
        old_raw.delete()

        # Create fake too large zraw file
        too_large_file_raw = tmpdir.join(raw_file_name)
        f = too_large_file_raw.open(mode="wb")
        f.seek(settings.MAX_SITK_FILE_SIZE)
        f.write(b"\0")
        f.close()

        # Add too large file as ImageFile model to image.files
        too_large_file_field = factory.django.FileField(
            from_path=str(too_large_file_raw))
        too_large_imagefile = ImageFileFactory(file=too_large_file_field)
        image.files.add(too_large_imagefile)

        # Try to open and catch expected exception
        with pytest.raises(IOError) as exec_info:
            get_sitk_image(image=image)
        assert "File exceeds maximum file size." in str(
            exec_info.value.args[0])
예제 #2
0
 def test_multiple_mhds(self):
     extra_mhd = ImageFileFactoryWithMHDFile()
     extra_mhd_file = ImageFileFactoryWithMHDFile()
     extra_raw = ImageFileFactoryWithRAWFile()
     extra_raw_file = ImageFileFactoryWithRAWFile()
     image = ImageFactoryWithImageFile(files=(extra_mhd, extra_raw,
                                              extra_mhd_file,
                                              extra_raw_file))
     with pytest.raises(MultipleObjectsReturned):
         get_sitk_image(image=image)
예제 #3
0
 def test_correct_dimensions(self):
     image = ImageFactoryWithImageFile()
     sitk_image = get_sitk_image(image=image)
     assert sitk_image.GetDimension() == 2
     assert sitk_image.GetSize() == (3, 4)
     assert sitk_image.GetOrigin() == (0.0, 0.0)
     assert sitk_image.GetSpacing() == (1.0, 1.0)
     assert sitk_image.GetNumberOfComponentsPerPixel() == 3
     assert sitk_image.GetPixelIDValue() == 13
     assert (sitk_image.GetPixelIDTypeAsString() ==
             "vector of 8-bit unsigned integer")
예제 #4
0
def test_staged_4d_mha_and_4d_mhd_upload(settings, images: List):
    # Override the celery settings
    settings.task_eager_propagates = (True, )
    settings.task_always_eager = (True, )

    session, uploaded_images = create_raw_upload_image_session(images=images)

    session.refresh_from_db()
    assert session.status == session.SUCCESS
    assert session.error_message is None

    images = Image.objects.filter(origin=session).all()
    assert len(images) == 1

    image = images[0]
    assert image.shape == [13, 12, 11, 10]
    assert image.shape_without_color == [13, 12, 11, 10]
    assert image.color_space == Image.COLOR_SPACE_GRAY

    sitk_image = get_sitk_image(image=image)
    assert [e for e in reversed(sitk_image.GetSize())] == image.shape
예제 #5
0
def test_mhd_file_annotation_creation(settings):
    # Override the celery settings
    settings.task_eager_propagates = (True, )
    settings.task_always_eager = (True, )

    images = ["image5x6x7.mhd", "image5x6x7.zraw"]
    session, uploaded_images = create_raw_upload_image_session(images=images)

    session.refresh_from_db()
    assert session.status == session.SUCCESS
    assert session.error_message is None

    images = Image.objects.filter(origin=session).all()
    assert len(images) == 1

    image = images[0]
    assert image.shape == [7, 6, 5]
    assert image.shape_without_color == [7, 6, 5]
    assert image.color_space == Image.COLOR_SPACE_GRAY

    sitk_image = get_sitk_image(image=image)
    assert [e for e in reversed(sitk_image.GetSize())] == image.shape
예제 #6
0
def test_staged_mhd_upload_with_additional_headers(settings, tmp_path,
                                                   images: List[str]):
    # Override the celery settings
    settings.task_eager_propagates = (True, )
    settings.task_always_eager = (True, )

    session, uploaded_images = create_raw_upload_image_session(images=images)

    session.refresh_from_db()
    assert session.status == session.SUCCESS
    assert session.error_message is None

    images = Image.objects.filter(origin=session).all()
    assert len(images) == 1

    image: Image = images[0]
    tmp_header_filename = tmp_path / "tmp_header.mhd"
    with image.files.get(
            file__endswith=".mha").file.open("rb") as in_file, open(
                tmp_header_filename, "wb") as out_file:
        out_file.write(in_file.read())

    headers = parse_mh_header(tmp_header_filename)
    for key in headers.keys():
        assert (key in ADDITIONAL_HEADERS) or (key in EXPECTED_HEADERS)

    sitk_image: SimpleITK.Image = get_sitk_image(image=image)
    for key in ADDITIONAL_HEADERS:
        assert key in sitk_image.GetMetaDataKeys()
        if key in HEADERS_MATCHING_NUM_TIMEPOINTS:
            if sitk_image.GetDimension() >= 4:
                assert (len(sitk_image.GetMetaData(key).split(" ")) ==
                        sitk_image.GetSize()[3])
            else:
                assert len(sitk_image.GetMetaData(key).split(" ")) == 1
    assert "Bogus" not in sitk_image.GetMetaDataKeys()
예제 #7
0
 def test_file_not_found_raw(self):
     image = ImageFactoryWithImageFile()
     imagefile = image.files.get(file__endswith=".zraw")
     imagefile.file.storage.delete(imagefile.file.name)
     with pytest.raises(FileNotFoundError):
         get_sitk_image(image=image)
예제 #8
0
 def test_no_raw_object(self):
     image = ImageFactoryWithImageFile()
     image.files.get(file__endswith=".zraw").delete()
     with pytest.raises(FileNotFoundError):
         get_sitk_image(image=image)
예제 #9
0
 def test_4d_mhd_object(self):
     image = ImageFactoryWithImageFile4D()
     img = get_sitk_image(image=image)
     assert img.GetDimension() == 4