Skip to content

Commit 6334f69

Browse files
fix: added better None checks for the expiry times of sensors (#28)
1 parent 00fc47d commit 6334f69

File tree

3 files changed

+27
-13
lines changed

3 files changed

+27
-13
lines changed

custom_components/ocado/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@
1616
"BeautifulSoup4>=4.10.0"
1717
],
1818
"single_config_entry": true,
19-
"version": "1.1.7"
19+
"version": "1.1.8"
2020
}

custom_components/ocado/sensor.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
set_bbds,
3939
set_total,
4040
detect_attr_changes,
41+
has_delivery_window_end,
42+
has_edit_datetime,
4143
)
4244

4345
PLATFORMS = [Platform.SENSOR]
@@ -157,17 +159,22 @@ def _handle_coordinator_update(self) -> None:
157159
# Switch between orders depending on delivery datetime or output None
158160
order = ocado_data.get("next")
159161
if (order is None):
162+
# I don't think this will ever fire
160163
order = ocado_data.get("upcoming")
161-
if order is not None:
162-
if order.delivery_window_end < now:
164+
if has_delivery_window_end(order):
165+
if order.delivery_window_end < now: # type: ignore
163166
order = None
164-
if order is not None:
167+
else:
168+
order = None
169+
if has_delivery_window_end(order):
165170
# If the delivery datetime is in the past check upcoming
166-
if (order.delivery_window_end < now):
171+
if (order.delivery_window_end < now): # type: ignore
167172
order = ocado_data.get("upcoming")
168-
if order is not None:
169-
if (order.delivery_window_end < now):
173+
if has_delivery_window_end(order):
174+
if (order.delivery_window_end < now): # type: ignore
170175
order = None
176+
else:
177+
order = None
171178
if order is not None:
172179
result = set_order(self, order, now) # type: ignore
173180
_LOGGER.debug("Set_order returned %s", result)
@@ -270,18 +277,18 @@ def _handle_coordinator_update(self) -> None:
270277
order = ocado_data.get("next")
271278
if (order is None):
272279
order = ocado_data.get("upcoming")
273-
if order is not None:
274-
if order.edit_datetime < now:
280+
if has_edit_datetime(order):
281+
if order.edit_datetime < now: # type: ignore
275282
order = None
276283
else:
277284
order = None
278-
if order is not None:
285+
if has_edit_datetime(order):
279286
# If the edit datetime is in the past check upcoming
280-
if (order.edit_datetime < now):
287+
if (order.edit_datetime < now): # type: ignore
281288
order = ocado_data.get("upcoming")
282-
if order is not None:
289+
if has_edit_datetime(order):
283290
# If the edit datetime is in the past return empty
284-
if order.edit_datetime < now:
291+
if order.edit_datetime < now: # type: ignore
285292
self._attr_state = None
286293
self._attr_icon = "mdi:help-circle"
287294
self._hass_custom_attributes = {

custom_components/ocado/utils.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,13 @@ def capitalise(text: str) -> str:
167167
return text[0].upper() + text[1:]
168168

169169

170+
def has_delivery_window_end(order):
171+
return order is not None and getattr(order, "delivery_window_end", None) is not None
172+
173+
174+
def has_edit_datetime(order):
175+
return order is not None and getattr(order, "edit_datetime", None) is not None
176+
170177

171178
# reversed so that we start with the newest message and break on it
172179
def email_triage(self) -> tuple[list[Any], OcadoEmails | None]:

0 commit comments

Comments
 (0)