From b8b3d118df39a3e85fb8783eefde3a0a3d713cae Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Mon, 11 Dec 2023 07:01:36 -0500 Subject: [PATCH] Add rebuildRoutesProgress to state dump for controller (#833) * Add rebuildRoutesProgress to state dump for controller * fix tests * Move logic to helper function --- test/conftest.py | 2 +- test/model/test_controller.py | 7 +++-- test/test_client.py | 2 +- test/test_dump.py | 2 +- test/test_main.py | 2 +- zwave_js_server/const/__init__.py | 4 +-- zwave_js_server/model/controller/__init__.py | 27 +++++++++++++------ .../model/controller/data_model.py | 3 ++- 8 files changed, 32 insertions(+), 17 deletions(-) diff --git a/test/conftest.py b/test/conftest.py index fc4948c0..df7e392a 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -230,7 +230,7 @@ def version_data_fixture(): "serverVersion": "test_server_version", "homeId": "test_home_id", "minSchemaVersion": 0, - "maxSchemaVersion": 33, + "maxSchemaVersion": 34, } diff --git a/test/model/test_controller.py b/test/model/test_controller.py index 6f4888a3..ca733447 100644 --- a/test/model/test_controller.py +++ b/test/model/test_controller.py @@ -168,20 +168,23 @@ def test_from_state(): == 0 ) assert ctrl.rf_region is None + assert ctrl.rebuild_routes_progress is None -def test_controller_mods(): +def test_controller_mods(client): """Test modifications to controller method.""" state = json.loads(load_fixture("basic_dump.txt").split("\n")[0])["result"]["state"] state["controller"].pop("ownNodeId") state["controller"]["rfRegion"] = 0 state["controller"]["status"] = 0 + state["controller"]["rebuildRoutesProgress"] = {1: "pending"} - ctrl = controller_pkg.Controller(None, state) + ctrl = controller_pkg.Controller(client, state) assert ctrl.own_node_id is None assert ctrl.own_node is None assert ctrl.rf_region == RFRegion.EUROPE assert ctrl.status == ControllerStatus.READY + assert ctrl.rebuild_routes_progress == {ctrl.nodes[1]: RebuildRoutesStatus.PENDING} def test_controller_status(): diff --git a/test/test_client.py b/test/test_client.py index 2481e894..2a0ca443 100644 --- a/test/test_client.py +++ b/test/test_client.py @@ -457,7 +457,7 @@ async def test_additional_user_agent_components(client_session, url): { "command": "initialize", "messageId": "initialize", - "schemaVersion": 33, + "schemaVersion": 34, "additionalUserAgentComponents": { "zwave-js-server-python": __version__, "foo": "bar", diff --git a/test/test_dump.py b/test/test_dump.py index d5f4ccc7..e8847e65 100644 --- a/test/test_dump.py +++ b/test/test_dump.py @@ -105,7 +105,7 @@ async def test_dump_additional_user_agent_components( { "command": "initialize", "messageId": "initialize", - "schemaVersion": 33, + "schemaVersion": 34, "additionalUserAgentComponents": { "zwave-js-server-python": __version__, "foo": "bar", diff --git a/test/test_main.py b/test/test_main.py index f6c52b9e..bfff26fb 100644 --- a/test/test_main.py +++ b/test/test_main.py @@ -55,7 +55,7 @@ def test_dump_state( assert captured.out == ( "{'type': 'version', 'driverVersion': 'test_driver_version', " "'serverVersion': 'test_server_version', 'homeId': 'test_home_id', " - "'minSchemaVersion': 0, 'maxSchemaVersion': 33}\n" + "'minSchemaVersion': 0, 'maxSchemaVersion': 34}\n" "{'type': 'result', 'success': True, 'result': {}, 'messageId': 'initialize'}\n" "test_result\n" ) diff --git a/zwave_js_server/const/__init__.py b/zwave_js_server/const/__init__.py index 2e1df8d5..698e3ac3 100644 --- a/zwave_js_server/const/__init__.py +++ b/zwave_js_server/const/__init__.py @@ -10,9 +10,9 @@ __version__ = "0.54.0" # minimal server schema version we can handle -MIN_SERVER_SCHEMA_VERSION = 33 +MIN_SERVER_SCHEMA_VERSION = 34 # max server schema version we can handle (and our code is compatible with) -MAX_SERVER_SCHEMA_VERSION = 33 +MAX_SERVER_SCHEMA_VERSION = 34 VALUE_UNKNOWN = "unknown" diff --git a/zwave_js_server/model/controller/__init__.py b/zwave_js_server/model/controller/__init__.py index 4b5e5477..c9c9d744 100644 --- a/zwave_js_server/model/controller/__init__.py +++ b/zwave_js_server/model/controller/__init__.py @@ -98,6 +98,15 @@ def __eq__(self, other: object) -> bool: return False return self.home_id == other.home_id + def _generate_rebuild_routes_status( + self, data: dict[str, str] + ) -> dict[Node, RebuildRoutesStatus]: + """Generate rebuild routes status.""" + return { + self.nodes[int(node_id)]: RebuildRoutesStatus(status) + for node_id, status in data.items() + } + @property def sdk_version(self) -> str | None: """Return sdk_version.""" @@ -240,6 +249,10 @@ def update(self, data: ControllerDataType) -> None: self._statistics = ControllerStatistics( self.data.get("statistics", DEFAULT_CONTROLLER_STATISTICS) ) + if "rebuildRoutesProgress" in self.data: + self._rebuild_routes_progress = self._generate_rebuild_routes_status( + self.data["rebuildRoutesProgress"] + ) async def async_begin_inclusion( self, @@ -903,18 +916,16 @@ def handle_node_removed(self, event: Event) -> None: def handle_rebuild_routes_progress(self, event: Event) -> None: """Process a rebuild routes progress event.""" - self._rebuild_routes_progress = { - self.nodes[int(node_id)]: RebuildRoutesStatus(status) - for node_id, status in event.data["progress"].items() - } + self._rebuild_routes_progress = self._generate_rebuild_routes_status( + event.data["progress"] + ) self.data["isRebuildingRoutes"] = True def handle_rebuild_routes_done(self, event: Event) -> None: """Process a rebuild routes done event.""" - self._last_rebuild_routes_result = { - self.nodes[int(node_id)]: RebuildRoutesStatus(status) - for node_id, status in event.data["result"].items() - } + self._last_rebuild_routes_result = self._generate_rebuild_routes_status( + event.data["result"] + ) self._rebuild_routes_progress = None self.data["isRebuildingRoutes"] = False diff --git a/zwave_js_server/model/controller/data_model.py b/zwave_js_server/model/controller/data_model.py index 36f1652f..93bec0a1 100644 --- a/zwave_js_server/model/controller/data_model.py +++ b/zwave_js_server/model/controller/data_model.py @@ -16,7 +16,7 @@ class ControllerDataType(TypedDict, total=False): isPrimary: bool isSUC: bool nodeType: int - isUsingHomeIdFromOtherNetwork: bool # TODO: The following items are missing in the docs. + isUsingHomeIdFromOtherNetwork: bool isSISPresent: bool wasRealPrimary: bool firmwareVersion: str @@ -31,3 +31,4 @@ class ControllerDataType(TypedDict, total=False): inclusionState: int rfRegion: int status: int + rebuildRoutesProgress: dict[str, str]