Trip: fix total_distance undercount

Previously Trip.total_distance returned None if any travel leg lacked a
distance, which led to undercounted trip stats (less than flight + train
totals).

Now it accumulates only distances that are present and ignores
missing/falsy values.  The method returns a float and yields 0.0 when no
distances are available.  Docstring updated accordingly.

Fixes #185
This commit is contained in:
Edward Betts 2025-08-30 20:46:03 +01:00
parent 4ee2492e5b
commit c6d39ace60

View file

@ -202,13 +202,18 @@ class Trip:
"""Countries flags for trip."""
return "".join(c.flag for c in self.countries)
def total_distance(self) -> float | None:
"""Total distance for trip."""
return (
sum(t["distance"] for t in self.travel)
if all(t.get("distance") for t in self.travel)
else None
)
def total_distance(self) -> float:
"""Total distance for trip.
Sums distances for travel items where a distance value is present.
Ignores legs with missing or falsy distances rather than returning None.
"""
total = 0.0
for t in self.travel:
distance = t.get("distance")
if distance:
total += distance
return total
def total_co2_kg(self) -> float | None:
"""Total CO₂ for trip."""