Overview Description
parse_time can not handle missing day times or 12 hour clock as well.
Both parse_time and parse_date raise IndexError when date/time is not well format, making error handling hard
Steps to Reproduce
- All of above time should be parsed:
assert dates.parse_time('15:30', locale='en_US') == time(15, 30)
assert dates.parse_time('3:30', locale='en_US') == time(3, 30)
assert dates.parse_time('00:30', locale='en_US') == time(0, 30)
assert dates.parse_time('03:30 PM', locale='en_US') == time(15, 30)
assert dates.parse_time('03:30 pM', locale='en_US') == time(15, 30)
assert dates.parse_time('03:30 pm', locale='en_US') == time(15, 30)
assert dates.parse_time('03:30 Pm', locale='en_US') == time(15, 30)
assert dates.parse_time('03:30:21 AM', locale='en_US') == time(3, 30, 21)
assert dates.parse_time('03:30:00 AM', locale='en_US') == time(3, 30)
assert dates.parse_time('03:30:00 AM', locale='en_US') == time(3, 30)
- Try parsing invalid time: ('', 'a', 'aaa', '15', '15:')
- Try parsing invalid date: ('', 'a', 'aaa', '15', '15/15/')
Actual Results
>>> from babel import dates
>>> dates.parse_time('15:30', locale='en_US')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1186, in parse_time
second = int(numbers[indexes['S']])
IndexError: list index out of range
>>> dates.parse_time('03:30:21 AM', locale='en_US')
datetime.time(3, 30, 21)
>>> dates.parse_time('03:30 Pm', locale='en_US')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1186, in parse_time
second = int(numbers[indexes['S']])
IndexError: list index out of range
>>> dates.parse_time('')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1184, in parse_time
hour = int(numbers[indexes['H']])
IndexError: list index out of range
>>> dates.parse_time('a')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1184, in parse_time
hour = int(numbers[indexes['H']])
IndexError: list index out of range
>>> dates.parse_time('aa')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1184, in parse_time
hour = int(numbers[indexes['H']])
IndexError: list index out of range
>>> dates.parse_time('15:')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1185, in parse_time
minute = int(numbers[indexes['M']])
IndexError: list index out of range
>>> dates.parse_date('15/15/15')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1150, in parse_date
return date(year, month, day)
ValueError: month must be in 1..12
>>> dates.parse_date('15/15/')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1141, in parse_date
year = numbers[indexes['Y']]
IndexError: list index out of range
>>> dates.parse_date('15/')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1141, in parse_date
year = numbers[indexes['Y']]
IndexError: list index out of range
>>> dates.parse_date('')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1141, in parse_date
year = numbers[indexes['Y']]
IndexError: list index out of range
Expected Results
>>> from babel import dates
>>> dates.parse_time('15:30', locale='en_US')
datetime.time(15, 30)
>>> dates.parse_time('03:30:21 AM', locale='en_US')
datetime.time(3, 30, 21)
>>> dates.parse_time('03:30 Pm', locale='en_US')
datetime.time(15, 30)
>>> dates.parse_time('')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1201, in parse_time
raise ParseTimeException('At least hour and minute should be present')
ParseTimeException: At least hour and minute should be present
>>> dates.parse_time('a')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1201, in parse_time
raise ParseTimeException('At least hour and minute should be present')
ParseTimeException: At least hour and minute should be present
>>> dates.parse_time('aa')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1201, in parse_time
raise ParseTimeException('At least hour and minute should be present')
ParseTimeException: At least hour and minute should be present
>>> dates.parse_time('15:')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1201, in parse_time
raise ParseTimeException('At least hour and minute should be present')
ParseTimeException: At least hour and minute should be present
>>> dates.parse_date('15/15/15')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1178, in parse_date
return date(year, month, day)
ValueError: month must be in 1..12
>>> dates.parse_date('15/15/')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1155, in parse_date
raise ParseDateException('Year not present')
ParseDateException: Year not present
>>> dates.parse_date('15/')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1155, in parse_date
raise ParseDateException('Year not present')
ParseDateException: Year not present
>>> dates.parse_date('')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Users/renzo/PycharmProjects/babel/babel/dates.py", line 1155, in parse_date
raise ParseDateException('Year not present')
ParseDateException: Year not present
Reproducibility
Always
Additional Information:
No
Overview Description
parse_time can not handle missing day times or 12 hour clock as well.
Both parse_time and parse_date raise IndexError when date/time is not well format, making error handling hard
Steps to Reproduce
Actual Results
Expected Results
Reproducibility
Always
Additional Information:
No