This is an automated email from the ASF dual-hosted git repository.
yongjiezhao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 723a671 fix: time parser truncate to first day of year/month (#14945)
723a671 is described below
commit 723a67156c29c8159704925878f43943a2030ed5
Author: Yongjie Zhao <[email protected]>
AuthorDate: Wed Jun 2 14:26:37 2021 +0100
fix: time parser truncate to first day of year/month (#14945)
---
superset/utils/date_parser.py | 3 ++-
tests/utils/date_parser_tests.py | 12 ++++++++++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/superset/utils/date_parser.py b/superset/utils/date_parser.py
index 30fce84..42625e6 100644
--- a/superset/utils/date_parser.py
+++ b/superset/utils/date_parser.py
@@ -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)
diff --git a/tests/utils/date_parser_tests.py b/tests/utils/date_parser_tests.py
index 2d5cb22..ad87f40 100644
--- a/tests/utils/date_parser_tests.py
+++ b/tests/utils/date_parser_tests.py
@@ -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)