def setRequest(self, requestName, requestString, desiredStatus=None): """ Set request to the database (including all sub-requests) :param self: self reference :param str requestName: request name :param str requestString: serilised request :param mixed desiredState: optional request status, defult = None """ self.log.info("setRequest: Attempting to set %s." % requestName) request = RequestContainer(requestString) requestTypes = request.getSubRequestTypes()["Value"] try: for requestType in requestTypes: subRequestString = request.toXML(desiredType=requestType)["Value"] if subRequestString: if desiredStatus: status = desiredStatus elif not request.isRequestTypeEmpty(requestType)["Value"]: status = "Waiting" else: status = "Done" subRequestDir = os.path.join(self.root, requestType, status) if not os.path.exists(subRequestDir): os.makedirs(subRequestDir) subRequestPath = os.path.join(subRequestDir, requestName) subRequestFile = open(subRequestPath, "w") subRequestFile.write(subRequestString) subRequestFile.close() self.log.info("setRequest: Successfully set %s." % requestName) return S_OK() except Exception, error: errStr = "setRequest: Exception while setting request." self.log.exception(errStr, requestName, lException=error) self.deleteRequest(requestName) return S_ERROR(errStr)
def setRequest(self, requestName, requestString, desiredStatus=None): """ Set request to the database (including all sub-requests) """ gLogger.info("RequestDBFile._setRequest: Attempting to set %s." % requestName) request = RequestContainer(requestString) requestTypes = request.getSubRequestTypes()['Value'] try: for requestType in requestTypes: subRequestString = request.toXML( desiredType=requestType)['Value'] if subRequestString: if desiredStatus: status = desiredStatus elif not request.isRequestTypeEmpty(requestType)['Value']: status = 'ToDo' else: status = 'Done' subRequestDir = os.path.join(self.root, requestType, status) if not os.path.exists(subRequestDir): os.makedirs(subRequestDir) subRequestPath = os.path.join(subRequestDir, requestName) subRequestFile = open(subRequestPath, 'w') subRequestFile.write(subRequestString) subRequestFile.close() gLogger.info("RequestDBFile._setRequest: Successfully set %s." % requestName) return S_OK() except Exception, x: errStr = "RequestDBFile._setRequest: Exception while setting request." gLogger.exception(errStr, requestName, lException=x) self.deleteRequest(requestName) return S_ERROR(errStr)
def setRequest( self, requestName, requestString, desiredStatus = None ): """ Set request to the database (including all sub-requests) """ gLogger.info( "RequestDBFile._setRequest: Attempting to set %s." % requestName ) request = RequestContainer( requestString ) requestTypes = request.getSubRequestTypes()['Value'] try: for requestType in requestTypes: subRequestString = request.toXML( desiredType = requestType )['Value'] if subRequestString: if desiredStatus: status = desiredStatus elif not request.isRequestTypeEmpty( requestType )['Value']: status = 'ToDo' else: status = 'Done' subRequestDir = '%s/%s/%s' % ( self.root, requestType, status ) if not os.path.exists( subRequestDir ): os.makedirs( subRequestDir ) subRequestPath = '%s/%s' % ( subRequestDir, requestName ) subRequestFile = open( subRequestPath, 'w' ) subRequestFile.write( subRequestString ) subRequestFile.close() gLogger.info( "RequestDBFile._setRequest: Successfully set %s." % requestName ) return S_OK() except Exception, x: errStr = "RequestDBFile._setRequest: Exception while setting request." gLogger.exception( errStr, requestName, lException = x ) self.deleteRequest( requestName ) return S_ERROR( errStr )
def setRequest( self, requestName, requestString, desiredStatus = None ): """ Set request to the database (including all sub-requests) :param self: self reference :param str requestName: request name :param str requestString: serilised request :param mixed desiredState: optional request status, defult = None """ self.log.info( "setRequest: Attempting to set %s." % requestName ) request = RequestContainer( requestString ) requestTypes = request.getSubRequestTypes()['Value'] try: for requestType in requestTypes: subRequestString = request.toXML( desiredType = requestType )['Value'] if subRequestString: if desiredStatus: status = desiredStatus elif not request.isRequestTypeEmpty( requestType )['Value']: status = 'Waiting' else: status = 'Done' subRequestDir = os.path.join( self.root, requestType, status ) if not os.path.exists( subRequestDir ): os.makedirs( subRequestDir ) subRequestPath = os.path.join( subRequestDir, requestName ) subRequestFile = open( subRequestPath, 'w' ) subRequestFile.write( subRequestString ) subRequestFile.close() self.log.info( "setRequest: Successfully set %s." % requestName ) return S_OK() except Exception, error: errStr = "setRequest: Exception while setting request." self.log.exception( errStr, requestName, lException = error ) self.deleteRequest( requestName ) return S_ERROR( errStr )
def setRequest( self, requestName, requestString ): """ insert request :requestName: to teh db :param str requestName: Requests.RequestName :param str requestString: xml-serialised request """ request = RequestContainer( init = True, request = requestString ) requestTypes = request.getSubRequestTypes()['Value'] failed = False res = self._getRequestID( requestName ) if not res['OK']: # we have a special case here: if request already exists, we override it if it # comes from a DIRAC job. This is identified by having a meaningful JobID in # the request if res['Message'].find( 'Duplicate' ) != -1: # Duplicate request jobID = request.getJobID()['Value'] if jobID == "Unknown": return res try: jobID = int( jobID ) except: return res if jobID > 0: # Remove the existing request result = self._deleteRequest( requestName ) if not result['OK']: message = res['Message'] return S_ERROR( 'Failed to set request: ' + message + ' can not override' ) res = self._getRequestID( requestName ) if not res['OK']: return res else: return res requestID = res['Value'] subRequestIDs = {} res = self.__setRequestAttributes( requestID, request ) if res['OK']: for requestType in requestTypes: res = request.getNumSubRequests( requestType ) numRequests = res['Value'] for ind in range( numRequests ): res = self._getSubRequestID( requestID, requestType ) if res['OK']: subRequestID = res['Value'] res = self.__setSubRequestAttributes( requestID, ind, requestType, subRequestID, request ) if res['OK']: subRequestIDs[subRequestID] = res['Value'] res = self.__setSubRequestFiles( ind, requestType, subRequestID, request ) if res['OK']: res = self.__setSubRequestDatasets( ind, requestType, subRequestID, request ) if not res['OK']: failed = True message = res['Message'] else: failed = True message = res['Message'] else: failed = True message = res['Message'] else: failed = True message = res['Message'] else: failed = True message = res['Message'] for subRequestID, status in subRequestIDs.items(): if not status: status = "Waiting" res = self._setSubRequestAttribute( requestID, subRequestID, 'Status', status ) if not res['OK']: failed = True message = res['Message'] res = self._setRequestAttribute( requestID, 'Status', 'Waiting' ) if not res['OK']: failed = True message = res['Message'] if failed: res = self._deleteRequest( requestName ) return S_ERROR( 'Failed to set request: ' + message ) else: return S_OK( requestID )
def setRequest(self, requestName, requestString): request = RequestContainer(init=True, request=requestString) requestTypes = request.getSubRequestTypes()['Value'] failed = False res = self._getRequestID(requestName) if not res['OK']: # we have a special case here: if request already exists, we override it if it # comes from a DIRAC job. This is identified by having a meaningful JobID in # the request if res['Message'].find('Duplicate') != -1: # Duplicate request jobID = request.getJobID()['Value'] if jobID == "Unknown": return res try: jobID = int(jobID) except: return res if jobID > 0: # Remove the existing request result = self._deleteRequest(requestName) if not result['OK']: message = res['Message'] return S_ERROR('Failed to set request: ' + message + ' can not override') res = self._getRequestID(requestName) if not res['OK']: return res else: return res requestID = res['Value'] subRequestIDs = {} res = self.__setRequestAttributes(requestID, request) if res['OK']: for requestType in requestTypes: res = request.getNumSubRequests(requestType) numRequests = res['Value'] for ind in range(numRequests): res = self._getSubRequestID(requestID, requestType) if res['OK']: subRequestID = res['Value'] res = self.__setSubRequestAttributes( requestID, ind, requestType, subRequestID, request) if res['OK']: subRequestIDs[subRequestID] = res['Value'] res = self.__setSubRequestFiles( ind, requestType, subRequestID, request) if res['OK']: res = self.__setSubRequestDatasets( ind, requestType, subRequestID, request) if not res['OK']: failed = True message = res['Message'] else: failed = True message = res['Message'] else: failed = True message = res['Message'] else: failed = True message = res['Message'] else: failed = True message = res['Message'] for subRequestID, status in subRequestIDs.items(): if not status: status = "Waiting" res = self._setSubRequestAttribute(requestID, subRequestID, 'Status', status) if not res['OK']: failed = True message = res['Message'] res = self._setRequestAttribute(requestID, 'Status', 'Waiting') if not res['OK']: failed = True message = res['Message'] if failed: res = self._deleteRequest(requestName) return S_ERROR('Failed to set request: ' + message) else: return S_OK(requestID)