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
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