Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import json
import os
import re
import shutil
import subprocess
import tempfile
import pydicom
Expand All @@ -24,7 +25,9 @@ def convert(dcm_files, nifti_file=None, converted_files_location="/tmp/upload"):
series_repetitions = {}

with tempfile.TemporaryDirectory() as temp_dir:
for dcm_file in dcm_files:
for index, dcm_file in enumerate(dcm_files):
temp_file_path = os.path.join(temp_dir, f"{index}_{os.path.basename(dcm_file)}")
shutil.copy2(dcm_file, temp_file_path)

ds = pydicom.dcmread(dcm_file)
series_number_tag = ds.get((0x0020, 0x0011), None)
Expand Down
50 changes: 50 additions & 0 deletions package/src/pyaslreport/tests/test_dicom_to_nifti_converter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import json
from pathlib import Path
from types import SimpleNamespace
from unittest.mock import patch

from pyaslreport.converters.dicom_to_nifti_converter import DICOM2NiFTIConverter


def test_convert_copies_files_to_temp_dir_and_runs_dcm2niix(tmp_path):
dicom_file = tmp_path / "input1.dcm"
dicom_file.write_bytes(b"fake dicom")
output_dir = tmp_path / "converted"
observed_temp_dir = {"path": None}

def fake_dcmread(_path):
def fake_get(tag, default=None):
if tag == (0x0020, 0x0011):
return SimpleNamespace(value=1)
if tag == (0x0029, 0x1020):
return SimpleNamespace(value=b"lRepetitions = 4")
return default

return SimpleNamespace(get=fake_get)

def fake_run(cmd, check, stdout, stderr):
temp_dir = Path(cmd[-1])
observed_temp_dir["path"] = temp_dir
assert any(temp_dir.iterdir())

output_dir.mkdir(exist_ok=True)
(output_dir / "series.nii.gz").write_bytes(b"fake nifti")
(output_dir / "series.json").write_text(json.dumps({"SeriesNumber": 1}))
return SimpleNamespace(stdout=b"", stderr=b"")

with patch("pyaslreport.converters.dicom_to_nifti_converter.pydicom.dcmread", side_effect=fake_dcmread), \
patch("pyaslreport.converters.dicom_to_nifti_converter.subprocess.run", side_effect=fake_run):
converted_files, converted_filenames, nifti_file, file_format, error = DICOM2NiFTIConverter.convert(
[str(dicom_file)],
converted_files_location=str(output_dir),
)

assert observed_temp_dir["path"] is not None
assert converted_filenames == ["series.json"]
assert converted_files == [str(output_dir / "series.json")]
assert nifti_file == str(output_dir / "series.nii.gz")
assert file_format == "dicom"
assert error is None

json_data = json.loads((output_dir / "series.json").read_text())
assert json_data["lRepetitions"] == "4"