Skip to content

Instantly share code, notes, and snippets.

@mars2cbh
Forked from arikfr/refresh.py
Created February 1, 2023 11:24
Show Gist options
  • Save mars2cbh/6fbb21c90bccabf5f78085b68bbd45f5 to your computer and use it in GitHub Desktop.
Save mars2cbh/6fbb21c90bccabf5f78085b68bbd45f5 to your computer and use it in GitHub Desktop.
Redash Refresh API usage example with parameters Raw
import os
import requests
import time
from pprint import pprint
def poll_job(s, redash_url, job):
# TODO: add timeout
while job['status'] not in (3,4):
response = s.get('{}/api/jobs/{}'.format(redash_url, job['id']))
job = response.json()['job']
time.sleep(1)
if job['status'] == 3:
return job['query_result_id']
return None
def get_fresh_query_result(redash_url, query_id, api_key, parameters):
s = requests.Session()
s.headers.update({'Authorization': 'Key {}'.format(api_key)})
body = {
"parameters": parameters
}
response = s.post('{}/api/queries/{}/results'.format(redash_url, query_id), json=body)
if response.status_code != 200:
raise Exception('Refresh failed.')
result_id = poll_job(s, redash_url, response.json()['job'])
if result_id:
response = s.get('{}/api/queries/{}/results/{}.json'.format(redash_url, query_id, result_id))
if response.status_code != 200:
raise Exception('Failed getting results.')
else:
raise Exception('Query execution failed.')
return response.json()['query_result']['data']['rows']
if __name__ == '__main__':
params = {'param': 1243}
query_id = 1234
# Need to use a *user API key* here (and not a query API key).
api_key = '...'
pprint(get_fresh_query_result('https://app.redash.io/acme', query_id, api_key, params))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment