]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind/mgr/mgr_util: fix to_pretty_timedelta
authorSage Weil <sage@newdream.net>
Thu, 20 Jan 2022 18:14:06 +0000 (13:14 -0500)
committerSage Weil <sage@newdream.net>
Thu, 20 Jan 2022 18:16:55 +0000 (13:16 -0500)
- total_seconds, not seconds
- int, not float

Added unit tests.

Fixes: https://tracker.ceph.com/issues/53953
Signed-off-by: Sage Weil <sage@newdream.net>
src/pybind/mgr/mgr_util.py
src/pybind/mgr/tests/test_mgr_util.py [new file with mode: 0644]

index d865d31092aa9cc410b7231763c4e63ffbcd52d3..949209e992ab12bac4731b042478d82a87c5359f 100644 (file)
@@ -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 (file)
index 0000000..fb7732d
--- /dev/null
@@ -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