trying to get sub label showed properly

This commit is contained in:
Davide Scaini
2026-03-30 20:09:01 +02:00
parent c58bc8f7d5
commit 877472e620
11 changed files with 157 additions and 24 deletions
+57 -4
View File
@@ -47,10 +47,13 @@ _MAPPING: dict[str, str] = {
"skiing": "skiing",
"cross_country_skiing": "skiing",
"nordic_skiing": "skiing",
"nordic_ski": "skiing",
"downhill_skiing": "skiing",
"alpine_skiing": "skiing",
"alpine_ski": "skiing",
"skate_skiing": "skiing",
"backcountry_skiing": "skiing",
"backcountry_ski": "skiing",
# swimming
"swimming": "swimming",
"swim": "swimming",
@@ -58,13 +61,63 @@ _MAPPING: dict[str, str] = {
"lap_swimming": "swimming",
}
_SUB_SPORT_MAPPING: dict[str, str] = {
# cycling
"road_biking": "road",
"road_cycling": "road",
"mountain_biking": "mountain",
"mountain_bike_ride": "mountain",
"gravel_cycling": "gravel",
"gravel_ride": "gravel",
"cyclocross": "gravel",
"indoor_cycling": "indoor",
"indoor_ride": "indoor",
"virtual_ride": "indoor",
# running
"trail_running": "trail",
"trail_run": "trail",
"treadmill_running": "indoor",
"treadmill": "indoor",
"indoor_run": "indoor",
"virtual_run": "indoor",
"track_run": "track",
# skiing
"cross_country_skiing": "nordic",
"nordic_skiing": "nordic",
"nordic_ski": "nordic",
"skate_skiing": "nordic",
"backcountry_skiing": "nordic",
"backcountry_ski": "nordic",
"downhill_skiing": "alpine",
"alpine_skiing": "alpine",
"alpine_ski": "alpine",
# swimming
"open_water_swimming": "open_water",
"lap_swimming": "pool",
}
BAS_SPORTS = {"cycling", "running", "hiking", "walking", "swimming", "skiing", "other"}
def _normalise_key(raw: object) -> str:
key = str(raw).strip()
# CamelCase → snake_case ("MountainBikeRide" → "mountain_bike_ride")
key = re.sub(r"([A-Z])", r"_\1", key).lower().lstrip("_")
key = key.replace(" ", "_").replace("-", "_")
return re.sub(r"^\d+", "", key)
def normalise_sport(raw: object) -> str:
if raw is None:
return "other"
key = str(raw).lower().strip().replace(" ", "_").replace("-", "_")
# Strip leading date-like prefixes e.g. "20231117outdoor_run" → "outdoor_run"
key = re.sub(r"^\d+", "", key)
return _MAPPING.get(key, "other")
return _MAPPING.get(_normalise_key(raw), "other")
def normalise_sub_sport(raw: object) -> str | None:
"""Infer sub_sport from a raw sport type string (e.g. 'mountain_bike_ride''mountain').
Returns None when no sub_sport is implied (e.g. plain 'ride', 'run').
"""
if raw is None:
return None
return _SUB_SPORT_MAPPING.get(_normalise_key(raw))