예제 #1
0
    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")
예제 #2
0
파일: test_reader.py 프로젝트: lamyj/odil
 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))
예제 #3
0
    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)
예제 #4
0
파일: test_writer.py 프로젝트: lamyj/odil
    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)
예제 #5
0
 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)
예제 #6
0
 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)
예제 #7
0
 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)
예제 #8
0
파일: test_reader.py 프로젝트: lamyj/odil
 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)
예제 #9
0
파일: test_reader.py 프로젝트: lamyj/odil
 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)
예제 #10
0
    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)
예제 #11
0
파일: test_writer.py 프로젝트: lamyj/odil
 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)
예제 #12
0
    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)
예제 #13
0
 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"])
예제 #14
0
파일: test_reader.py 프로젝트: lamyj/odil
 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)
예제 #15
0
파일: test_reader.py 프로젝트: lamyj/odil
 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"])
예제 #16
0
    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"]
예제 #17
0
    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"]
예제 #18
0
파일: test_reader.py 프로젝트: lamyj/odil
 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"])
예제 #19
0
    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"])
예제 #20
0
    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"])
예제 #21
0
    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 "
        )
예제 #22
0
 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"])
예제 #23
0
파일: test_reader.py 프로젝트: lamyj/odil
    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"])
예제 #24
0
    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"])
예제 #25
0
파일: test_reader.py 프로젝트: lamyj/odil
 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)
예제 #26
0
파일: test_reader.py 프로젝트: lamyj/odil
 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)
예제 #27
0
 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 ")
예제 #28
0
 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)
예제 #29
0
 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)
예제 #30
0
 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))