diff --git a/superset/utils/date_parser.py b/superset/utils/date_parser.py index 9a7c135f5c159..bffe50c6242c3 100644 --- a/superset/utils/date_parser.py +++ b/superset/utils/date_parser.py @@ -263,9 +263,10 @@ def get_since_until( # pylint: disable=too-many-arguments,too-many-locals,too-m ) if time_shift: - time_delta = parse_past_timedelta(time_shift) - _since = _since if _since is None else (_since - time_delta) - _until = _until if _until is None else (_until - time_delta) + time_delta_since = parse_past_timedelta(time_shift, _since) + time_delta_until = parse_past_timedelta(time_shift, _until) + _since = _since if _since is None else (_since - time_delta_since) + _until = _until if _until is None else (_until - time_delta_until) if instant_time_comparison_range: # This is only set using the new time comparison controls diff --git a/tests/unit_tests/utils/date_parser_tests.py b/tests/unit_tests/utils/date_parser_tests.py index b031e54a664c8..201adc4934e93 100644 --- a/tests/unit_tests/utils/date_parser_tests.py +++ b/tests/unit_tests/utils/date_parser_tests.py @@ -165,28 +165,49 @@ def test_get_since_until() -> None: time_range="2000-01-01T00:00:00 : 2018-01-01T00:00:00", instant_time_comparison_range="y", ) - expected = datetime(2000, 1, 1), datetime(2018, 1, 1) + expected = datetime(1999, 1, 1), datetime(2017, 1, 1) assert result == expected result = get_since_until( time_range="2000-01-01T00:00:00 : 2018-01-01T00:00:00", instant_time_comparison_range="m", ) - expected = datetime(2000, 1, 1), datetime(2018, 1, 1) + expected = datetime(1999, 12, 1), datetime(2017, 12, 1) assert result == expected result = get_since_until( time_range="2000-01-01T00:00:00 : 2018-01-01T00:00:00", instant_time_comparison_range="w", ) - expected = datetime(2000, 1, 1), datetime(2018, 1, 1) + expected = datetime(1999, 12, 25), datetime(2017, 12, 25) assert result == expected result = get_since_until( time_range="2000-01-01T00:00:00 : 2018-01-01T00:00:00", instant_time_comparison_range="r", ) - expected = datetime(2000, 1, 1), datetime(2018, 1, 1) + expected = datetime(1981, 12, 31), datetime(2000, 1, 1) + assert result == expected + + result = get_since_until( + time_range="2000-01-01T00:00:00 : 2018-01-01T00:00:00", + time_shift="1 year ago", + ) + expected = datetime(1999, 1, 1), datetime(2017, 1, 1) + assert result == expected + + result = get_since_until( + time_range="2000-01-01T00:00:00 : 2018-01-01T00:00:00", + time_shift="1 month ago", + ) + expected = datetime(1999, 12, 1), datetime(2017, 12, 1) + assert result == expected + + result = get_since_until( + time_range="2000-01-01T00:00:00 : 2018-01-01T00:00:00", + time_shift="1 week ago", + ) + expected = datetime(1999, 12, 25), datetime(2017, 12, 25) assert result == expected with pytest.raises(ValueError):