From dd028220baeff35878db92aa104cd2b7f9e69659 Mon Sep 17 00:00:00 2001 From: Rami Mosleh Date: Sat, 25 Nov 2023 15:05:08 +0200 Subject: [PATCH] Use iso8601 format when fetching prayer times (#104458) --- .../islamic_prayer_times/coordinator.py | 6 ++- .../islamic_prayer_times/__init__.py | 48 ++++++------------- .../islamic_prayer_times/test_init.py | 9 ++-- .../islamic_prayer_times/test_sensor.py | 8 +--- 4 files changed, 27 insertions(+), 44 deletions(-) diff --git a/homeassistant/components/islamic_prayer_times/coordinator.py b/homeassistant/components/islamic_prayer_times/coordinator.py index 161ce7b2644..aedaf43411a 100644 --- a/homeassistant/components/islamic_prayer_times/coordinator.py +++ b/homeassistant/components/islamic_prayer_times/coordinator.py @@ -77,6 +77,7 @@ class IslamicPrayerDataUpdateCoordinator(DataUpdateCoordinator[dict[str, datetim midnightMode=self.midnight_mode, school=self.school, date=str(dt_util.now().date()), + iso8601=True, ) return cast(dict[str, Any], calc.fetch_prayer_times()) @@ -145,9 +146,12 @@ class IslamicPrayerDataUpdateCoordinator(DataUpdateCoordinator[dict[str, datetim async_call_later(self.hass, 60, self.async_request_update) raise UpdateFailed from err + # introduced in prayer-times-calculator 0.0.8 + prayer_times.pop("date", None) + prayer_times_info: dict[str, datetime] = {} for prayer, time in prayer_times.items(): - if prayer_time := dt_util.parse_datetime(f"{dt_util.now().date()} {time}"): + if prayer_time := dt_util.parse_datetime(time): prayer_times_info[prayer] = dt_util.as_utc(prayer_time) self.async_schedule_future_update(prayer_times_info["Midnight"]) diff --git a/tests/components/islamic_prayer_times/__init__.py b/tests/components/islamic_prayer_times/__init__.py index b93c46108d8..8750461c47f 100644 --- a/tests/components/islamic_prayer_times/__init__.py +++ b/tests/components/islamic_prayer_times/__init__.py @@ -5,43 +5,23 @@ from datetime import datetime import homeassistant.util.dt as dt_util PRAYER_TIMES = { - "Fajr": "06:10", - "Sunrise": "07:25", - "Dhuhr": "12:30", - "Asr": "15:32", - "Maghrib": "17:35", - "Isha": "18:53", - "Midnight": "00:45", -} - -PRAYER_TIMES_TIMESTAMPS = { - "Fajr": datetime(2020, 1, 1, 6, 10, 0, tzinfo=dt_util.UTC), - "Sunrise": datetime(2020, 1, 1, 7, 25, 0, tzinfo=dt_util.UTC), - "Dhuhr": datetime(2020, 1, 1, 12, 30, 0, tzinfo=dt_util.UTC), - "Asr": datetime(2020, 1, 1, 15, 32, 0, tzinfo=dt_util.UTC), - "Maghrib": datetime(2020, 1, 1, 17, 35, 0, tzinfo=dt_util.UTC), - "Isha": datetime(2020, 1, 1, 18, 53, 0, tzinfo=dt_util.UTC), - "Midnight": datetime(2020, 1, 1, 00, 45, 0, tzinfo=dt_util.UTC), + "Fajr": "2020-01-01T06:10:00+00:00", + "Sunrise": "2020-01-01T07:25:00+00:00", + "Dhuhr": "2020-01-01T12:30:00+00:00", + "Asr": "2020-01-01T15:32:00+00:00", + "Maghrib": "2020-01-01T17:35:00+00:00", + "Isha": "2020-01-01T18:53:00+00:00", + "Midnight": "2020-01-01T00:45:00+00:00", } NEW_PRAYER_TIMES = { - "Fajr": "06:00", - "Sunrise": "07:25", - "Dhuhr": "12:30", - "Asr": "15:32", - "Maghrib": "17:45", - "Isha": "18:53", - "Midnight": "00:43", -} - -NEW_PRAYER_TIMES_TIMESTAMPS = { - "Fajr": datetime(2020, 1, 2, 6, 00, 0, tzinfo=dt_util.UTC), - "Sunrise": datetime(2020, 1, 2, 7, 25, 0, tzinfo=dt_util.UTC), - "Dhuhr": datetime(2020, 1, 2, 12, 30, 0, tzinfo=dt_util.UTC), - "Asr": datetime(2020, 1, 2, 15, 32, 0, tzinfo=dt_util.UTC), - "Maghrib": datetime(2020, 1, 2, 17, 45, 0, tzinfo=dt_util.UTC), - "Isha": datetime(2020, 1, 2, 18, 53, 0, tzinfo=dt_util.UTC), - "Midnight": datetime(2020, 1, 2, 00, 43, 0, tzinfo=dt_util.UTC), + "Fajr": "2020-01-02T06:00:00+00:00", + "Sunrise": "2020-01-02T07:25:00+00:00", + "Dhuhr": "2020-01-02T12:30:00+00:00", + "Asr": "2020-01-02T15:32:00+00:00", + "Maghrib": "2020-01-02T17:45:00+00:00", + "Isha": "2020-01-02T18:53:00+00:00", + "Midnight": "2020-01-02T00:43:00+00:00", } NOW = datetime(2020, 1, 1, 00, 00, 0, tzinfo=dt_util.UTC) diff --git a/tests/components/islamic_prayer_times/test_init.py b/tests/components/islamic_prayer_times/test_init.py index 0a41630e29b..0c3f19e43fe 100644 --- a/tests/components/islamic_prayer_times/test_init.py +++ b/tests/components/islamic_prayer_times/test_init.py @@ -13,8 +13,9 @@ from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN from homeassistant.const import STATE_UNAVAILABLE from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er +import homeassistant.util.dt as dt_util -from . import NEW_PRAYER_TIMES, NOW, PRAYER_TIMES, PRAYER_TIMES_TIMESTAMPS +from . import NEW_PRAYER_TIMES, NOW, PRAYER_TIMES from tests.common import MockConfigEntry, async_fire_time_changed @@ -90,7 +91,7 @@ async def test_options_listener(hass: HomeAssistant) -> None: with patch( "prayer_times_calculator.PrayerTimesCalculator.fetch_prayer_times", return_value=PRAYER_TIMES, - ) as mock_fetch_prayer_times: + ) as mock_fetch_prayer_times, freeze_time(NOW): await hass.config_entries.async_setup(entry.entry_id) await hass.async_block_till_done() assert mock_fetch_prayer_times.call_count == 1 @@ -123,7 +124,9 @@ async def test_update_failed(hass: HomeAssistant) -> None: InvalidResponseError, NEW_PRAYER_TIMES, ] - future = PRAYER_TIMES_TIMESTAMPS["Midnight"] + timedelta(days=1, minutes=1) + midnight_time = dt_util.parse_datetime(PRAYER_TIMES["Midnight"]) + assert midnight_time + future = midnight_time + timedelta(days=1, minutes=1) with freeze_time(future): async_fire_time_changed(hass, future) await hass.async_block_till_done() diff --git a/tests/components/islamic_prayer_times/test_sensor.py b/tests/components/islamic_prayer_times/test_sensor.py index e7f3759f993..164ac8818fe 100644 --- a/tests/components/islamic_prayer_times/test_sensor.py +++ b/tests/components/islamic_prayer_times/test_sensor.py @@ -6,9 +6,8 @@ import pytest from homeassistant.components.islamic_prayer_times.const import DOMAIN from homeassistant.core import HomeAssistant -import homeassistant.util.dt as dt_util -from . import NOW, PRAYER_TIMES, PRAYER_TIMES_TIMESTAMPS +from . import NOW, PRAYER_TIMES from tests.common import MockConfigEntry @@ -44,7 +43,4 @@ async def test_islamic_prayer_times_sensors( ), freeze_time(NOW): await hass.config_entries.async_setup(entry.entry_id) await hass.async_block_till_done() - assert ( - hass.states.get(sensor_name).state - == PRAYER_TIMES_TIMESTAMPS[key].astimezone(dt_util.UTC).isoformat() - ) + assert hass.states.get(sensor_name).state == PRAYER_TIMES[key]