mirror of
https://github.com/getredash/redash.git
synced 2025-12-25 01:03:20 -05:00
Fix: missing param fails for object values (like date range) (#3218)
* fix: range params not recognized * Handle parameters with unicode * Remove debug prints * DRY up missing_params
This commit is contained in:
committed by
Arik Fraimovich
parent
26965b4948
commit
9e156c1c30
@@ -11,7 +11,7 @@ from redash import models, utils
|
||||
from redash.handlers import routes
|
||||
from redash.handlers.base import (get_object_or_404, org_scoped_rule,
|
||||
record_event)
|
||||
from redash.handlers.query_results import collect_query_parameters
|
||||
from redash.utils import find_missing_params
|
||||
from redash.handlers.static import render_index
|
||||
from redash.utils import gen_query_hash, mustache_render
|
||||
|
||||
@@ -23,13 +23,11 @@ from redash.utils import gen_query_hash, mustache_render
|
||||
# on the client side. Please don't reuse in other API handlers.
|
||||
#
|
||||
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())
|
||||
missing_params = find_missing_params(query_text, parameter_values)
|
||||
if missing_params:
|
||||
raise Exception('Missing parameter value for: {}'.format(", ".join(missing_params)))
|
||||
|
||||
if query_parameters:
|
||||
query_text = mustache_render(query_text, parameter_values)
|
||||
query_text = mustache_render(query_text, parameter_values)
|
||||
|
||||
if max_age <= 0:
|
||||
query_result = None
|
||||
|
||||
@@ -10,9 +10,7 @@ from redash.permissions import (has_access, not_view_only, require_access,
|
||||
require_permission, view_only)
|
||||
from redash.tasks import QueryTask, record_event
|
||||
from redash.tasks.queries import enqueue_query
|
||||
from redash.utils import (collect_parameters_from_request,
|
||||
collect_query_parameters, gen_query_hash, json_dumps,
|
||||
utcnow)
|
||||
from redash.utils import (collect_parameters_from_request, find_missing_params, gen_query_hash, json_dumps, utcnow)
|
||||
from redash.utils.sql_query import SQLInjectionError, SQLQuery
|
||||
|
||||
|
||||
@@ -50,8 +48,7 @@ def apply_parameters(template, parameters, data_source):
|
||||
# on the client side. Please don't reuse in other API handlers.
|
||||
#
|
||||
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())
|
||||
missing_params = find_missing_params(query_text, parameter_values)
|
||||
if missing_params:
|
||||
raise Exception('Missing parameter value for: {}'.format(", ".join(missing_params)))
|
||||
|
||||
@@ -91,11 +88,11 @@ def run_query_sync(data_source, parameter_values, query_text, max_age=0):
|
||||
abort(503, message="Unable to get result from the database.")
|
||||
return None
|
||||
|
||||
|
||||
def run_query(data_source, parameter_values, query_text, query_id, max_age=0):
|
||||
query_parameters = set(collect_query_parameters(query_text))
|
||||
missing_params = set(query_parameters) - set(parameter_values.keys())
|
||||
missing_params = find_missing_params(query_text, parameter_values)
|
||||
if missing_params:
|
||||
return error_response('Missing parameter value for: {}'.format(", ".join(missing_params)))
|
||||
return error_response(u'Missing parameter value for: {}'.format(u", ".join(missing_params)))
|
||||
|
||||
if data_source.paused:
|
||||
if data_source.pause_reason:
|
||||
|
||||
@@ -171,6 +171,23 @@ def collect_query_parameters(query):
|
||||
return keys
|
||||
|
||||
|
||||
def parameter_names(parameter_values):
|
||||
names = []
|
||||
for key, value in parameter_values.iteritems():
|
||||
if isinstance(value, dict):
|
||||
for inner_key in value.keys():
|
||||
names.append(u'{}.{}'.format(key, inner_key))
|
||||
else:
|
||||
names.append(key)
|
||||
|
||||
return names
|
||||
|
||||
|
||||
def find_missing_params(query_text, parameter_values):
|
||||
query_parameters = set(collect_query_parameters(query_text))
|
||||
return set(query_parameters) - set(parameter_names(parameter_values))
|
||||
|
||||
|
||||
def collect_parameters_from_request(args):
|
||||
parameters = {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user