From ca7b7a05a4317b7ac30ddeecea7e36f1cbd655c0 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 5 Jun 2026 06:06:41 -0400 Subject: [PATCH] =?UTF-8?q?sandbox:=20B1=20=E2=80=94=20get=5Ftranslations?= =?UTF-8?q?=20wire=20protocol?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the sandbox/get_translations message pair to the control-channel proto and regenerate the checked-in gencode for both no-cross-import mirrors. Mirror MSG_GET_TRANSLATIONS in both protocol.py files and register the message pair in both messages.py REGISTRY copies. Request {language, domains[]}; result {language, strings: {domain: raw strings.json dict}} — main batches a group's custom domains into one call; built-in domains never cross the wire. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../components/sandbox/_proto/sandbox_pb2.py | 122 +++++++++--------- .../components/sandbox/_proto/sandbox_pb2.pyi | 16 +++ homeassistant/components/sandbox/messages.py | 1 + homeassistant/components/sandbox/protocol.py | 10 ++ .../hass_client/_proto/sandbox_pb2.py | 122 +++++++++--------- .../hass_client/_proto/sandbox_pb2.pyi | 16 +++ sandbox/hass_client/hass_client/messages.py | 1 + sandbox/hass_client/hass_client/protocol.py | 2 + sandbox/proto/sandbox.proto | 20 +++ 9 files changed, 192 insertions(+), 118 deletions(-) diff --git a/homeassistant/components/sandbox/_proto/sandbox_pb2.py b/homeassistant/components/sandbox/_proto/sandbox_pb2.py index 551d4b660b8e..5047c3c31667 100644 --- a/homeassistant/components/sandbox/_proto/sandbox_pb2.py +++ b/homeassistant/components/sandbox/_proto/sandbox_pb2.py @@ -25,7 +25,7 @@ _sym_db = _symbol_database.Default() from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rsandbox.proto\x12\x07sandbox\x1a\x1cgoogle/protobuf/struct.proto\"c\n\x05\x46rame\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x11\n\x07request\x18\x03 \x01(\x0cH\x00\x12%\n\x08response\x18\x04 \x01(\x0b\x32\x11.sandbox.ResponseH\x00\x42\x06\n\x04\x62ody\"E\n\x08Response\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x0e\n\x06result\x18\x02 \x01(\x0c\x12\x1d\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x0e.sandbox.Error\"`\n\x05\x45rror\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12&\n\x07invalid\x18\x03 \x03(\x0b\x32\x15.sandbox.InvalidError\x12\x10\n\x08multiple\x18\x04 \x01(\x08\"-\n\x0cInvalidError\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x03(\t\"(\n\nDevicePair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xcc\x03\n\nDeviceInfo\x12(\n\x0bidentifiers\x18\x01 \x03(\x0b\x32\x13.sandbox.DevicePair\x12(\n\x0b\x63onnections\x18\x02 \x03(\x0b\x32\x13.sandbox.DevicePair\x12,\n\nvia_device\x18\x03 \x01(\x0b\x32\x13.sandbox.DevicePairH\x00\x88\x01\x01\x12\x12\n\nentry_type\x18\x04 \x01(\t\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x14\n\x0cmanufacturer\x18\x06 \x01(\t\x12\r\n\x05model\x18\x07 \x01(\t\x12\x10\n\x08model_id\x18\x08 \x01(\t\x12\x12\n\nsw_version\x18\t \x01(\t\x12\x12\n\nhw_version\x18\n \x01(\t\x12\x15\n\rserial_number\x18\x0b \x01(\t\x12\x16\n\x0esuggested_area\x18\x0c \x01(\t\x12\x19\n\x11\x63onfiguration_url\x18\r \x01(\t\x12\x14\n\x0c\x64\x65\x66\x61ult_name\x18\x0e \x01(\t\x12\x1c\n\x14\x64\x65\x66\x61ult_manufacturer\x18\x0f \x01(\t\x12\x15\n\rdefault_model\x18\x10 \x01(\t\x12\x17\n\x0ftranslation_key\x18\x11 \x01(\tB\r\n\x0b_via_device\"h\n\x11IntegrationSource\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x0b\n\x03ref\x18\x03 \x01(\t\x12\x0b\n\x03tag\x18\x04 \x01(\t\x12\x0e\n\x06\x64omain\x18\x05 \x01(\t\x12\x0e\n\x06subdir\x18\x06 \x01(\t\"\xa4\x02\n\nEntrySetup\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12%\n\x04\x64\x61ta\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12(\n\x07options\x18\x05 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0e\n\x06source\x18\x06 \x01(\t\x12\x16\n\tunique_id\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07version\x18\x08 \x01(\x05\x12\x15\n\rminor_version\x18\t \x01(\x05\x12\x36\n\x12integration_source\x18\n \x01(\x0b\x32\x1a.sandbox.IntegrationSourceB\x0c\n\n_unique_id\">\n\x10\x45ntrySetupResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x13\n\x06reason\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_reason\"\x1f\n\x0b\x45ntryUnload\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\"\x1f\n\x11\x45ntryUnloadResult\x12\n\n\x02ok\x18\x01 \x01(\x08\"\xc7\x01\n\x0b\x43\x61llService\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\'\n\x06target\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\x12-\n\x0cservice_data\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x17\n\ncontext_id\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x17\n\x0freturn_response\x18\x06 \x01(\x08\x42\r\n\x0b_context_id\"8\n\x0fServiceResponse\x12%\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.Struct\"Q\n\x11\x43\x61llServiceResult\x12/\n\x08response\x18\x01 \x01(\x0b\x32\x18.sandbox.ServiceResponseH\x00\x88\x01\x01\x42\x0b\n\t_response\"\n\n\x08Shutdown\"u\n\x0eShutdownResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x10\n\x08unloaded\x18\x02 \x01(\x05\x12\x33\n\rrestore_state\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x42\x10\n\x0e_restore_state\"\x06\n\x04Ping\"\x1a\n\nPingResult\x12\x0c\n\x04pong\x18\x01 \x01(\t\"\x07\n\x05Ready\"l\n\x08\x46lowInit\x12\x0f\n\x07handler\x18\x01 \x01(\t\x12(\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12%\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\"H\n\x08\x46lowStep\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12+\n\nuser_input\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\x1c\n\tFlowAbort\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\"\x11\n\x0f\x46lowAbortResult\"\xa9\x05\n\nFlowResult\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x14\n\x07\x66low_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07handler\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07step_id\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06reason\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x12\n\x05title\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x16\n\tlast_step\x18\x08 \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07preview\x18\t \x01(\tH\x07\x88\x01\x01\x12\x14\n\x07version\x18\n \x01(\x05H\x08\x88\x01\x01\x12\x1a\n\rminor_version\x18\x0b \x01(\x05H\t\x88\x01\x01\x12%\n\x04\x64\x61ta\x18\x0c \x01(\x0b\x32\x17.google.protobuf.Struct\x12(\n\x07options\x18\r \x01(\x0b\x32\x17.google.protobuf.Struct\x12\'\n\x06\x65rrors\x18\x0e \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x39\n\x18\x64\x65scription_placeholders\x18\x0f \x01(\x0b\x32\x17.google.protobuf.Struct\x12(\n\x07\x63ontext\x18\x10 \x01(\x0b\x32\x17.google.protobuf.Struct\x12/\n\x0b\x64\x61ta_schema\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.ListValue\x12\x17\n\x0fhas_data_schema\x18\x12 \x01(\x08\x42\n\n\x08_flow_idB\n\n\x08_handlerB\n\n\x08_step_idB\t\n\x07_reasonB\x08\n\x06_titleB\x0e\n\x0c_descriptionB\x0c\n\n_last_stepB\n\n\x08_previewB\n\n\x08_versionB\x10\n\x0e_minor_version\"\x8a\x03\n\nEntityInfo\x12\x39\n\x0b\x64\x65scription\x18\x01 \x01(\x0b\x32\x1f.sandbox.EntityInfo.DescriptionH\x00\x88\x01\x01\x12-\n\x0b\x64\x65vice_info\x18\x02 \x01(\x0b\x32\x13.sandbox.DeviceInfoH\x01\x88\x01\x01\x1a\xf1\x01\n\x0b\x44\x65scription\x12\x11\n\x04name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04icon\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0f\x65ntity_category\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0c\x64\x65vice_class\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\x12supported_features\x18\x05 \x01(\x05\x12\x1c\n\x0ftranslation_key\x18\x06 \x01(\tH\x04\x88\x01\x01\x42\x07\n\x05_nameB\x07\n\x05_iconB\x12\n\x10_entity_categoryB\x0f\n\r_device_classB\x12\n\x10_translation_keyB\x0e\n\x0c_descriptionB\x0e\n\x0c_device_info\"\x88\x01\n\x0cInitialState\x12\x12\n\x05state\x18\x01 \x01(\tH\x00\x88\x01\x01\x12-\n\x0c\x63\x61pabilities\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12+\n\nattributes\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructB\x08\n\x06_state\"\xda\x01\n\x11\x45ntityDescription\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\x12\x19\n\x11sandbox_entity_id\x18\x03 \x01(\t\x12\x16\n\tunique_id\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x17\n\x0fhas_entity_name\x18\x05 \x01(\x08\x12!\n\x04info\x18\x06 \x01(\x0b\x32\x13.sandbox.EntityInfo\x12&\n\x07initial\x18\x07 \x01(\x0b\x32\x15.sandbox.InitialStateB\x0c\n\n_unique_id\")\n\x14RegisterEntityResult\x12\x11\n\tentity_id\x18\x01 \x01(\t\"-\n\x10UnregisterEntity\x12\x19\n\x11sandbox_entity_id\x18\x01 \x01(\t\"$\n\x16UnregisterEntityResult\x12\n\n\x02ok\x18\x01 \x01(\x08\"\x9c\x01\n\x0cStateChanged\x12\x19\n\x11sandbox_entity_id\x18\x01 \x01(\t\x12\x12\n\x05state\x18\x02 \x01(\tH\x00\x88\x01\x01\x12+\n\nattributes\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x17\n\ncontext_id\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_stateB\r\n\x0b_context_id\"y\n\x0fRegisterService\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x19\n\x11supports_response\x18\x03 \x01(\t\x12*\n\x06schema\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"6\n\x15RegisterServiceResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x11\n\tinstalled\x18\x02 \x01(\x08\"4\n\x11UnregisterService\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\"6\n\x17UnregisterServiceResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x0f\n\x07removed\x18\x02 \x01(\x08\"t\n\tFireEvent\x12\x12\n\nevent_type\x18\x01 \x01(\t\x12+\n\nevent_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x17\n\ncontext_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_context_id\"\x18\n\tStoreLoad\x12\x0b\n\x03key\x18\x01 \x01(\t\"F\n\x0fStoreLoadResult\x12*\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x42\x07\n\x05_data\"?\n\tStoreSave\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\x1d\n\x0fStoreSaveResult\x12\n\n\x02ok\x18\x01 \x01(\x08\"\x1a\n\x0bStoreRemove\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1f\n\x11StoreRemoveResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rsandbox.proto\x12\x07sandbox\x1a\x1cgoogle/protobuf/struct.proto\"c\n\x05\x46rame\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x11\n\x07request\x18\x03 \x01(\x0cH\x00\x12%\n\x08response\x18\x04 \x01(\x0b\x32\x11.sandbox.ResponseH\x00\x42\x06\n\x04\x62ody\"E\n\x08Response\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x0e\n\x06result\x18\x02 \x01(\x0c\x12\x1d\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x0e.sandbox.Error\"`\n\x05\x45rror\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12&\n\x07invalid\x18\x03 \x03(\x0b\x32\x15.sandbox.InvalidError\x12\x10\n\x08multiple\x18\x04 \x01(\x08\"-\n\x0cInvalidError\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x03(\t\"(\n\nDevicePair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xcc\x03\n\nDeviceInfo\x12(\n\x0bidentifiers\x18\x01 \x03(\x0b\x32\x13.sandbox.DevicePair\x12(\n\x0b\x63onnections\x18\x02 \x03(\x0b\x32\x13.sandbox.DevicePair\x12,\n\nvia_device\x18\x03 \x01(\x0b\x32\x13.sandbox.DevicePairH\x00\x88\x01\x01\x12\x12\n\nentry_type\x18\x04 \x01(\t\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x14\n\x0cmanufacturer\x18\x06 \x01(\t\x12\r\n\x05model\x18\x07 \x01(\t\x12\x10\n\x08model_id\x18\x08 \x01(\t\x12\x12\n\nsw_version\x18\t \x01(\t\x12\x12\n\nhw_version\x18\n \x01(\t\x12\x15\n\rserial_number\x18\x0b \x01(\t\x12\x16\n\x0esuggested_area\x18\x0c \x01(\t\x12\x19\n\x11\x63onfiguration_url\x18\r \x01(\t\x12\x14\n\x0c\x64\x65\x66\x61ult_name\x18\x0e \x01(\t\x12\x1c\n\x14\x64\x65\x66\x61ult_manufacturer\x18\x0f \x01(\t\x12\x15\n\rdefault_model\x18\x10 \x01(\t\x12\x17\n\x0ftranslation_key\x18\x11 \x01(\tB\r\n\x0b_via_device\"h\n\x11IntegrationSource\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x0b\n\x03ref\x18\x03 \x01(\t\x12\x0b\n\x03tag\x18\x04 \x01(\t\x12\x0e\n\x06\x64omain\x18\x05 \x01(\t\x12\x0e\n\x06subdir\x18\x06 \x01(\t\"\xa4\x02\n\nEntrySetup\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12%\n\x04\x64\x61ta\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12(\n\x07options\x18\x05 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0e\n\x06source\x18\x06 \x01(\t\x12\x16\n\tunique_id\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07version\x18\x08 \x01(\x05\x12\x15\n\rminor_version\x18\t \x01(\x05\x12\x36\n\x12integration_source\x18\n \x01(\x0b\x32\x1a.sandbox.IntegrationSourceB\x0c\n\n_unique_id\">\n\x10\x45ntrySetupResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x13\n\x06reason\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_reason\"\x1f\n\x0b\x45ntryUnload\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\"\x1f\n\x11\x45ntryUnloadResult\x12\n\n\x02ok\x18\x01 \x01(\x08\"\xc7\x01\n\x0b\x43\x61llService\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\'\n\x06target\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\x12-\n\x0cservice_data\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x17\n\ncontext_id\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x17\n\x0freturn_response\x18\x06 \x01(\x08\x42\r\n\x0b_context_id\"8\n\x0fServiceResponse\x12%\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.Struct\"Q\n\x11\x43\x61llServiceResult\x12/\n\x08response\x18\x01 \x01(\x0b\x32\x18.sandbox.ServiceResponseH\x00\x88\x01\x01\x42\x0b\n\t_response\"4\n\x0fGetTranslations\x12\x10\n\x08language\x18\x01 \x01(\t\x12\x0f\n\x07\x64omains\x18\x02 \x03(\t\"S\n\x15GetTranslationsResult\x12\x10\n\x08language\x18\x01 \x01(\t\x12(\n\x07strings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\n\n\x08Shutdown\"u\n\x0eShutdownResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x10\n\x08unloaded\x18\x02 \x01(\x05\x12\x33\n\rrestore_state\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x42\x10\n\x0e_restore_state\"\x06\n\x04Ping\"\x1a\n\nPingResult\x12\x0c\n\x04pong\x18\x01 \x01(\t\"\x07\n\x05Ready\"l\n\x08\x46lowInit\x12\x0f\n\x07handler\x18\x01 \x01(\t\x12(\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12%\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\"H\n\x08\x46lowStep\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12+\n\nuser_input\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\x1c\n\tFlowAbort\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\"\x11\n\x0f\x46lowAbortResult\"\xa9\x05\n\nFlowResult\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x14\n\x07\x66low_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07handler\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07step_id\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06reason\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x12\n\x05title\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x16\n\tlast_step\x18\x08 \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07preview\x18\t \x01(\tH\x07\x88\x01\x01\x12\x14\n\x07version\x18\n \x01(\x05H\x08\x88\x01\x01\x12\x1a\n\rminor_version\x18\x0b \x01(\x05H\t\x88\x01\x01\x12%\n\x04\x64\x61ta\x18\x0c \x01(\x0b\x32\x17.google.protobuf.Struct\x12(\n\x07options\x18\r \x01(\x0b\x32\x17.google.protobuf.Struct\x12\'\n\x06\x65rrors\x18\x0e \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x39\n\x18\x64\x65scription_placeholders\x18\x0f \x01(\x0b\x32\x17.google.protobuf.Struct\x12(\n\x07\x63ontext\x18\x10 \x01(\x0b\x32\x17.google.protobuf.Struct\x12/\n\x0b\x64\x61ta_schema\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.ListValue\x12\x17\n\x0fhas_data_schema\x18\x12 \x01(\x08\x42\n\n\x08_flow_idB\n\n\x08_handlerB\n\n\x08_step_idB\t\n\x07_reasonB\x08\n\x06_titleB\x0e\n\x0c_descriptionB\x0c\n\n_last_stepB\n\n\x08_previewB\n\n\x08_versionB\x10\n\x0e_minor_version\"\x8a\x03\n\nEntityInfo\x12\x39\n\x0b\x64\x65scription\x18\x01 \x01(\x0b\x32\x1f.sandbox.EntityInfo.DescriptionH\x00\x88\x01\x01\x12-\n\x0b\x64\x65vice_info\x18\x02 \x01(\x0b\x32\x13.sandbox.DeviceInfoH\x01\x88\x01\x01\x1a\xf1\x01\n\x0b\x44\x65scription\x12\x11\n\x04name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04icon\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0f\x65ntity_category\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0c\x64\x65vice_class\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\x12supported_features\x18\x05 \x01(\x05\x12\x1c\n\x0ftranslation_key\x18\x06 \x01(\tH\x04\x88\x01\x01\x42\x07\n\x05_nameB\x07\n\x05_iconB\x12\n\x10_entity_categoryB\x0f\n\r_device_classB\x12\n\x10_translation_keyB\x0e\n\x0c_descriptionB\x0e\n\x0c_device_info\"\x88\x01\n\x0cInitialState\x12\x12\n\x05state\x18\x01 \x01(\tH\x00\x88\x01\x01\x12-\n\x0c\x63\x61pabilities\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12+\n\nattributes\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructB\x08\n\x06_state\"\xda\x01\n\x11\x45ntityDescription\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\x12\x19\n\x11sandbox_entity_id\x18\x03 \x01(\t\x12\x16\n\tunique_id\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x17\n\x0fhas_entity_name\x18\x05 \x01(\x08\x12!\n\x04info\x18\x06 \x01(\x0b\x32\x13.sandbox.EntityInfo\x12&\n\x07initial\x18\x07 \x01(\x0b\x32\x15.sandbox.InitialStateB\x0c\n\n_unique_id\")\n\x14RegisterEntityResult\x12\x11\n\tentity_id\x18\x01 \x01(\t\"-\n\x10UnregisterEntity\x12\x19\n\x11sandbox_entity_id\x18\x01 \x01(\t\"$\n\x16UnregisterEntityResult\x12\n\n\x02ok\x18\x01 \x01(\x08\"\x9c\x01\n\x0cStateChanged\x12\x19\n\x11sandbox_entity_id\x18\x01 \x01(\t\x12\x12\n\x05state\x18\x02 \x01(\tH\x00\x88\x01\x01\x12+\n\nattributes\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x17\n\ncontext_id\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_stateB\r\n\x0b_context_id\"y\n\x0fRegisterService\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x19\n\x11supports_response\x18\x03 \x01(\t\x12*\n\x06schema\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"6\n\x15RegisterServiceResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x11\n\tinstalled\x18\x02 \x01(\x08\"4\n\x11UnregisterService\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\"6\n\x17UnregisterServiceResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x0f\n\x07removed\x18\x02 \x01(\x08\"t\n\tFireEvent\x12\x12\n\nevent_type\x18\x01 \x01(\t\x12+\n\nevent_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x17\n\ncontext_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_context_id\"\x18\n\tStoreLoad\x12\x0b\n\x03key\x18\x01 \x01(\t\"F\n\x0fStoreLoadResult\x12*\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x42\x07\n\x05_data\"?\n\tStoreSave\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\x1d\n\x0fStoreSaveResult\x12\n\n\x02ok\x18\x01 \x01(\x08\"\x1a\n\x0bStoreRemove\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1f\n\x11StoreRemoveResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -60,62 +60,66 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['_SERVICERESPONSE']._serialized_end=1667 _globals['_CALLSERVICERESULT']._serialized_start=1669 _globals['_CALLSERVICERESULT']._serialized_end=1750 - _globals['_SHUTDOWN']._serialized_start=1752 - _globals['_SHUTDOWN']._serialized_end=1762 - _globals['_SHUTDOWNRESULT']._serialized_start=1764 - _globals['_SHUTDOWNRESULT']._serialized_end=1881 - _globals['_PING']._serialized_start=1883 - _globals['_PING']._serialized_end=1889 - _globals['_PINGRESULT']._serialized_start=1891 - _globals['_PINGRESULT']._serialized_end=1917 - _globals['_READY']._serialized_start=1919 - _globals['_READY']._serialized_end=1926 - _globals['_FLOWINIT']._serialized_start=1928 - _globals['_FLOWINIT']._serialized_end=2036 - _globals['_FLOWSTEP']._serialized_start=2038 - _globals['_FLOWSTEP']._serialized_end=2110 - _globals['_FLOWABORT']._serialized_start=2112 - _globals['_FLOWABORT']._serialized_end=2140 - _globals['_FLOWABORTRESULT']._serialized_start=2142 - _globals['_FLOWABORTRESULT']._serialized_end=2159 - _globals['_FLOWRESULT']._serialized_start=2162 - _globals['_FLOWRESULT']._serialized_end=2843 - _globals['_ENTITYINFO']._serialized_start=2846 - _globals['_ENTITYINFO']._serialized_end=3240 - _globals['_ENTITYINFO_DESCRIPTION']._serialized_start=2967 - _globals['_ENTITYINFO_DESCRIPTION']._serialized_end=3208 - _globals['_INITIALSTATE']._serialized_start=3243 - _globals['_INITIALSTATE']._serialized_end=3379 - _globals['_ENTITYDESCRIPTION']._serialized_start=3382 - _globals['_ENTITYDESCRIPTION']._serialized_end=3600 - _globals['_REGISTERENTITYRESULT']._serialized_start=3602 - _globals['_REGISTERENTITYRESULT']._serialized_end=3643 - _globals['_UNREGISTERENTITY']._serialized_start=3645 - _globals['_UNREGISTERENTITY']._serialized_end=3690 - _globals['_UNREGISTERENTITYRESULT']._serialized_start=3692 - _globals['_UNREGISTERENTITYRESULT']._serialized_end=3728 - _globals['_STATECHANGED']._serialized_start=3731 - _globals['_STATECHANGED']._serialized_end=3887 - _globals['_REGISTERSERVICE']._serialized_start=3889 - _globals['_REGISTERSERVICE']._serialized_end=4010 - _globals['_REGISTERSERVICERESULT']._serialized_start=4012 - _globals['_REGISTERSERVICERESULT']._serialized_end=4066 - _globals['_UNREGISTERSERVICE']._serialized_start=4068 - _globals['_UNREGISTERSERVICE']._serialized_end=4120 - _globals['_UNREGISTERSERVICERESULT']._serialized_start=4122 - _globals['_UNREGISTERSERVICERESULT']._serialized_end=4176 - _globals['_FIREEVENT']._serialized_start=4178 - _globals['_FIREEVENT']._serialized_end=4294 - _globals['_STORELOAD']._serialized_start=4296 - _globals['_STORELOAD']._serialized_end=4320 - _globals['_STORELOADRESULT']._serialized_start=4322 - _globals['_STORELOADRESULT']._serialized_end=4392 - _globals['_STORESAVE']._serialized_start=4394 - _globals['_STORESAVE']._serialized_end=4457 - _globals['_STORESAVERESULT']._serialized_start=4459 - _globals['_STORESAVERESULT']._serialized_end=4488 - _globals['_STOREREMOVE']._serialized_start=4490 - _globals['_STOREREMOVE']._serialized_end=4516 - _globals['_STOREREMOVERESULT']._serialized_start=4518 - _globals['_STOREREMOVERESULT']._serialized_end=4549 + _globals['_GETTRANSLATIONS']._serialized_start=1752 + _globals['_GETTRANSLATIONS']._serialized_end=1804 + _globals['_GETTRANSLATIONSRESULT']._serialized_start=1806 + _globals['_GETTRANSLATIONSRESULT']._serialized_end=1889 + _globals['_SHUTDOWN']._serialized_start=1891 + _globals['_SHUTDOWN']._serialized_end=1901 + _globals['_SHUTDOWNRESULT']._serialized_start=1903 + _globals['_SHUTDOWNRESULT']._serialized_end=2020 + _globals['_PING']._serialized_start=2022 + _globals['_PING']._serialized_end=2028 + _globals['_PINGRESULT']._serialized_start=2030 + _globals['_PINGRESULT']._serialized_end=2056 + _globals['_READY']._serialized_start=2058 + _globals['_READY']._serialized_end=2065 + _globals['_FLOWINIT']._serialized_start=2067 + _globals['_FLOWINIT']._serialized_end=2175 + _globals['_FLOWSTEP']._serialized_start=2177 + _globals['_FLOWSTEP']._serialized_end=2249 + _globals['_FLOWABORT']._serialized_start=2251 + _globals['_FLOWABORT']._serialized_end=2279 + _globals['_FLOWABORTRESULT']._serialized_start=2281 + _globals['_FLOWABORTRESULT']._serialized_end=2298 + _globals['_FLOWRESULT']._serialized_start=2301 + _globals['_FLOWRESULT']._serialized_end=2982 + _globals['_ENTITYINFO']._serialized_start=2985 + _globals['_ENTITYINFO']._serialized_end=3379 + _globals['_ENTITYINFO_DESCRIPTION']._serialized_start=3106 + _globals['_ENTITYINFO_DESCRIPTION']._serialized_end=3347 + _globals['_INITIALSTATE']._serialized_start=3382 + _globals['_INITIALSTATE']._serialized_end=3518 + _globals['_ENTITYDESCRIPTION']._serialized_start=3521 + _globals['_ENTITYDESCRIPTION']._serialized_end=3739 + _globals['_REGISTERENTITYRESULT']._serialized_start=3741 + _globals['_REGISTERENTITYRESULT']._serialized_end=3782 + _globals['_UNREGISTERENTITY']._serialized_start=3784 + _globals['_UNREGISTERENTITY']._serialized_end=3829 + _globals['_UNREGISTERENTITYRESULT']._serialized_start=3831 + _globals['_UNREGISTERENTITYRESULT']._serialized_end=3867 + _globals['_STATECHANGED']._serialized_start=3870 + _globals['_STATECHANGED']._serialized_end=4026 + _globals['_REGISTERSERVICE']._serialized_start=4028 + _globals['_REGISTERSERVICE']._serialized_end=4149 + _globals['_REGISTERSERVICERESULT']._serialized_start=4151 + _globals['_REGISTERSERVICERESULT']._serialized_end=4205 + _globals['_UNREGISTERSERVICE']._serialized_start=4207 + _globals['_UNREGISTERSERVICE']._serialized_end=4259 + _globals['_UNREGISTERSERVICERESULT']._serialized_start=4261 + _globals['_UNREGISTERSERVICERESULT']._serialized_end=4315 + _globals['_FIREEVENT']._serialized_start=4317 + _globals['_FIREEVENT']._serialized_end=4433 + _globals['_STORELOAD']._serialized_start=4435 + _globals['_STORELOAD']._serialized_end=4459 + _globals['_STORELOADRESULT']._serialized_start=4461 + _globals['_STORELOADRESULT']._serialized_end=4531 + _globals['_STORESAVE']._serialized_start=4533 + _globals['_STORESAVE']._serialized_end=4596 + _globals['_STORESAVERESULT']._serialized_start=4598 + _globals['_STORESAVERESULT']._serialized_end=4627 + _globals['_STOREREMOVE']._serialized_start=4629 + _globals['_STOREREMOVE']._serialized_end=4655 + _globals['_STOREREMOVERESULT']._serialized_start=4657 + _globals['_STOREREMOVERESULT']._serialized_end=4688 # @@protoc_insertion_point(module_scope) diff --git a/homeassistant/components/sandbox/_proto/sandbox_pb2.pyi b/homeassistant/components/sandbox/_proto/sandbox_pb2.pyi index 747b72226523..56a7742da87e 100644 --- a/homeassistant/components/sandbox/_proto/sandbox_pb2.pyi +++ b/homeassistant/components/sandbox/_proto/sandbox_pb2.pyi @@ -183,6 +183,22 @@ class CallServiceResult(_message.Message): response: ServiceResponse def __init__(self, response: _Optional[_Union[ServiceResponse, _Mapping]] = ...) -> None: ... +class GetTranslations(_message.Message): + __slots__ = ("language", "domains") + LANGUAGE_FIELD_NUMBER: _ClassVar[int] + DOMAINS_FIELD_NUMBER: _ClassVar[int] + language: str + domains: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, language: _Optional[str] = ..., domains: _Optional[_Iterable[str]] = ...) -> None: ... + +class GetTranslationsResult(_message.Message): + __slots__ = ("language", "strings") + LANGUAGE_FIELD_NUMBER: _ClassVar[int] + STRINGS_FIELD_NUMBER: _ClassVar[int] + language: str + strings: _struct_pb2.Struct + def __init__(self, language: _Optional[str] = ..., strings: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + class Shutdown(_message.Message): __slots__ = () def __init__(self) -> None: ... diff --git a/homeassistant/components/sandbox/messages.py b/homeassistant/components/sandbox/messages.py index d90d0c3f5d6c..797bf2c9738a 100644 --- a/homeassistant/components/sandbox/messages.py +++ b/homeassistant/components/sandbox/messages.py @@ -38,6 +38,7 @@ REGISTRY: dict[str, tuple[type[Message], type[Message] | None]] = { "sandbox/entry_setup": (pb.EntrySetup, pb.EntrySetupResult), "sandbox/entry_unload": (pb.EntryUnload, pb.EntryUnloadResult), "sandbox/call_service": (pb.CallService, pb.CallServiceResult), + "sandbox/get_translations": (pb.GetTranslations, pb.GetTranslationsResult), "sandbox/shutdown": (pb.Shutdown, pb.ShutdownResult), "sandbox/ping": (pb.Ping, pb.PingResult), "sandbox/flow_init": (pb.FlowInit, pb.FlowResult), diff --git a/homeassistant/components/sandbox/protocol.py b/homeassistant/components/sandbox/protocol.py index a136ac32dc77..a17ba24c0141 100644 --- a/homeassistant/components/sandbox/protocol.py +++ b/homeassistant/components/sandbox/protocol.py @@ -32,6 +32,14 @@ Main → Sandbox calls: the main→sandbox service mirroring path). Payload mirrors a ``ServiceCall``: ``(domain, service, target, service_data, context, return_response)``. Returns either ``None`` or a service-response dict. +* ``sandbox/get_translations`` — pull a sandboxed integration's frontend + translation strings. Payload ``{language, domains: [str]}`` (main batches + every owned custom domain of one group into a single request). Response + ``{language, strings: {domain: }}`` — the + un-flattened nesting a ``translations/.json`` holds, with ``title`` + pre-filled from the integration name (main has no ``Integration`` for a + custom domain, so it cannot run that fallback). Built-in domains never + cross the wire — main reads its byte-identical disk copy. Sandbox → Main calls: @@ -92,6 +100,7 @@ MSG_READY: Final = "sandbox/ready" MSG_ENTRY_SETUP: Final = "sandbox/entry_setup" MSG_ENTRY_UNLOAD: Final = "sandbox/entry_unload" MSG_CALL_SERVICE: Final = "sandbox/call_service" +MSG_GET_TRANSLATIONS: Final = "sandbox/get_translations" MSG_SHUTDOWN: Final = "sandbox/shutdown" # Sandbox → Main @@ -111,6 +120,7 @@ __all__ = [ "MSG_ENTRY_SETUP", "MSG_ENTRY_UNLOAD", "MSG_FIRE_EVENT", + "MSG_GET_TRANSLATIONS", "MSG_READY", "MSG_REGISTER_ENTITY", "MSG_REGISTER_SERVICE", diff --git a/sandbox/hass_client/hass_client/_proto/sandbox_pb2.py b/sandbox/hass_client/hass_client/_proto/sandbox_pb2.py index 551d4b660b8e..5047c3c31667 100644 --- a/sandbox/hass_client/hass_client/_proto/sandbox_pb2.py +++ b/sandbox/hass_client/hass_client/_proto/sandbox_pb2.py @@ -25,7 +25,7 @@ _sym_db = _symbol_database.Default() from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rsandbox.proto\x12\x07sandbox\x1a\x1cgoogle/protobuf/struct.proto\"c\n\x05\x46rame\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x11\n\x07request\x18\x03 \x01(\x0cH\x00\x12%\n\x08response\x18\x04 \x01(\x0b\x32\x11.sandbox.ResponseH\x00\x42\x06\n\x04\x62ody\"E\n\x08Response\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x0e\n\x06result\x18\x02 \x01(\x0c\x12\x1d\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x0e.sandbox.Error\"`\n\x05\x45rror\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12&\n\x07invalid\x18\x03 \x03(\x0b\x32\x15.sandbox.InvalidError\x12\x10\n\x08multiple\x18\x04 \x01(\x08\"-\n\x0cInvalidError\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x03(\t\"(\n\nDevicePair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xcc\x03\n\nDeviceInfo\x12(\n\x0bidentifiers\x18\x01 \x03(\x0b\x32\x13.sandbox.DevicePair\x12(\n\x0b\x63onnections\x18\x02 \x03(\x0b\x32\x13.sandbox.DevicePair\x12,\n\nvia_device\x18\x03 \x01(\x0b\x32\x13.sandbox.DevicePairH\x00\x88\x01\x01\x12\x12\n\nentry_type\x18\x04 \x01(\t\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x14\n\x0cmanufacturer\x18\x06 \x01(\t\x12\r\n\x05model\x18\x07 \x01(\t\x12\x10\n\x08model_id\x18\x08 \x01(\t\x12\x12\n\nsw_version\x18\t \x01(\t\x12\x12\n\nhw_version\x18\n \x01(\t\x12\x15\n\rserial_number\x18\x0b \x01(\t\x12\x16\n\x0esuggested_area\x18\x0c \x01(\t\x12\x19\n\x11\x63onfiguration_url\x18\r \x01(\t\x12\x14\n\x0c\x64\x65\x66\x61ult_name\x18\x0e \x01(\t\x12\x1c\n\x14\x64\x65\x66\x61ult_manufacturer\x18\x0f \x01(\t\x12\x15\n\rdefault_model\x18\x10 \x01(\t\x12\x17\n\x0ftranslation_key\x18\x11 \x01(\tB\r\n\x0b_via_device\"h\n\x11IntegrationSource\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x0b\n\x03ref\x18\x03 \x01(\t\x12\x0b\n\x03tag\x18\x04 \x01(\t\x12\x0e\n\x06\x64omain\x18\x05 \x01(\t\x12\x0e\n\x06subdir\x18\x06 \x01(\t\"\xa4\x02\n\nEntrySetup\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12%\n\x04\x64\x61ta\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12(\n\x07options\x18\x05 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0e\n\x06source\x18\x06 \x01(\t\x12\x16\n\tunique_id\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07version\x18\x08 \x01(\x05\x12\x15\n\rminor_version\x18\t \x01(\x05\x12\x36\n\x12integration_source\x18\n \x01(\x0b\x32\x1a.sandbox.IntegrationSourceB\x0c\n\n_unique_id\">\n\x10\x45ntrySetupResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x13\n\x06reason\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_reason\"\x1f\n\x0b\x45ntryUnload\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\"\x1f\n\x11\x45ntryUnloadResult\x12\n\n\x02ok\x18\x01 \x01(\x08\"\xc7\x01\n\x0b\x43\x61llService\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\'\n\x06target\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\x12-\n\x0cservice_data\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x17\n\ncontext_id\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x17\n\x0freturn_response\x18\x06 \x01(\x08\x42\r\n\x0b_context_id\"8\n\x0fServiceResponse\x12%\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.Struct\"Q\n\x11\x43\x61llServiceResult\x12/\n\x08response\x18\x01 \x01(\x0b\x32\x18.sandbox.ServiceResponseH\x00\x88\x01\x01\x42\x0b\n\t_response\"\n\n\x08Shutdown\"u\n\x0eShutdownResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x10\n\x08unloaded\x18\x02 \x01(\x05\x12\x33\n\rrestore_state\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x42\x10\n\x0e_restore_state\"\x06\n\x04Ping\"\x1a\n\nPingResult\x12\x0c\n\x04pong\x18\x01 \x01(\t\"\x07\n\x05Ready\"l\n\x08\x46lowInit\x12\x0f\n\x07handler\x18\x01 \x01(\t\x12(\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12%\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\"H\n\x08\x46lowStep\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12+\n\nuser_input\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\x1c\n\tFlowAbort\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\"\x11\n\x0f\x46lowAbortResult\"\xa9\x05\n\nFlowResult\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x14\n\x07\x66low_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07handler\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07step_id\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06reason\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x12\n\x05title\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x16\n\tlast_step\x18\x08 \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07preview\x18\t \x01(\tH\x07\x88\x01\x01\x12\x14\n\x07version\x18\n \x01(\x05H\x08\x88\x01\x01\x12\x1a\n\rminor_version\x18\x0b \x01(\x05H\t\x88\x01\x01\x12%\n\x04\x64\x61ta\x18\x0c \x01(\x0b\x32\x17.google.protobuf.Struct\x12(\n\x07options\x18\r \x01(\x0b\x32\x17.google.protobuf.Struct\x12\'\n\x06\x65rrors\x18\x0e \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x39\n\x18\x64\x65scription_placeholders\x18\x0f \x01(\x0b\x32\x17.google.protobuf.Struct\x12(\n\x07\x63ontext\x18\x10 \x01(\x0b\x32\x17.google.protobuf.Struct\x12/\n\x0b\x64\x61ta_schema\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.ListValue\x12\x17\n\x0fhas_data_schema\x18\x12 \x01(\x08\x42\n\n\x08_flow_idB\n\n\x08_handlerB\n\n\x08_step_idB\t\n\x07_reasonB\x08\n\x06_titleB\x0e\n\x0c_descriptionB\x0c\n\n_last_stepB\n\n\x08_previewB\n\n\x08_versionB\x10\n\x0e_minor_version\"\x8a\x03\n\nEntityInfo\x12\x39\n\x0b\x64\x65scription\x18\x01 \x01(\x0b\x32\x1f.sandbox.EntityInfo.DescriptionH\x00\x88\x01\x01\x12-\n\x0b\x64\x65vice_info\x18\x02 \x01(\x0b\x32\x13.sandbox.DeviceInfoH\x01\x88\x01\x01\x1a\xf1\x01\n\x0b\x44\x65scription\x12\x11\n\x04name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04icon\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0f\x65ntity_category\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0c\x64\x65vice_class\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\x12supported_features\x18\x05 \x01(\x05\x12\x1c\n\x0ftranslation_key\x18\x06 \x01(\tH\x04\x88\x01\x01\x42\x07\n\x05_nameB\x07\n\x05_iconB\x12\n\x10_entity_categoryB\x0f\n\r_device_classB\x12\n\x10_translation_keyB\x0e\n\x0c_descriptionB\x0e\n\x0c_device_info\"\x88\x01\n\x0cInitialState\x12\x12\n\x05state\x18\x01 \x01(\tH\x00\x88\x01\x01\x12-\n\x0c\x63\x61pabilities\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12+\n\nattributes\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructB\x08\n\x06_state\"\xda\x01\n\x11\x45ntityDescription\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\x12\x19\n\x11sandbox_entity_id\x18\x03 \x01(\t\x12\x16\n\tunique_id\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x17\n\x0fhas_entity_name\x18\x05 \x01(\x08\x12!\n\x04info\x18\x06 \x01(\x0b\x32\x13.sandbox.EntityInfo\x12&\n\x07initial\x18\x07 \x01(\x0b\x32\x15.sandbox.InitialStateB\x0c\n\n_unique_id\")\n\x14RegisterEntityResult\x12\x11\n\tentity_id\x18\x01 \x01(\t\"-\n\x10UnregisterEntity\x12\x19\n\x11sandbox_entity_id\x18\x01 \x01(\t\"$\n\x16UnregisterEntityResult\x12\n\n\x02ok\x18\x01 \x01(\x08\"\x9c\x01\n\x0cStateChanged\x12\x19\n\x11sandbox_entity_id\x18\x01 \x01(\t\x12\x12\n\x05state\x18\x02 \x01(\tH\x00\x88\x01\x01\x12+\n\nattributes\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x17\n\ncontext_id\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_stateB\r\n\x0b_context_id\"y\n\x0fRegisterService\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x19\n\x11supports_response\x18\x03 \x01(\t\x12*\n\x06schema\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"6\n\x15RegisterServiceResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x11\n\tinstalled\x18\x02 \x01(\x08\"4\n\x11UnregisterService\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\"6\n\x17UnregisterServiceResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x0f\n\x07removed\x18\x02 \x01(\x08\"t\n\tFireEvent\x12\x12\n\nevent_type\x18\x01 \x01(\t\x12+\n\nevent_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x17\n\ncontext_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_context_id\"\x18\n\tStoreLoad\x12\x0b\n\x03key\x18\x01 \x01(\t\"F\n\x0fStoreLoadResult\x12*\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x42\x07\n\x05_data\"?\n\tStoreSave\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\x1d\n\x0fStoreSaveResult\x12\n\n\x02ok\x18\x01 \x01(\x08\"\x1a\n\x0bStoreRemove\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1f\n\x11StoreRemoveResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rsandbox.proto\x12\x07sandbox\x1a\x1cgoogle/protobuf/struct.proto\"c\n\x05\x46rame\x12\n\n\x02id\x18\x01 \x01(\r\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x11\n\x07request\x18\x03 \x01(\x0cH\x00\x12%\n\x08response\x18\x04 \x01(\x0b\x32\x11.sandbox.ResponseH\x00\x42\x06\n\x04\x62ody\"E\n\x08Response\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x0e\n\x06result\x18\x02 \x01(\x0c\x12\x1d\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x0e.sandbox.Error\"`\n\x05\x45rror\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12&\n\x07invalid\x18\x03 \x03(\x0b\x32\x15.sandbox.InvalidError\x12\x10\n\x08multiple\x18\x04 \x01(\x08\"-\n\x0cInvalidError\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x03(\t\"(\n\nDevicePair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xcc\x03\n\nDeviceInfo\x12(\n\x0bidentifiers\x18\x01 \x03(\x0b\x32\x13.sandbox.DevicePair\x12(\n\x0b\x63onnections\x18\x02 \x03(\x0b\x32\x13.sandbox.DevicePair\x12,\n\nvia_device\x18\x03 \x01(\x0b\x32\x13.sandbox.DevicePairH\x00\x88\x01\x01\x12\x12\n\nentry_type\x18\x04 \x01(\t\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x14\n\x0cmanufacturer\x18\x06 \x01(\t\x12\r\n\x05model\x18\x07 \x01(\t\x12\x10\n\x08model_id\x18\x08 \x01(\t\x12\x12\n\nsw_version\x18\t \x01(\t\x12\x12\n\nhw_version\x18\n \x01(\t\x12\x15\n\rserial_number\x18\x0b \x01(\t\x12\x16\n\x0esuggested_area\x18\x0c \x01(\t\x12\x19\n\x11\x63onfiguration_url\x18\r \x01(\t\x12\x14\n\x0c\x64\x65\x66\x61ult_name\x18\x0e \x01(\t\x12\x1c\n\x14\x64\x65\x66\x61ult_manufacturer\x18\x0f \x01(\t\x12\x15\n\rdefault_model\x18\x10 \x01(\t\x12\x17\n\x0ftranslation_key\x18\x11 \x01(\tB\r\n\x0b_via_device\"h\n\x11IntegrationSource\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x0b\n\x03ref\x18\x03 \x01(\t\x12\x0b\n\x03tag\x18\x04 \x01(\t\x12\x0e\n\x06\x64omain\x18\x05 \x01(\t\x12\x0e\n\x06subdir\x18\x06 \x01(\t\"\xa4\x02\n\nEntrySetup\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12%\n\x04\x64\x61ta\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12(\n\x07options\x18\x05 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0e\n\x06source\x18\x06 \x01(\t\x12\x16\n\tunique_id\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07version\x18\x08 \x01(\x05\x12\x15\n\rminor_version\x18\t \x01(\x05\x12\x36\n\x12integration_source\x18\n \x01(\x0b\x32\x1a.sandbox.IntegrationSourceB\x0c\n\n_unique_id\">\n\x10\x45ntrySetupResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x13\n\x06reason\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_reason\"\x1f\n\x0b\x45ntryUnload\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\"\x1f\n\x11\x45ntryUnloadResult\x12\n\n\x02ok\x18\x01 \x01(\x08\"\xc7\x01\n\x0b\x43\x61llService\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\'\n\x06target\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\x12-\n\x0cservice_data\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x17\n\ncontext_id\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x17\n\x0freturn_response\x18\x06 \x01(\x08\x42\r\n\x0b_context_id\"8\n\x0fServiceResponse\x12%\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.Struct\"Q\n\x11\x43\x61llServiceResult\x12/\n\x08response\x18\x01 \x01(\x0b\x32\x18.sandbox.ServiceResponseH\x00\x88\x01\x01\x42\x0b\n\t_response\"4\n\x0fGetTranslations\x12\x10\n\x08language\x18\x01 \x01(\t\x12\x0f\n\x07\x64omains\x18\x02 \x03(\t\"S\n\x15GetTranslationsResult\x12\x10\n\x08language\x18\x01 \x01(\t\x12(\n\x07strings\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\n\n\x08Shutdown\"u\n\x0eShutdownResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x10\n\x08unloaded\x18\x02 \x01(\x05\x12\x33\n\rrestore_state\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x42\x10\n\x0e_restore_state\"\x06\n\x04Ping\"\x1a\n\nPingResult\x12\x0c\n\x04pong\x18\x01 \x01(\t\"\x07\n\x05Ready\"l\n\x08\x46lowInit\x12\x0f\n\x07handler\x18\x01 \x01(\t\x12(\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12%\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\"H\n\x08\x46lowStep\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\x12+\n\nuser_input\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\x1c\n\tFlowAbort\x12\x0f\n\x07\x66low_id\x18\x01 \x01(\t\"\x11\n\x0f\x46lowAbortResult\"\xa9\x05\n\nFlowResult\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x14\n\x07\x66low_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07handler\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07step_id\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06reason\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x12\n\x05title\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x16\n\tlast_step\x18\x08 \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07preview\x18\t \x01(\tH\x07\x88\x01\x01\x12\x14\n\x07version\x18\n \x01(\x05H\x08\x88\x01\x01\x12\x1a\n\rminor_version\x18\x0b \x01(\x05H\t\x88\x01\x01\x12%\n\x04\x64\x61ta\x18\x0c \x01(\x0b\x32\x17.google.protobuf.Struct\x12(\n\x07options\x18\r \x01(\x0b\x32\x17.google.protobuf.Struct\x12\'\n\x06\x65rrors\x18\x0e \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x39\n\x18\x64\x65scription_placeholders\x18\x0f \x01(\x0b\x32\x17.google.protobuf.Struct\x12(\n\x07\x63ontext\x18\x10 \x01(\x0b\x32\x17.google.protobuf.Struct\x12/\n\x0b\x64\x61ta_schema\x18\x11 \x01(\x0b\x32\x1a.google.protobuf.ListValue\x12\x17\n\x0fhas_data_schema\x18\x12 \x01(\x08\x42\n\n\x08_flow_idB\n\n\x08_handlerB\n\n\x08_step_idB\t\n\x07_reasonB\x08\n\x06_titleB\x0e\n\x0c_descriptionB\x0c\n\n_last_stepB\n\n\x08_previewB\n\n\x08_versionB\x10\n\x0e_minor_version\"\x8a\x03\n\nEntityInfo\x12\x39\n\x0b\x64\x65scription\x18\x01 \x01(\x0b\x32\x1f.sandbox.EntityInfo.DescriptionH\x00\x88\x01\x01\x12-\n\x0b\x64\x65vice_info\x18\x02 \x01(\x0b\x32\x13.sandbox.DeviceInfoH\x01\x88\x01\x01\x1a\xf1\x01\n\x0b\x44\x65scription\x12\x11\n\x04name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04icon\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0f\x65ntity_category\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0c\x64\x65vice_class\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\x12supported_features\x18\x05 \x01(\x05\x12\x1c\n\x0ftranslation_key\x18\x06 \x01(\tH\x04\x88\x01\x01\x42\x07\n\x05_nameB\x07\n\x05_iconB\x12\n\x10_entity_categoryB\x0f\n\r_device_classB\x12\n\x10_translation_keyB\x0e\n\x0c_descriptionB\x0e\n\x0c_device_info\"\x88\x01\n\x0cInitialState\x12\x12\n\x05state\x18\x01 \x01(\tH\x00\x88\x01\x01\x12-\n\x0c\x63\x61pabilities\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12+\n\nattributes\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructB\x08\n\x06_state\"\xda\x01\n\x11\x45ntityDescription\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\x12\x19\n\x11sandbox_entity_id\x18\x03 \x01(\t\x12\x16\n\tunique_id\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x17\n\x0fhas_entity_name\x18\x05 \x01(\x08\x12!\n\x04info\x18\x06 \x01(\x0b\x32\x13.sandbox.EntityInfo\x12&\n\x07initial\x18\x07 \x01(\x0b\x32\x15.sandbox.InitialStateB\x0c\n\n_unique_id\")\n\x14RegisterEntityResult\x12\x11\n\tentity_id\x18\x01 \x01(\t\"-\n\x10UnregisterEntity\x12\x19\n\x11sandbox_entity_id\x18\x01 \x01(\t\"$\n\x16UnregisterEntityResult\x12\n\n\x02ok\x18\x01 \x01(\x08\"\x9c\x01\n\x0cStateChanged\x12\x19\n\x11sandbox_entity_id\x18\x01 \x01(\t\x12\x12\n\x05state\x18\x02 \x01(\tH\x00\x88\x01\x01\x12+\n\nattributes\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x17\n\ncontext_id\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_stateB\r\n\x0b_context_id\"y\n\x0fRegisterService\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\x12\x19\n\x11supports_response\x18\x03 \x01(\t\x12*\n\x06schema\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"6\n\x15RegisterServiceResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x11\n\tinstalled\x18\x02 \x01(\x08\"4\n\x11UnregisterService\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\x12\x0f\n\x07service\x18\x02 \x01(\t\"6\n\x17UnregisterServiceResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x0f\n\x07removed\x18\x02 \x01(\x08\"t\n\tFireEvent\x12\x12\n\nevent_type\x18\x01 \x01(\t\x12+\n\nevent_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x17\n\ncontext_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_context_id\"\x18\n\tStoreLoad\x12\x0b\n\x03key\x18\x01 \x01(\t\"F\n\x0fStoreLoadResult\x12*\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x42\x07\n\x05_data\"?\n\tStoreSave\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\x1d\n\x0fStoreSaveResult\x12\n\n\x02ok\x18\x01 \x01(\x08\"\x1a\n\x0bStoreRemove\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1f\n\x11StoreRemoveResult\x12\n\n\x02ok\x18\x01 \x01(\x08\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -60,62 +60,66 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['_SERVICERESPONSE']._serialized_end=1667 _globals['_CALLSERVICERESULT']._serialized_start=1669 _globals['_CALLSERVICERESULT']._serialized_end=1750 - _globals['_SHUTDOWN']._serialized_start=1752 - _globals['_SHUTDOWN']._serialized_end=1762 - _globals['_SHUTDOWNRESULT']._serialized_start=1764 - _globals['_SHUTDOWNRESULT']._serialized_end=1881 - _globals['_PING']._serialized_start=1883 - _globals['_PING']._serialized_end=1889 - _globals['_PINGRESULT']._serialized_start=1891 - _globals['_PINGRESULT']._serialized_end=1917 - _globals['_READY']._serialized_start=1919 - _globals['_READY']._serialized_end=1926 - _globals['_FLOWINIT']._serialized_start=1928 - _globals['_FLOWINIT']._serialized_end=2036 - _globals['_FLOWSTEP']._serialized_start=2038 - _globals['_FLOWSTEP']._serialized_end=2110 - _globals['_FLOWABORT']._serialized_start=2112 - _globals['_FLOWABORT']._serialized_end=2140 - _globals['_FLOWABORTRESULT']._serialized_start=2142 - _globals['_FLOWABORTRESULT']._serialized_end=2159 - _globals['_FLOWRESULT']._serialized_start=2162 - _globals['_FLOWRESULT']._serialized_end=2843 - _globals['_ENTITYINFO']._serialized_start=2846 - _globals['_ENTITYINFO']._serialized_end=3240 - _globals['_ENTITYINFO_DESCRIPTION']._serialized_start=2967 - _globals['_ENTITYINFO_DESCRIPTION']._serialized_end=3208 - _globals['_INITIALSTATE']._serialized_start=3243 - _globals['_INITIALSTATE']._serialized_end=3379 - _globals['_ENTITYDESCRIPTION']._serialized_start=3382 - _globals['_ENTITYDESCRIPTION']._serialized_end=3600 - _globals['_REGISTERENTITYRESULT']._serialized_start=3602 - _globals['_REGISTERENTITYRESULT']._serialized_end=3643 - _globals['_UNREGISTERENTITY']._serialized_start=3645 - _globals['_UNREGISTERENTITY']._serialized_end=3690 - _globals['_UNREGISTERENTITYRESULT']._serialized_start=3692 - _globals['_UNREGISTERENTITYRESULT']._serialized_end=3728 - _globals['_STATECHANGED']._serialized_start=3731 - _globals['_STATECHANGED']._serialized_end=3887 - _globals['_REGISTERSERVICE']._serialized_start=3889 - _globals['_REGISTERSERVICE']._serialized_end=4010 - _globals['_REGISTERSERVICERESULT']._serialized_start=4012 - _globals['_REGISTERSERVICERESULT']._serialized_end=4066 - _globals['_UNREGISTERSERVICE']._serialized_start=4068 - _globals['_UNREGISTERSERVICE']._serialized_end=4120 - _globals['_UNREGISTERSERVICERESULT']._serialized_start=4122 - _globals['_UNREGISTERSERVICERESULT']._serialized_end=4176 - _globals['_FIREEVENT']._serialized_start=4178 - _globals['_FIREEVENT']._serialized_end=4294 - _globals['_STORELOAD']._serialized_start=4296 - _globals['_STORELOAD']._serialized_end=4320 - _globals['_STORELOADRESULT']._serialized_start=4322 - _globals['_STORELOADRESULT']._serialized_end=4392 - _globals['_STORESAVE']._serialized_start=4394 - _globals['_STORESAVE']._serialized_end=4457 - _globals['_STORESAVERESULT']._serialized_start=4459 - _globals['_STORESAVERESULT']._serialized_end=4488 - _globals['_STOREREMOVE']._serialized_start=4490 - _globals['_STOREREMOVE']._serialized_end=4516 - _globals['_STOREREMOVERESULT']._serialized_start=4518 - _globals['_STOREREMOVERESULT']._serialized_end=4549 + _globals['_GETTRANSLATIONS']._serialized_start=1752 + _globals['_GETTRANSLATIONS']._serialized_end=1804 + _globals['_GETTRANSLATIONSRESULT']._serialized_start=1806 + _globals['_GETTRANSLATIONSRESULT']._serialized_end=1889 + _globals['_SHUTDOWN']._serialized_start=1891 + _globals['_SHUTDOWN']._serialized_end=1901 + _globals['_SHUTDOWNRESULT']._serialized_start=1903 + _globals['_SHUTDOWNRESULT']._serialized_end=2020 + _globals['_PING']._serialized_start=2022 + _globals['_PING']._serialized_end=2028 + _globals['_PINGRESULT']._serialized_start=2030 + _globals['_PINGRESULT']._serialized_end=2056 + _globals['_READY']._serialized_start=2058 + _globals['_READY']._serialized_end=2065 + _globals['_FLOWINIT']._serialized_start=2067 + _globals['_FLOWINIT']._serialized_end=2175 + _globals['_FLOWSTEP']._serialized_start=2177 + _globals['_FLOWSTEP']._serialized_end=2249 + _globals['_FLOWABORT']._serialized_start=2251 + _globals['_FLOWABORT']._serialized_end=2279 + _globals['_FLOWABORTRESULT']._serialized_start=2281 + _globals['_FLOWABORTRESULT']._serialized_end=2298 + _globals['_FLOWRESULT']._serialized_start=2301 + _globals['_FLOWRESULT']._serialized_end=2982 + _globals['_ENTITYINFO']._serialized_start=2985 + _globals['_ENTITYINFO']._serialized_end=3379 + _globals['_ENTITYINFO_DESCRIPTION']._serialized_start=3106 + _globals['_ENTITYINFO_DESCRIPTION']._serialized_end=3347 + _globals['_INITIALSTATE']._serialized_start=3382 + _globals['_INITIALSTATE']._serialized_end=3518 + _globals['_ENTITYDESCRIPTION']._serialized_start=3521 + _globals['_ENTITYDESCRIPTION']._serialized_end=3739 + _globals['_REGISTERENTITYRESULT']._serialized_start=3741 + _globals['_REGISTERENTITYRESULT']._serialized_end=3782 + _globals['_UNREGISTERENTITY']._serialized_start=3784 + _globals['_UNREGISTERENTITY']._serialized_end=3829 + _globals['_UNREGISTERENTITYRESULT']._serialized_start=3831 + _globals['_UNREGISTERENTITYRESULT']._serialized_end=3867 + _globals['_STATECHANGED']._serialized_start=3870 + _globals['_STATECHANGED']._serialized_end=4026 + _globals['_REGISTERSERVICE']._serialized_start=4028 + _globals['_REGISTERSERVICE']._serialized_end=4149 + _globals['_REGISTERSERVICERESULT']._serialized_start=4151 + _globals['_REGISTERSERVICERESULT']._serialized_end=4205 + _globals['_UNREGISTERSERVICE']._serialized_start=4207 + _globals['_UNREGISTERSERVICE']._serialized_end=4259 + _globals['_UNREGISTERSERVICERESULT']._serialized_start=4261 + _globals['_UNREGISTERSERVICERESULT']._serialized_end=4315 + _globals['_FIREEVENT']._serialized_start=4317 + _globals['_FIREEVENT']._serialized_end=4433 + _globals['_STORELOAD']._serialized_start=4435 + _globals['_STORELOAD']._serialized_end=4459 + _globals['_STORELOADRESULT']._serialized_start=4461 + _globals['_STORELOADRESULT']._serialized_end=4531 + _globals['_STORESAVE']._serialized_start=4533 + _globals['_STORESAVE']._serialized_end=4596 + _globals['_STORESAVERESULT']._serialized_start=4598 + _globals['_STORESAVERESULT']._serialized_end=4627 + _globals['_STOREREMOVE']._serialized_start=4629 + _globals['_STOREREMOVE']._serialized_end=4655 + _globals['_STOREREMOVERESULT']._serialized_start=4657 + _globals['_STOREREMOVERESULT']._serialized_end=4688 # @@protoc_insertion_point(module_scope) diff --git a/sandbox/hass_client/hass_client/_proto/sandbox_pb2.pyi b/sandbox/hass_client/hass_client/_proto/sandbox_pb2.pyi index 747b72226523..56a7742da87e 100644 --- a/sandbox/hass_client/hass_client/_proto/sandbox_pb2.pyi +++ b/sandbox/hass_client/hass_client/_proto/sandbox_pb2.pyi @@ -183,6 +183,22 @@ class CallServiceResult(_message.Message): response: ServiceResponse def __init__(self, response: _Optional[_Union[ServiceResponse, _Mapping]] = ...) -> None: ... +class GetTranslations(_message.Message): + __slots__ = ("language", "domains") + LANGUAGE_FIELD_NUMBER: _ClassVar[int] + DOMAINS_FIELD_NUMBER: _ClassVar[int] + language: str + domains: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, language: _Optional[str] = ..., domains: _Optional[_Iterable[str]] = ...) -> None: ... + +class GetTranslationsResult(_message.Message): + __slots__ = ("language", "strings") + LANGUAGE_FIELD_NUMBER: _ClassVar[int] + STRINGS_FIELD_NUMBER: _ClassVar[int] + language: str + strings: _struct_pb2.Struct + def __init__(self, language: _Optional[str] = ..., strings: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + class Shutdown(_message.Message): __slots__ = () def __init__(self) -> None: ... diff --git a/sandbox/hass_client/hass_client/messages.py b/sandbox/hass_client/hass_client/messages.py index d90d0c3f5d6c..797bf2c9738a 100644 --- a/sandbox/hass_client/hass_client/messages.py +++ b/sandbox/hass_client/hass_client/messages.py @@ -38,6 +38,7 @@ REGISTRY: dict[str, tuple[type[Message], type[Message] | None]] = { "sandbox/entry_setup": (pb.EntrySetup, pb.EntrySetupResult), "sandbox/entry_unload": (pb.EntryUnload, pb.EntryUnloadResult), "sandbox/call_service": (pb.CallService, pb.CallServiceResult), + "sandbox/get_translations": (pb.GetTranslations, pb.GetTranslationsResult), "sandbox/shutdown": (pb.Shutdown, pb.ShutdownResult), "sandbox/ping": (pb.Ping, pb.PingResult), "sandbox/flow_init": (pb.FlowInit, pb.FlowResult), diff --git a/sandbox/hass_client/hass_client/protocol.py b/sandbox/hass_client/hass_client/protocol.py index 96b5c9a199ec..c1db12b16b2c 100644 --- a/sandbox/hass_client/hass_client/protocol.py +++ b/sandbox/hass_client/hass_client/protocol.py @@ -18,6 +18,7 @@ MSG_READY: Final = "sandbox/ready" MSG_ENTRY_SETUP: Final = "sandbox/entry_setup" MSG_ENTRY_UNLOAD: Final = "sandbox/entry_unload" MSG_CALL_SERVICE: Final = "sandbox/call_service" +MSG_GET_TRANSLATIONS: Final = "sandbox/get_translations" MSG_SHUTDOWN: Final = "sandbox/shutdown" # Sandbox → Main @@ -37,6 +38,7 @@ __all__ = [ "MSG_ENTRY_SETUP", "MSG_ENTRY_UNLOAD", "MSG_FIRE_EVENT", + "MSG_GET_TRANSLATIONS", "MSG_READY", "MSG_REGISTER_ENTITY", "MSG_REGISTER_SERVICE", diff --git a/sandbox/proto/sandbox.proto b/sandbox/proto/sandbox.proto index 1fc8bb6f6a9a..4c42669dd83a 100644 --- a/sandbox/proto/sandbox.proto +++ b/sandbox/proto/sandbox.proto @@ -153,6 +153,26 @@ message CallServiceResult { optional ServiceResponse response = 1; // unset when no response returned } +// --- get_translations (main -> sandbox) ----------------------------------- + +// Pull a sandboxed integration's frontend translation strings. Main issues +// this per sandbox group, batching every owned (custom) domain into one +// request. Built-in domains never cross the wire — main reads its own +// byte-identical disk copy. +message GetTranslations { + string language = 1; // single language per request (e.g. "en") + repeated string domains = 2; // the domains main wants strings for +} + +message GetTranslationsResult { + string language = 1; + // { domain: } — the un-flattened nesting a + // translations/.json holds, with `title` already filled in from the + // integration name (main has no Integration for a custom domain so it + // cannot run that fallback). Domains the sandbox does not own are omitted. + google.protobuf.Struct strings = 2; +} + // --- shutdown / ping (main -> sandbox) ------------------------------------ message Shutdown {}