def loadEventsFromMetadata(self, metadata):
        """Extract a list of Study Event domain objects according to ODM from metadata XML
        """
        studyEvents = []

        # Check if file path is setup
        if metadata:
            documentTree = ET.ElementTree((ET.fromstring(str(metadata))))

            # First obtain list of references (OIDs) to study events defined in ODM -> Study -> MetaDataVersion -> Protocol
            studyEventRefs = []

            for studyEventRef in documentTree.iterfind(".//odm:StudyEventRef", namespaces=nsmaps):
                studyEventRefs.append(studyEventRef.attrib["StudyEventOID"])

                # In case I need this information later
                eventIsMandatory = studyEventRef.attrib["Mandatory"] == "Yes"
                eventOrderInProtocol = int(studyEventRef.attrib["OrderNumber"])

            # Now for each study event reference find study event definition
            for eventRef in studyEventRefs:
                for element in documentTree.iterfind(
                    './/odm:StudyEventDef[@OID="' + eventRef + '"]', namespaces=nsmaps
                ):
                    studyEvent = StudyEventDefinition()

                    studyEvent.oid = element.attrib["OID"]
                    studyEvent.name = element.attrib["Name"]
                    studyEvent.repeating = element.attrib["Repeating"] == "Yes"
                    studyEvent.type = element.attrib["Type"]
                    studyEvent.mandatory = eventIsMandatory
                    studyEvent.orderNumber = eventOrderInProtocol

                    for eventElement in element:
                        if (
                            str(eventElement.tag)
                        ).strip() == "{http://www.openclinica.org/ns/odm_ext_v130/v3.1}EventDefinitionDetails":
                            for detailsElement in eventElement:
                                if (
                                    str(detailsElement.tag)
                                ).strip() == "{http://www.openclinica.org/ns/odm_ext_v130/v3.1}Description":
                                    studyEvent.description = detailsElement.text
                                elif (
                                    str(detailsElement.tag)
                                ).strip() == "{http://www.openclinica.org/ns/odm_ext_v130/v3.1}Category":
                                    studyEvent.category = detailsElement.text

                    studyEvents.append(studyEvent)

        # Return resulting study event defintion elements
        return studyEvents
Example #2
0
    def loadEventsFromMetadata(self, metadata):
        """Extract a list of Study Event domain objects according to ODM from metadata XML
        """
        studyEvents = []

        # Check if file path is setup
        if (metadata):
            documentTree = ET.ElementTree((ET.fromstring(str(metadata))))

            # First obtain list of references (OIDs) to study events defined in ODM -> Study -> MetaDataVersion -> Protocol
            studyEventRefs = []

            for studyEventRef in documentTree.iterfind('.//odm:StudyEventRef',
                                                       namespaces=nsmaps):
                studyEventRefs.append(studyEventRef.attrib['StudyEventOID'])

                # In case I need this information later
                eventIsMandatory = studyEventRef.attrib['Mandatory'] == "Yes"
                eventOrderInProtocol = int(studyEventRef.attrib['OrderNumber'])

            # Now for each study event reference find study event definition
            for eventRef in studyEventRefs:
                for element in documentTree.iterfind(
                        './/odm:StudyEventDef[@OID="' + eventRef + '"]',
                        namespaces=nsmaps):
                    studyEvent = StudyEventDefinition()

                    studyEvent.oid = element.attrib['OID']
                    studyEvent.name = element.attrib['Name']
                    studyEvent.repeating = element.attrib['Repeating'] == "Yes"
                    studyEvent.type = element.attrib['Type']
                    studyEvent.mandatory = eventIsMandatory
                    studyEvent.orderNumber = eventOrderInProtocol

                    for eventElement in element:
                        if (str(eventElement.tag)).strip(
                        ) == "{http://www.openclinica.org/ns/odm_ext_v130/v3.1}EventDefinitionDetails":
                            for detailsElement in eventElement:
                                if (str(detailsElement.tag)).strip(
                                ) == "{http://www.openclinica.org/ns/odm_ext_v130/v3.1}Description":
                                    studyEvent.description = detailsElement.text
                                elif (str(detailsElement.tag)).strip(
                                ) == "{http://www.openclinica.org/ns/odm_ext_v130/v3.1}Category":
                                    studyEvent.category = detailsElement.text

                    studyEvents.append(studyEvent)

        # Return resulting study event defintion elements
        return studyEvents