Skip to content

Commit

Permalink
add support for filters in sqlLab
Browse files Browse the repository at this point in the history
  • Loading branch information
cccs-jc committed May 25, 2021
1 parent 590fe20 commit f1e757a
Showing 1 changed file with 24 additions and 1 deletion.
25 changes: 24 additions & 1 deletion superset/views/utils.py
Expand Up @@ -127,13 +127,16 @@ def loads_request_json(request_json_data: str) -> Dict[Any, Any]:
def get_form_data( # pylint: disable=too-many-locals
slice_id: Optional[int] = None, use_slice_data: bool = False
) -> Tuple[Dict[str, Any], Optional[Slice]]:
form_data = {}
form_data: Dict[Any, Any] = {}
# chart data API requests are JSON
request_json_data = (
request.json["queries"][0]
if request.is_json and "queries" in request.json
else None
)

add_sqllab_custom_filters(form_data)

request_form_data = request.form.get("form_data")
request_args_data = request.args.get("form_data")
if request_json_data:
Expand Down Expand Up @@ -196,6 +199,26 @@ def get_form_data( # pylint: disable=too-many-locals
return form_data, slc


def add_sqllab_custom_filters(form_data: Dict[Any, Any]) -> Any:
"""
SQLLab can include a "filters" attribute in the templateParams.
The filters attribute is a list of filters to include in the
request. Useful for testing templates in SQLLab.
"""
try:
data = json.loads(request.data)
if isinstance(data, dict):
params_str = data.get("templateParams")
if isinstance(params_str, str):
params = json.loads(params_str)
if isinstance(params, dict):
filters = params.get("filters")
if filters:
form_data.update({"filters": filters})
except (TypeError, json.JSONDecodeError):
data = {}


def get_datasource_info(
datasource_id: Optional[int], datasource_type: Optional[str], form_data: FormData
) -> Tuple[int, Optional[str]]:
Expand Down

0 comments on commit f1e757a

Please sign in to comment.