From: Sage Weil Date: Thu, 20 Jan 2022 18:14:06 +0000 (-0500) Subject: pybind/mgr/mgr_util: fix to_pretty_timedelta X-Git-Tag: v18.0.0~1501^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=538aa10df1e8f83b99019b27038c30fa3d455a5a;p=ceph.git pybind/mgr/mgr_util: fix to_pretty_timedelta - total_seconds, not seconds - int, not float Added unit tests. Fixes: https://tracker.ceph.com/issues/53953 Signed-off-by: Sage Weil --- diff --git a/src/pybind/mgr/mgr_util.py b/src/pybind/mgr/mgr_util.py index d865d31092a..949209e992a 100644 --- a/src/pybind/mgr/mgr_util.py +++ b/src/pybind/mgr/mgr_util.py @@ -768,18 +768,18 @@ def _pairwise(iterable: Iterable[T]) -> Generator[Tuple[Optional[T], T], None, N def to_pretty_timedelta(n: datetime.timedelta) -> str: if n < datetime.timedelta(seconds=120): - return str(n.seconds) + 's' + return str(int(n.total_seconds())) + 's' if n < datetime.timedelta(minutes=120): - return str(n.seconds // 60) + 'm' + return str(int(n.total_seconds()) // 60) + 'm' if n < datetime.timedelta(hours=48): - return str(n.seconds // 3600) + 'h' + return str(int(n.total_seconds()) // 3600) + 'h' if n < datetime.timedelta(days=14): - return str(n.days) + 'd' + return str(int(n.total_seconds()) // (3600*24)) + 'd' if n < datetime.timedelta(days=7*12): - return str(n.days // 7) + 'w' + return str(int(n.total_seconds()) // (3600*24*7)) + 'w' if n < datetime.timedelta(days=365*2): - return str(n.days // 30) + 'M' - return str(n.days // 365) + 'y' + return str(int(n.total_seconds()) // (3600*24*30)) + 'M' + return str(int(n.total_seconds()) // (3600*24*365)) + 'y' def profile_method(skip_attribute: bool = False) -> Callable[[Callable[..., T]], Callable[..., T]]: diff --git a/src/pybind/mgr/tests/test_mgr_util.py b/src/pybind/mgr/tests/test_mgr_util.py new file mode 100644 index 00000000000..fb7732d5cc8 --- /dev/null +++ b/src/pybind/mgr/tests/test_mgr_util.py @@ -0,0 +1,19 @@ +import datetime +import mgr_util + +import pytest + + +@pytest.mark.parametrize( + "delta, out", + [ + (datetime.timedelta(minutes=90), '90m'), + (datetime.timedelta(minutes=190), '3h'), + (datetime.timedelta(days=3), '3d'), + (datetime.timedelta(hours=3), '3h'), + (datetime.timedelta(days=365 * 3.1), '3y'), + (datetime.timedelta(minutes=90), '90m'), + ] +) +def test_pretty_timedelta(delta: datetime.timedelta, out: str): + assert mgr_util.to_pretty_timedelta(delta) == out