Fix edge case in format_duration
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Fixes #65 ```python def test_specific_precise_if_unncessary(self): delta = timedelta(hours=2, minutes=40) result = format_duration(delta, "%02.0H:%02.0m") self.assertEqual(result, "02:40") ``` This test fails by returning "03:40" instead. The problem is in the way `format_duration` handles fractional hours. To fix it, we need to switch between using hours and fractional hours depending on if minutes are present in the formatted string.
This commit is contained in:
@ -44,7 +44,7 @@ def format_duration(
|
||||
# timestamps where end is before start
|
||||
if seconds_total < 0:
|
||||
seconds_total = 0
|
||||
days = hours = minutes = seconds = 0
|
||||
days = hours = hours_float = minutes = seconds = 0
|
||||
remainder = seconds = seconds_total
|
||||
if "%d" in format_string:
|
||||
days, remainder = divmod(seconds_total, day_seconds)
|
||||
@ -55,7 +55,7 @@ def format_duration(
|
||||
minutes, seconds = divmod(remainder, minute_seconds)
|
||||
literals = {
|
||||
"d": str(days),
|
||||
"H": str(hours),
|
||||
"H": str(hours) if "m" not in format_string else str(hours_float),
|
||||
"m": str(minutes),
|
||||
"s": str(seconds),
|
||||
"r": str(seconds_total),
|
||||
|
Reference in New Issue
Block a user