|
1 | 1 | import polyline |
2 | 2 | from stravalib.model import SummaryActivity |
3 | | -from typing import Any |
4 | 3 | from shapely.geometry import Polygon |
5 | 4 |
|
6 | 5 | from src.database.models import Activity |
7 | 6 |
|
8 | 7 |
|
9 | | -def process_activity(activity: SummaryActivity) -> dict[str, Any]: |
10 | | - activity_dict = activity.model_dump() |
11 | | - |
12 | | - # process columns |
13 | | - if activity_dict["start_latlng"]: |
14 | | - activity_dict["start_lat"] = activity_dict["start_latlng"][0] |
15 | | - activity_dict["start_lng"] = activity_dict["start_latlng"][1] |
16 | | - del activity_dict["start_latlng"] |
17 | | - |
18 | | - if activity_dict["end_latlng"]: |
19 | | - activity_dict["end_lat"] = activity_dict["end_latlng"][0] |
20 | | - activity_dict["end_lng"] = activity_dict["end_latlng"][1] |
21 | | - del activity_dict["end_latlng"] |
22 | | - |
23 | | - activity_dict["date"] = activity_dict["start_date_local"].date() |
24 | | - activity_dict["time"] = activity_dict["start_date_local"].time() |
25 | | - activity_dict["day_of_week"] = activity_dict["start_date_local"].strftime("%A") |
26 | | - activity_dict["moving_time_minutes"] = activity_dict["moving_time"] / 60 |
27 | | - activity_dict["distance_km"] = activity_dict["distance"] / 1000 |
28 | | - |
29 | | - try: |
30 | | - activity_dict["pace_min_per_km"] = ( |
31 | | - 1.0 * activity_dict["moving_time_minutes"] / activity_dict["distance_km"] |
32 | | - ) |
33 | | - except ZeroDivisionError: |
34 | | - activity_dict["pace_min_per_km"] = None |
35 | | - |
36 | | - decoded = polyline.decode(activity_dict["map"]["summary_polyline"]) |
37 | | - if len(decoded) > 0: |
38 | | - poly = Polygon(decoded) |
39 | | - centroid = poly.centroid |
40 | | - centroid_lat = centroid.x |
41 | | - centroid_lon = centroid.y |
42 | | - area = poly.area |
43 | | - |
44 | | - activity_dict["map_centroid_lat"] = centroid_lat |
45 | | - activity_dict["map_centroid_lon"] = centroid_lon |
46 | | - activity_dict["map_area"] = area |
47 | | - return activity_dict |
48 | | - |
49 | | - |
50 | 8 | def summary_activity_to_activity_model(summary_activity: SummaryActivity) -> Activity: |
51 | 9 | activity_dict = summary_activity.model_dump() |
52 | 10 |
|
|
0 commit comments