def maybe_sync_data_from_fitbit(): r = db(db.fitbit_user_t.user_email == auth.user.email).select(db.fitbit_user_t.ALL) if len(r) == 0: return False else: if time.time() > r[0].expires_at: oauth = OAuth2Session(client_id) token = oauth.refresh_token( refresh_token_url, refresh_token=r[0].refresh_token, auth=requests.auth.HTTPBasicAuth(client_id, client_secret) ) r = db(db.fitbit_user_t.user_email == auth.user.email).update(access_token = token["access_token"], refresh_token = token["refresh_token"], expires_at = token["expires_at"]) r = db(db.fitbit_user_t.user_email == auth.user.email).select(db.fitbit_user_t.ALL) client = Fitbit(client_id, client_secret, access_token=r[0].access_token, refresh_token=r[0].refresh_token) user = client.user_profile_get() act = client.activity_stats() steps = client.time_series(resource="activities/steps", period="7d") wt_goal = client.body_weight_goal() day = time.gmtime().tm_wday day_list = [0, 1, 2, 3, 4, 5, 6] new_day_list = day_list[day+1:] + day_list[:day+1] row_dict = {} row_dict["user_email"] = auth.user.email week_val = 0 for idx, day in enumerate(new_day_list): step_val = int(steps['activities-steps'][idx]['value']) row_dict["d" + str(day)] = step_val week_val = week_val + step_val row_dict["week_total"] = week_val row_dict["lifetime"] = act["lifetime"]["total"]["steps"] row_dict["last_updated_day"] = day u = db.user_t(db.user_t.user_email == auth.user.email).update(weight=user["user"]["weight"], weight_target=wt_goal["goal"]["weight"]) s = db.steps_t.update_or_insert((db.steps_t.user_email == auth.user.email), **row_dict) return True