Esempio n. 1
0
 def test_insert_item_with_none_element(self):
     attrs = self.set_item_attributes()
     item = ODM.ItemDef(**attrs)
     # to support the test a null version of CodeListRef is created, but should be ignored on output
     if item.CodeListRef:
         self.assertIsNotNone(item.CodeListRef)
     if item.SignificantDigits:
         self.assertIsNotNone(item.SignificantDigits)
     self.loader.open_odm_document(self.odm_file)
     mdv = self.loader.MetaDataVersion()
     mdv.ItemDef.append(item)
     attrs = self.get_root_attributes()
     root = ODM.ODM(**attrs)
     study = self.add_study(mdv)
     root.Study = [study]
     root.write_xml(self.odm_file_out)
     loader = LD.ODMLoader(OL.XMLODMLoader())
     loader.open_odm_document(self.odm_file_out)
     mdv = loader.MetaDataVersion()
     # is_found_inserted_item = False
     # for it in mdv.ItemDef:
     #     if it.OID == "ODM.IT.AE.TEST":
     #         is_found_inserted_item = True
     # self.assertTrue(is_found_inserted_item)
     itd = mdv.find("ItemDef", "OID", "ODM.IT.AE.TEST")
     self.assertEqual(itd.OID, "ODM.IT.AE.TEST")
     # comment was created as None and should not be part of the object
     self.assertIsNone(itd.Comment)
     itd_json = itd.to_json()
     self.assertNotIn("Comment", itd_json)
     odm_json = root.to_json()
Esempio n. 2
0
 def setUp(self) -> None:
     self.odm_file = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'data',
         'cdash-odm-test.xml')
     self.loader = LD.ODMLoader(OL.XMLODMLoader())
     self.loader.open_odm_document(self.odm_file)
     self.odm = self.loader.root()
 def setUp(self) -> None:
     self.odm_file = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'data',
         'define2-0-0-sdtm-test.xml')
     with open(self.odm_file, "r", encoding="utf-8") as f:
         self.odm_string = f.read()
     self.loader = LD.ODMLoader(OL.XMLDefineLoader())
Esempio n. 4
0
 def setUp(self):
     self.odm_file = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'data',
         'cdash-odm-test.xml')
     self.odm_file_out = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'data',
         'cdash-odm-test-insert.xml')
     self.loader = LD.ODMLoader(OL.XMLODMLoader())
Esempio n. 5
0
 def test_read_odm_xml(self):
     loader = LD.ODMLoader(OL.XMLODMLoader(model_package="odm_1_3_2", ns_uri="http://www.cdisc.org/ns/odm/v1.3"))
     loader.open_odm_document(ODM_XML_FILE)
     mdv = loader.MetaDataVersion()
     item_list = mdv.ItemDef
     item = item_list[0]
     self.assertEqual(item.OID, "ODM.IT.DM.BRTHYR")
     # tests the __len__ in ItemGroupDef
     self.assertEqual(len(item_list), 1)
Esempio n. 6
0
 def setUp(self) -> None:
     self.odm = self.add_root()
     self.odm_test_file = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'data',
         'test_odm_001.xml')
     self.odm_writer_test_file = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'data',
         'test_odm_002.xml')
     self.loader = LD.ODMLoader(OL.XMLODMLoader())
Esempio n. 7
0
 def test_find_record(self):
     loader = LD.ODMLoader(
         OL.XMLODMLoader(model_package="odm_1_3_2",
                         ns_uri="http://www.cdisc.org/ns/odm/v1.3"))
     loader.open_odm_document(self.odm_test_file)
     odm = loader.load_odm()
     subject = odm.ClinicalData[0].find("SubjectData", "SubjectKey", "1000")
     self.assertEqual(subject.TransactionType, "Insert")
     self.assertEqual(subject.SubjectKey, "1000")
Esempio n. 8
0
 def test_read_odm_json(self):
     loader = LD.ODMLoader(OL.JSONODMLoader(model_package="odm_1_3_2"))
     loader.open_odm_document(ODM_JSON_FILE)
     mdv = loader.MetaDataVersion()
     igd_list = mdv.ItemGroupDef
     igd = igd_list[0]
     self.assertEqual(igd.OID, "ODM.IG.DM")
     # tests the __len__ in ItemGroupDef
     self.assertEqual(len(igd_list), 1)
Esempio n. 9
0
 def test_load_odm_xml_data(self):
     loader = LD.ODMLoader(
         OL.XMLODMLoader(model_package="odm_1_3_2",
                         ns_uri="http://www.cdisc.org/ns/odm/v1.3"))
     loader.open_odm_document(self.odm_test_file2)
     odm = loader.load_odm()
     self.assertEqual(odm.FileOID, "Study-MetaD20220210213634")
     self.assertEqual(odm.ClinicalData[0].StudyOID, "1001_corona")
     igd_0 = odm.ClinicalData[0].SubjectData[0].StudyEventData[0].FormData[
         0].ItemGroupData[0]
     self.assertEqual(igd_0.ItemGroupOID, "IG.DM")
     self.assertEqual(igd_0.ItemData[2].ItemOID, "IT.BRTHDAT")
     self.assertEqual(igd_0.ItemData[2].Value, "1966-02-10")
Esempio n. 10
0
 def test_odm_round_trip(self):
     root = self.loader.load_odm_string(self.odm_string)
     odm = self.loader.create_odmlib(root)
     odm_json = odm.to_json()
     odm_json_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data', 'cdash_odm_test.json')
     with open(odm_json_file, "w") as odm_in:
         odm_in.write(odm_json)
     json_loader = LD.ODMLoader(OL.JSONODMLoader())
     odm_dict = json_loader.open_odm_document(odm_json_file)
     rt_odm = json_loader.create_odmlib(odm_dict, "ODM")
     odm_xml_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data', 'cdash_odm_test_roundtrip.xml')
     rt_odm.write_xml(odm_xml_file)
     root2 = self.loader.open_odm_document(odm_xml_file)
     odm2 = self.loader.create_odmlib(root2)
     self.assertEqual(odm2.Study[0].MetaDataVersion[0].ItemDef[0].OID, "ODM.IT.Common.StudyID")
     self.assertEqual(len(odm2.Study[0].MetaDataVersion[0].ItemGroupDef[1]), 7)
Esempio n. 11
0
 def test_oid_index_define_igd(self):
     self.define_file = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'data',
         'defineV21-SDTM.xml')
     self.loader = LD.ODMLoader(
         DL.XMLDefineLoader(model_package="define_2_1",
                            ns_uri="http://www.cdisc.org/ns/def/v2.1"))
     self.loader.open_odm_document(self.define_file)
     self.odm = self.loader.root()
     idx = self.odm.build_oid_index()
     found = idx.find_all("IG.VS")
     self.assertEqual(len(found), 1)
     self.assertEqual(found[0].ItemRef[2].ItemOID, "IT.USUBJID")
     self.assertEqual(found[0].ItemRef[5].ItemOID, "IT.VS.VSTEST")
     it_found = idx.find_all("IT.EX.EXSTDTC")
     self.assertEqual(len(it_found), 2)
     self.assertEqual(it_found[1].Name, "EXSTDTC")
Esempio n. 12
0
 def test_odm_round_trip(self):
     root = self.loader.open_odm_document(self.odm_file)
     odm = self.loader.create_odmlib(root)
     odm_json = odm.to_json()
     odm_json_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data', 'sdtm_define2_test.json')
     with open(odm_json_file, "w") as odm_in:
         odm_in.write(odm_json)
     json_loader = LD.ODMLoader(OL.JSONDefineLoader())
     odm_dict = json_loader.open_odm_document(odm_json_file)
     rt_odm = json_loader.create_odmlib(odm_dict, "ODM")
     def_xml_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data', 'sdtm_def_test_roundtrip.xml')
     rt_odm.write_xml(def_xml_file)
     root2 = self.loader.open_odm_document(def_xml_file)
     odm2 = self.loader.create_odmlib(root2)
     self.assertEqual(odm2.Study[0].MetaDataVersion.OID, "MDV.CDISC01.SDTMIG.3.1.2.SDTM.1.2")
     print(f"ItemRefs = {len(odm2.Study[0].MetaDataVersion.ItemGroupDef[1])}")
     self.assertEqual(len(odm2.Study[0].MetaDataVersion.ItemGroupDef[1]), 6)
Esempio n. 13
0
 def setUp(self) -> None:
     self.odm_file_1 = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'data',
         'defineV21-SDTM-metadata.xml')
     NS.NamespaceRegistry(prefix="odm",
                          uri="http://www.cdisc.org/ns/odm/v1.3",
                          is_default=True)
     NS.NamespaceRegistry(prefix="def",
                          uri="http://www.cdisc.org/ns/def/v2.1")
     self.nsr = NS.NamespaceRegistry(
         prefix="nciodm", uri="http://ncicb.nci.nih.gov/xml/odm/EVS/CDISC")
     self.parser = P.ODMParser(self.odm_file_1, self.nsr)
     self.loader = LD.ODMLoader(
         OL.XMLDefineLoader(model_package="define_2_1",
                            ns_uri="http://www.cdisc.org/ns/def/v2.1"))
     self.root = self.loader.create_document(self.odm_file_1)
     self.odm = self.loader.load_odm()
     self.parser.parse()
     self.mdv = self.parser.MetaDataVersion()
Esempio n. 14
0
 def test_load_odm_xml_data_iterator(self):
     loader = LD.ODMLoader(
         OL.XMLODMLoader(model_package="odm_1_3_2",
                         ns_uri="http://www.cdisc.org/ns/odm/v1.3"))
     loader.open_odm_document(self.odm_test_file2)
     odm = loader.load_odm()
     self.assertEqual(odm.FileOID, "Study-MetaD20220210213634")
     self.assertEqual(odm.ClinicalData[0].StudyOID, "1001_corona")
     igd_0 = odm.ClinicalData[0].SubjectData[0].StudyEventData[0].FormData[
         0].ItemGroupData[0]
     values = []
     for item in igd_0:
         values.append(item.Value)
     test_values = self._get_test_values()
     self.assertListEqual(values, test_values)
     subjects = []
     for subject in odm.ClinicalData[0]:
         subjects.append(subject.SubjectKey)
     test_subjects = ["SS_0001", "SS_0002"]
     self.assertListEqual(subjects, test_subjects)
Esempio n. 15
0
    def test_write_json(self):
        attrs = self.set_itemgroupdef_attributes()
        igd = DEFINE.ItemGroupDef(**attrs)
        tt = DEFINE.TranslatedText(
            _content="this is the first test description", lang="en")
        desc = DEFINE.Description()
        desc.TranslatedText = [tt]
        igd.Description = desc
        ir_list = self.set_itemrefs()
        igd.ItemRef = ir_list
        self.create_odm_document_json(igd)
        loader = LD.ODMLoader(OL.JSONDefineLoader(model_package="define_2_1"))
        loader.open_odm_document(self.test_file_json)
        mdv = loader.MetaDataVersion()

        igd_list = mdv.ItemGroupDef
        igd = igd_list[0]
        self.assertEqual(igd.OID, "IG.VS")
        # tests the __len__ in ItemGroupDef
        self.assertEqual(len(igd.ItemRef), 10)
Esempio n. 16
0
 def test_odm_ns_attributes(self):
     odm_test_file = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'data',
         'test_odm_namespace.xml')
     NS.NamespaceRegistry(prefix="def",
                          uri="http://www.cdisc.org/ns/def/v2.0")
     NS.NamespaceRegistry(prefix="nciodm",
                          uri="http://ncicb.nci.nih.gov/xml/odm/EVS/CDISC")
     NS.NamespaceRegistry(prefix="xsi",
                          uri="http://www.w3.org/2001/XMLSchema-instance")
     root = self.add_root()
     odm_xml = root.to_xml()
     nsr = NS.NamespaceRegistry()
     nsr.set_odm_namespace_attributes(odm_xml)
     tree = ET.ElementTree(odm_xml)
     tree.write(odm_test_file,
                xml_declaration=True,
                encoding='utf-8',
                method='xml',
                short_empty_elements=True)
     self.assertEqual("ODM.MDV.TEST.001", root.FileOID)
     loader = LD.ODMLoader(DL.XMLDefineLoader())
     odm_root = loader.open_odm_document(odm_test_file)
     self.assertEqual("ODM.MDV.TEST.001", odm_root.attrib["FileOID"])
     odm = loader.create_odmlib(odm_root)
     self.assertEqual("ODM.MDV.TEST.001", odm.FileOID)
     nsr2 = NS.NamespaceRegistry()
     namespaces = nsr2.get_odm_namespace_entries()
     expected_ns_list = [
         'xmlns=http://www.cdisc.org/ns/odm/v1.3',
         'xmlns:xs=http://www.w3.org/2001/XMLSchema-instance',
         'xmlns:xml=http://www.w3.org/XML/1998/namespace',
         'xmlns:xlink=http://www.w3.org/1999/xlink',
         'xmlns:def=http://www.cdisc.org/ns/def/v2.0',
         'xmlns:nciodm=http://ncicb.nci.nih.gov/xml/odm/EVS/CDISC',
         'xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance'
     ]
     self.assertListEqual(namespaces, expected_ns_list)
Esempio n. 17
0
 def test_unknown_loader(self):
     with self.assertRaises(TypeError):
         loader = LD.ODMLoader(self.test_mdv_find_by_OID())
Esempio n. 18
0
    def test_xml_to_string(self):
        current_datetime = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc).isoformat()
        root = ODM.ODM(FileOID="ODM.DEMO.001", Granularity="Metadata", AsOfDateTime=current_datetime,
                       CreationDateTime=current_datetime, ODMVersion="1.3.2", FileType="Snapshot",
                       Originator="swhume", SourceSystem="odmlib", SourceSystemVersion="0.1")

        # create Study and add to ODM
        root.Study.append(ODM.Study(OID="ODM.GET.STARTED"))

        # create the global variables
        root.Study[0].GlobalVariables = ODM.GlobalVariables()
        root.Study[0].GlobalVariables.StudyName = ODM.StudyName(_content="Get Started with ODM XML")
        root.Study[0].GlobalVariables.StudyDescription = ODM.StudyDescription(
            _content="Demo to get started with odmlib")
        root.Study[0].GlobalVariables.ProtocolName = ODM.ProtocolName(_content="ODM XML Get Started")

        # create the MetaDataVersion
        root.Study[0].MetaDataVersion.append(ODM.MetaDataVersion(OID="MDV.DEMO-ODM-01", Name="Get Started MDV",
                                                                 Description="Get Started Demo"))
        # create Protocol
        p = ODM.Protocol()
        p.Description = ODM.Description()
        p.Description.TranslatedText.append(ODM.TranslatedText(_content="Get Started Protocol", lang="en"))
        p.StudyEventRef.append(ODM.StudyEventRef(StudyEventOID="BASELINE", OrderNumber=1, Mandatory="Yes"))
        root.Study[0].MetaDataVersion[0].Protocol = p

        # create a StudyEventDef
        sed = ODM.StudyEventDef(OID="BASELINE", Name="Baseline Visit", Repeating="No", Type="Scheduled")
        sed.FormRef.append(ODM.FormRef(FormOID="ODM.F.DM", Mandatory="Yes", OrderNumber=1))
        root.Study[0].MetaDataVersion[0].StudyEventDef.append(sed)

        # create a FormDef
        fd = ODM.FormDef(OID="ODM.F.DM", Name="Demographics", Repeating="No")
        fd.ItemGroupRef.append(ODM.ItemGroupRef(ItemGroupOID="ODM.IG.DM", Mandatory="Yes", OrderNumber=2))
        root.Study[0].MetaDataVersion[0].FormDef.append(fd)

        # create an ItemGroupDef
        igd = ODM.ItemGroupDef(OID="ODM.IG.DM", Name="Demographics", Repeating="No")
        igd.ItemRef.append(ODM.ItemRef(ItemOID="ODM.IT.DM.BRTHYR", Mandatory="Yes"))
        root.Study[0].MetaDataVersion[0].ItemGroupDef.append(igd)

        # create an ItemDef
        itd = ODM.ItemDef(OID="ODM.IT.DM.BRTHYR", Name="Birth Year", DataType="integer")
        itd.Description = ODM.Description()
        itd.Description.TranslatedText.append(ODM.TranslatedText(_content="Year of the subject's birth", lang="en"))
        itd.Question = ODM.Question()
        itd.Question.TranslatedText.append(ODM.TranslatedText(_content="Birth Year", lang="en"))
        itd.Alias.append(ODM.Alias(Context="CDASH", Name="BRTHYR"))
        itd.Alias.append(ODM.Alias(Context="SDTM", Name="BRTHDTC"))
        root.Study[0].MetaDataVersion[0].ItemDef.append(itd)

        odm_xml_string = root.to_xml_string()
        # add namespaces
        nsr = NS.NamespaceRegistry()
        odm_str = nsr.set_odm_namespace_attributes_string(odm_xml_string)
        with open("./data/simple_create_from_string.xml", "w") as xml_file:
            xml_file.write(odm_str)

        loader = LD.ODMLoader(OL.XMLODMLoader(model_package="odm_1_3_2", ns_uri="http://www.cdisc.org/ns/odm/v1.3"))
        loader.open_odm_document("./data/simple_create_from_string.xml")
        mdv = loader.MetaDataVersion()
        item_list = mdv.ItemDef
        item = item_list[0]
        self.assertEqual(item.OID, "ODM.IT.DM.BRTHYR")
Esempio n. 19
0
 def setUp(self) -> None:
     self.odm_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data', 'define2-0-0-sdtm-test.xml')
     self.odm_file_json = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data', 'sdtm_define2_test.json')
     self.loader = LD.ODMLoader(OL.XMLDefineLoader())
     self.jloader = LD.ODMLoader(OL.JSONDefineLoader())