def store(self, _xsDataISPyBScreeningObject): # Create DNA compatible XML from xsDataScreeningObject: pyStrXML = EDUtilsXML.dnaMarshal(_xsDataISPyBScreeningObject) # Send the XML to the dbserver: pyStrResponse = self.httpPost(self.getDbserverHost(), self.getDbserverPort(), "/store_object_request", pyStrXML) if pyStrResponse != None: # Handle response: self.DEBUG(pyStrResponse) xsDatadbstatus = XSDatadbstatus.parseString(pyStrResponse) self.DEBUG("dbserver returns code: " + xsDatadbstatus.getCode()) self.DEBUG("dbserver returns message: " + xsDatadbstatus.getMessage()) if xsDatadbstatus.getCode() == "error": pyStrErrorMessage = EDMessage.ERROR_EXECUTION_03 % ("EDPluginISPyBv1_1", "process", xsDatadbstatus.getMessage()) self.error(xsDatadbstatus.getMessage()) self.addErrorMessage(xsDatadbstatus.getMessage()) return - 1 else: xsDataResultStatus = XSDataResultStatus() xsDataResultStatus.setCode(XSDataString(xsDatadbstatus.getCode())) xsDataResultStatus.setMessage(XSDataString(xsDatadbstatus.getMessage())) iIndex = -1 pyStrClassName = _xsDataISPyBScreeningObject.__class__.__name__ if pyStrClassName == "XSDataISPyBScreening": iIndex = xsDatadbstatus.getScreeningId() self.m_xsDataResultISPyB.setScreeningStatus(xsDataResultStatus) elif pyStrClassName == "XSDataISPyBScreeningInput": iIndex = xsDatadbstatus.getScreeningInputId() self.m_xsDataResultISPyB.getScreeningInputStatus().append(xsDataResultStatus) elif pyStrClassName == "XSDataISPyBScreeningOutput": iIndex = xsDatadbstatus.getScreeningOutputId() self.m_xsDataResultISPyB.getScreeningOutputStatus().append(xsDataResultStatus) elif pyStrClassName == "XSDataISPyBScreeningOutputLattice": iIndex = xsDatadbstatus.getScreeningOutputLatticeId() self.m_xsDataResultISPyB.getScreeningOutputLatticeStatus().append(xsDataResultStatus) elif pyStrClassName == "XSDataISPyBScreeningStrategy": iIndex = xsDatadbstatus.getScreeningStrategyId() self.m_xsDataResultISPyB.getScreeningStrategyStatus().append(xsDataResultStatus) elif pyStrClassName == "XSDataISPyBScreeningRank": iIndex = xsDatadbstatus.getScreeningRankId() self.m_xsDataResultISPyB.getScreeningRankStatus().append(xsDataResultStatus) elif pyStrClassName == "XSDataISPyBScreeningRankSet": iIndex = xsDatadbstatus.getScreeningRankSetId() self.m_xsDataResultISPyB.setScreeningRankSetStatus(xsDataResultStatus) else: pyStrErrorMessage = EDMessage.ERROR_EXECUTION_03 % ("EDPluginISPyBv1_1", "store", \ "Class type not found.") self.error(pyStrErrorMessage) self.addErrorMessage(pyStrErrorMessage) raise RuntimeError, pyStrErrorMessage xsDataResultStatus.setId(XSDataInteger(iIndex)) return XSDataInteger(iIndex)
def process(self, _edObject=None): """ Sends a store request and the screening object to the dbserver. Returns success or failure. Note that: * Any objects referred to by the object returned by self.getDataInput() will be stored. * Primary key attributes should not be set. * If a foreign key attribute is not set, this method will attempt to find the foreign object among those referred to by the self.getDataInput() object, and use the primary key attribute of this object when it has been stored. If such an object is not found, the method fails. * The method will not attempt to store any more objects once an error is encountered """ EDPluginExec.process(self) EDVerbose.DEBUG("*** EDPluginISPyBv1_1.process") xsDataInputISPyB = self.getDataInput() self.m_xsDataResultISPyB = XSDataResultISPyB() xsDataISPyBScreening = xsDataInputISPyB.getScreening() if xsDataISPyBScreening == None: xsDataISPyBScreening = XSDataISPyBScreening() xsDataISPyBImage = xsDataInputISPyB.getImage() if xsDataISPyBScreening.getDataCollectionId() == None: if ( (xsDataISPyBImage == None) or (xsDataISPyBImage.getFileName() == None) or (xsDataISPyBImage.getFileLocation() == None) ): pyStrErrorMessage = EDMessage.ERROR_EXECUTION_03 % ( "EDPluginISPyBv1_1", "process", "Neither a dataCollectionId nor a image filename + path are provided.", ) EDVerbose.error(pyStrErrorMessage) self.addErrorMessage(pyStrErrorMessage) return pyStrXML = EDUtilsXML.dnaMarshal(xsDataISPyBImage) # Send the XML to request the dataCollectionId from the dbserver: pyStrResponse = self.httpPost( self.getDbserverHost(), self.getDbserverPort(), "/get_datacollectionid", pyStrXML ) if pyStrResponse != None: # Handle response: xsDatadbstatus = XSDatadbstatus.parseString(pyStrResponse) pyStrCode = xsDatadbstatus.getCode() pyStrMessage = xsDatadbstatus.getMessage() EDVerbose.DEBUG("dbserver returns code: " + pyStrCode) EDVerbose.DEBUG("dbserver returns message: " + pyStrMessage) if (pyStrCode == "error") or (xsDatadbstatus.getDataCollectionId() == -1): if xsDatadbstatus.getDataCollectionId() == -1: pyStrMessage = "An image corresponding to the given fileName and fileLocation was not found." pyStrErrorMessage = EDMessage.ERROR_EXECUTION_03 % ("EDPluginISPyBv1_1", "process", pyStrMessage) EDVerbose.error(pyStrErrorMessage) self.addErrorMessage(pyStrErrorMessage) return if xsDatadbstatus.getDataCollectionId() != -1: xsDataISPyBScreening.setDataCollectionId(XSDataInteger(xsDatadbstatus.getDataCollectionId())) self.m_xsDataResultISPyB.setDataCollectionId(XSDataInteger(xsDatadbstatus.getDataCollectionId())) xsDataISPyBScreeningInputs = xsDataInputISPyB.getScreeningInput() xsDataISPyBScreeningOutputContainers = xsDataInputISPyB.getScreeningOutputContainer() xsDataISPyBScreeningRanks = xsDataInputISPyB.getScreeningRank() xsDataISPyBScreeningRankSet = xsDataInputISPyB.getScreeningRankSet() xsDataIntegerScreeningId = self.store(xsDataISPyBScreening) if xsDataISPyBScreeningInputs != None: for xsDataISPyBScreeningInput in xsDataISPyBScreeningInputs: xml = xsDataISPyBScreeningInput.marshal() xsDataISPyBScreeningInput.setScreeningId(xsDataIntegerScreeningId) self.store(xsDataISPyBScreeningInput) if xsDataISPyBScreeningRankSet != None: xsDataIntegerScreeningRankSetId = self.store(xsDataISPyBScreeningRankSet) for xsDataISPyBScreeningRank in xsDataISPyBScreeningRanks: xsDataISPyBScreeningRank.setScreeningId(xsDataIntegerScreeningId) xsDataISPyBScreeningRank.setScreeningRankSetId(xsDataIntegerScreeningRankSetId) self.store(xsDataISPyBScreeningRank) if xsDataISPyBScreeningOutputContainers != None: for xsDataISPyBScreeningOutputContainer in xsDataISPyBScreeningOutputContainers: xsDataISPyBScreeningOutput = xsDataISPyBScreeningOutputContainer.getScreeningOutput() xsDataISPyBScreeningOutput.setScreeningId(xsDataIntegerScreeningId) xsDataIntegerScreeningOutputId = self.store(xsDataISPyBScreeningOutput) xsDataISPyBScreeningOutputLattices = xsDataISPyBScreeningOutputContainer.getScreeningOutputLattice() if xsDataISPyBScreeningOutputLattices != None: for xsDataISPyBScreeningOutputLattice in xsDataISPyBScreeningOutputLattices: xsDataISPyBScreeningOutputLattice.setScreeningOutputId(xsDataIntegerScreeningOutputId) self.store(xsDataISPyBScreeningOutputLattice) xsDataISPyBScreeningStrategies = xsDataISPyBScreeningOutputContainer.getScreeningStrategy() if xsDataISPyBScreeningStrategies != None: for xsDataISPyBScreeningStrategy in xsDataISPyBScreeningStrategies: xsDataISPyBScreeningStrategy.setScreeningOutputId(xsDataIntegerScreeningOutputId) self.store(xsDataISPyBScreeningStrategy)
def process(self, _edObject=None): """ Sends store requests with the screening objects to the dbserver. Returns success or failure. Note that: * Any objects referred to by the object returned by self.getDataInput("inputISPyB")[0] will be stored. * Primary key attributes should not be set. * If a foreign key attribute is not set, this method will attempt to find the foreign object among the input objects, and then use the primary key attribute of this object when it has been stored. If such an object is not found, the method fails. * If an error is encountered, the method will immediately fail and will not attempt to store any more objects. """ EDPluginExec.process(self) EDVerbose.DEBUG("*** EDPluginISPyBv1_2.process") # Basic sanity check of inputs: if (self.hasDataInput("screening")): if (len(self.getDataInput("screening")) > 1): strErrorMessage = EDMessage.ERROR_EXECUTION_03 % ("EDPluginISPyBv1_2", "process", "There should only be one input 'screening'.") EDVerbose.error(strErrorMessage) self.addErrorMessage(strErrorMessage) raise RuntimeError, strErrorMessage if (self.hasDataInput("screeningRankSet")): if (len(self.getDataInput("screeningRankSet")) > 1): strErrorMessage = EDMessage.ERROR_EXECUTION_03 % ("EDPluginISPyBv1_2", "process", "There should only be one input 'screeningRankSet'.") EDVerbose.error(strErrorMessage) self.addErrorMessage(strErrorMessage) raise RuntimeError, strErrorMessage # Get the inputs xsDataISPyBScreenings = None xsDataISPyBScreeningInputs = None xsDataISPyBScreeningOutputContainers = None xsDataISPyBScreeningRanks = None xsDataISPyBScreeningRankSets = None xsDataISPyBImages = None xsDataISPyBScreeningFiles = None if self.hasDataInput("screening"): xsDataISPyBScreenings = self.getDataInput("screening") if self.hasDataInput("screeningInput"): xsDataISPyBScreeningInputs = self.getDataInput("screeningInput") if self.hasDataInput("screeningOutputContainer"): xsDataISPyBScreeningOutputContainers = self.getDataInput("screeningOutputContainer") if self.hasDataInput("screeningRank"): xsDataISPyBScreeningRanks = self.getDataInput("screeningRank") if self.hasDataInput("screeningRankSet"): xsDataISPyBScreeningRankSets = self.getDataInput("screeningRankSet") if self.hasDataInput("image"): xsDataISPyBImages = self.getDataInput("image") if self.hasDataInput("screeningFile"): xsDataISPyBScreeningFiles = self.getDataInput("screeningFile") self.__xsDataResultISPyB = XSDataResultISPyB() if (xsDataISPyBScreenings is None): xsDataISPyBScreening = XSDataISPyBScreening() else: xsDataISPyBScreening = xsDataISPyBScreenings[0] if (xsDataISPyBImages is None): xsDataISPyBImage = None else: xsDataISPyBImage = xsDataISPyBImages[0] # Another sanity check: if xsDataISPyBScreening.getDataCollectionId() == None: if ((xsDataISPyBImage == None) or (xsDataISPyBImage.getFileName() == None) or (xsDataISPyBImage.getFileLocation() == None)): strErrorMessage = EDMessage.ERROR_EXECUTION_03 % ("EDPluginISPyBv1_2", "process", \ "Neither a dataCollectionId nor an image filename + path are provided.") EDVerbose.error(strErrorMessage) self.addErrorMessage(strErrorMessage) return strXML = EDUtilsXML.dnaMarshal(xsDataISPyBImage) # Send the XML to request the dataCollectionId from the dbserver: strResponse = self.httpPost(self.getDbserverHost(), self.getDbserverPort(), "/get_datacollectionid", strXML) if strResponse != None: # Handle response: xsDatadbstatus = XSDatadbstatus.parseString(strResponse) strCode = xsDatadbstatus.getCode() strMessage = xsDatadbstatus.getMessage() EDVerbose.DEBUG("dbserver returns code: " + strCode) EDVerbose.DEBUG("dbserver returns message: " + strMessage) if (strCode == "error") or (xsDatadbstatus.getDataCollectionId() == -1): if xsDatadbstatus.getDataCollectionId() == -1: strMessage = "An image corresponding to the given fileName and fileLocation was not found." strErrorMessage = EDMessage.ERROR_EXECUTION_03 % ("EDPluginISPyBv1_2", "process", strMessage) EDVerbose.error(strErrorMessage) self.addErrorMessage(strErrorMessage) return if xsDatadbstatus.getDataCollectionId() != -1: xsDataISPyBScreening.setDataCollectionId(XSDataInteger(xsDatadbstatus.getDataCollectionId())) self.__xsDataResultISPyB.setDataCollectionId(XSDataInteger(xsDatadbstatus.getDataCollectionId())) if (xsDataISPyBScreeningRankSets is None): xsDataISPyBScreeningRankSet = None else: xsDataISPyBScreeningRankSet = xsDataISPyBScreeningRankSets[0] # Store all the different screening* objects: xsDataIntegerScreeningId = self.store(xsDataISPyBScreening) if xsDataISPyBScreeningInputs != None: for xsDataISPyBScreeningInput in xsDataISPyBScreeningInputs: xsDataISPyBScreeningInput.setScreeningId(xsDataIntegerScreeningId) self.store(xsDataISPyBScreeningInput) if xsDataISPyBScreeningRankSet != None: xsDataIntegerScreeningRankSetId = self.store(xsDataISPyBScreeningRankSet) for xsDataISPyBScreeningRank in xsDataISPyBScreeningRanks: xsDataISPyBScreeningRank.setScreeningId(xsDataIntegerScreeningId) xsDataISPyBScreeningRank.setScreeningRankSetId(xsDataIntegerScreeningRankSetId) self.store(xsDataISPyBScreeningRank) if xsDataISPyBScreeningOutputContainers != None: for xsDataISPyBScreeningOutputContainer in xsDataISPyBScreeningOutputContainers: xsDataISPyBScreeningOutput = xsDataISPyBScreeningOutputContainer.getScreeningOutput() xsDataISPyBScreeningOutput.setScreeningId(xsDataIntegerScreeningId) xsDataIntegerScreeningOutputId = self.store(xsDataISPyBScreeningOutput) xsDataISPyBScreeningOutputLattices = xsDataISPyBScreeningOutputContainer.getScreeningOutputLattice() if xsDataISPyBScreeningOutputLattices != None: for xsDataISPyBScreeningOutputLattice in xsDataISPyBScreeningOutputLattices: xsDataISPyBScreeningOutputLattice.setScreeningOutputId(xsDataIntegerScreeningOutputId) self.store(xsDataISPyBScreeningOutputLattice) xsDataISPyBScreeningStrategyContainers = xsDataISPyBScreeningOutputContainer.getScreeningStrategyContainer() if xsDataISPyBScreeningStrategyContainers != None: for xsDataISPyBScreeningStrategyContainer in xsDataISPyBScreeningStrategyContainers: xsDataISPyBScreeningStrategy = xsDataISPyBScreeningStrategyContainer.getScreeningStrategy() if xsDataISPyBScreeningStrategy != None: xsDataISPyBScreeningStrategy.setScreeningOutputId(xsDataIntegerScreeningOutputId) xsDataIntegerScreeningStrategyId = self.store(xsDataISPyBScreeningStrategy) xsDataISPyBScreeningStrategyWedgeContainers = xsDataISPyBScreeningStrategyContainer.getScreeningStrategyWedgeContainer() if xsDataISPyBScreeningStrategyWedgeContainers != None: for xsDataISPyBScreeningStrategyWedgeContainer in xsDataISPyBScreeningStrategyWedgeContainers: xsDataISPyBScreeningStrategyWedge = xsDataISPyBScreeningStrategyWedgeContainer.getScreeningStrategyWedge() xsDataISPyBScreeningStrategyWedge.setScreeningStrategyId(xsDataIntegerScreeningStrategyId) xsDataIntegerScreeningStrategyWedgeId = self.store(xsDataISPyBScreeningStrategyWedge) xsDataISPyBScreeningStrategySubWedges = xsDataISPyBScreeningStrategyWedgeContainer.getScreeningStrategySubWedge() if xsDataISPyBScreeningStrategySubWedges != None: for xsDataISPyBScreeningStrategySubWedge in xsDataISPyBScreeningStrategySubWedges: xsDataISPyBScreeningStrategySubWedge.setScreeningStrategyWedgeId(xsDataIntegerScreeningStrategyWedgeId) self.store(xsDataISPyBScreeningStrategySubWedge)
def process(self, _edObject=None): """ Sends a store request and the screening object to the dbserver. Returns success or failure. Note that: * Any objects referred to by the object returned by self.getDataInput() will be stored. * Primary key attributes should not be set. * If a foreign key attribute is not set, this method will attempt to find the foreign object among those referred to by the self.getDataInput() object, and use the primary key attribute of this object when it has been stored. If such an object is not found, the method fails. * The method will not attempt to store any more objects once an error is encountered """ EDPluginExec.process(self) self.DEBUG("*** EDPluginISPyBv10.process") xsDataInputISPyB = self.getDataInput() self.m_xsDataResultISPyB = XSDataResultISPyB() xsDataISPyBScreening = xsDataInputISPyB.getScreening() if xsDataISPyBScreening == None: xsDataISPyBScreening = XSDataISPyBScreening() xsDataISPyBImage = xsDataInputISPyB.getImage() if xsDataISPyBScreening.getDataCollectionId() == None: if ((xsDataISPyBImage == None) or (xsDataISPyBImage.getFileName() == None) or (xsDataISPyBImage.getFileLocation() == None)): pyStrErrorMessage = EDMessage.ERROR_EXECUTION_03 % ("EDPluginISPyBv10", "process", \ "Neither a dataCollectionId nor a image filename + path are provided.") self.error(pyStrErrorMessage) self.addErrorMessage(pyStrErrorMessage) return strXML = EDUtilsXML.dnaMarshal(xsDataISPyBImage) # Send the XML to request the dataCollectionId from the dbserver: edStringResponse = self.httpPost(self.getDbserverHost(), self.getDbserverPort(), "/get_datacollectionid", strXML) if edStringResponse != None: # Handle response: self.DEBUG(edStringResponse) xsDatadbstatus = XSDatadbstatus.parseString(edStringResponse) pyStrCode = xsDatadbstatus.getCode() pyStrMessage = xsDatadbstatus.getMessage() self.DEBUG("dbserver returns code: " + pyStrCode) self.DEBUG("dbserver returns message: " + pyStrMessage) if (pyStrCode == "error") or (xsDatadbstatus.getDataCollectionId() == -1): if xsDatadbstatus.getDataCollectionId() == -1: pyStrMessage = "An image corresponding to the given fileName and fileLocation was not found." pyStrErrorMessage = EDMessage.ERROR_EXECUTION_03 % ( "EDPluginISPyBv10", "process", pyStrMessage) self.error(pyStrErrorMessage) self.addErrorMessage(pyStrErrorMessage) return if xsDatadbstatus.getDataCollectionId() != -1: xsDataISPyBScreening.setDataCollectionId( XSDataInteger(xsDatadbstatus.getDataCollectionId())) self.DEBUG("dataCollectionId is: " + str( xsDataISPyBScreening.getDataCollectionId().getValue())) xsDataISPyBScreeningInput = xsDataInputISPyB.getScreeningInput() xsDataISPyBScreeningOutput = xsDataInputISPyB.getScreeningOutput() xsDataISPyBScreeningOutputLattice = xsDataInputISPyB.getScreeningOutputLattice( ) xsDataISPyBScreeningRank = xsDataInputISPyB.getScreeningRank() xsDataISPyBScreeningRankSet = xsDataInputISPyB.getScreeningRankSet() xsDataISPyBScreeningStrategy = xsDataInputISPyB.getScreeningStrategy() for xsDataISPyBScreeningObject in [ xsDataISPyBScreening, xsDataISPyBScreeningRankSet, xsDataISPyBScreeningInput, xsDataISPyBScreeningOutput, \ xsDataISPyBScreeningOutputLattice, xsDataISPyBScreeningRank, xsDataISPyBScreeningStrategy ]: if xsDataISPyBScreeningObject != None: # Set any missing foreign key attributes in xsDataScreeningObject: self.setForeignKeyAttributes(xsDataISPyBScreeningObject, self.m_xsDataResultISPyB) # Create DNA compatible XML from xsDataScreeningObject: strXML = EDUtilsXML.dnaMarshal(xsDataISPyBScreeningObject) # Send the XML to the dbserver: edStringResponse = self.httpPost(self.getDbserverHost(), self.getDbserverPort(), "/store_object_request", strXML) if edStringResponse != None: # Handle response: self.DEBUG(edStringResponse) xsDatadbstatus = XSDatadbstatus.parseString( edStringResponse) pyStrCode = xsDatadbstatus.getCode() pyStrMessage = xsDatadbstatus.getMessage() xsDataStrCode = XSDataString(pyStrCode) xsDataStrMessage = XSDataString(pyStrMessage) self.DEBUG("dbserver returns code: " + pyStrCode) self.DEBUG("dbserver returns message: " + pyStrMessage) xsDataResultStatusList = self.m_xsDataResultISPyB.getResultStatus( ) xsDataResultStatus = XSDataResultStatus( xsDataISPyBScreeningObject, xsDataStrCode, xsDataStrMessage) xsDataResultStatusList.append(xsDataResultStatus) self.addToXSDataResultISPyB(self.m_xsDataResultISPyB, xsDatadbstatus) if pyStrCode == "error": pyStrErrorMessage = EDMessage.ERROR_EXECUTION_03 % ( "EDPluginISPyBv10", "process", pyStrMessage) self.error(pyStrErrorMessage) self.addErrorMessage(pyStrErrorMessage) return else: return
def process(self, _edObject=None): """ Sends a store request and the screening object to the dbserver. Returns success or failure. Note that: * Any objects referred to by the object returned by self.getDataInput() will be stored. * Primary key attributes should not be set. * If a foreign key attribute is not set, this method will attempt to find the foreign object among those referred to by the self.getDataInput() object, and use the primary key attribute of this object when it has been stored. If such an object is not found, the method fails. * The method will not attempt to store any more objects once an error is encountered """ EDPluginExec.process(self) EDVerbose.DEBUG("*** EDPluginISPyBv10.process") xsDataInputISPyB = self.getDataInput() self.m_xsDataResultISPyB = XSDataResultISPyB() xsDataISPyBScreening = xsDataInputISPyB.getScreening() if xsDataISPyBScreening == None: xsDataISPyBScreening = XSDataISPyBScreening() xsDataISPyBImage = xsDataInputISPyB.getImage() if xsDataISPyBScreening.getDataCollectionId() == None: if ((xsDataISPyBImage == None) or (xsDataISPyBImage.getFileName() == None) or (xsDataISPyBImage.getFileLocation() == None)): pyStrErrorMessage = EDMessage.ERROR_EXECUTION_03 % ("EDPluginISPyBv10", "process", \ "Neither a dataCollectionId nor a image filename + path are provided.") EDVerbose.error(pyStrErrorMessage) self.addErrorMessage(pyStrErrorMessage) return strXML = EDUtilsXML.dnaMarshal(xsDataISPyBImage) # Send the XML to request the dataCollectionId from the dbserver: edStringResponse = self.httpPost(self.getDbserverHost(), self.getDbserverPort(), "/get_datacollectionid", strXML) if edStringResponse != None: # Handle response: EDVerbose.DEBUG(edStringResponse) xsDatadbstatus = XSDatadbstatus.parseString(edStringResponse) pyStrCode = xsDatadbstatus.getCode() pyStrMessage = xsDatadbstatus.getMessage() EDVerbose.DEBUG("dbserver returns code: " + pyStrCode) EDVerbose.DEBUG("dbserver returns message: " + pyStrMessage) if (pyStrCode == "error") or (xsDatadbstatus.getDataCollectionId() == -1): if xsDatadbstatus.getDataCollectionId() == -1: pyStrMessage = "An image corresponding to the given fileName and fileLocation was not found." pyStrErrorMessage = EDMessage.ERROR_EXECUTION_03 % ("EDPluginISPyBv10", "process", pyStrMessage) EDVerbose.error(pyStrErrorMessage) self.addErrorMessage(pyStrErrorMessage) return if xsDatadbstatus.getDataCollectionId() != -1: xsDataISPyBScreening.setDataCollectionId(XSDataInteger(xsDatadbstatus.getDataCollectionId())) EDVerbose.DEBUG("dataCollectionId is: " + str(xsDataISPyBScreening.getDataCollectionId().getValue())) xsDataISPyBScreeningInput = xsDataInputISPyB.getScreeningInput() xsDataISPyBScreeningOutput = xsDataInputISPyB.getScreeningOutput() xsDataISPyBScreeningOutputLattice = xsDataInputISPyB.getScreeningOutputLattice() xsDataISPyBScreeningRank = xsDataInputISPyB.getScreeningRank() xsDataISPyBScreeningRankSet = xsDataInputISPyB.getScreeningRankSet() xsDataISPyBScreeningStrategy = xsDataInputISPyB.getScreeningStrategy() for xsDataISPyBScreeningObject in [ xsDataISPyBScreening, xsDataISPyBScreeningRankSet, xsDataISPyBScreeningInput, xsDataISPyBScreeningOutput, \ xsDataISPyBScreeningOutputLattice, xsDataISPyBScreeningRank, xsDataISPyBScreeningStrategy ]: if xsDataISPyBScreeningObject != None: # Set any missing foreign key attributes in xsDataScreeningObject: self.setForeignKeyAttributes(xsDataISPyBScreeningObject, self.m_xsDataResultISPyB) # Create DNA compatible XML from xsDataScreeningObject: strXML = EDUtilsXML.dnaMarshal(xsDataISPyBScreeningObject) # Send the XML to the dbserver: edStringResponse = self.httpPost(self.getDbserverHost(), self.getDbserverPort(), "/store_object_request", strXML) if edStringResponse != None: # Handle response: EDVerbose.DEBUG(edStringResponse) xsDatadbstatus = XSDatadbstatus.parseString(edStringResponse) pyStrCode = xsDatadbstatus.getCode() pyStrMessage = xsDatadbstatus.getMessage() xsDataStrCode = XSDataString(pyStrCode) xsDataStrMessage = XSDataString(pyStrMessage) EDVerbose.DEBUG("dbserver returns code: " + pyStrCode) EDVerbose.DEBUG("dbserver returns message: " + pyStrMessage) xsDataResultStatusList = self.m_xsDataResultISPyB.getResultStatus() xsDataResultStatus = XSDataResultStatus(xsDataISPyBScreeningObject, xsDataStrCode, xsDataStrMessage) xsDataResultStatusList.append(xsDataResultStatus) self.addToXSDataResultISPyB(self.m_xsDataResultISPyB, xsDatadbstatus) if pyStrCode == "error": pyStrErrorMessage = EDMessage.ERROR_EXECUTION_03 % ("EDPluginISPyBv10", "process", pyStrMessage) EDVerbose.error(pyStrErrorMessage) self.addErrorMessage(pyStrErrorMessage) return else: return
def store(self, _xsDataISPyBScreeningObject): # Create DNA compatible XML from xsDataScreeningObject: strXML = EDUtilsXML.dnaMarshal(_xsDataISPyBScreeningObject) # Send the XML to the dbserver: strResponse = self.httpPost(self.getDbserverHost(), self.getDbserverPort(), "/store_object_request", strXML) if strResponse != None: # Handle response: self.DEBUG(strResponse) xsDatadbstatus = XSDatadbstatus.parseString(strResponse) self.DEBUG("dbserver returns code: " + xsDatadbstatus.getCode()) self.DEBUG("dbserver returns message: " + xsDatadbstatus.getMessage()) if xsDatadbstatus.getCode() == "error": strErrorMessage = EDMessage.ERROR_EXECUTION_03 % ( "EDPluginISPyBv1_2", "store", xsDatadbstatus.getMessage()) self.error(xsDatadbstatus.getMessage()) self.addErrorMessage(strErrorMessage) return -1 else: xsDataResultStatus = XSDataResultStatus() xsDataResultStatus.setCode( XSDataString(xsDatadbstatus.getCode())) xsDataResultStatus.setMessage( XSDataString(xsDatadbstatus.getMessage())) iIndex = -1 strClassName = _xsDataISPyBScreeningObject.__class__.__name__ if strClassName == "XSDataISPyBScreening": iIndex = xsDatadbstatus.getScreeningId() self.__xsDataResultISPyB.setScreeningStatus( xsDataResultStatus) elif strClassName == "XSDataISPyBScreeningInput": iIndex = xsDatadbstatus.getScreeningInputId() self.__xsDataResultISPyB.getScreeningInputStatus().append( xsDataResultStatus) elif strClassName == "XSDataISPyBScreeningOutput": iIndex = xsDatadbstatus.getScreeningOutputId() self.__xsDataResultISPyB.getScreeningOutputStatus().append( xsDataResultStatus) elif strClassName == "XSDataISPyBScreeningOutputLattice": iIndex = xsDatadbstatus.getScreeningOutputLatticeId() self.__xsDataResultISPyB.getScreeningOutputLatticeStatus( ).append(xsDataResultStatus) elif strClassName == "XSDataISPyBScreeningStrategy": iIndex = xsDatadbstatus.getScreeningStrategyId() self.__xsDataResultISPyB.getScreeningStrategyStatus( ).append(xsDataResultStatus) elif strClassName == "XSDataISPyBScreeningStrategyWedge": iIndex = xsDatadbstatus.getScreeningStrategyWedgeId() self.__xsDataResultISPyB.getScreeningStrategyWedgeStatus( ).append(xsDataResultStatus) elif strClassName == "XSDataISPyBScreeningStrategySubWedge": iIndex = xsDatadbstatus.getScreeningStrategySubWedgeId() self.__xsDataResultISPyB.getScreeningStrategySubWedgeStatus( ).append(xsDataResultStatus) elif strClassName == "XSDataISPyBScreeningFile": iIndex = xsDatadbstatus.getScreeningFileId() self.__xsDataResultISPyB.setScreeningFileStatus( xsDataResultStatus) elif strClassName == "XSDataISPyBScreeningRank": iIndex = xsDatadbstatus.getScreeningRankId() self.__xsDataResultISPyB.getScreeningRankStatus().append( xsDataResultStatus) elif strClassName == "XSDataISPyBScreeningRankSet": iIndex = xsDatadbstatus.getScreeningRankSetId() self.__xsDataResultISPyB.setScreeningRankSetStatus( xsDataResultStatus) else: strErrorMessage = EDMessage.ERROR_EXECUTION_03 % ("EDPluginISPyBv1_2", "store", \ "Class type not found.") self.error(strErrorMessage) self.addErrorMessage(strErrorMessage) raise RuntimeError, strErrorMessage xsDataResultStatus.setId(XSDataInteger(iIndex)) return XSDataInteger(iIndex)
def process(self, _edObject=None): """ Sends store requests with the screening objects to the dbserver. Returns success or failure. Note that: * Any objects referred to by the object returned by self.getDataInput("inputISPyB")[0] will be stored. * Primary key attributes should not be set. * If a foreign key attribute is not set, this method will attempt to find the foreign object among the input objects, and then use the primary key attribute of this object when it has been stored. If such an object is not found, the method fails. * If an error is encountered, the method will immediately fail and will not attempt to store any more objects. """ EDPluginExec.process(self) self.DEBUG("*** EDPluginISPyBv1_2.process") # Basic sanity check of inputs: if (self.hasDataInput("screening")): if (len(self.getDataInput("screening")) > 1): strErrorMessage = EDMessage.ERROR_EXECUTION_03 % ( "EDPluginISPyBv1_2", "process", "There should only be one input 'screening'.") self.error(strErrorMessage) self.addErrorMessage(strErrorMessage) raise RuntimeError, strErrorMessage if (self.hasDataInput("screeningRankSet")): if (len(self.getDataInput("screeningRankSet")) > 1): strErrorMessage = EDMessage.ERROR_EXECUTION_03 % ( "EDPluginISPyBv1_2", "process", "There should only be one input 'screeningRankSet'.") self.error(strErrorMessage) self.addErrorMessage(strErrorMessage) raise RuntimeError, strErrorMessage # Get the inputs xsDataISPyBScreenings = None xsDataISPyBScreeningInputs = None xsDataISPyBScreeningOutputContainers = None xsDataISPyBScreeningRanks = None xsDataISPyBScreeningRankSets = None xsDataISPyBImages = None xsDataISPyBScreeningFiles = None if self.hasDataInput("screening"): xsDataISPyBScreenings = self.getDataInput("screening") if self.hasDataInput("screeningInput"): xsDataISPyBScreeningInputs = self.getDataInput("screeningInput") if self.hasDataInput("screeningOutputContainer"): xsDataISPyBScreeningOutputContainers = self.getDataInput( "screeningOutputContainer") if self.hasDataInput("screeningRank"): xsDataISPyBScreeningRanks = self.getDataInput("screeningRank") if self.hasDataInput("screeningRankSet"): xsDataISPyBScreeningRankSets = self.getDataInput( "screeningRankSet") if self.hasDataInput("image"): xsDataISPyBImages = self.getDataInput("image") if self.hasDataInput("screeningFile"): xsDataISPyBScreeningFiles = self.getDataInput("screeningFile") self.__xsDataResultISPyB = XSDataResultISPyB() if (xsDataISPyBScreenings is None): xsDataISPyBScreening = XSDataISPyBScreening() else: xsDataISPyBScreening = xsDataISPyBScreenings[0] if (xsDataISPyBImages is None): xsDataISPyBImage = None else: xsDataISPyBImage = xsDataISPyBImages[0] # Another sanity check: if xsDataISPyBScreening.getDataCollectionId() == None: if ((xsDataISPyBImage == None) or (xsDataISPyBImage.getFileName() == None) or (xsDataISPyBImage.getFileLocation() == None)): strErrorMessage = EDMessage.ERROR_EXECUTION_03 % ("EDPluginISPyBv1_2", "process", \ "Neither a dataCollectionId nor an image filename + path are provided.") self.error(strErrorMessage) self.addErrorMessage(strErrorMessage) return strXML = EDUtilsXML.dnaMarshal(xsDataISPyBImage) # Send the XML to request the dataCollectionId from the dbserver: strResponse = self.httpPost(self.getDbserverHost(), self.getDbserverPort(), "/get_datacollectionid", strXML) if strResponse != None: # Handle response: xsDatadbstatus = XSDatadbstatus.parseString(strResponse) strCode = xsDatadbstatus.getCode() strMessage = xsDatadbstatus.getMessage() self.DEBUG("dbserver returns code: " + strCode) self.DEBUG("dbserver returns message: " + strMessage) if (strCode == "error") or (xsDatadbstatus.getDataCollectionId() == -1): if xsDatadbstatus.getDataCollectionId() == -1: strMessage = "An image corresponding to the given fileName and fileLocation was not found." strErrorMessage = EDMessage.ERROR_EXECUTION_03 % ( "EDPluginISPyBv1_2", "process", strMessage) self.error(strErrorMessage) self.addErrorMessage(strErrorMessage) return if xsDatadbstatus.getDataCollectionId() != -1: xsDataISPyBScreening.setDataCollectionId( XSDataInteger(xsDatadbstatus.getDataCollectionId())) self.__xsDataResultISPyB.setDataCollectionId( XSDataInteger(xsDatadbstatus.getDataCollectionId())) if (xsDataISPyBScreeningRankSets is None): xsDataISPyBScreeningRankSet = None else: xsDataISPyBScreeningRankSet = xsDataISPyBScreeningRankSets[0] # Store all the different screening* objects: xsDataIntegerScreeningId = self.store(xsDataISPyBScreening) if xsDataISPyBScreeningInputs != None: for xsDataISPyBScreeningInput in xsDataISPyBScreeningInputs: xsDataISPyBScreeningInput.setScreeningId( xsDataIntegerScreeningId) self.store(xsDataISPyBScreeningInput) if xsDataISPyBScreeningRankSet != None: xsDataIntegerScreeningRankSetId = self.store( xsDataISPyBScreeningRankSet) for xsDataISPyBScreeningRank in xsDataISPyBScreeningRanks: xsDataISPyBScreeningRank.setScreeningId( xsDataIntegerScreeningId) xsDataISPyBScreeningRank.setScreeningRankSetId( xsDataIntegerScreeningRankSetId) self.store(xsDataISPyBScreeningRank) if xsDataISPyBScreeningOutputContainers != None: for xsDataISPyBScreeningOutputContainer in xsDataISPyBScreeningOutputContainers: xsDataISPyBScreeningOutput = xsDataISPyBScreeningOutputContainer.getScreeningOutput( ) xsDataISPyBScreeningOutput.setScreeningId( xsDataIntegerScreeningId) xsDataIntegerScreeningOutputId = self.store( xsDataISPyBScreeningOutput) xsDataISPyBScreeningOutputLattices = xsDataISPyBScreeningOutputContainer.getScreeningOutputLattice( ) if xsDataISPyBScreeningOutputLattices != None: for xsDataISPyBScreeningOutputLattice in xsDataISPyBScreeningOutputLattices: xsDataISPyBScreeningOutputLattice.setScreeningOutputId( xsDataIntegerScreeningOutputId) self.store(xsDataISPyBScreeningOutputLattice) xsDataISPyBScreeningStrategyContainers = xsDataISPyBScreeningOutputContainer.getScreeningStrategyContainer( ) if xsDataISPyBScreeningStrategyContainers != None: for xsDataISPyBScreeningStrategyContainer in xsDataISPyBScreeningStrategyContainers: xsDataISPyBScreeningStrategy = xsDataISPyBScreeningStrategyContainer.getScreeningStrategy( ) if xsDataISPyBScreeningStrategy != None: xsDataISPyBScreeningStrategy.setScreeningOutputId( xsDataIntegerScreeningOutputId) xsDataIntegerScreeningStrategyId = self.store( xsDataISPyBScreeningStrategy) xsDataISPyBScreeningStrategyWedgeContainers = xsDataISPyBScreeningStrategyContainer.getScreeningStrategyWedgeContainer( ) if xsDataISPyBScreeningStrategyWedgeContainers != None: for xsDataISPyBScreeningStrategyWedgeContainer in xsDataISPyBScreeningStrategyWedgeContainers: xsDataISPyBScreeningStrategyWedge = xsDataISPyBScreeningStrategyWedgeContainer.getScreeningStrategyWedge( ) xsDataISPyBScreeningStrategyWedge.setScreeningStrategyId( xsDataIntegerScreeningStrategyId) xsDataIntegerScreeningStrategyWedgeId = self.store( xsDataISPyBScreeningStrategyWedge) xsDataISPyBScreeningStrategySubWedges = xsDataISPyBScreeningStrategyWedgeContainer.getScreeningStrategySubWedge( ) if xsDataISPyBScreeningStrategySubWedges != None: for xsDataISPyBScreeningStrategySubWedge in xsDataISPyBScreeningStrategySubWedges: xsDataISPyBScreeningStrategySubWedge.setScreeningStrategyWedgeId( xsDataIntegerScreeningStrategyWedgeId ) self.store( xsDataISPyBScreeningStrategySubWedge )