Add more options to Islamic Prayer Times (#95156)

pull/99918/head
Ali Yousuf 2023-09-08 07:07:33 -04:00 committed by GitHub
parent 0cf32e74d6
commit 47a75cc064
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 134 additions and 5 deletions

View File

@ -14,7 +14,22 @@ from homeassistant.helpers.selector import (
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):
@ -70,6 +85,40 @@ class IslamicPrayerOptionsFlowHandler(config_entries.OptionsFlow):
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))

View File

@ -25,3 +25,15 @@ CALC_METHODS: Final = [
"custom",
]
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"

View File

@ -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
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__)
@ -38,12 +48,34 @@ class IslamicPrayerDataUpdateCoordinator(DataUpdateCoordinator[dict[str, datetim
"""Return the calculation 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]:
"""Fetch prayer times for today."""
calc = PrayerTimesCalculator(
latitude=self.hass.config.latitude,
longitude=self.hass.config.longitude,
calculation_method=self.calc_method,
latitudeAdjustmentMethod=self.lat_adj_method,
midnightMode=self.midnight_mode,
school=self.school,
date=str(dt_util.now().date()),
)
return cast(dict[str, Any], calc.fetch_prayer_times())

View File

@ -15,7 +15,10 @@
"step": {
"init": {
"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",
"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": {

View File

@ -3,7 +3,13 @@ import pytest
from homeassistant import config_entries, data_entry_flow
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 tests.common import MockConfigEntry
@ -44,11 +50,19 @@ async def test_options(hass: HomeAssistant) -> None:
assert result["step_id"] == "init"
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["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: