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])
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)
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")
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
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
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()
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)
def test_no_raw_object(self): image = ImageFactoryWithImageFile() image.files.get(file__endswith=".zraw").delete() with pytest.raises(FileNotFoundError): get_sitk_image(image=image)
def test_4d_mhd_object(self): image = ImageFactoryWithImageFile4D() img = get_sitk_image(image=image) assert img.GetDimension() == 4