Fix workday doing blocking I/O in the event loop (#114492)

This commit is contained in:
J. Nick Koston 2024-03-30 08:05:14 -10:00 committed by GitHub
parent d63adb6350
commit 0b9c40a233
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -2,6 +2,8 @@
from __future__ import annotations
from functools import partial
from holidays import HolidayBase, country_holidays
from homeassistant.config_entries import ConfigEntry
@ -13,7 +15,7 @@ from homeassistant.helpers.issue_registry import IssueSeverity, async_create_iss
from .const import CONF_PROVINCE, DOMAIN, PLATFORMS
def _validate_country_and_province(
async def _async_validate_country_and_province(
hass: HomeAssistant, entry: ConfigEntry, country: str | None, province: str | None
) -> None:
"""Validate country and province."""
@ -21,7 +23,7 @@ def _validate_country_and_province(
if not country:
return
try:
country_holidays(country)
await hass.async_add_executor_job(country_holidays, country)
except NotImplementedError as ex:
async_create_issue(
hass,
@ -39,7 +41,9 @@ def _validate_country_and_province(
if not province:
return
try:
country_holidays(country, subdiv=province)
await hass.async_add_executor_job(
partial(country_holidays, country, subdiv=province)
)
except NotImplementedError as ex:
async_create_issue(
hass,
@ -66,10 +70,12 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
country: str | None = entry.options.get(CONF_COUNTRY)
province: str | None = entry.options.get(CONF_PROVINCE)
_validate_country_and_province(hass, entry, country, province)
await _async_validate_country_and_province(hass, entry, country, province)
if country and CONF_LANGUAGE not in entry.options:
cls: HolidayBase = country_holidays(country, subdiv=province)
cls: HolidayBase = await hass.async_add_executor_job(
partial(country_holidays, country, subdiv=province)
)
default_language = cls.default_language
new_options = entry.options.copy()
new_options[CONF_LANGUAGE] = default_language