Пример #1
0
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)
Пример #2
0
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()}
Пример #3
0
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()}
Пример #4
0
 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()))
Пример #5
0
 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()))