fix(utils): evaluate date parser multiple holiday results correctly (#23685)

This commit is contained in:
Arkadii Yakovets 2023-04-26 03:59:31 -07:00 committed by GitHub
parent 8a88ab3c4b
commit ff126542d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 5 deletions

View File

@ -130,7 +130,7 @@ hashids==1.3.1
# via apache-superset
hijri-converter==2.2.4
# via holidays
holidays==0.17.2
holidays==0.23
# via apache-superset
humanize==3.11.0
# via apache-superset
@ -298,7 +298,6 @@ typing-extensions==4.4.0
# apache-superset
# flask-limiter
# limits
# rich
urllib3==1.26.6
# via selenium
vine==5.0.0

View File

@ -96,7 +96,7 @@ setup(
"graphlib-backport",
"gunicorn>=20.1.0; sys_platform != 'win32'",
"hashids>=1.3.1, <2",
"holidays>=0.17.2, <0.18",
"holidays>=0.23, <0.24",
"humanize",
"isodate",
"markdown>=3.0",

View File

@ -386,8 +386,8 @@ class EvalHolidayFunc: # pylint: disable=too-few-public-methods
country = country.eval() if country else "US"
holiday_lookup = country_holidays(country, years=[holiday_year], observed=False)
searched_result = holiday_lookup.get_named(holiday)
if len(searched_result) == 1:
searched_result = holiday_lookup.get_named(holiday, lookup="istartswith")
if len(searched_result) > 0:
return dttm_from_timetuple(searched_result[0].timetuple())
raise ValueError(
_("Unable to find such a holiday: [%(holiday)s]", holiday=holiday)

View File

@ -60,10 +60,14 @@ def mock_parse_human_datetime(s: str) -> Optional[datetime]:
return datetime(2017, 4, 7)
elif s in ["5 days", "5 days ago"]:
return datetime(2016, 11, 2)
elif s == "2000-01-01T00:00:00":
return datetime(2000, 1, 1)
elif s == "2018-01-01T00:00:00":
return datetime(2018, 1, 1)
elif s == "2018-12-31T23:59:59":
return datetime(2018, 12, 31, 23, 59, 59)
elif s == "2022-01-01T00:00:00":
return datetime(2022, 1, 1)
else:
return None
@ -260,12 +264,30 @@ def test_datetime_eval() -> None:
expected = datetime(2018, 9, 3, 0, 0, 0)
assert result == expected
result = datetime_eval(
"holiday('Eid al-Fitr', datetime('2000-01-01T00:00:00'), 'SA')"
)
expected = datetime(2000, 1, 8, 0, 0, 0)
assert result == expected
result = datetime_eval(
"holiday('Boxing day', datetime('2018-01-01T00:00:00'), 'UK')"
)
expected = datetime(2018, 12, 26, 0, 0, 0)
assert result == expected
result = datetime_eval(
"holiday('Juneteenth', datetime('2022-01-01T00:00:00'), 'US')"
)
expected = datetime(2022, 6, 19, 0, 0, 0)
assert result == expected
result = datetime_eval(
"holiday('Independence Day', datetime('2022-01-01T00:00:00'), 'US')"
)
expected = datetime(2022, 7, 4, 0, 0, 0)
assert result == expected
result = datetime_eval(
"lastday(dateadd(datetime('2018-01-01T00:00:00'), 1, month), month)"
)