Skip to content

Commit 2f49122

Browse files
committed
test(base-coverter): test functions of base converter
1 parent fe9c9b9 commit 2f49122

File tree

8 files changed

+83
-16
lines changed

8 files changed

+83
-16
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,4 +130,5 @@ dmypy.json
130130

131131
# env
132132
.pdf2dicom/
133-
.pdf2dcm
133+
.pdf2dcm
134+
*DS_Store*

pdf2dcm/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
__version__ = "0.1.0"
1+
__version__ = "0.1.0"
2+
from .pdf2encaps import Pdf2EncapsDCM # noqa

pdf2dcm/base.py

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from pathlib import Path
22
import pydicom
3-
from pydicom.dataset import Dataset, FileDataset
3+
from pydicom.dataset import FileMetaDataset, FileDataset
4+
from pydicom.errors import InvalidDicomError
45
from abc import ABC, abstractmethod
56

67
from .utils.uid import generate_random_uid
@@ -21,7 +22,9 @@ def __init__(self):
2122
"SOPInstanceUID",
2223
]
2324

24-
def personalize_dcm(self, template_dcm_path: Path, pdf_dcm: Dataset) -> Dataset:
25+
def personalize_dcm(
26+
self, template_dcm_path: Path, pdf_dcm: FileDataset
27+
) -> FileDataset:
2528
template_dcm = pydicom.filereader(template_dcm_path)
2629

2730
for field in self.repersonalisation_fields:
@@ -42,14 +45,14 @@ def personalize_dcm(self, template_dcm_path: Path, pdf_dcm: Dataset) -> Dataset:
4245
return pdf_dcm
4346

4447
@staticmethod
45-
def _get_dicom_meta() -> Dataset:
48+
def _get_dicom_meta() -> FileMetaDataset:
4649
"""Generates the file meta-data for a DICOM PDF
4750
4851
Returns:
49-
Dataset: dcm header with meta information
52+
FileMetaDataset: dcm header with meta information
5053
"""
5154

52-
file_meta = Dataset()
55+
file_meta = FileMetaDataset()
5356
file_meta.FileMetaInformationVersion = b"\x00\x01"
5457
file_meta.TransferSyntaxUID = (
5558
"1.2.840.10008.1.2.1" # std transfer uid little endian, implicit vr
@@ -58,11 +61,11 @@ def _get_dicom_meta() -> Dataset:
5861
return file_meta
5962

6063
@staticmethod
61-
def _get_dicom_body(meta: Dataset) -> FileDataset:
64+
def _get_dicom_body(meta: FileMetaDataset) -> FileDataset:
6265
"""Creates a temporary file as part of the DICOM PDF creation process
6366
6467
Args:
65-
meta (Dataset): the meta information of the dicom file
68+
meta (FileMetaDataset): the meta information of the dicom file
6669
6770
Returns:
6871
FileDataset: dicom file body information
@@ -99,7 +102,20 @@ def _store_ds(store_path: Path, ds: FileDataset) -> Path:
99102
return store_path
100103

101104
@staticmethod
102-
def check_valid_dcm(path: Path):
105+
def check_valid_dcm(path: Path) -> bool:
106+
"""check whether given file is a dicom or not
107+
108+
Args:
109+
path (Path): path to a dicom file
110+
111+
Returns:
112+
bool: boolean value True for dicom else False
113+
"""
114+
try:
115+
pydicom.dcmread(path, defer_size=1024)
116+
except InvalidDicomError:
117+
return False
118+
103119
return True
104120

105121
@abstractmethod

pdf2dcm/pdf2encaps.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22
from .utils import uid
33
from pathlib import Path
44
import os
5+
from pydicom.dataset import FileMetaDataset, FileDataset
56

67

7-
from pydicom.dataset import Dataset, FileDataset
8-
9-
10-
class Pdf2EncapsPdf(BaseConverter):
8+
class Pdf2EncapsDCM(BaseConverter):
119
def __init__(self):
1210
pass
1311

@@ -18,7 +16,7 @@ def _get_encapspdf_meta(self) -> FileDataset:
1816
file_meta.ImplementationClassUID = uid.ENCAPS_PDF_IMPL_CLASS_UID
1917
return file_meta
2018

21-
def encapsulate_pdf(self, file_meta, pdf_file_path) -> Dataset:
19+
def encapsulate_pdf(self, file_meta, pdf_file_path) -> FileMetaDataset:
2220
ds = self._get_dicom_body(file_meta)
2321
ds.SOPClassUID = uid.ENCAPS_PDF_MEDIA_SOP_CLASS_UID
2422

tests/conftest.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
# add root-dir to sys path for tests
22
import sys
3-
3+
import pytest
44
from os.path import abspath
55
from os.path import dirname as d
66

77
parent_dir = f"{d(d(abspath(__file__)))}"
88
sys.path.append(parent_dir)
9+
10+
from pdf2dcm import Pdf2EncapsDCM # noqa
11+
12+
13+
@pytest.fixture
14+
def baseconverter():
15+
yield Pdf2EncapsDCM()

tests/test_01_base.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import pytest
2+
import os
3+
import pydicom
4+
from pydicom.dataset import FileMetaDataset, FileDataset
5+
6+
7+
@pytest.mark.base
8+
def test_01_1_get_dicom_meta(baseconverter):
9+
ds = baseconverter._get_dicom_meta()
10+
assert type(ds) == FileMetaDataset
11+
assert ds.ImplementationVersionName == "pdf2dcm"
12+
13+
14+
@pytest.mark.base
15+
def test_01_2_get_dicom_body(baseconverter):
16+
meta = FileMetaDataset()
17+
ds = baseconverter._get_dicom_body(meta)
18+
19+
assert type(ds) == FileDataset
20+
assert type(ds.ContentTime) == str
21+
assert ds.Modality == "DOC"
22+
assert ds.ConversionType == "WSD"
23+
24+
25+
@pytest.mark.base
26+
def test_01_3_check_dcm(baseconverter):
27+
not_dicom_path = "tests/test_data/test_file.pdf"
28+
dicom_path = "tests/test_data/CT_small.dcm"
29+
30+
assert type(baseconverter.check_valid_dcm(not_dicom_path)) == bool
31+
assert not baseconverter.check_valid_dcm(not_dicom_path)
32+
assert baseconverter.check_valid_dcm(dicom_path)
33+
34+
35+
def test_01_4_save_dcm(baseconverter):
36+
dicom_path = "tests/test_data/CT_small.dcm"
37+
ds = pydicom.dcmread(dicom_path, defer_size=1024)
38+
out_dicom_path = "tests/test_data/test.dcm"
39+
out_path = baseconverter._store_ds(out_dicom_path, ds)
40+
41+
assert out_path == out_dicom_path
42+
assert os.path.exists(out_path)
43+
44+
os.remove(out_path)

tests/test_data/CT_small.dcm

38.3 KB
Binary file not shown.

tests/test_data/test_file.pdf

877 KB
Binary file not shown.

0 commit comments

Comments
 (0)