diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 49be921a59..75b93969c2 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,6 +4,14 @@ Changelog in development -------------- +Fixed +~~~~~ + +* Fix Type error for ``time_diff`` critera comparison. convert the timediff value as float to match + ``timedelta.total_seconds()`` return. #5462 + + Contributed by @blackstrip + Added ~~~~~ diff --git a/st2common/st2common/operators.py b/st2common/st2common/operators.py index 6896e87658..9fb38548f3 100644 --- a/st2common/st2common/operators.py +++ b/st2common/st2common/operators.py @@ -314,7 +314,7 @@ def _timediff(diff_target, period_seconds, operator): # Note: date_utils.parse uses dateutil.parse which is way more flexible then strptime and # supports many date formats diff_target_utc = date_utils.parse(diff_target) - return operator((utc_now - diff_target_utc).total_seconds(), period_seconds) + return operator((utc_now - diff_target_utc).total_seconds(), float(period_seconds)) def timediff_lt(value, criteria_pattern): diff --git a/st2common/tests/unit/test_operators.py b/st2common/tests/unit/test_operators.py index 5917e4277c..7198f26fb1 100644 --- a/st2common/tests/unit/test_operators.py +++ b/st2common/tests/unit/test_operators.py @@ -943,6 +943,20 @@ def test_timediff_lt_fail(self): "Passed test_timediff_lt with None as criteria_pattern.", ) + def test_timediff_lt_webui_value(self): + op = operators.get_operator("timediff_lt") + self.assertTrue( + op(date_utils.get_datetime_utc_now().isoformat(), "10"), + "Failed test_timediff_lt_webui_value.", + ) + + def test_timediff_lt_webui_value_fail(self): + op = operators.get_operator("timediff_lt") + self.assertFalse( + op("2014-07-01T00:01:01.000000", "10"), + "Passed test_timediff_lt_webui_value.", + ) + def test_timediff_gt(self): op = operators.get_operator("timediff_gt") self.assertTrue(op("2014-07-01T00:01:01.000000", 1), "Failed test_timediff_gt.") @@ -958,6 +972,20 @@ def test_timediff_gt_fail(self): "Passed test_timediff_gt with None as criteria_pattern.", ) + def test_timediff_gt_webui_value(self): + op = operators.get_operator("timediff_gt") + self.assertTrue( + op("2014-07-01T00:01:01.000000", "1"), + "Failed test_timediff_gt_webui_value.", + ) + + def test_timediff_gt_webui_value_fail(self): + op = operators.get_operator("timediff_gt") + self.assertFalse( + op(date_utils.get_datetime_utc_now().isoformat(), "10"), + "Passed test_timediff_gt_webui_value.", + ) + def test_exists(self): op = operators.get_operator("exists") self.assertTrue(op(False, None), "Should return True")