in redash/query_runner/google_analytics.py [0:0]
def parse_ga_response(response):
columns = []
for h in response["columnHeaders"]:
if h["name"] in ("ga:date", "mcf:conversionDate"):
h["dataType"] = "DATE"
elif h["name"] == "ga:dateHour":
h["dataType"] = "DATETIME"
columns.append(
{
"name": h["name"],
"friendly_name": h["name"].split(":", 1)[1],
"type": types_conv.get(h["dataType"], "string"),
}
)
rows = []
for r in response.get("rows", []):
d = {}
for c, value in enumerate(r):
column_name = response["columnHeaders"][c]["name"]
column_type = [col for col in columns if col["name"] == column_name][0][
"type"
]
# mcf results come a bit different than ga results:
if isinstance(value, dict):
if "primitiveValue" in value:
value = value["primitiveValue"]
elif "conversionPathValue" in value:
steps = []
for step in value["conversionPathValue"]:
steps.append(
"{}:{}".format(step["interactionType"], step["nodeValue"])
)
value = ", ".join(steps)
else:
raise Exception("Results format not supported")
if column_type == TYPE_DATE:
value = datetime.strptime(value, "%Y%m%d")
elif column_type == TYPE_DATETIME:
if len(value) == 10:
value = datetime.strptime(value, "%Y%m%d%H")
elif len(value) == 12:
value = datetime.strptime(value, "%Y%m%d%H%M")
else:
raise Exception(
"Unknown date/time format in results: '{}'".format(value)
)
d[column_name] = value
rows.append(d)
return {"columns": columns, "rows": rows}