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)

Reply via email to