diff --git a/src/humanize/time.py b/src/humanize/time.py index 52828c1..9a60e01 100644 --- a/src/humanize/time.py +++ b/src/humanize/time.py @@ -104,7 +104,8 @@ def naturaldelta( Returns: str (str or `value`): A natural representation of the amount of time elapsed unless `value` is not datetime.timedelta or cannot be - converted to int. In that case, a `value` is returned unchanged. + converted to int (cannot be float due to 'inf' or 'nan'). + In that case, a `value` is returned unchanged. Raises: OverflowError: If `value` is too large to convert to datetime.timedelta. @@ -131,7 +132,8 @@ def naturaldelta( delta = value else: try: - value = int(value) + int(value) # Explicitly don't support string such as "NaN" or "inf" + value = float(value) delta = dt.timedelta(seconds=value) except (ValueError, TypeError): return str(value) diff --git a/tests/test_time.py b/tests/test_time.py index 0396be2..edb3498 100644 --- a/tests/test_time.py +++ b/tests/test_time.py @@ -126,7 +126,7 @@ def test_naturaldelta_nomonths(test_input: dt.timedelta, expected: str) -> None: (dt.timedelta(days=999_999_999), "2,739,726 years"), ], ) -def test_naturaldelta(test_input: int | dt.timedelta, expected: str) -> None: +def test_naturaldelta(test_input: float | dt.timedelta, expected: str) -> None: assert humanize.naturaldelta(test_input) == expected @@ -339,6 +339,7 @@ def test_naturaldelta_minimum_unit_explicit( # Act / Assert assert humanize.naturaldelta(delta, minimum_unit=minimum_unit) == expected + assert humanize.naturaldelta(seconds, minimum_unit=minimum_unit) == expected @freeze_time("2020-02-02")