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

        # Check if file path is setup
        if (self.isFileLoaded):
            documentTree = ET.ElementTree(file=self.filename)

            # 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
                # print studyEventRef.attrib['Mandatory']
                # print 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.setOid(element.attrib['OID'])
                    studyEvent.setName(element.attrib['Name'])
                    studyEvent.setRepeating(element.attrib['Repeating'])
                    studyEvent.setType(element.attrib['Type'])

                    studyEvents.append(studyEvent)

        # Return resulting study event defintion elements
        return studyEvents
    def listAllByStudy(self, study):
        """
        """
        params = SimpleXMLElement("""<?xml version="1.0" encoding="UTF-8"?>
            <listAllRequest>
            <v1:studyEventDefinitionListAll xmlns:v1="http://openclinica.org/ws/studyEventDefinition/v1">
            <bean:studyRef xmlns:bean="http://openclinica.org/ws/beans">
            <bean:identifier>""" + study.identifier + """</bean:identifier>
            </bean:studyRef>
            </v1:studyEventDefinitionListAll>
            </listAllRequest>""")

        response = self.client.call('listAllRequest', params)

        studyEventDefinitions = []
        for studyEventDefinition in response.studyEventDefinitions.children():

            oid = str(studyEventDefinition.oid)
            name = str(studyEventDefinition.name)

            eventDefinitionCrfs = []
            for eventDefinitionCrf in studyEventDefinition.eventDefinitionCrfs.children(
            ):

                required = str(eventDefinitionCrf.required)
                doubleDataEntry = str(eventDefinitionCrf.doubleDataEntry)
                passwordRequired = str(eventDefinitionCrf.passwordRequired)
                hideCrf = str(eventDefinitionCrf.hideCrf)
                sourceDataVerificaiton = str(
                    eventDefinitionCrf.sourceDataVerificaiton)

                # Ugly but it works
                index = 0
                defaultCrfVersionOid = None
                obtainedDefaultCrfVersion = None
                for ch in eventDefinitionCrf.children():
                    if ch.children():
                        if index == 0:
                            crfOid = str(ch.oid)
                            crfName = str(ch.name)
                            obtainedCrf = Crf(crfOid, crfName)
                        elif index == 1:
                            defaultCrfVersionOid = str(ch.oid)
                            defaultCrfVersionName = str(ch.name)
                            obtainedDefaultCrfVersion = CrfVersion(
                                defaultCrfVersionOid, defaultCrfVersionName)
                        index = index + 1

                obtainedEventDefinitionCrf = EventDefinitionCrf(
                    required, doubleDataEntry, passwordRequired, hideCrf,
                    sourceDataVerificaiton, obtainedCrf,
                    obtainedDefaultCrfVersion)

                eventDefinitionCrfs.append(obtainedEventDefinitionCrf)

            obtainedStudyEventDefintion = StudyEventDefinition(
                oid, name, eventDefinitionCrfs)
            studyEventDefinitions.append(obtainedStudyEventDefintion)

        return studyEventDefinitions
    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 #4
0
    def loadStudyEvents(self):
        """Extract a list of Study Event domain objects according to ODM from metadata XML
        """
        studyEvents = []

        # Check if file path is setup
        if (self.isFileLoaded):
            documentTree = ET.ElementTree(file=self.filename)

            # 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
                # print studyEventRef.attrib['Mandatory']
                # print 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.setOid(element.attrib['OID'])
                    studyEvent.setName(element.attrib['Name'])
                    studyEvent.setRepeating(element.attrib['Repeating'])
                    studyEvent.setType(element.attrib['Type'])

                    studyEvents.append(studyEvent)

        # Return resulting study event defintion elements
        return studyEvents
    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
                # print studyEventRef.attrib['Mandatory']
                # print 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.setOid(element.attrib['OID'])
                    studyEvent.setName(element.attrib['Name'])
                    studyEvent.setRepeating(element.attrib['Repeating'] == "Yes")
                    studyEvent.setType(element.attrib['Type'])

                    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