From 9a0dec1ad6069880c0660c2008376a221e839565 Mon Sep 17 00:00:00 2001 From: Henddher Pedroza Date: Sun, 20 Oct 2019 15:04:57 -0400 Subject: [PATCH 1/2] Fix issue in validatorfuncs.timedelta() in which days and years (in days) aren't added to create datetime.timedelta(days=days, ...). --- evennia/utils/validatorfuncs.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/evennia/utils/validatorfuncs.py b/evennia/utils/validatorfuncs.py index 0245d2a5af..623680b176 100644 --- a/evennia/utils/validatorfuncs.py +++ b/evennia/utils/validatorfuncs.py @@ -102,17 +102,17 @@ def duration(entry, option_key="Duration", **kwargs): for interval in time_string: if _re.match(r"^[\d]+s$", interval): - seconds = +int(interval.rstrip("s")) + seconds += int(interval.rstrip("s")) elif _re.match(r"^[\d]+m$", interval): - minutes = +int(interval.rstrip("m")) + minutes += int(interval.rstrip("m")) elif _re.match(r"^[\d]+h$", interval): - hours = +int(interval.rstrip("h")) + hours += int(interval.rstrip("h")) elif _re.match(r"^[\d]+d$", interval): - days = +int(interval.rstrip("d")) + days += int(interval.rstrip("d")) elif _re.match(r"^[\d]+w$", interval): - weeks = +int(interval.rstrip("w")) + weeks += int(interval.rstrip("w")) elif _re.match(r"^[\d]+y$", interval): - days = +int(interval.rstrip("y")) * 365 + days += int(interval.rstrip("y")) * 365 else: raise ValueError(f"Could not convert section '{interval}' to a {option_key}.") From 8144c069202ea6807a5c5a1217de4cfefe5cd487 Mon Sep 17 00:00:00 2001 From: Henddher Pedroza Date: Thu, 24 Oct 2019 21:10:46 -0400 Subject: [PATCH 2/2] Fix issue in validatorfuncs.timedelta() in which days and years (in days) aren't added to create datetime.timedelta(days=days, ...) --- evennia/utils/tests/test_validatorfuncs.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/evennia/utils/tests/test_validatorfuncs.py b/evennia/utils/tests/test_validatorfuncs.py index 4a16c25be8..0c1b87e40e 100644 --- a/evennia/utils/tests/test_validatorfuncs.py +++ b/evennia/utils/tests/test_validatorfuncs.py @@ -44,10 +44,13 @@ class TestValidatorFuncs(TestCase): self.assertTrue( isinstance(validatorfuncs.duration(d), datetime.timedelta)) - # THE FOLLOWING FAILS, year calculation seems to be incorrect - # self.assertEqual( - # datetime.timedelta(1+5*365, 2, 0, 0, 3, 4, 5), - # validatorfuncs.duration('1d 2s 3m 4h 5w 5y')) + self.assertEqual( + datetime.timedelta(1+6*365, 2, 0, 0, 3, 4, 5), + validatorfuncs.duration('1d 2s 3m 4h 5w 6y')) + # values may be duplicated + self.assertEqual( + datetime.timedelta((1+7)+(6+12)*365, 2+8, 0, 0, 3+9, 4+10, 5+11), + validatorfuncs.duration('1d 2s 3m 4h 5w 6y 7d 8s 9m 10h 11w 12y')) def test_duration_raises_ValueError(self): for d in ['', '1', '5days', '1Week']: