コード例 #1
0
ファイル: api.py プロジェクト: bkyryliuk/caravel
 def query(self):
     """
     Takes a query_obj constructed in the client and returns payload data response
     for the given query_obj.
     """
     query_context = QueryContext(**json.loads(request.form.get('query_context')))
     security_manager.assert_datasource_permission(query_context.datasource, g.user)
     payload_json = query_context.get_data()
     return data_payload_response(payload_json)
コード例 #2
0
 def query(self):
     """
     Takes a query_obj constructed in the client and returns payload data response
     for the given query_obj.
     """
     query_context = QueryContext(
         **json.loads(request.form.get('query_context')))
     security_manager.assert_datasource_permission(query_context.datasource,
                                                   g.user)
     payload_json = query_context.get_data()
     return data_payload_response(payload_json)
コード例 #3
0
def _get_full(
    query_context: QueryContext,
    query_obj: QueryObject,
    force_cached: Optional[bool] = False,
) -> Dict[str, Any]:
    datasource = _get_datasource(query_context, query_obj)
    result_type = query_obj.result_type or query_context.result_type
    payload = query_context.get_df_payload(query_obj, force_cached=force_cached)
    applied_template_filters = payload.get("applied_template_filters", [])
    df = payload["df"]
    status = payload["status"]
    if status != QueryStatus.FAILED:
        payload["colnames"] = list(df.columns)
        payload["indexnames"] = list(df.index)
        payload["coltypes"] = extract_dataframe_dtypes(df, datasource)
        payload["data"] = query_context.get_data(df)
        payload["result_format"] = query_context.result_format
    del payload["df"]

    filters = query_obj.filter
    filter_columns = cast(List[str], [flt.get("col") for flt in filters])
    columns = set(datasource.column_names)
    applied_time_columns, rejected_time_columns = get_time_filter_status(
        datasource, query_obj.applied_time_extras
    )
    payload["applied_filters"] = [
        {"column": get_column_name(col)}
        for col in filter_columns
        if is_adhoc_column(col) or col in columns or col in applied_template_filters
    ] + applied_time_columns
    payload["rejected_filters"] = [
        {"reason": ExtraFiltersReasonType.COL_NOT_IN_DATASOURCE, "column": col}
        for col in filter_columns
        if not is_adhoc_column(col)
        and col not in columns
        and col not in applied_template_filters
    ] + rejected_time_columns

    if result_type == ChartDataResultType.RESULTS and status != QueryStatus.FAILED:
        return {
            "data": payload.get("data"),
            "colnames": payload.get("colnames"),
            "coltypes": payload.get("coltypes"),
        }
    return payload