Convert to float when parsing timedelta

The user can enter a float value for the converter parts.

issue8816
review256231002
This commit is contained in:
Cédric Krier committed 2019-11-16 12:51:50 +01:00
1 parent 3c167bf702
commit 00ac259b79
1 file changed
+13 -4
+13 -4
View File
@@ -86,7 +86,7 @@ def parse(text, converter=None):
for t, v in zip(part.split(':'),
[converter['h'], converter['m'], converter['s']]):
try:
seconds += abs(float(t)) * v
seconds += abs(locale.atof(t)) * v
except ValueError:
pass
else:
@@ -94,13 +94,13 @@ def parse(text, converter=None):
if part.endswith(separator):
part = part[:-len(separator)]
try:
seconds += abs(int(part)) * converter[key]
seconds += abs(locale.atof(part)) * converter[key]
except ValueError:
pass
break
else:
try:
seconds += abs(float(part))
seconds += abs(locale.atof(part))
except ValueError:
pass
@@ -136,14 +136,23 @@ def test_format():
_tests_parse = [
(datetime.timedelta(), ' '),
(datetime.timedelta(), 'foo'),
(datetime.timedelta(), '1.5d'),
(datetime.timedelta(days=1.5), '1.5d'),
(datetime.timedelta(days=-2), '1d -1d'),
(datetime.timedelta(hours=1, minutes=5, seconds=10), '1:5:10:42'),
(datetime.timedelta(hours=2), '1: 1:'),
(datetime.timedelta(hours=.25), ':15'),
(datetime.timedelta(hours=1), '1h'),
(datetime.timedelta(hours=.25), '.25h'),
]
def test_parse():
for timedelta, text, in _tests + _tests_parse:
assert parse(text) == timedelta
if __name__ == '__main__':
for name in list(globals()):
if name.startswith('test_'):
func = globals()[name]
func()