Ejemplo n.º 1
0
def test_compare_calories_across_week():
    activity = Activity(
        config={'database': 'fitbit'}
    )

    rows = activity.compare_calories_across_week('2020-10-11', 6)
    assert rows == (19985, 19196)
Ejemplo n.º 2
0
def check_if_steps_need_update(base_date='2021-01-01'):
    activity_api = Activity(config={'base_date': base_date})
    response = activity_api.query_daily_activity_summary()
    steps_total = response['summary']['steps']
    #  get steps in db

    database = Database('fitbit', 'activity')
    connection = database.engine.connect()
    response = connection.execute(
        "select * from activity.steps_intraday where date = '{}'".format(
            base_date)).fetchall()
    steps_intraday = 0
    for result in response:
        steps_intraday += result[2]

    if steps_total != steps_intraday:
        match = False
        msg = '\nSteps total does not equal steps intraday.\nNeed to rerun get_steps for {}'.format(
            base_date)
        comparison = '\nSteps total: {}\nSteps intraday: {}'.format(
            steps_total, steps_intraday)
        print(msg)
        print(comparison)
    else:
        match = True
        msg = '\nSteps total matches steps intraday.'
        print(msg)

    return match
Ejemplo n.º 3
0
def test_query_calorie_summary():
    activity = Activity(
        config={'database': 'fitbit_test',
                'base_date': '2020-10-01'}
    )
    response = activity.query_calorie_summary()
    assert response == EXPECTED_CALORIE_RESPONSE
Ejemplo n.º 4
0
def test_get_lifetime_stats():
    activity = Activity(
        config={'database': 'fitbit_test'}
    )
    lifetime_stats, best_stats = activity.get_lifetime_stats()

    assert list(lifetime_stats.keys()) == ['distance', 'floors', 'steps']
    assert list(best_stats.keys()) == ['distance', 'floors', 'steps']
Ejemplo n.º 5
0
def test_parse_daily_activity_summary():
    activity = Activity(
        config={'database': 'fitbit_test',
                'base_date': '2020-12-24'}
    )
    rows = activity.parse_activity_log(EXPECTED_DAILY_ACTIVITY_RESPONSE)

    assert rows == EXPECTED_DAILY_ACTIVITY_ROWS
Ejemplo n.º 6
0
def test_query_daily_activity_summary():
    activity = Activity(
        config={'database': 'fitbit_test',
                'base_date': '2020-12-24'}
    )

    response = activity.query_daily_activity_summary()
    assert response == EXPECTED_DAILY_ACTIVITY_RESPONSE
Ejemplo n.º 7
0
def test_insert_steps_intraday():
    activity = Activity(
        config={'database': 'fitbit_test',
                'table': 'calories',
                'sum_column': 'total',
                'base_date': '2020-12-26'
                }
    )
    database = Database('fitbit_test', 'activity')
    response = activity.insert_steps_intraday(database)
Ejemplo n.º 8
0
def test_insert_intraday_steps():
    database = Database('fitbit_test', 'activity')
    connection = database.engine.connect()

    connection.execute(steps_intraday_table.delete())
    activity = Activity(
        config={'database': 'fitbit_test',
                'base_date': '2020-10-01'}
    )
    rows = activity.insert_log_data(database, EXPECTED_DAILY_ACTIVITY_ROWS)
    assert len(rows) == 5
Ejemplo n.º 9
0
def batch_load_steps(start_date='2020-01-01', end_date='2021-01-01'):
    start_date = date(2021, 1, 1)  # start date
    database = Database('fitbit', 'activity')
    # end_date = set_batch_end_date(database, start_date)
    end_date = date(2021, 1, 6)  # end date
    delta = end_date - start_date  # as timedelta
    activity_api = Activity(config={'base_date': ''})

    for i in tqdm(list(reversed(range(delta.days + 1)))):
        day = start_date + timedelta(days=i)
        activity_api.config['base_date'] = day
        response = activity_api.insert_steps_intraday(database)
        print(response)
Ejemplo n.º 10
0
def test_backfill_calories():
    database = Database('fitbit_test', 'activity')
    connection = database.engine.connect()
    activity = Activity(
        config={'database': 'fitbit_test'}
    )

    connection.execute(calories_table.delete())
    rows = [i for i in connection.execute(calories_table.select())]
    assert len(rows) == 0

    activity.backfill_calories(3)
    assert len([i for i in connection.execute(calories_table.select())]) == 3
Ejemplo n.º 11
0
def test_insert_calorie_data():
    database = Database('fitbit_test', 'activity')
    connection = database.engine.connect()

    connection.execute(calories_table.delete())
    activity = Activity(
        config={'database': 'fitbit_test',
                'base_date': '2020-10-01'}
    )
    raw_data = activity.query_calorie_summary()
    row = activity.parse_calorie_summary('2020-10-01', raw_data)
    inserted_row = activity.insert_calorie_data(database, row)

    assert inserted_row == Calories(date='2020-10-01', total=3116, calories_bmr=1838, activity_calories=1467)
Ejemplo n.º 12
0
def test_plot_rolling_average():
    activity = Activity(
        config={'database': 'fitbit',
                'table': 'calories',
                'sum_column': 'total',
                'base_date': '2020-10-01',
                'end_date': '2020-10-29'}
    )
    plot_rolling_average(activity.config)
Ejemplo n.º 13
0
def get_steps_for_day():
    steps_last_time = 0
    steps_this_time = 0

    sdate = date(2020, 1, 1)  # start date
    edate = date(2021, 1, 2)  # end date

    delta = edate - sdate  # as timedelta
    activity_api = Activity(config={'base_date': ''})

    for i in range(delta.days + 1):
        day = sdate + timedelta(days=i)
        activity_api.config['base_date'] = day
        response = activity_api.insert_steps_intraday()

        steps_this_time = response['summary']['steps']
        dt = datetime.now()

        with open('steps.csv', 'a') as f:
            f.write(f"{steps_this_time},{dt}\n")

        # Show notification whenever needed
        toaster.show_toast(
            "Fitnick Alert",
            f"You have taken {steps_this_time} steps so far today! Keep it up!",
            threaded=False,
            icon_path=None,
            duration=3  # 3 seconds
        )

        print(str(steps_this_time), str(steps_last_time))

        toaster.show_toast(
            "Fitnick Alert",
            f"You took {steps_this_time - steps_last_time} steps since my last alert!",
            threaded=False,
            icon_path=None,
            duration=5)

        steps_last_time = steps_this_time
        for _ in tqdm(range(0, 600)):
            sleep(1)

    return int(steps_this_time)
Ejemplo n.º 14
0
def get_steps_today(request):
    goal = 12000  # set automatically, eventually..
    today = datetime.today().strftime('%Y-%m-%d')
    activity_api = Activity(config={'base_date': today})
    response = activity_api.query_daily_activity_summary()
    steps_this_time = response['summary']['steps']
    dt = datetime.now()
    percent = (steps_this_time / 12000) * 100
    # TODO:
    # show a table of last x days of steps
    index_context = {
        "base_date": activity_api.config['base_date'],
        "today": True,
        "steps": steps_this_time,
        "time": str(dt),
        "goal": goal,
        "percent": percent,
        "percent_str": str(percent)[:6]
    }

    return render(request, 'index.html', index_context)
Ejemplo n.º 15
0
def get_activity_today():
    """
    Endpoint for getting activity data for a given date from the FitBit API.
    :return:
    """

    activity = Activity(config={'database': 'fitbit'})
    form = DateForm(request.form)

    if request.method == 'POST':
        search_date = f"{request.form['year_options']}-{request.form['month_options']}-{request.form['day_options']}"
        row = activity.get_calories_for_day(day=search_date)
        value = 'Updated activity data for {}.'.format(search_date)
    else:
        row, value = {}, ''

    return render_template(template_name_or_list='activity.html',
                           form=form,
                           row=row,
                           value=value,
                           month_options=month_options,
                           day_options=day_options,
                           year_options=year_options)