def run_query_sync(data_source, parameter_values, query_text, max_age=0): query_parameters = set(collect_query_parameters(query_text)) missing_params = set(query_parameters) - set(parameter_values.keys()) if missing_params: raise Exception('Missing parameter value for: {}'.format( ", ".join(missing_params))) if query_parameters: query_text = pystache.render(query_text, parameter_values) if max_age <= 0: query_result = None else: query_result = models.QueryResult.get_latest(data_source, query_text, max_age) query_hash = gen_query_hash(query_text) if query_result: logging.info("Returning cached result for query %s" % query_hash) return query_result.data try: started_at = time.time() data, error = data_source.query_runner.run_query( query_text, current_user) if error: return None # update cache if max_age > 0: run_time = time.time() - started_at query_result, updated_query_ids = models.QueryResult.store_result( data_source.org_id, data_source.id, query_hash, query_text, data, run_time, utils.utcnow()) models.db.session.commit() return data except Exception: if max_age > 0: abort( 404, message= "Unable to get result from the database, and no cached query result found." ) else: abort(503, message="Unable to get result from the database.") return None
def run_query_sync(data_source, parameter_values, query_text): query_parameters = set(collect_query_parameters(query_text)) missing_params = set(query_parameters) - set(parameter_values.keys()) if missing_params: raise Exception('Missing parameter value for: {}'.format(", ".join(missing_params))) if query_parameters: query_text = pystache.render(query_text, parameter_values) try: data, error = data_source.query_runner.run_query(query_text) if error: return None return data except Exception, e: abort(503, message="Unable to get result from the database.") return None
def run_query_sync(data_source, parameter_values, query_text, max_age=0): query_parameters = set(collect_query_parameters(query_text)) missing_params = set(query_parameters) - set(parameter_values.keys()) if missing_params: raise Exception('Missing parameter value for: {}'.format(", ".join(missing_params))) if query_parameters: query_text = pystache.render(query_text, parameter_values) if max_age <= 0: query_result = None else: query_result = models.QueryResult.get_latest(data_source, query_text, max_age) query_hash = gen_query_hash(query_text) if query_result: logging.info("Returning cached result for query %s" % query_hash) return query_result.data try: started_at = time.time() data, error = data_source.query_runner.run_query(query_text, current_user) if error: return None # update cache if max_age > 0: run_time = time.time() - started_at query_result, updated_query_ids = models.QueryResult.store_result(data_source.org_id, data_source.id, query_hash, query_text, data, run_time, utils.utcnow()) models.db.session.commit() return data except Exception: if max_age > 0: abort(404, message="Unable to get result from the database, and no cached query result found.") else: abort(503, message="Unable to get result from the database.") return None