From: Michael V. DePalatis Date: Wed, 5 May 2021 15:53:49 +0000 (-0600) Subject: Optionally accept a timedelta in PeriodicCallback X-Git-Tag: v6.2.0b1~45^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=44ebfc35719774655deb61011f881b7387cde397;p=thirdparty%2Ftornado.git Optionally accept a timedelta in PeriodicCallback --- diff --git a/tornado/ioloop.py b/tornado/ioloop.py index 2cf884450..fff29cefb 100644 --- a/tornado/ioloop.py +++ b/tornado/ioloop.py @@ -864,12 +864,18 @@ class PeriodicCallback(object): """ def __init__( - self, callback: Callable[[], None], callback_time: float, jitter: float = 0 + self, + callback: Callable[[], None], + callback_time: Union[datetime.timedelta, float], + jitter: float = 0, ) -> None: self.callback = callback - if callback_time <= 0: - raise ValueError("Periodic callback must have a positive callback_time") - self.callback_time = callback_time + if isinstance(callback_time, datetime.timedelta): + self.callback_time = callback_time / datetime.timedelta(milliseconds=1) + else: + if callback_time <= 0: + raise ValueError("Periodic callback must have a positive callback_time") + self.callback_time = callback_time self.jitter = jitter self._running = False self._timeout = None # type: object diff --git a/tornado/test/ioloop_test.py b/tornado/test/ioloop_test.py index 16848b38d..daf74f9be 100644 --- a/tornado/test/ioloop_test.py +++ b/tornado/test/ioloop_test.py @@ -688,6 +688,11 @@ class TestPeriodicCallbackMath(unittest.TestCase): with mock.patch("random.random", mock_random): self.assertEqual(self.simulate_calls(pc, call_durations), expected) + def test_timedelta(self): + pc = PeriodicCallback(lambda: None, datetime.timedelta(minutes=1, seconds=23)) + expected_callback_time = 83000 + self.assertEqual(pc.callback_time, expected_callback_time) + class TestIOLoopConfiguration(unittest.TestCase): def run_python(self, *statements):