def run_query(query, parameters, data_source, query_id, max_age=0): if data_source.paused: if data_source.pause_reason: message = "{} is paused ({}). Please try later.".format( data_source.name, data_source.pause_reason) else: message = "{} is paused. Please try later.".format( data_source.name) return error_response(message) try: query.apply(parameters) except (InvalidParameterError, QueryDetachedFromDataSourceError) as e: abort(400, message=str(e)) if query.missing_params: return error_response("Missing parameter value for: {}".format( ", ".join(query.missing_params))) if max_age == 0: query_result = None else: query_result = models.QueryResult.get_latest(data_source, query.text, max_age) record_event( current_user.org, current_user, { "action": "execute_query", "cache": "hit" if query_result else "miss", "object_id": data_source.id, "object_type": "data_source", "query": query.text, "query_id": query_id, "parameters": parameters, }, ) if query_result: return { "query_result": serialize_query_result(query_result, current_user.is_api_user()) } else: job = enqueue_query( query.text, data_source, current_user.id, current_user.is_api_user(), metadata={ "Username": repr(current_user) if current_user.is_api_user() else current_user.email, "Query ID": query_id, }, ) return serialize_job(job)
def run_query(query, parameters, data_source, query_id, max_age=0): if data_source.paused: if data_source.pause_reason: message = '{} is paused ({}). Please try later.'.format(data_source.name, data_source.pause_reason) else: message = '{} is paused. Please try later.'.format(data_source.name) return error_response(message) try: query.apply(parameters) except InvalidParameterError as e: abort(400, message=e.message) if query.missing_params: return error_response(u'Missing parameter value for: {}'.format(u", ".join(query.missing_params))) if max_age == 0: query_result = None else: query_result = models.QueryResult.get_latest(data_source, query.text, max_age) if query_result: return {'query_result': serialize_query_result(query_result, current_user.is_api_user())} else: job = enqueue_query(query.text, data_source, current_user.id, current_user.is_api_user(), metadata={ "Username": repr(current_user) if current_user.is_api_user() else current_user.email, "Query ID": query_id }) return {'job': job.to_dict()}
def run_query(query, parameters, data_source, query_id, max_age=0): if data_source.paused: if data_source.pause_reason: message = '{} is paused ({}). Please try later.'.format( data_source.name, data_source.pause_reason) else: message = '{} is paused. Please try later.'.format( data_source.name) return error_response(message) try: query.apply(parameters) except (InvalidParameterError, QueryDetachedFromDataSourceError) as e: abort(400, message=e.message) if query.missing_params: return error_response(u'Missing parameter value for: {}'.format( u", ".join(query.missing_params))) if max_age == 0: query_result = None else: query_result = models.QueryResult.get_latest(data_source, query.text, max_age) record_event( current_user.org, current_user, { 'action': 'execute_query', 'cache': 'hit' if query_result else 'miss', 'object_id': data_source.id, 'object_type': 'data_source', 'query': query.text, 'query_id': query_id, 'parameters': parameters }) if query_result: return { 'query_result': serialize_query_result(query_result, current_user.is_api_user()) } else: job = enqueue_query( query.text, data_source, current_user.id, current_user.is_api_user(), metadata={ "Username": repr(current_user) if current_user.is_api_user() else current_user.email, "Query ID": query_id }) return {'job': job.to_dict()}
def test_doesnt_serialize_sensitive_keys_for_unauthenticated_users(self): query_result = self.factory.create_query_result(data=json_dumps({})) serialized = serialize_query_result(query_result, True) self.assertSetEqual(set(["data", "retrieved_at"]), set(serialized.keys()))
def test_serializes_all_keys_for_authenticated_users(self): query_result = self.factory.create_query_result(data=json_dumps({})) serialized = serialize_query_result(query_result, False) self.assertSetEqual(set(query_result.to_dict().keys()), set(serialized.keys()))