From 7280a69fd7ed4208494892de7a9c209464fdf0e4 Mon Sep 17 00:00:00 2001 From: zghp <33546213+zghp@users.noreply.github.com> Date: Wed, 23 Jul 2025 09:03:52 +0100 Subject: [PATCH] added validation for json parsing --- framework/core/powerModules/tapoControl.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/framework/core/powerModules/tapoControl.py b/framework/core/powerModules/tapoControl.py index 39d83a2..d16866e 100644 --- a/framework/core/powerModules/tapoControl.py +++ b/framework/core/powerModules/tapoControl.py @@ -257,9 +257,20 @@ def getPowerLevel(self): raise RuntimeError("Power monitoring is not yet supported for Tapo strips") else: result = self._performCommand("emeter", json=True) - result = json.loads(result) + + if not result: + raise ValueError("Received empty response from Tapo device for power monitoring") + + try: + result = json.loads(result) + except json.JSONDecodeError as e: + raise ValueError(f"Failed to parse JSON from Tapo device response: {e}") + millewatt = result.get('power_mw') if millewatt: - power = int(millewatt) / 1000 - return power - raise KeyError("The dictionary return for the Tapo device did is not formed as expected.") + try: + power = int(millewatt) / 1000 + return power + except: + raise ValueError(f"Invalid value for power_mw: {millewatt}") + raise KeyError("The dictionary returned by the Tapo device does not contain a valid 'power_mw' value.")