Skip to content

Commit

Permalink
GH-17: Load calories from Strava checkout, fix km there
Browse files Browse the repository at this point in the history
  • Loading branch information
martin-ueding committed Feb 3, 2024
1 parent 1a18b5e commit 038e49d
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 36 deletions.
4 changes: 2 additions & 2 deletions geo_activity_playground/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
from geo_activity_playground.explorer.tile_visits import compute_tile_visits
from geo_activity_playground.explorer.video import explorer_video_main
from geo_activity_playground.importers.directory import import_from_directory
from geo_activity_playground.importers.strava_api import download_missing_calories
from geo_activity_playground.importers.strava_api import import_from_strava_api
from geo_activity_playground.webui.app import webui_main

Expand Down Expand Up @@ -113,11 +112,12 @@ def make_activity_repository(
import_from_strava_checkout(repository)
if "strava" in config and not skip_strava:
import_from_strava_api(repository)
download_missing_calories(repository)

embellish_time_series(repository)
compute_tile_visits(repository)
compute_tile_evolution()
print(repository.meta)

return repository


Expand Down
2 changes: 1 addition & 1 deletion geo_activity_playground/core/activities.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ def last_activity_date(self) -> Optional[datetime.datetime]:

@property
def activity_ids(self) -> set[int]:
return set(self.meta["id"])
return set(self.meta.index)

def iter_activities(self, new_to_old=True) -> Iterator[ActivityMeta]:
direction = -1 if new_to_old else 1
Expand Down
29 changes: 1 addition & 28 deletions geo_activity_playground/importers/strava_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ def try_import_strava(repository: ActivityRepository) -> None:
time_series["time"] = new_time
time_series.to_parquet(time_series_path)

detailed_activity = get_detailed_activity(activity.id)
detailed_activity = get_detailed_activity(activity.id, client)

if len(time_series) > 0 and "latitude" in time_series.columns:
repository.add_activity(
Expand Down Expand Up @@ -209,30 +209,3 @@ def get_detailed_activity(activity_id: int, client: Client):
pickle.dump(detailed_activity, f)

return detailed_activity


def download_missing_calories(repository: ActivityRepository) -> None:
client = Client(access_token=get_current_access_token())

latest_timestamp_path = cache_dir() / "strava-detailed-activity-last.json"
if latest_timestamp_path.exists():
with open(latest_timestamp_path) as f:
latest_timestamp = json.load(f)
else:
latest_timestamp = "2000-01-01T00:00:00Z"

try:
for activity in tqdm(
client.get_activities(after=latest_timestamp),
desc="Downloading calories from Strava",
):
if repository.has_activity(activity.id):
calories = get_detailed_activity(activity.id, client).calories
repository.meta.loc[activity.id, "calories"] = calories
latest_timestamp = activity.start.isoformat().replace("+00:00", "Z")
except RateLimitExceeded:
pass
finally:
repository.save()
with open(latest_timestamp_path, "w") as f:
json.dump(latest_timestamp, f)
15 changes: 10 additions & 5 deletions geo_activity_playground/importers/strava_checkout.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def import_from_strava_checkout(repository: ActivityRepository) -> None:
table_activity_meta = {
"calories": row["Calories"],
"commute": row["Commute"] == "true",
"distance": row["Distance"],
"distance_km": row["Distance"],
"elapsed_time": datetime.timedelta(seconds=int(row["Elapsed Time"])),
"equipment": str(
nan_as_none(row["Activity Gear"])
Expand All @@ -59,7 +59,9 @@ def import_from_strava_checkout(repository: ActivityRepository) -> None:
}

time_series_path = activity_stream_dir / f"{activity_id}.parquet"
if not time_series_path.exists():
if time_series_path.exists():
time_series = pd.read_parquet(time_series_path)
else:
try:
file_activity_meta, time_series = read_activity(activity_file)
except ActivityParseError as e:
Expand All @@ -72,10 +74,13 @@ def import_from_strava_checkout(repository: ActivityRepository) -> None:
)
raise

if not len(time_series):
continue
if not len(time_series):
continue

if "latitude" not in time_series.columns:
continue

time_series.to_parquet(time_series_path)
time_series.to_parquet(time_series_path)

work_tracker.mark_done(activity_id)
repository.add_activity(table_activity_meta)
Expand Down

0 comments on commit 038e49d

Please sign in to comment.