Skip to content

Commit 4e148a6

Browse files
committed
Breakout skip_obsolete_measurements() to util.py
1 parent df39d4c commit 4e148a6

File tree

3 files changed

+27
-33
lines changed

3 files changed

+27
-33
lines changed

plugwise/helper.py

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
LOCATIONS,
2828
LOGGER,
2929
NONE,
30-
OBSOLETE_MEASUREMENTS,
3130
OFF,
3231
P1_MEASUREMENTS,
3332
SENSORS,
@@ -55,7 +54,12 @@
5554
InvalidXMLError,
5655
ResponseError,
5756
)
58-
from plugwise.util import check_model, escape_illegal_xml_characters, format_measure
57+
from plugwise.util import (
58+
check_model,
59+
escape_illegal_xml_characters,
60+
format_measure,
61+
skip_obsolete_measurements,
62+
)
5963

6064
# This way of importing aiohttp is because of patch/mocking in testing (aiohttp timeouts)
6165
from aiohttp import BasicAuth, ClientError, ClientResponse, ClientSession, ClientTimeout
@@ -574,20 +578,8 @@ def _appliance_measurements(
574578
for measurement, attrs in measurements.items():
575579
p_locator = f'.//logs/point_log[type="{measurement}"]/period/measurement'
576580
if (appl_p_loc := appliance.find(p_locator)) is not None:
577-
# Skip known obsolete measurements
578-
updated_date_locator = (
579-
f'.//logs/point_log[type="{measurement}"]/updated_date'
580-
)
581-
if (
582-
measurement in OBSOLETE_MEASUREMENTS
583-
and (updated_date_key := appliance.find(updated_date_locator))
584-
is not None
585-
):
586-
updated_date = updated_date_key.text.split("T")[0]
587-
date_1 = dt.datetime.strptime(updated_date, "%Y-%m-%d")
588-
date_2 = dt.datetime.now()
589-
if int((date_2 - date_1).days) > 7:
590-
continue
581+
if skip_obsolete_measurements(appliance, measurement):
582+
continue
591583

592584
if new_name := getattr(attrs, ATTR_NAME, None):
593585
measurement = new_name

plugwise/legacy/helper.py

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
"""
55
from __future__ import annotations
66

7-
import datetime as dt
87
from typing import cast
98

109
from plugwise.common import SmileCommon
@@ -23,7 +22,6 @@
2322
HEATER_CENTRAL_MEASUREMENTS,
2423
LIMITS,
2524
NONE,
26-
OBSOLETE_MEASUREMENTS,
2725
P1_LEGACY_MEASUREMENTS,
2826
SENSORS,
2927
SPECIALS,
@@ -43,7 +41,7 @@
4341
SwitchType,
4442
ThermoLoc,
4543
)
46-
from plugwise.util import format_measure, version_to_model
44+
from plugwise.util import format_measure, skip_obsolete_measurements, version_to_model
4745

4846
# This way of importing aiohttp is because of patch/mocking in testing (aiohttp timeouts)
4947
from defusedxml import ElementTree as etree
@@ -336,20 +334,8 @@ def _appliance_measurements(
336334
if measurement == "domestic_hot_water_state":
337335
continue
338336

339-
# Skip known obsolete measurements
340-
updated_date_locator = (
341-
f'.//logs/point_log[type="{measurement}"]/updated_date'
342-
)
343-
if (
344-
measurement in OBSOLETE_MEASUREMENTS
345-
and (updated_date_key := appliance.find(updated_date_locator))
346-
is not None
347-
):
348-
updated_date = updated_date_key.text.split("T")[0]
349-
date_1 = dt.datetime.strptime(updated_date, "%Y-%m-%d")
350-
date_2 = dt.datetime.now()
351-
if int((date_2 - date_1).days) > 7:
352-
continue # pragma: no cover
337+
if skip_obsolete_measurements(appliance, measurement):
338+
continue # pragma: no cover
353339

354340
if new_name := getattr(attrs, ATTR_NAME, None):
355341
measurement = new_name

plugwise/util.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
"""Plugwise protocol helpers."""
22
from __future__ import annotations
33

4+
import datetime as dt
45
import re
56

67
from plugwise.constants import (
78
ATTR_UNIT_OF_MEASUREMENT,
89
ELECTRIC_POTENTIAL_VOLT,
910
ENERGY_KILO_WATT_HOUR,
1011
HW_MODELS,
12+
OBSOLETE_MEASUREMENTS,
1113
PERCENTAGE,
1214
POWER_WATT,
1315
SPECIAL_FORMAT,
@@ -128,6 +130,20 @@ def return_valid(value: etree | None, default: etree) -> etree:
128130
return value if value is not None else default
129131

130132

133+
def skip_obsolete_measurements(xml: etree, measurement: str) -> bool:
134+
"""Skipping known obsolete measurements."""
135+
locator = f".//logs/point_log[type='{measurement}']/updated_date"
136+
if (
137+
measurement in OBSOLETE_MEASUREMENTS
138+
and (updated_date_key := xml.find(locator))
139+
is not None
140+
):
141+
updated_date = updated_date_key.text.split("T")[0]
142+
date_1 = dt.datetime.strptime(updated_date, "%Y-%m-%d")
143+
date_2 = dt.datetime.now()
144+
return int((date_2 - date_1).days) > 7
145+
146+
131147
# NOTE: this function version_to_model is shared between Smile and USB
132148
def version_to_model(version: str | None) -> str | None:
133149
"""Translate hardware_version to device type."""

0 commit comments

Comments
 (0)