Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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)
Esempio n. 6
0
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)