From 263ef760f701cdaf3f8bd0a2f0303ef5b55d20ef Mon Sep 17 00:00:00 2001 From: Petar Petrov Date: Tue, 24 Jun 2025 18:00:29 +0300 Subject: [PATCH 1/3] Add `migrateOptions` to nvm restore methods --- zwave_js_server/model/controller/__init__.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/zwave_js_server/model/controller/__init__.py b/zwave_js_server/model/controller/__init__.py index 8f7a7e81..2a78608e 100644 --- a/zwave_js_server/model/controller/__init__.py +++ b/zwave_js_server/model/controller/__init__.py @@ -736,12 +736,13 @@ async def async_backup_nvm_raw(self) -> bytes: ) return convert_base64_to_bytes(data["nvmData"]) - async def async_restore_nvm(self, file: bytes) -> None: + async def async_restore_nvm(self, file: bytes, options: dict[str, bool] = {}) -> None: """Send restoreNVM command to Controller.""" await self.client.async_send_command( { "command": "controller.restore_nvm", "nvmData": convert_bytes_to_base64(file), + "migrateOptions": options, }, require_schema=14, ) @@ -753,12 +754,13 @@ async def async_backup_nvm_raw_base64(self) -> str: ) return data["nvmData"] - async def async_restore_nvm_base64(self, base64_data: str) -> None: + async def async_restore_nvm_base64(self, base64_data: str, options: dict[str, bool] = {}) -> None: """Send restoreNVM command to Controller with base64 data directly.""" await self.client.async_send_command( { "command": "controller.restore_nvm", "nvmData": base64_data, + "migrateOptions": options, }, require_schema=14, ) From 0c74440e9c683b12072377e4e3ce50bc1e55b047 Mon Sep 17 00:00:00 2001 From: Petar Petrov Date: Tue, 24 Jun 2025 18:04:36 +0300 Subject: [PATCH 2/3] bump require_schema to 42 --- zwave_js_server/model/controller/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zwave_js_server/model/controller/__init__.py b/zwave_js_server/model/controller/__init__.py index 2a78608e..07c0083c 100644 --- a/zwave_js_server/model/controller/__init__.py +++ b/zwave_js_server/model/controller/__init__.py @@ -744,7 +744,7 @@ async def async_restore_nvm(self, file: bytes, options: dict[str, bool] = {}) -> "nvmData": convert_bytes_to_base64(file), "migrateOptions": options, }, - require_schema=14, + require_schema=42, ) async def async_backup_nvm_raw_base64(self) -> str: @@ -762,7 +762,7 @@ async def async_restore_nvm_base64(self, base64_data: str, options: dict[str, bo "nvmData": base64_data, "migrateOptions": options, }, - require_schema=14, + require_schema=42, ) async def async_get_power_level(self) -> dict[str, int]: From 9c7678340756cfd4e1dea01c670e40c7c59c4683 Mon Sep 17 00:00:00 2001 From: Petar Petrov Date: Wed, 25 Jun 2025 08:44:23 +0300 Subject: [PATCH 3/3] update tests --- test/model/test_controller.py | 14 +++++++++++++- zwave_js_server/model/controller/__init__.py | 12 ++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/test/model/test_controller.py b/test/model/test_controller.py index 139c1942..476232d8 100644 --- a/test/model/test_controller.py +++ b/test/model/test_controller.py @@ -1769,13 +1769,24 @@ async def test_restore_nvm(controller, uuid4, mock_command): {"command": "controller.restore_nvm"}, {}, ) - await controller.async_restore_nvm(bytes(10)) + await controller.async_restore_nvm(bytes(10), {}) assert len(ack_commands) == 1 assert ack_commands[0] == { "command": "controller.restore_nvm", "nvmData": "AAAAAAAAAAAAAA==", "messageId": uuid4, + "migrateOptions": {}, + } + + await controller.async_restore_nvm(bytes(10), {"preserveRoutes": False}) + + assert len(ack_commands) == 2 + assert ack_commands[1] == { + "command": "controller.restore_nvm", + "nvmData": "AAAAAAAAAAAAAA==", + "messageId": uuid4, + "migrateOptions": {"preserveRoutes": False}, } @@ -1807,6 +1818,7 @@ async def test_restore_nvm_base64(controller, uuid4, mock_command): "command": "controller.restore_nvm", "nvmData": "AAAAAAAAAAAAAA==", "messageId": uuid4, + "migrateOptions": {}, } diff --git a/zwave_js_server/model/controller/__init__.py b/zwave_js_server/model/controller/__init__.py index 07c0083c..e6c8e6b4 100644 --- a/zwave_js_server/model/controller/__init__.py +++ b/zwave_js_server/model/controller/__init__.py @@ -736,13 +736,15 @@ async def async_backup_nvm_raw(self) -> bytes: ) return convert_base64_to_bytes(data["nvmData"]) - async def async_restore_nvm(self, file: bytes, options: dict[str, bool] = {}) -> None: + async def async_restore_nvm( + self, file: bytes, options: dict[str, bool] | None = None + ) -> None: """Send restoreNVM command to Controller.""" await self.client.async_send_command( { "command": "controller.restore_nvm", "nvmData": convert_bytes_to_base64(file), - "migrateOptions": options, + "migrateOptions": {} if options is None else options, }, require_schema=42, ) @@ -754,13 +756,15 @@ async def async_backup_nvm_raw_base64(self) -> str: ) return data["nvmData"] - async def async_restore_nvm_base64(self, base64_data: str, options: dict[str, bool] = {}) -> None: + async def async_restore_nvm_base64( + self, base64_data: str, options: dict[str, bool] | None = None + ) -> None: """Send restoreNVM command to Controller with base64 data directly.""" await self.client.async_send_command( { "command": "controller.restore_nvm", "nvmData": base64_data, - "migrateOptions": options, + "migrateOptions": {} if options is None else options, }, require_schema=42, )