mirror of
https://github.com/home-assistant/core.git
synced 2025-07-15 17:27:10 +00:00
Add more options to Islamic Prayer Times (#95156)
This commit is contained in:
parent
0cf32e74d6
commit
47a75cc064
@ -14,7 +14,22 @@ from homeassistant.helpers.selector import (
|
|||||||
SelectSelectorMode,
|
SelectSelectorMode,
|
||||||
)
|
)
|
||||||
|
|
||||||
from .const import CALC_METHODS, CONF_CALC_METHOD, DEFAULT_CALC_METHOD, DOMAIN, NAME
|
from .const import (
|
||||||
|
CALC_METHODS,
|
||||||
|
CONF_CALC_METHOD,
|
||||||
|
CONF_LAT_ADJ_METHOD,
|
||||||
|
CONF_MIDNIGHT_MODE,
|
||||||
|
CONF_SCHOOL,
|
||||||
|
DEFAULT_CALC_METHOD,
|
||||||
|
DEFAULT_LAT_ADJ_METHOD,
|
||||||
|
DEFAULT_MIDNIGHT_MODE,
|
||||||
|
DEFAULT_SCHOOL,
|
||||||
|
DOMAIN,
|
||||||
|
LAT_ADJ_METHODS,
|
||||||
|
MIDNIGHT_MODES,
|
||||||
|
NAME,
|
||||||
|
SCHOOLS,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class IslamicPrayerFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
class IslamicPrayerFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
||||||
@ -70,6 +85,40 @@ class IslamicPrayerOptionsFlowHandler(config_entries.OptionsFlow):
|
|||||||
translation_key=CONF_CALC_METHOD,
|
translation_key=CONF_CALC_METHOD,
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
vol.Optional(
|
||||||
|
CONF_LAT_ADJ_METHOD,
|
||||||
|
default=self.config_entry.options.get(
|
||||||
|
CONF_LAT_ADJ_METHOD, DEFAULT_LAT_ADJ_METHOD
|
||||||
|
),
|
||||||
|
): SelectSelector(
|
||||||
|
SelectSelectorConfig(
|
||||||
|
options=LAT_ADJ_METHODS,
|
||||||
|
mode=SelectSelectorMode.DROPDOWN,
|
||||||
|
translation_key=CONF_LAT_ADJ_METHOD,
|
||||||
|
)
|
||||||
|
),
|
||||||
|
vol.Optional(
|
||||||
|
CONF_MIDNIGHT_MODE,
|
||||||
|
default=self.config_entry.options.get(
|
||||||
|
CONF_MIDNIGHT_MODE, DEFAULT_MIDNIGHT_MODE
|
||||||
|
),
|
||||||
|
): SelectSelector(
|
||||||
|
SelectSelectorConfig(
|
||||||
|
options=MIDNIGHT_MODES,
|
||||||
|
mode=SelectSelectorMode.DROPDOWN,
|
||||||
|
translation_key=CONF_MIDNIGHT_MODE,
|
||||||
|
)
|
||||||
|
),
|
||||||
|
vol.Optional(
|
||||||
|
CONF_SCHOOL,
|
||||||
|
default=self.config_entry.options.get(CONF_SCHOOL, DEFAULT_SCHOOL),
|
||||||
|
): SelectSelector(
|
||||||
|
SelectSelectorConfig(
|
||||||
|
options=SCHOOLS,
|
||||||
|
mode=SelectSelectorMode.DROPDOWN,
|
||||||
|
translation_key=CONF_SCHOOL,
|
||||||
|
)
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
return self.async_show_form(step_id="init", data_schema=vol.Schema(options))
|
return self.async_show_form(step_id="init", data_schema=vol.Schema(options))
|
||||||
|
@ -25,3 +25,15 @@ CALC_METHODS: Final = [
|
|||||||
"custom",
|
"custom",
|
||||||
]
|
]
|
||||||
DEFAULT_CALC_METHOD: Final = "isna"
|
DEFAULT_CALC_METHOD: Final = "isna"
|
||||||
|
|
||||||
|
CONF_LAT_ADJ_METHOD: Final = "latitude_adjustment_method"
|
||||||
|
LAT_ADJ_METHODS: Final = ["middle_of_the_night", "one_seventh", "angle_based"]
|
||||||
|
DEFAULT_LAT_ADJ_METHOD: Final = "middle_of_the_night"
|
||||||
|
|
||||||
|
CONF_MIDNIGHT_MODE: Final = "midnight_mode"
|
||||||
|
MIDNIGHT_MODES: Final = ["standard", "jafari"]
|
||||||
|
DEFAULT_MIDNIGHT_MODE: Final = "standard"
|
||||||
|
|
||||||
|
CONF_SCHOOL: Final = "school"
|
||||||
|
SCHOOLS: Final = ["shafi", "hanafi"]
|
||||||
|
DEFAULT_SCHOOL: Final = "shafi"
|
||||||
|
@ -14,7 +14,17 @@ from homeassistant.helpers.event import async_call_later, async_track_point_in_t
|
|||||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||||
import homeassistant.util.dt as dt_util
|
import homeassistant.util.dt as dt_util
|
||||||
|
|
||||||
from .const import CONF_CALC_METHOD, DEFAULT_CALC_METHOD, DOMAIN
|
from .const import (
|
||||||
|
CONF_CALC_METHOD,
|
||||||
|
CONF_LAT_ADJ_METHOD,
|
||||||
|
CONF_MIDNIGHT_MODE,
|
||||||
|
CONF_SCHOOL,
|
||||||
|
DEFAULT_CALC_METHOD,
|
||||||
|
DEFAULT_LAT_ADJ_METHOD,
|
||||||
|
DEFAULT_MIDNIGHT_MODE,
|
||||||
|
DEFAULT_SCHOOL,
|
||||||
|
DOMAIN,
|
||||||
|
)
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -38,12 +48,34 @@ class IslamicPrayerDataUpdateCoordinator(DataUpdateCoordinator[dict[str, datetim
|
|||||||
"""Return the calculation method."""
|
"""Return the calculation method."""
|
||||||
return self.config_entry.options.get(CONF_CALC_METHOD, DEFAULT_CALC_METHOD)
|
return self.config_entry.options.get(CONF_CALC_METHOD, DEFAULT_CALC_METHOD)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def lat_adj_method(self) -> str:
|
||||||
|
"""Return the latitude adjustment method."""
|
||||||
|
return str(
|
||||||
|
self.config_entry.options.get(
|
||||||
|
CONF_LAT_ADJ_METHOD, DEFAULT_LAT_ADJ_METHOD
|
||||||
|
).replace("_", " ")
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def midnight_mode(self) -> str:
|
||||||
|
"""Return the midnight mode."""
|
||||||
|
return self.config_entry.options.get(CONF_MIDNIGHT_MODE, DEFAULT_MIDNIGHT_MODE)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def school(self) -> str:
|
||||||
|
"""Return the school."""
|
||||||
|
return self.config_entry.options.get(CONF_SCHOOL, DEFAULT_SCHOOL)
|
||||||
|
|
||||||
def get_new_prayer_times(self) -> dict[str, Any]:
|
def get_new_prayer_times(self) -> dict[str, Any]:
|
||||||
"""Fetch prayer times for today."""
|
"""Fetch prayer times for today."""
|
||||||
calc = PrayerTimesCalculator(
|
calc = PrayerTimesCalculator(
|
||||||
latitude=self.hass.config.latitude,
|
latitude=self.hass.config.latitude,
|
||||||
longitude=self.hass.config.longitude,
|
longitude=self.hass.config.longitude,
|
||||||
calculation_method=self.calc_method,
|
calculation_method=self.calc_method,
|
||||||
|
latitudeAdjustmentMethod=self.lat_adj_method,
|
||||||
|
midnightMode=self.midnight_mode,
|
||||||
|
school=self.school,
|
||||||
date=str(dt_util.now().date()),
|
date=str(dt_util.now().date()),
|
||||||
)
|
)
|
||||||
return cast(dict[str, Any], calc.fetch_prayer_times())
|
return cast(dict[str, Any], calc.fetch_prayer_times())
|
||||||
|
@ -15,7 +15,10 @@
|
|||||||
"step": {
|
"step": {
|
||||||
"init": {
|
"init": {
|
||||||
"data": {
|
"data": {
|
||||||
"calculation_method": "Prayer calculation method"
|
"calculation_method": "Prayer calculation method",
|
||||||
|
"latitude_adjustment_method": "Latitude adjustment method",
|
||||||
|
"midnight_mode": "Midnight mode",
|
||||||
|
"school": "School"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -40,6 +43,25 @@
|
|||||||
"moonsighting": "Moonsighting Committee Worldwide",
|
"moonsighting": "Moonsighting Committee Worldwide",
|
||||||
"custom": "Custom"
|
"custom": "Custom"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"latitude_adjustment_method": {
|
||||||
|
"options": {
|
||||||
|
"middle_of_the_night": "Middle of the night",
|
||||||
|
"one_seventh": "One seventh",
|
||||||
|
"angle_based": "Angle based"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"midnight_mode": {
|
||||||
|
"options": {
|
||||||
|
"standard": "Standard (mid sunset to sunrise)",
|
||||||
|
"jafari": "Jafari (mid sunset to fajr)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"school": {
|
||||||
|
"options": {
|
||||||
|
"shafi": "Shafi",
|
||||||
|
"hanafi": "Hanafi"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"entity": {
|
"entity": {
|
||||||
|
@ -3,7 +3,13 @@ import pytest
|
|||||||
|
|
||||||
from homeassistant import config_entries, data_entry_flow
|
from homeassistant import config_entries, data_entry_flow
|
||||||
from homeassistant.components import islamic_prayer_times
|
from homeassistant.components import islamic_prayer_times
|
||||||
from homeassistant.components.islamic_prayer_times.const import CONF_CALC_METHOD, DOMAIN
|
from homeassistant.components.islamic_prayer_times.const import (
|
||||||
|
CONF_CALC_METHOD,
|
||||||
|
CONF_LAT_ADJ_METHOD,
|
||||||
|
CONF_MIDNIGHT_MODE,
|
||||||
|
CONF_SCHOOL,
|
||||||
|
DOMAIN,
|
||||||
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
@ -44,11 +50,19 @@ async def test_options(hass: HomeAssistant) -> None:
|
|||||||
assert result["step_id"] == "init"
|
assert result["step_id"] == "init"
|
||||||
|
|
||||||
result = await hass.config_entries.options.async_configure(
|
result = await hass.config_entries.options.async_configure(
|
||||||
result["flow_id"], user_input={CONF_CALC_METHOD: "makkah"}
|
result["flow_id"],
|
||||||
|
user_input={
|
||||||
|
CONF_CALC_METHOD: "makkah",
|
||||||
|
CONF_LAT_ADJ_METHOD: "one_seventh",
|
||||||
|
CONF_SCHOOL: "hanafi",
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY
|
assert result["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY
|
||||||
assert result["data"][CONF_CALC_METHOD] == "makkah"
|
assert result["data"][CONF_CALC_METHOD] == "makkah"
|
||||||
|
assert result["data"][CONF_LAT_ADJ_METHOD] == "one_seventh"
|
||||||
|
assert result["data"][CONF_MIDNIGHT_MODE] == "standard"
|
||||||
|
assert result["data"][CONF_SCHOOL] == "hanafi"
|
||||||
|
|
||||||
|
|
||||||
async def test_integration_already_configured(hass: HomeAssistant) -> None:
|
async def test_integration_already_configured(hass: HomeAssistant) -> None:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user