def test_write_tag(self): string_io = BytesIO() stream = odil.iostream(string_io) writer = odil.Writer(stream, odil.registry.ExplicitVRLittleEndian) writer.write_tag(odil.registry.PatientID) self.assertEqual(string_io.getvalue(), b"\x10\x00\x20\x00")
def test_read_element(self): string_io = BytesIO(b"PN\x08\x00Foo^Bar ") stream = odil.iostream(string_io) reader = odil.Reader(stream, odil.registry.ExplicitVRLittleEndian) self.assertEqual( reader.read_element(odil.registry.PatientName), odil.Element([b"Foo^Bar"], odil.VR.PN))
def test_write_file(self): data_set = odil.DataSet() data_set.add("SOPClassUID", ["1.2.3.4"]) data_set.add("SOPInstanceUID", ["1.2.3.4.5"]) data_set.add("PatientName", ["Foo^Bar"]) string_io = BytesIO() stream = odil.iostream(string_io) odil.Writer.write_file( data_set, stream, odil.DataSet(), odil.registry.ExplicitVRLittleEndian) data = ( 128*b"\0"+b"DICM"+ b"\x02\x00\x00\x00" b"UL" b"\x04\x00" b"\x80\x00\x00\x00" b"\x02\x00\x01\x00" b"OB" b"\x00\x00" b"\x02\x00\x00\x00" b"\x00\x01" b"\x02\x00\x02\x00" b"UI" b"\x08\x00" b"1.2.3.4\x00" b"\x02\x00\x03\x00" b"UI" b"\x0a\x00" b"1.2.3.4.5\x00" b"\x02\x00\x10\x00" b"UI" b"\x14\x00" b"1.2.840.10008.1.2.1\x00" b"\x02\x00\x12\x00" b"UI" b"\x1e\x00" b"1.2.826.0.1.3680043.9.55600.0\x00" b"\x02\x00\x13\x00" b"SH" b"\x06\x00" b"Odil 0" b"\x08\x00\x16\x00" b"UI" b"\x08\x00" b"1.2.3.4\x00" b"\x08\x00\x18\x00" b"UI" b"\x0a\x00" b"1.2.3.4.5\x00" b"\x10\x00\x10\x00" b"PN" b"\x08\x00" b"Foo^Bar ") self.assertEqual(string_io.getvalue(), data)
def test_write_file_path(self): data_set = odil.DataSet() data_set.add("SOPClassUID", ["1.2.3.4"]) data_set.add("SOPInstanceUID", ["1.2.3.4.5"]) data_set.add("PatientName", ["Foo^Bar"]) fd, path = tempfile.mkstemp() os.close(fd) string_io = BytesIO() stream = odil.iostream(string_io) odil.Writer.write_file( data_set, path, odil.DataSet(), odil.registry.ExplicitVRLittleEndian) data = ( 128*b"\0"+b"DICM"+ b"\x02\x00\x00\x00" b"UL" b"\x04\x00" b"\x80\x00\x00\x00" b"\x02\x00\x01\x00" b"OB" b"\x00\x00" b"\x02\x00\x00\x00" b"\x00\x01" b"\x02\x00\x02\x00" b"UI" b"\x08\x00" b"1.2.3.4\x00" b"\x02\x00\x03\x00" b"UI" b"\x0a\x00" b"1.2.3.4.5\x00" b"\x02\x00\x10\x00" b"UI" b"\x14\x00" b"1.2.840.10008.1.2.1\x00" b"\x02\x00\x12\x00" b"UI" b"\x1e\x00" b"1.2.826.0.1.3680043.9.55600.0\x00" b"\x02\x00\x13\x00" b"SH" b"\x06\x00" b"Odil 0" b"\x08\x00\x16\x00" b"UI" b"\x08\x00" b"1.2.3.4\x00" b"\x08\x00\x18\x00" b"UI" b"\x0a\x00" b"1.2.3.4.5\x00" b"\x10\x00\x10\x00" b"PN" b"\x08\x00" b"Foo^Bar ") with open(path, "rb") as fd: contents = fd.read() os.remove(path) self.assertEqual(contents, data)
def test_constructor_1(self): stream = odil.iostream(BytesIO()) writer = odil.Writer(stream, odil.ByteOrdering.LittleEndian, False) self.assertEqual(writer.byte_ordering, odil.ByteOrdering.LittleEndian) self.assertFalse(writer.explicit_vr) self.assertEqual( writer.item_encoding, odil.Writer.ItemEncoding.ExplicitLength) self.assertFalse(writer.use_group_length)
def test_constructor(self): stream = odil.iostream(BytesIO()) reader = odil.Reader(stream, odil.registry.ImplicitVRLittleEndian) self.assertEqual(reader.transfer_syntax, odil.registry.ImplicitVRLittleEndian) self.assertEqual(reader.byte_ordering, odil.ByteOrdering.LittleEndian) self.assertFalse(reader.explicit_vr) self.assertFalse(reader.keep_group_length)
def test_constructor_2(self): stream = odil.iostream(BytesIO()) writer = odil.Writer(stream, odil.registry.ExplicitVRBigEndian_Retired) self.assertEqual(writer.byte_ordering, odil.ByteOrdering.BigEndian) self.assertTrue(writer.explicit_vr) self.assertEqual(writer.item_encoding, odil.Writer.ItemEncoding.ExplicitLength) self.assertFalse(writer.use_group_length)
def test_constructor_no_default(self): stream = odil.iostream(BytesIO()) reader = odil.Reader(stream, odil.registry.ExplicitVRBigEndian, True) self.assertEqual(reader.transfer_syntax.encode(), odil.registry.ExplicitVRBigEndian) self.assertEqual(reader.byte_ordering, odil.ByteOrdering.BigEndian) self.assertTrue(reader.explicit_vr) self.assertTrue(reader.keep_group_length)
def test_constructor(self): stream = odil.iostream(BytesIO()) reader = odil.Reader(stream, odil.registry.ImplicitVRLittleEndian) self.assertEqual( reader.transfer_syntax.encode(), odil.registry.ImplicitVRLittleEndian) self.assertEqual(reader.byte_ordering, odil.ByteOrdering.LittleEndian) self.assertFalse(reader.explicit_vr) self.assertFalse(reader.keep_group_length)
def test_default_record_keys(self): creator = odil.BasicDirectoryCreator(self.root, self.files) creator() with open(os.path.join(self.root, "DICOMDIR"), "rb") as fd: header, dicomdir = odil.Reader.read_file(odil.iostream(fd)) records = dicomdir.as_data_set("DirectoryRecordSequence") self._test_default_records(records)
def test_constructor_2(self): stream = odil.iostream(BytesIO()) writer = odil.Writer( stream, odil.registry.ExplicitVRBigEndian_Retired) self.assertEqual(writer.byte_ordering, odil.ByteOrdering.BigEndian) self.assertTrue(writer.explicit_vr) self.assertEqual( writer.item_encoding, odil.Writer.ItemEncoding.ExplicitLength) self.assertFalse(writer.use_group_length)
def test_default_record_keys(self): creator = odil.BasicDirectoryCreator(self.root, self.files) creator() with open(os.path.join(self.root, "DICOMDIR"), "rb") as fd: header, dicomdir = odil.Reader.read_file(odil.iostream(fd)) records = dicomdir.as_data_set("DirectoryRecordSequence") self._test_default_records(records)
def test_read_data_set(self): string_io = BytesIO(b"\x10\x00\x10\x00PN\x07\x00Foo^Bar" b"\x10\x00\x20\x00CS\x03\x00FOO") stream = odil.iostream(string_io) reader = odil.Reader(stream, odil.registry.ExplicitVRLittleEndian) data_set = reader.read_data_set() self.assertEqual(data_set.size(), 2) self.assertSequenceEqual(data_set.as_string("PatientName"), ["Foo^Bar"]) self.assertSequenceEqual(data_set.as_string("PatientID"), ["FOO"])
def test_constructor_no_default(self): stream = odil.iostream(BytesIO()) reader = odil.Reader( stream, odil.registry.ExplicitVRBigEndian_Retired, True) self.assertEqual( reader.transfer_syntax.encode(), odil.registry.ExplicitVRBigEndian_Retired) self.assertEqual(reader.byte_ordering, odil.ByteOrdering.BigEndian) self.assertTrue(reader.explicit_vr) self.assertTrue(reader.keep_group_length)
def test_read_data_set_halt_condition(self): string_io = BytesIO( b"\x10\x00\x10\x00" b"PN" b"\x08\x00" b"Foo^Bar " b"\x10\x00\x20\x00" b"LO" b"\x04\x00" b"FOO " ) stream = odil.iostream(string_io) reader = odil.Reader(stream, odil.registry.ExplicitVRLittleEndian) data_set = reader.read_data_set(lambda x: x==odil.registry.PatientID) self.assertEqual(data_set.size(), 1) self.assertSequenceEqual(data_set.as_string("PatientName"), [b"Foo^Bar"])
def setUp(self): self.root = tempfile.mkdtemp() data_set_1 = odil.DataSet() data_set_1.add("PatientID", ["DJ123"]) data_set_1.add("StudyDate", ["19100110"]) data_set_1.add("StudyTime", ["1234"]) data_set_1.add("StudyDescription", ["Study"]) data_set_1.add("StudyInstanceUID", ["1.2.3.4"]) data_set_1.add("StudyID", ["FOO"]) data_set_1.add("Modality", ["OT"]) data_set_1.add("SeriesInstanceUID", ["1.2.3.4.1"]) data_set_1.add("SeriesNumber", [1]) data_set_1.add("SeriesDescription", ["Series"]) data_set_1.add("InstanceNumber", [1]) data_set_1.add("SOPInstanceUID", ["1.2.3.4.1.1"]) data_set_1.add("SOPClassUID", [odil.registry.RawDataStorage]) with open(os.path.join(self.root, "a.dcm"), "wb") as fd: stream_1 = odil.iostream(fd) odil.Writer.write_file(data_set_1, stream_1) data_set_2 = odil.DataSet() data_set_2.add("PatientID", ["DJ123"]) data_set_2.add("StudyDate", ["19100110"]) data_set_2.add("StudyTime", ["1234"]) data_set_2.add("StudyDescription", ["Study"]) data_set_2.add("StudyInstanceUID", ["1.2.3.4"]) data_set_2.add("StudyID", ["FOO"]) data_set_2.add("Modality", ["OT"]) data_set_2.add("SeriesInstanceUID", ["1.2.3.4.1"]) data_set_2.add("SeriesNumber", [1]) data_set_2.add("SeriesDescription", ["Series"]) data_set_2.add("InstanceNumber", [2]) data_set_2.add("SOPInstanceUID", ["1.2.3.4.1.2"]) data_set_2.add("SOPClassUID", [odil.registry.RawDataStorage]) with open(os.path.join(self.root, "b.dcm"), "wb") as fd: stream_2 = odil.iostream(fd) odil.Writer.write_file(data_set_2, stream_2) self.files = ["a.dcm", "b.dcm"]
def setUp(self): self.root = tempfile.mkdtemp() data_set_1 = odil.DataSet() data_set_1.add("PatientID", ["DJ123"]) data_set_1.add("StudyDate", ["19100110"]) data_set_1.add("StudyTime", ["1234"]) data_set_1.add("StudyDescription", ["Study"]) data_set_1.add("StudyInstanceUID", ["1.2.3.4"]) data_set_1.add("StudyID", ["FOO"]) data_set_1.add("Modality", ["OT"]) data_set_1.add("SeriesInstanceUID", ["1.2.3.4.1"]) data_set_1.add("SeriesNumber", [1]) data_set_1.add("SeriesDescription", ["Series"]) data_set_1.add("InstanceNumber", [1]) data_set_1.add("SOPInstanceUID", ["1.2.3.4.1.1"]) data_set_1.add("SOPClassUID", [odil.registry.RawDataStorage]) with open(os.path.join(self.root, "a.dcm"), "wb") as fd: stream_1 = odil.iostream(fd) odil.Writer.write_file(data_set_1, stream_1) data_set_2 = odil.DataSet() data_set_2.add("PatientID", ["DJ123"]) data_set_2.add("StudyDate", ["19100110"]) data_set_2.add("StudyTime", ["1234"]) data_set_2.add("StudyDescription", ["Study"]) data_set_2.add("StudyInstanceUID", ["1.2.3.4"]) data_set_2.add("StudyID", ["FOO"]) data_set_2.add("Modality", ["OT"]) data_set_2.add("SeriesInstanceUID", ["1.2.3.4.1"]) data_set_2.add("SeriesNumber", [1]) data_set_2.add("SeriesDescription", ["Series"]) data_set_2.add("InstanceNumber", [2]) data_set_2.add("SOPInstanceUID", ["1.2.3.4.1.2"]) data_set_2.add("SOPClassUID", [odil.registry.RawDataStorage]) with open(os.path.join(self.root, "b.dcm"), "wb") as fd: stream_2 = odil.iostream(fd) odil.Writer.write_file(data_set_2, stream_2) self.files = ["a.dcm", "b.dcm"]
def test_read_data_set(self): string_io = BytesIO( b"\x10\x00\x10\x00PN\x07\x00Foo^Bar" b"\x10\x00\x20\x00CS\x03\x00FOO" ) stream = odil.iostream(string_io) reader = odil.Reader(stream, odil.registry.ExplicitVRLittleEndian) data_set = reader.read_data_set() self.assertEqual(data_set.size(), 2) self.assertSequenceEqual(data_set.as_string("PatientName"), [b"Foo^Bar"]) self.assertSequenceEqual(data_set.as_string("PatientID"), [b"FOO"])
def test_extra_record_keys_tuple(self): creator = odil.BasicDirectoryCreator( self.root, self.files, {"SERIES": (("SeriesDescription", 1), )}) creator() with open(os.path.join(self.root, "DICOMDIR"), "rb") as fd: header, dicomdir = odil.Reader.read_file(odil.iostream(fd)) records = dicomdir.as_data_set("DirectoryRecordSequence") self._test_default_records(records) self.assertSequenceEqual(records[2].as_string("SeriesDescription"), [b"Series"])
def test_extra_record_keys_tuple(self): creator = odil.BasicDirectoryCreator( self.root, self.files, { "SERIES": (("SeriesDescription", 1), )}) creator() with open(os.path.join(self.root, "DICOMDIR"), "rb") as fd: header, dicomdir = odil.Reader.read_file(odil.iostream(fd)) records = dicomdir.as_data_set("DirectoryRecordSequence") self._test_default_records(records) self.assertSequenceEqual( records[2].as_string("SeriesDescription"), [b"Series"])
def test_write_data_set(self): data_set = odil.DataSet() data_set.add("PatientName", ["Foo^Bar"]) data_set.add("PatientID", ["FOO"]) string_io = BytesIO() stream = odil.iostream(string_io) writer = odil.Writer(stream, odil.registry.ExplicitVRLittleEndian) writer.write_data_set(data_set) self.assertEqual( string_io.getvalue(), b"\x10\x00\x10\x00" b"PN" b"\x08\x00" b"Foo^Bar " b"\x10\x00\x20\x00" b"LO" b"\x04\x00" b"FOO " )
def test_read_data_set_halt_condition(self): string_io = BytesIO(b"\x10\x00\x10\x00" b"PN" b"\x08\x00" b"Foo^Bar " b"\x10\x00\x20\x00" b"LO" b"\x04\x00" b"FOO ") stream = odil.iostream(string_io) reader = odil.Reader(stream, odil.registry.ExplicitVRLittleEndian) data_set = reader.read_data_set(lambda x: x == odil.registry.PatientID) self.assertEqual(data_set.size(), 1) self.assertSequenceEqual(data_set.as_string("PatientName"), ["Foo^Bar"])
def test_read_file(self): data = ( 128*b"\x00"+b"DICM"+ b"\x02\x00\x10\x00" b"UI" b"\x14\x00" b"1.2.840.10008.1.2.1\x00" b"\x10\x00\x10\x00" b"PN" b"\x08\x00" b"Foo^Bar " ) string_io = BytesIO(data) stream = odil.iostream(string_io) header, data_set = odil.Reader.read_file(stream) self.assertEqual(len(header), 1) self.assertSequenceEqual( header.as_string("TransferSyntaxUID"), [odil.registry.ExplicitVRLittleEndian]) self.assertEqual(len(data_set), 1) self.assertSequenceEqual(data_set.as_string("PatientName"), [b"Foo^Bar"])
def test_read_file(self): data = (128 * b"\x00" + b"DICM" + b"\x02\x00\x10\x00" b"UI" b"\x14\x00" b"1.2.840.10008.1.2.1\x00" b"\x10\x00\x10\x00" b"PN" b"\x08\x00" b"Foo^Bar ") string_io = BytesIO(data) stream = odil.iostream(string_io) header, data_set = odil.Reader.read_file(stream) self.assertEqual(len(header), 1) self.assertSequenceEqual(header.as_string("TransferSyntaxUID"), [odil.registry.ExplicitVRLittleEndian]) self.assertEqual(len(data_set), 1) self.assertSequenceEqual(data_set.as_string("PatientName"), ["Foo^Bar"])
def test_read_tag(self): string_io = BytesIO(b"\x10\x00\x20\x00") stream = odil.iostream(string_io) reader = odil.Reader(stream, odil.registry.ExplicitVRLittleEndian) self.assertEqual(reader.read_tag(), odil.registry.PatientID)
def test_read_length(self): string_io = BytesIO(b"\x34\x12") stream = odil.iostream(string_io) reader = odil.Reader(stream, odil.registry.ExplicitVRLittleEndian) self.assertEqual(reader.read_length(odil.VR.CS), 0x1234)
def test_write_element(self): string_io = BytesIO() stream = odil.iostream(string_io) writer = odil.Writer(stream, odil.registry.ExplicitVRLittleEndian) writer.write_element(odil.Element(["Foo^Bar"], odil.VR.PN)) self.assertEqual(string_io.getvalue(), b"PN\x08\x00Foo^Bar ")
def test_read_length(self): string_io = BytesIO(b"\x34\x12") stream = odil.iostream(string_io) reader = odil.Reader(stream, odil.registry.ExplicitVRLittleEndian) self.assertEqual(reader.read_length(odil.VR.CS), 0x1234)
def test_read_tag(self): string_io = BytesIO(b"\x10\x00\x20\x00") stream = odil.iostream(string_io) reader = odil.Reader(stream, odil.registry.ExplicitVRLittleEndian) self.assertEqual(reader.read_tag(), odil.registry.PatientID)
def test_read_element(self): string_io = BytesIO(b"PN\x08\x00Foo^Bar ") stream = odil.iostream(string_io) reader = odil.Reader(stream, odil.registry.ExplicitVRLittleEndian) self.assertEqual(reader.read_element(odil.registry.PatientName), odil.Element(["Foo^Bar"], odil.VR.PN))