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)
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)
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)
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)
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")
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")
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")
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()
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)
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)
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()
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()
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()
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)
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)
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)
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")
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)
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)
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)
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")
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)
def test_bad_ns_url(self): with self.assertRaises(ValueError): nsr = NS.NamespaceRegistry(prefix="def", uri="www.cdisc.org/ns/def/v2.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)
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)
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):