From 8915ded3daec8f7ce9f0c3c464327119361fc095 Mon Sep 17 00:00:00 2001 From: Federico Ressi Date: Mon, 10 Aug 2020 17:40:11 +0200 Subject: [PATCH] Update time tools Change-Id: I52b8e5f8fc0dbbfb2c10a80929e52ec1e043427f --- tobiko/__init__.py | 5 ++++- tobiko/common/_time.py | 25 +++++++++++++++++++++++++ tobiko/tests/unit/test_time.py | 20 ++++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/tobiko/__init__.py b/tobiko/__init__.py index 7657177a6..50ed87f21 100644 --- a/tobiko/__init__.py +++ b/tobiko/__init__.py @@ -84,10 +84,10 @@ get_operation_name = _operation.get_operation_name operation_config = _operation.operation_config retry = _retry.retry -Retry = _retry.Retry retry_attempt = _retry.retry_attempt retry_on_exception = _retry.retry_on_exception retry_test_case = _retry.retry_test_case +Retry = _retry.Retry RetryAttempt = _retry.RetryAttempt RetryCountLimitError = _retry.RetryCountLimitError RetryLimitError = _retry.RetryLimitError @@ -110,12 +110,15 @@ pop_test_case = _testcase.pop_test_case push_test_case = _testcase.push_test_case TestCasesManager = _testcase.TestCasesManager +min_seconds = _time.min_seconds +max_seconds = _time.max_seconds Seconds = _time.Seconds SecondsValueError = _time.SecondsValueError sleep = _time.sleep time = _time.time to_seconds = _time.to_seconds to_seconds_float = _time.to_seconds_float +true_seconds = _time.true_seconds get_short_hostname = _utils.get_short_hostname diff --git a/tobiko/common/_time.py b/tobiko/common/_time.py index 99bc197fe..148bc0c1c 100644 --- a/tobiko/common/_time.py +++ b/tobiko/common/_time.py @@ -46,3 +46,28 @@ def time() -> float: def sleep(seconds: Seconds): _time.sleep(to_seconds_float(seconds)) + + +def true_seconds(*seconds: Seconds) -> typing.List[float]: + result = [] + for value in seconds: + value = to_seconds(value) + if value is not None: + result.append(value) + return result + + +def min_seconds(*seconds: Seconds) -> Seconds: + values = true_seconds(*seconds) + if values: + return min(values) + else: + return None + + +def max_seconds(*seconds: Seconds) -> Seconds: + values = true_seconds(*seconds) + if values: + return max(values) + else: + return None diff --git a/tobiko/tests/unit/test_time.py b/tobiko/tests/unit/test_time.py index a4452c3c3..2d30b3d01 100644 --- a/tobiko/tests/unit/test_time.py +++ b/tobiko/tests/unit/test_time.py @@ -128,3 +128,23 @@ class TimeTest(unit.TobikoUnitTest): result = tobiko.to_seconds_float(seconds) expected = seconds and max(0., float(seconds)) or 0. self.assertEqual(expected, result) + + def test_true_seconds(self): + self.assertEqual([], tobiko.true_seconds()) + self.assertEqual([], tobiko.true_seconds(None)) + self.assertEqual([], tobiko.true_seconds(None, None)) + self.assertEqual([1., 2., 3., 4.], + tobiko.true_seconds(None, 1, None, 2., '3', None, 4, + None)) + + def test_min_seconds(self): + self.assertIsNone(tobiko.min_seconds()) + self.assertIsNone(tobiko.min_seconds(None)) + self.assertIsNone(tobiko.min_seconds(None, None)) + self.assertEqual(1.5, tobiko.min_seconds(3, 2., '1.5')) + + def test_max_seconds(self): + self.assertIsNone(tobiko.max_seconds()) + self.assertIsNone(tobiko.max_seconds(None)) + self.assertIsNone(tobiko.max_seconds(None, None)) + self.assertEqual(3., tobiko.max_seconds(2., 3, '1.5'))