fix: time parser truncate to first day of year/month (#14945)

This commit is contained in:
Yongjie Zhao 2021-06-02 14:26:37 +01:00 committed by GitHub
parent f4de0dcb65
commit 723a67156c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 1 deletions

View File

@ -79,7 +79,8 @@ def parse_human_datetime(human_readable: str) -> datetime:
if re.search(x_periods, human_readable, re.IGNORECASE):
raise TimeRangeUnclearError(human_readable)
try:
dttm = parse(human_readable)
default = datetime(year=datetime.now().year, month=1, day=1)
dttm = parse(human_readable, default=default)
except (ValueError, OverflowError) as ex:
cal = parsedatetime.Calendar()
parsed_dttm, parsed_flags = cal.parseDT(human_readable)

View File

@ -35,6 +35,10 @@ from tests.base_tests import SupersetTestCase
def mock_parse_human_datetime(s):
if s == "now":
return datetime(2016, 11, 7, 9, 30, 10)
elif s == "2018":
return datetime(2018, 1, 1)
elif s == "2018-9":
return datetime(2018, 9, 1)
elif s == "today":
return datetime(2016, 11, 7)
elif s == "yesterday":
@ -153,6 +157,14 @@ class TestDateParser(SupersetTestCase):
expected = datetime(2016, 11, 7)
self.assertEqual(result, expected)
result = datetime_eval("datetime('2018')")
expected = datetime(2018, 1, 1)
self.assertEqual(result, expected)
result = datetime_eval("datetime('2018-9')")
expected = datetime(2018, 9, 1)
self.assertEqual(result, expected)
# Parse compact arguments spelling
result = datetime_eval("dateadd(datetime('today'),1,year,)")
expected = datetime(2017, 11, 7)