def aggr_plot(): params = parseReq(request) day_start = params.get('day_start') day_end = params.get('day_end') key = params.get('key') aggregate = params.get('aggregate') if key and aggregate: if day_start: day_start = datetime.datetime.fromisoformat(day_start) else: day_start = datetime.datetime(2020, 3, 1) if day_end: day_end = datetime.datetime.fromisoformat(day_end) else: day_end = datetime.datetime.today() entries = analysis.getAllEntriesOfDayRange(day_start, day_end) try: results = analysis.aggregateMultiple(entries, key, aggregate) except ValueError as e: print(e) abort(400) results = analysis.padMissingDays(results) if aggregate == "all" and not type(key) is list: # make a box plot graph = pygal.Box(x_label_rotation=35, truncate_label=-1) graph.title = "distribution of " + listToVerboseStr( key) + " over time." graph.x_labels = [x["timestamp"] for x in results] for day in results: # if not day["values"][key+"_"+aggregate][0]: # graph.add(day["timestamp"],None, allow_interruptions=True) # else: graph.add(day["timestamp"], day["values"][key + "_" + aggregate], allow_interruptions=True) elif aggregate == "all" or "all" in aggregate: abort(400) else: graph = pygal.Line(x_label_rotation=35, truncate_label=-1) graph.title = listToVerboseStr( aggregate) + " of " + listToVerboseStr(key) + " over time." graph.x_labels = [x["timestamp"] for x in results] if not type(key) is list: key = [key] if not type(aggregate) is list: aggregate = [aggregate] * len(key) for k, a in zip(key, aggregate): data = [x["values"][k + "_" + a] for x in results] graph.add(k + " " + a, data, allow_interruptions=True) graph_data = graph.render_response() return graph_data else: abort(400)
def rawdata(): params = parseReq(request) day = params.get('day') day_start = params.get('day_start') day_end = params.get('day_end') if day: day = datetime.datetime.fromisoformat(day) return jsonify(analysis.getAllEntriesOfDay(day)) elif day_start and day_end: day_start = datetime.datetime.fromisoformat(day_start) day_end = datetime.datetime.fromisoformat(day_end) return jsonify(analysis.getAllEntriesOfDayRange(day_start, day_end)) else: abort(400)
def user_plot(): params = parseReq(request) user_id = params.get("id") day_start = params.get('day_start') day_end = params.get('day_end') key = params.get('key') if user_id and key: if day_start: day_start = datetime.datetime.fromisoformat(day_start) else: day_start = datetime.datetime(2020, 3, 1) if day_end: day_end = datetime.datetime.fromisoformat(day_end) else: day_end = datetime.datetime.today() entries = analysis.getAllEntriesOfDayRange(day_start, day_end, user_id) try: results = analysis.aggregateMultiple(entries, key, "all") except ValueError as e: print(e) abort(400) results = analysis.padMissingDays(results) graph = pygal.Line(x_label_rotation=35, truncate_label=-1) graph.title = listToVerboseStr(key) + " of yourself over time." graph.x_labels = [x["timestamp"] for x in results] if not type(key) is list: key = [key] aggregate = ["all"] * len(key) for k, a in zip(key, aggregate): data = [ x["values"][k + "_" + a][0] for x in results if len(x["values"][k + "_" + a]) > 0 ] graph.add(k + " " + a, data, allow_interruptions=True) graph_data = graph.render_response() return graph_data else: abort(400)
def num_submissions(): params = parseReq(request) day = params.get('day') day_start = params.get('day_start') day_end = params.get('day_end') if day: day = datetime.datetime.fromisoformat(day) entries = analysis.getAllEntriesOfDay(day) elif day_start and day_end: day_start = datetime.datetime.fromisoformat(day_start) day_end = datetime.datetime.fromisoformat(day_end) entries = analysis.getAllEntriesOfDayRange(day_start, day_end) else: abort(400) num_entries = [{ "numberOfEntries": len(day), "date": datetime.datetime.fromisoformat( day[0]["timestamp"]).date().isoformat() } for day in entries] return jsonify(num_entries)
def user_timeline(): params = parseReq(request) user_id = params.get("id") day_start = params.get('day_start') day_end = params.get('day_end') key = params.get('key') if user_id and key: if day_start: day_start = datetime.datetime.fromisoformat(day_start) else: day_start = datetime.datetime(2020, 3, 1) if day_end: day_end = datetime.datetime.fromisoformat(day_end) else: day_end = datetime.datetime.today() entries = analysis.getAllEntriesOfDayRange(day_start, day_end, user_id) try: results = analysis.aggregateMultiple(entries, key, "all") return jsonify(results) except ValueError as e: print(e) abort(400) else: abort(400)
def aggr(): params = parseReq(request) day_start = params.get('day_start') day_end = params.get('day_end') key = params.get('key') aggregate = params.get('aggregate') if key and aggregate: if day_start: day_start = datetime.datetime.fromisoformat(day_start) else: day_start = datetime.datetime(2020, 3, 1) if day_end: day_end = datetime.datetime.fromisoformat(day_end) else: day_end = datetime.datetime.today() entries = analysis.getAllEntriesOfDayRange(day_start, day_end) try: results = analysis.aggregateMultiple(entries, key, aggregate) return jsonify(results) except ValueError as e: print(e) abort(400) else: abort(400)