def getQueries(self): logger.debug("Getting status for all queries...") db = storage.getDBConnection() res = db.getAllQueries() if res is None or len(res) < 1 : message = "The status of queries is empty. Were any queries submitted?" logger.error(message) return Messages.error(message, self.queryId); else: try: return simplejson.dumps(res) except Exception, e: message = "Problems while return Status json..." logger.exception(message + str(e)) return Messages.error(message, str(e));
def validateFile(self,numor): handlerManager = Manager(self.content) fileHandler = handlerManager.getRespectiveHandler() if fileHandler is None: return Messages.error("File/URL received is not valid.", "Neither ASCII, Nexus nor valid URL."); else: db = storage.getDBConnection() db.insertOrUpdateNumor(numor, fileHandler.filename()) return Messages.success("File/URL successfully received.", "The content is: " + fileHandler.__class__.__name__)
def getAllMethods(self): logger.debug("Getting methods...") content = self._getAllMethodsAsText() contentAsDic = None try : contentAsDic = ast.literal_eval(content) except Exception, e: message = "The remote specs file does not appear to have a json format." logger.exception(message + str(e)) contentAsDic = Messages.error(message, str(e), self._functionsFilename );
def getQuery(self): logger.debug("Getting results for query id = " + self.queryId) db = storage.getDBConnection() res = db.getQuery(self.queryId) if len(res) != 1 : message = "Result for query id %s is multiple (len = %d)!!!"%(self.queryId,len(res)) logger.error(message) return Messages.error(message, self.queryId); else: try: dicContent = res[0] dicContent["max_seconds_to_finish"] = self._getSecondsToFinish(dicContent) jsonContent = simplejson.dumps(dicContent) return jsonContent except Exception, e: message = "Problems validating json results for query id %s..."%self.queryId logger.exception(message + str(e)) return Messages.error(message, str(e));
def getQueryZipped(self): logger.debug("Getting results zipped for query id = " + self.queryId) db = storage.getDBConnection() res = db.getQuery(self.queryId) if len(res) != 1 : message = "Zipped result for query id %s is multiple (len = %d)!!!"%(self.queryId,len(res)) logger.error(message) return Messages.error(message, self.queryId); else: try: logger.debug("Zipping results for query id = " + self.queryId) dicContent = res[0] dicContent["max_seconds_to_finish"] = self._getSecondsToFinish(dicContent) jsonContent = simplejson.dumps(dicContent) logger.debug("Original content size: %d"%len(jsonContent)) jsonContentZipped = zlib.compress(jsonContent) logger.debug("Zipped content size: %d"%len(jsonContentZipped)) return jsonContentZipped except Exception, e: message = "Problems validating json results for zipped query id %s."%self.queryId logger.exception(message + str(e)) return Messages.error(message, str(e));
def getMethodsForThisInstrument(self): logger.debug("Getting methods...") content = self._getAllMethodsAsText() contentAsDic = None res = {} try : contentAsDic = ast.literal_eval(content) for k in contentAsDic.keys(): if isinstance(contentAsDic[k],dict): thisEntry = contentAsDic[k] if thisEntry.has_key('instruments'): if self._instrumentName in thisEntry['instruments']: res[k]=contentAsDic[k] except Exception, e: message = "The remote specs file does not appear to have a json format." logger.exception(message + str(e)) res = Messages.error(message, str(e), self._functionsFilename );
def validateQuery(self): ''' Main function @return: Json with queryId + timeout for this function ''' try : self._validateJson() self._validateFunctionName() self._validateExecutableAndTimeOut() # self._validateNumors() # return None if no problems return None except Exception, e: message = "Problems while validating the query..." logger.exception(message + str(e)) return Messages.error(message, str(e));
def process(self): errors = self.validator.validateQuery() if errors is not None: logger.error("Problems while validating the query...") return errors else: try : logger.debug("Build query json") self.queryId = str(uuid.uuid4()) queryJson = self._buildQuery() logger.debug("Build executable and params") inputParams = self._buildInputParams() queryJson['input_params'] = inputParams logger.debug("Insert query in the DB") self._storeInTheDB(queryJson) # This must be executed in thread!! t = threading.Thread(target=self._executeQueryInParallel, args=(inputParams,)) t.start() #### # Return successMessageStr = self.jsonSuccessTemplate%(self.queryId, self.validator.timeout, self.validator.executable) logger.debug("Message to send to the client:" + successMessageStr) return ast.literal_eval(successMessageStr) except Exception, e: message = "Problems while processing the query..." logger.exception(message + str(e)) return Messages.error(message, str(e));