Add matched training signals, daily recovery and performance analysis
This commit is contained in:
+13
-2
@@ -12,7 +12,12 @@ def expand(history, q, catalog):
|
||||
(spec["name"], expression_tree(spec["expression"], catalog)[0]) for spec in q["derived"]
|
||||
]
|
||||
for activity in history:
|
||||
for index, unit in enumerate((activity.analysis_summary or {}).get(q["source"], [])):
|
||||
source = q["source"]
|
||||
units = (activity.analysis_summary or {}).get(source, [])
|
||||
if source == "efforts":
|
||||
units = [{"distance": e["distance"], "duration": e["seconds"],
|
||||
"effort_time": e["seconds"]} for e in activity.best_efforts or []]
|
||||
for index, unit in enumerate(units):
|
||||
if (
|
||||
not isinstance(unit, dict)
|
||||
or not valid(unit.get("distance"))
|
||||
@@ -23,6 +28,8 @@ def expand(history, q, catalog):
|
||||
continue
|
||||
row = copy(activity)
|
||||
row.activity_id = activity.id
|
||||
row.parent_title = activity.title
|
||||
row.recording = unit
|
||||
row.id = activity.id * 1000000 + index
|
||||
row.title = (
|
||||
f"{activity.title} · {'lap' if q['source'] == 'laps' else 'segment'} {index + 1}"
|
||||
@@ -42,12 +49,16 @@ def expand(history, q, catalog):
|
||||
pace=row.duration_s * 1000 / row.distance_m,
|
||||
speed=row.distance_m / row.duration_s * 3.6,
|
||||
heart_rate=row.avg_hr,
|
||||
matched_minutes=row.duration_s / 60,
|
||||
matched_windows=1,
|
||||
elevation=row.elevation_m,
|
||||
elevation_per_km=row.elevation_m / (row.distance_m / 1000)
|
||||
if valid(row.elevation_m)
|
||||
else None,
|
||||
)
|
||||
for key in ("gap", "pace_variability", "heart_rate_drift", "sensor_coverage"):
|
||||
for key in catalog:
|
||||
if key in {"distance", "duration", "pace", "count", "speed", "heart_rate", "elevation", "elevation_per_km", "matched_minutes", "matched_windows"}:
|
||||
continue
|
||||
row.values[key] = unit.get(key)
|
||||
row.analysis_summary = row.values
|
||||
row.previous = None
|
||||
|
||||
Reference in New Issue
Block a user