Example #1
0
def api_run_query():
    if g.user is None:
        return "Authentication required", 401
    text = request.form['text']
    query = Query.get_by_id(request.form['query_id'])

    last_query_rev = query.latest_rev
    if last_query_rev:
        last_query_run = QueryRun.get_latest_run(last_query_rev.id)
        if last_query_run:
            result = worker.run_query.AsyncResult(last_query_run.task_id)
            if not result.ready():
                result.revoke(terminate=True)
                last_query_run.status = QueryRun.STATUS_SUPERSEDED
                last_query_run.save()
    query_rev = QueryRevision(query_id=query.id, text=text)
    query_rev.save_new()
    query.latest_rev = query_rev
    query.save()
    query_run = QueryRun()
    query_run.query_rev = query_rev
    query_run.status = QueryRun.STATUS_QUEUED
    query_run.save_new()
    query_run.task_id = worker.run_query.delay(query_run.id).task_id
    query_run.save()
    return json.dumps({
        'output_url': url_for('api_query_output', user_id=g.user.id, run_id=query_run.id)
    })