123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import datetime
- from flask_appbuilder._compat import as_unicode
- def dict_to_json(xcol, ycols, labels, value_columns): # pragma: no cover
- """
- Converts a list of dicts from datamodel query results
- to google chart json data.
- :param xcol:
- The name of a string column to be used has X axis on chart
- :param ycols:
- A list with the names of series cols, that can be used as numeric
- :param labels:
- A dict with the columns labels.
- :param value_columns:
- A list of dicts with the values to convert
- """
- json_data = dict()
- json_data["cols"] = [
- {"id": xcol, "label": as_unicode(labels[xcol]), "type": "string"}
- ]
- for ycol in ycols:
- json_data["cols"].append(
- {"id": ycol, "label": as_unicode(labels[ycol]), "type": "number"}
- )
- json_data["rows"] = []
- for value in value_columns:
- row = {"c": []}
- if isinstance(value[xcol], datetime.date):
- row["c"].append({"v": (str(value[xcol]))})
- else:
- row["c"].append({"v": (value[xcol])})
- for ycol in ycols:
- if value[ycol]:
- row["c"].append({"v": (value[ycol])})
- else:
- row["c"].append({"v": 0})
- json_data["rows"].append(row)
- return json_data
|