Example #1
0
 def test_prefix_without_url(self):
     expected_ns = self.get_ns_defaults()
     expected_ns.update({'odm': 'http://www.cdisc.org/ns/odm/v1.3'})
     nsr = NS.NamespaceRegistry(prefix="def")
     self.assertDictEqual(expected_ns, nsr.namespaces)
     nsr = NS.NamespaceRegistry(uri='http://www.cdisc.org/ns/def/v2.0')
     self.assertDictEqual(expected_ns, nsr.namespaces)
Example #2
0
 def test_odm_ns_entries(self):
     NS.NamespaceRegistry(prefix="def",
                          uri="http://www.cdisc.org/ns/def/v2.0")
     nsr = NS.NamespaceRegistry(
         prefix="nciodm", uri="http://ncicb.nci.nih.gov/xml/odm/EVS/CDISC")
     expected_ns = self.get_ns_defaults()
     expected_ns.update({
         'odm':
         'http://www.cdisc.org/ns/odm/v1.3',
         'def':
         'http://www.cdisc.org/ns/def/v2.0',
         'nciodm':
         'http://ncicb.nci.nih.gov/xml/odm/EVS/CDISC'
     })
     self.assertDictEqual(expected_ns, nsr.namespaces)
     odm_ns = nsr.get_odm_namespace_entries()
     expected_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'
     ]
     self.assertListEqual(expected_list, odm_ns)
Example #3
0
 def test_remove_registry_entry(self):
     # tests a singleton so each test builds on the previous one
     NS.NamespaceRegistry(prefix="def",
                          uri="http://www.cdisc.org/ns/def/v2.0")
     nsr = NS.NamespaceRegistry(
         prefix="nciodm", uri="http://ncicb.nci.nih.gov/xml/odm/EVS/CDISC")
     expected_ns = self.get_ns_defaults()
     expected_ns.update({
         'odm':
         'http://www.cdisc.org/ns/odm/v1.3',
         'def':
         'http://www.cdisc.org/ns/def/v2.0',
         'nciodm':
         'http://ncicb.nci.nih.gov/xml/odm/EVS/CDISC'
     })
     self.assertDictEqual(expected_ns, nsr.namespaces)
     nsr.remove_registry_entry("def")
     expected_ns = self.get_ns_defaults()
     expected_ns.update({
         'odm':
         'http://www.cdisc.org/ns/odm/v1.3',
         'nciodm':
         'http://ncicb.nci.nih.gov/xml/odm/EVS/CDISC'
     })
     self.assertDictEqual(expected_ns, nsr.namespaces)
Example #4
0
 def _set_registry(self, namespace_registry):
     if namespace_registry:
         self.nsr = namespace_registry
     else:
         NS.NamespaceRegistry(prefix="odm",
                              uri="http://www.cdisc.org/ns/odm/v1.3",
                              is_default=True)
         self.nsr = NS.NamespaceRegistry(prefix="def", uri=self.ns_uri)
Example #5
0
 def test_write_dataset_xml(self):
     self.root.write_xml(ODM_XML_FILE)
     loader = OL.XMLODMLoader(model_package="dataset_1_0_1", ns_uri="http://www.cdisc.org/ns/Dataset-XML/v1.0")
     NS.NamespaceRegistry(prefix="odm", uri="http://www.cdisc.org/ns/odm/v1.3", is_default=True)
     ns = NS.NamespaceRegistry(prefix="data", uri="http://www.cdisc.org/ns/Dataset-XML/v1.0")
     loader.create_document(ODM_XML_FILE, ns)
     odm = loader.load_odm()
     self.assertEqual(odm.FileOID, "ODM.DATASET.001")
     self.assertEqual(odm.ClinicalData.ItemGroupData[0].ItemGroupOID, "IG.AE")
     self.assertEqual(odm.ClinicalData.ItemGroupData[0].ItemData[2].Value, "CDISC01.100008")
     self.assertEqual(odm.ClinicalData.ItemGroupData[1].ItemData[4].Value, "ANXIETY")
Example #6
0
 def setUp(self) -> None:
     attrs = self.set_itemgroupdef_attributes()
     self.igd = DEFINE.ItemGroupDef(**attrs)
     self.test_file = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'data',
         'define2-0-0-sdtm-test.xml')
     self.nsr = NS.NamespaceRegistry(prefix="odm",
                                     uri="http://www.cdisc.org/ns/odm/v1.3",
                                     is_default=True)
     self.nsr = NS.NamespaceRegistry(prefix="def",
                                     uri="http://www.cdisc.org/ns/def/v2.0")
Example #7
0
 def setUp(self) -> None:
     self.odm_file = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'data', 'ae_test.xml')
     self.loader = OL.XMLODMLoader(
         model_package="dataset_1_0_1",
         ns_uri="http://www.cdisc.org/ns/Dataset-XML/v1.0")
     NS.NamespaceRegistry(prefix="odm",
                          uri="http://www.cdisc.org/ns/odm/v1.3",
                          is_default=True)
     self.ns = NS.NamespaceRegistry(
         prefix="data", uri="http://www.cdisc.org/ns/Dataset-XML/v1.0")
Example #8
0
 def setUp(self) -> None:
     NS.NamespaceRegistry(prefix="odm",
                          uri="http://www.cdisc.org/ns/odm/v1.3",
                          is_default=True,
                          is_reset=True)
     NS.NamespaceRegistry(prefix="xs",
                          uri="http://www.w3.org/2001/XMLSchema-instance")
     NS.NamespaceRegistry(prefix="xml",
                          uri="http://www.w3.org/XML/1998/namespace")
     NS.NamespaceRegistry(prefix="xlink",
                          uri="http://www.w3.org/1999/xlink")
 def setUp(self) -> None:
     self.odm_file_1 = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'data',
         'define2-0-0-sdtm-test.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.0")
     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.root = self.parser.parse()
     self.mdv = self.parser.MetaDataVersion()
Example #10
0
 def __init__(self, ns_registry):
     if ns_registry:
         self.nsr = ns_registry
     else:
         self.nsr = NS.NamespaceRegistry(
             prefix="odm",
             uri="http://www.cdisc.org/ns/odm/v1.3",
             is_default=True)
Example #11
0
 def test_default_ns(self):
     NS.NamespaceRegistry(prefix="def",
                          uri="http://www.cdisc.org/ns/def/v2.0")
     nsr = NS.NamespaceRegistry(
         prefix="nciodm", uri="http://ncicb.nci.nih.gov/xml/odm/EVS/CDISC")
     expected_ns = self.get_ns_defaults()
     expected_ns.update({
         'odm':
         'http://www.cdisc.org/ns/odm/v1.3',
         'def':
         'http://www.cdisc.org/ns/def/v2.0',
         'nciodm':
         'http://ncicb.nci.nih.gov/xml/odm/EVS/CDISC'
     })
     self.assertDictEqual(expected_ns, nsr.namespaces)
     self.assertDictEqual({'odm': 'http://www.cdisc.org/ns/odm/v1.3'},
                          nsr.default_namespace)
Example #12
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()
Example #13
0
 def __init__(self,
              model_package="odm_1_3_2",
              ns_uri="http://www.cdisc.org/ns/odm/v1.3",
              local_model=False):
     self.filename = None
     self.parser = None
     if local_model:
         self.ODM = importlib.import_module(f"{model_package}.model")
     else:
         self.ODM = importlib.import_module(f"odmlib.{model_package}.model")
     self.nsr = NS.NamespaceRegistry()
Example #14
0
 def __init__(self,
              model_package="define_2_0",
              ns_uri="http://www.cdisc.org/ns/def/v2.0",
              local_model=False):
     self.filename = None
     self.parser = None
     if local_model:
         self.DEF = importlib.import_module(f"{model_package}.model")
     else:
         self.DEF = importlib.import_module(f"odmlib.{model_package}.model")
     self.ns_uri = ns_uri
     self.nsr = NS.NamespaceRegistry()
Example #15
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)
Example #16
0
 def write_odm(odm_file, odm_elem):
     """
     after converting ODMLIB to ElementTree, write the ElementTree to an ODM file
     :param odm_file: path and file to write the ODM XML
     :param odm_elem: Element object to write to ODM (presumably an ODM root)
     """
     tree = ET.ElementTree(odm_elem)
     root = tree.getroot()
     # workaround for elementtree NS bug - NamespaceRegistry assumes at least 1 default NS has been set
     nsr = NS.NamespaceRegistry()
     nsr.set_odm_namespace_attributes(root)
     tree.write(odm_file,
                xml_declaration=True,
                encoding='utf-8',
                method='xml',
                short_empty_elements=True)
Example #17
0
import odmlib.odm_element as OE
import odmlib.typed as T
import odmlib.ns_registry as NS

NS.NamespaceRegistry(prefix="odm",
                     uri="http://www.cdisc.org/ns/odm/v1.3",
                     is_default=True)
NS.NamespaceRegistry(prefix="nciodm",
                     uri="http://ncicb.nci.nih.gov/xml/odm/EVS/CDISC")
NS.NamespaceRegistry(prefix="xs",
                     uri="http://www.w3.org/2001/XMLSchema-instance")
NS.NamespaceRegistry(prefix="xml", uri="http://www.w3.org/XML/1998/namespace")
NS.NamespaceRegistry(prefix="xlink", uri="http://www.w3.org/1999/xlink")


class TranslatedText(OE.ODMElement):
    lang = T.String(namespace="xml")
    _content = T.String(required=True)


class Alias(OE.ODMElement):
    Context = T.String(required=True)
    Name = T.String(required=True)


class StudyDescription(OE.ODMElement):
    _content = T.String(required=True)


class ProtocolName(OE.ODMElement):
    _content = T.String(required=True)
Example #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")
Example #19
0
 def test_use_existing_registry(self):
     expected_ns = self.get_ns_defaults()
     expected_ns.update({'odm': 'http://www.cdisc.org/ns/odm/v1.3'})
     nsr = NS.NamespaceRegistry()
     self.assertDictEqual(expected_ns, nsr.namespaces)
Example #20
0
 def test_get_ns_entry_dict_missing(self):
     nsr = NS.NamespaceRegistry(prefix="def",
                                uri="http://www.cdisc.org/ns/def/v2.0")
     missing_ns_dict = nsr.get_ns_entry_dict("ct")
     expected_dict = {}
     self.assertDictEqual(expected_dict, missing_ns_dict)
Example #21
0
 def test_get_ns_entry_dict(self):
     nsr = NS.NamespaceRegistry(prefix="def",
                                uri="http://www.cdisc.org/ns/def/v2.0")
     def_ns_dict = nsr.get_ns_entry_dict("def")
     expected_dict = {"def": "http://www.cdisc.org/ns/def/v2.0"}
     self.assertDictEqual(expected_dict, def_ns_dict)
Example #22
0
 def test_get_ns_prefix_missing(self):
     nsr = NS.NamespaceRegistry(prefix="def",
                                uri="http://www.cdisc.org/ns/def/v2.0")
     with self.assertRaises(ValueError):
         def_prefix = nsr.get_prefix_ns_from_uri(
             "http://www.cdisc.org/ns/def/v3.0")
Example #23
0
 def test_get_ns_prefix(self):
     nsr = NS.NamespaceRegistry(prefix="def",
                                uri="http://www.cdisc.org/ns/def/v2.0")
     def_prefix = nsr.get_prefix_ns_from_uri(
         "http://www.cdisc.org/ns/def/v2.0")
     self.assertEqual("def", def_prefix)
Example #24
0
 def test_bad_ns_url(self):
     with self.assertRaises(ValueError):
         nsr = NS.NamespaceRegistry(prefix="def",
                                    uri="www.cdisc.org/ns/def/v2.0")
Example #25
0
import odmlib.odm_element as OE
import odmlib.typed as T
import odmlib.ns_registry as NS

NS.NamespaceRegistry(prefix="odm",
                     uri="http://www.cdisc.org/ns/odm/v2.0",
                     is_default=True)
NS.NamespaceRegistry(prefix="xs",
                     uri="http://www.w3.org/2001/XMLSchema-instance")
NS.NamespaceRegistry(prefix="xml", uri="http://www.w3.org/XML/1998/namespace")
NS.NamespaceRegistry(prefix="xlink", uri="http://www.w3.org/1999/xlink")


class TranslatedText(OE.ODMElement):
    lang = T.String(namespace="xml")
    Type = T.String()
    _content = T.String(required=True)


class Description(OE.ODMElement):
    TranslatedText = T.ODMListObject(required=True,
                                     element_class=TranslatedText)


class Alias(OE.ODMElement):
    Context = T.String(required=True)
    Name = T.String(required=True)


class StudyDescription(OE.ODMElement):
    Description = T.ODMObject(element_class=Description, required=True)
Example #26
0
import odmlib.odm_1_3_2.model as ODM
import odmlib.odm_element as OE
import odmlib.typed as T
import odmlib.ns_registry as NS


NS.NamespaceRegistry(prefix="odm", uri="http://www.cdisc.org/ns/odm/v1.3", is_default=True)
NS.NamespaceRegistry(prefix="xs", uri="http://www.w3.org/2001/XMLSchema-instance")
NS.NamespaceRegistry(prefix="xml", uri="http://www.w3.org/XML/1998/namespace")
NS.NamespaceRegistry(prefix="data", uri="http://www.cdisc.org/ns/Dataset-XML/v1.0")


class ItemData(OE.ODMElement):
    ItemOID = T.OIDRef(required=True)
    Value = T.String(required=False)


class ItemGroupData(OE.ODMElement):
    ItemGroupOID = T.OIDRef(required=True)
    ItemGroupDataSeq = T.PositiveInteger(required=True, namespace="data")
    ItemData = T.ODMListObject(required=False, element_class=ItemData)

    def __len__(self):
        return len(self.ItemData)

    def __getitem__(self, position):
        return self.ItemData[position]

    def __iter__(self):
        return iter(self.ItemData)
Example #27
0
import odmlib.odm_1_3_2.model as ODM
import odmlib.odm_element as OE
import odmlib.typed as T
import odmlib.ns_registry as NS

NS.NamespaceRegistry(prefix="def", uri="http://www.cdisc.org/ns/def/v2.1")


class TranslatedText(ODM.TranslatedText):
    lang = ODM.TranslatedText.lang
    _content = ODM.TranslatedText._content


class Alias(ODM.Alias):
    Context = ODM.Alias.Context
    Name = ODM.Alias.Name


class StudyDescription(ODM.StudyDescription):
    _content = ODM.StudyDescription._content


class ProtocolName(ODM.ProtocolName):
    _content = ODM.ProtocolName._content


class StudyName(ODM.StudyName):
    _content = ODM.StudyName._content


class GlobalVariables(ODM.GlobalVariables):