Skip to content

Commit a16b11e

Browse files
committed
Solve _collect_smile_data() too high complexity
1 parent 2db399f commit a16b11e

1 file changed

Lines changed: 25 additions & 20 deletions

File tree

‎plugwise/__init__.py‎

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -198,28 +198,10 @@ async def _collect_smile_data(
198198
self, dsmrmain: etree.Element, result: etree.Element
199199
) -> str:
200200
"""Collect smile/gateway data."""
201-
model: str = "Unknown"
202201
if (gateway := result.find("./gateway")) is not None:
203-
self.smile.version = parse(gateway.find("firmware_version").text)
204-
self.smile.hw_version = gateway.find("hardware_version").text
205-
self.smile.hostname = gateway.find("hostname").text
206-
self.smile.mac_address = gateway.find("mac_address").text
207-
if (wifi_mac := gateway.find("wifi_mac_address")) is not None:
208-
self.smile.wifi_mac_address = wifi_mac.text
209-
if (vendor_model := gateway.find("vendor_model")) is not None:
210-
model = vendor_model.text
211-
212-
# Check for Anna P1 function
213-
elec_point_meters = result.findall(
214-
"./location/logs/point_log/electricity_point_meter"
215-
)
216-
if model == "smile_thermo":
217-
for meter in elec_point_meters:
218-
if meter.get("id"):
219-
self.smile.anna_p1 = True
220-
break
202+
model = self._collect_gateway_data(gateway, result)
221203
else:
222-
model = await self._smile_detect_legacy(result, dsmrmain, model)
204+
model = await self._smile_detect_legacy(result, dsmrmain, "Unknown")
223205

224206
if model == "Unknown" or self.smile.version == Version(
225207
"0.0.0"
@@ -233,6 +215,29 @@ async def _collect_smile_data(
233215

234216
return model
235217

218+
def _collect_gateway_data(
219+
self, gateway: etree.Element, result: etree.Element
220+
) -> str:
221+
"""Collect data from a current-generation gateway."""
222+
self.smile.version = parse(gateway.find("firmware_version").text)
223+
self.smile.hw_version = gateway.find("hardware_version").text
224+
self.smile.hostname = gateway.find("hostname").text
225+
self.smile.mac_address = gateway.find("mac_address").text
226+
if (wifi_mac := gateway.find("wifi_mac_address")) is not None:
227+
self.smile.wifi_mac_address = wifi_mac.text
228+
229+
model = gateway.findtext("vendor_model", "Unknown")
230+
if model == "smile_thermo":
231+
has_anna_p1 = any(
232+
meter.get("id")
233+
for meter in result.findall(
234+
"./location/logs/point_log/electricity_point_meter"
235+
)
236+
)
237+
if has_anna_p1:
238+
self.smile.anna_p1 = True
239+
return model
240+
236241
def _process_for_thermostat(self, result: etree.Element) -> None:
237242
"""Extra processing for thermostats."""
238243
if self.smile.type != "thermostat":

0 commit comments

Comments
 (0)