conson-xp 1.34.0__tar.gz → 1.36.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. {conson_xp-1.34.0 → conson_xp-1.36.0}/PKG-INFO +1 -1
  2. {conson_xp-1.34.0 → conson_xp-1.36.0}/pyproject.toml +2 -2
  3. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/__init__.py +1 -1
  4. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_actiontable_commands.py +34 -35
  5. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_autoreport_commands.py +11 -10
  6. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_custom_commands.py +6 -4
  7. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_datapoint_commands.py +8 -6
  8. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_lightlevel_commands.py +19 -16
  9. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_linknumber_commands.py +7 -6
  10. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_modulenumber_commands.py +7 -6
  11. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_msactiontable_commands.py +7 -9
  12. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_output_commands.py +9 -7
  13. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_raw_commands.py +7 -2
  14. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_scan_commands.py +4 -2
  15. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/actiontable/actiontable_download_service.py +79 -37
  16. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/actiontable/actiontable_list_service.py +17 -17
  17. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/actiontable/actiontable_upload_service.py +78 -36
  18. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/actiontable/msactiontable_service.py +88 -48
  19. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_custom_service.py +81 -26
  20. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_datapoint_queryall_service.py +90 -43
  21. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_datapoint_service.py +76 -28
  22. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_output_service.py +82 -22
  23. conson_xp-1.36.0/src/xp/services/conbus/conbus_raw_service.py +163 -0
  24. conson_xp-1.36.0/src/xp/services/conbus/conbus_scan_service.py +194 -0
  25. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/write_config_service.py +76 -26
  26. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/term/state_monitor_service.py +35 -15
  27. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/term/widgets/modules_list.py +4 -2
  28. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/utils/dependencies.py +10 -20
  29. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_actiontable_integration.py +34 -7
  30. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_conbus_datapoint_integration.py +105 -31
  31. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_conbus_raw_integration.py +130 -25
  32. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_xp20_action_table_integration.py +12 -4
  33. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_xp24_action_table_integration.py +120 -33
  34. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_conbus_actiontable_commands.py +130 -31
  35. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_actiontable_service.py +53 -57
  36. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_actiontable_upload_service.py +201 -179
  37. conson_xp-1.36.0/tests/unit/test_services/test_conbus_output_service.py +257 -0
  38. conson_xp-1.36.0/tests/unit/test_services/test_conbus_raw_service.py +216 -0
  39. conson_xp-1.36.0/tests/unit/test_services/test_conbus_scan_service.py +225 -0
  40. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_state_monitor_service.py +150 -1
  41. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_xp24_action_table_service.py +88 -124
  42. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_xp_server_services.py +1 -1
  43. conson_xp-1.34.0/src/xp/services/conbus/conbus_raw_service.py +0 -122
  44. conson_xp-1.34.0/src/xp/services/conbus/conbus_scan_service.py +0 -150
  45. conson_xp-1.34.0/tests/unit/test_services/test_conbus_raw_service.py +0 -144
  46. {conson_xp-1.34.0 → conson_xp-1.36.0}/LICENSE +0 -0
  47. {conson_xp-1.34.0 → conson_xp-1.36.0}/README.md +0 -0
  48. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/__init__.py +0 -0
  49. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/__main__.py +0 -0
  50. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/__init__.py +0 -0
  51. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/__init__.py +0 -0
  52. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus.py +0 -0
  53. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_blink_commands.py +0 -0
  54. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_config_commands.py +0 -0
  55. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_discover_commands.py +0 -0
  56. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_event_commands.py +0 -0
  57. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_export_commands.py +0 -0
  58. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_receive_commands.py +0 -0
  59. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/file_commands.py +0 -0
  60. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/homekit/__init__.py +0 -0
  61. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/homekit/homekit.py +0 -0
  62. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/homekit/homekit_start_commands.py +0 -0
  63. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/module_commands.py +0 -0
  64. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/reverse_proxy_commands.py +0 -0
  65. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/server/__init__.py +0 -0
  66. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/server/server_commands.py +0 -0
  67. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/__init__.py +0 -0
  68. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram.py +0 -0
  69. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_blink_commands.py +0 -0
  70. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_checksum_commands.py +0 -0
  71. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_discover_commands.py +0 -0
  72. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_linknumber_commands.py +0 -0
  73. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_parse_commands.py +0 -0
  74. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_version_commands.py +0 -0
  75. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/term/__init__.py +0 -0
  76. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/term/term.py +0 -0
  77. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/commands/term/term_commands.py +0 -0
  78. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/main.py +0 -0
  79. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/utils/__init__.py +0 -0
  80. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/utils/click_tree.py +0 -0
  81. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/utils/datapoint_type_choice.py +0 -0
  82. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/utils/decorators.py +0 -0
  83. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/utils/error_handlers.py +0 -0
  84. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/utils/formatters.py +0 -0
  85. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/utils/module_type_choice.py +0 -0
  86. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/utils/serial_number_type.py +0 -0
  87. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/utils/system_function_choice.py +0 -0
  88. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/cli/utils/xp_module_type.py +0 -0
  89. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/connection/__init__.py +0 -0
  90. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/connection/exceptions.py +0 -0
  91. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/__init__.py +0 -0
  92. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/actiontable/__init__.py +0 -0
  93. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/actiontable/actiontable.py +0 -0
  94. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/actiontable/msactiontable_xp20.py +0 -0
  95. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/actiontable/msactiontable_xp24.py +0 -0
  96. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/actiontable/msactiontable_xp33.py +0 -0
  97. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/__init__.py +0 -0
  98. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus.py +0 -0
  99. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_autoreport.py +0 -0
  100. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_blink.py +0 -0
  101. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_client_config.py +0 -0
  102. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_connection_status.py +0 -0
  103. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_custom.py +0 -0
  104. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_datapoint.py +0 -0
  105. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_discover.py +0 -0
  106. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_event_list.py +0 -0
  107. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_event_raw.py +0 -0
  108. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_export.py +0 -0
  109. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_lightlevel.py +0 -0
  110. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_linknumber.py +0 -0
  111. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_logger_config.py +0 -0
  112. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_output.py +0 -0
  113. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_raw.py +0 -0
  114. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_receive.py +0 -0
  115. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_writeconfig.py +0 -0
  116. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/homekit/__init__.py +0 -0
  117. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/homekit/homekit_accessory.py +0 -0
  118. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/homekit/homekit_config.py +0 -0
  119. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/homekit/homekit_conson_config.py +0 -0
  120. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/log_entry.py +0 -0
  121. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/protocol/__init__.py +0 -0
  122. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/protocol/conbus_protocol.py +0 -0
  123. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/response.py +0 -0
  124. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/__init__.py +0 -0
  125. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/action_type.py +0 -0
  126. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/datapoint_type.py +0 -0
  127. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/event_telegram.py +0 -0
  128. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/event_type.py +0 -0
  129. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/input_action_type.py +0 -0
  130. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/input_type.py +0 -0
  131. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/module_type.py +0 -0
  132. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/module_type_code.py +0 -0
  133. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/output_telegram.py +0 -0
  134. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/reply_telegram.py +0 -0
  135. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/system_function.py +0 -0
  136. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/system_telegram.py +0 -0
  137. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/telegram.py +0 -0
  138. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/telegram_type.py +0 -0
  139. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/telegram/timeparam_type.py +0 -0
  140. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/term/__init__.py +0 -0
  141. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/term/connection_state.py +0 -0
  142. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/term/module_state.py +0 -0
  143. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/term/protocol_keys_config.py +0 -0
  144. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/term/status_message.py +0 -0
  145. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/term/telegram_display.py +0 -0
  146. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/models/write_config_type.py +0 -0
  147. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/__init__.py +0 -0
  148. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/actiontable/__init__.py +0 -0
  149. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/actiontable/actiontable_serializer.py +0 -0
  150. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/actiontable/msactiontable_serializer.py +0 -0
  151. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/actiontable/msactiontable_xp20_serializer.py +0 -0
  152. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/actiontable/msactiontable_xp24_serializer.py +0 -0
  153. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/actiontable/msactiontable_xp33_serializer.py +0 -0
  154. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/__init__.py +0 -0
  155. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/actiontable/__init__.py +0 -0
  156. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/actiontable/actiontable_show_service.py +0 -0
  157. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_blink_all_service.py +0 -0
  158. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_blink_service.py +0 -0
  159. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_discover_service.py +0 -0
  160. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_event_list_service.py +0 -0
  161. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_event_raw_service.py +0 -0
  162. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_export_service.py +0 -0
  163. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_receive_service.py +0 -0
  164. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/homekit/__init__.py +0 -0
  165. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_cache_service.py +0 -0
  166. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_conbus_service.py +0 -0
  167. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_config_validator.py +0 -0
  168. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_conson_validator.py +0 -0
  169. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_dimminglight.py +0 -0
  170. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_dimminglight_service.py +0 -0
  171. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_hap_service.py +0 -0
  172. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_lightbulb.py +0 -0
  173. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_lightbulb_service.py +0 -0
  174. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_module_service.py +0 -0
  175. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_outlet.py +0 -0
  176. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_outlet_service.py +0 -0
  177. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_service.py +0 -0
  178. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/log_file_service.py +0 -0
  179. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/module_type_service.py +0 -0
  180. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/protocol/__init__.py +0 -0
  181. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/protocol/conbus_event_protocol.py +0 -0
  182. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/protocol/conbus_protocol.py +0 -0
  183. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/protocol/protocol_factory.py +0 -0
  184. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/protocol/telegram_protocol.py +0 -0
  185. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/reverse_proxy_service.py +0 -0
  186. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/server/__init__.py +0 -0
  187. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/server/base_server_service.py +0 -0
  188. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/server/client_buffer_manager.py +0 -0
  189. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/server/cp20_server_service.py +0 -0
  190. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/server/device_service_factory.py +0 -0
  191. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/server/server_service.py +0 -0
  192. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/server/xp130_server_service.py +0 -0
  193. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/server/xp20_server_service.py +0 -0
  194. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/server/xp230_server_service.py +0 -0
  195. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/server/xp24_server_service.py +0 -0
  196. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/server/xp33_server_service.py +0 -0
  197. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/telegram/__init__.py +0 -0
  198. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_blink_service.py +0 -0
  199. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_checksum_service.py +0 -0
  200. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_datapoint_service.py +0 -0
  201. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_discover_service.py +0 -0
  202. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_link_number_service.py +0 -0
  203. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_output_service.py +0 -0
  204. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_service.py +0 -0
  205. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_version_service.py +0 -0
  206. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/term/__init__.py +0 -0
  207. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/services/term/protocol_monitor_service.py +0 -0
  208. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/term/__init__.py +0 -0
  209. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/term/protocol.py +0 -0
  210. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/term/protocol.tcss +0 -0
  211. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/term/state.py +0 -0
  212. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/term/state.tcss +0 -0
  213. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/term/widgets/__init__.py +0 -0
  214. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/term/widgets/help_menu.py +0 -0
  215. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/term/widgets/protocol_log.py +0 -0
  216. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/term/widgets/status_footer.py +0 -0
  217. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/utils/__init__.py +0 -0
  218. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/utils/checksum.py +0 -0
  219. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/utils/event_helper.py +0 -0
  220. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/utils/logging.py +0 -0
  221. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/utils/serialization.py +0 -0
  222. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/utils/state_machine.py +0 -0
  223. {conson_xp-1.34.0 → conson_xp-1.36.0}/src/xp/utils/time_utils.py +0 -0
  224. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/.coverage +0 -0
  225. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/__init__.py +0 -0
  226. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/conftest.py +0 -0
  227. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/.coverage +0 -0
  228. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/__init__.py +0 -0
  229. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/telegram_test_data.py +0 -0
  230. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_api/.coverage +0 -0
  231. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_api/__init__.py +0 -0
  232. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_blink_integration.py +0 -0
  233. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_checksum_integration.py +0 -0
  234. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_conbus_blink_integration.py +0 -0
  235. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_conbus_receive_integration.py +0 -0
  236. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_discovery_integration.py +0 -0
  237. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_event_telegram_integration.py +0 -0
  238. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_homekit_config_integration.py +0 -0
  239. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_link_number_integration.py +0 -0
  240. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_module_integration.py +0 -0
  241. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_output_integration.py +0 -0
  242. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_reverse_proxy_integration.py +0 -0
  243. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_system_reply_telegram_integration.py +0 -0
  244. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_term_logging_integration.py +0 -0
  245. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/integration/test_version_integration.py +0 -0
  246. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/__init__.py +0 -0
  247. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_api/__init__.py +0 -0
  248. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_cli/__init__.py +0 -0
  249. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_click_tree.py +0 -0
  250. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_conbus_blink_commands.py +0 -0
  251. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_datapoint_type_choice.py +0 -0
  252. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_decorators.py +0 -0
  253. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_error_handlers.py +0 -0
  254. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_formatters.py +0 -0
  255. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_serial_number_type.py +0 -0
  256. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_system_function_choice.py +0 -0
  257. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_term_commands.py +0 -0
  258. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_connection/__init__.py +0 -0
  259. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_connection/test_connection_init.py +0 -0
  260. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_connection/test_exceptions.py +0 -0
  261. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_encoding/__init__.py +0 -0
  262. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_encoding/test_latin1_edge_cases.py +0 -0
  263. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/__init__.py +0 -0
  264. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_conbus.py +0 -0
  265. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_conbus_client_send.py +0 -0
  266. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_conbus_discover.py +0 -0
  267. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_conbus_linknumber.py +0 -0
  268. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_event_telegram.py +0 -0
  269. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_log_entry.py +0 -0
  270. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_logger_config.py +0 -0
  271. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_module_type.py +0 -0
  272. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_reply_telegram.py +0 -0
  273. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_system_telegram.py +0 -0
  274. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_system_telegram_enhancements.py +0 -0
  275. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_version_telegram.py +0 -0
  276. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_write_config_type.py +0 -0
  277. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_xp20_action_table.py +0 -0
  278. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_xp24_action_table.py +0 -0
  279. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_models/test_xp24_action_telegram.py +0 -0
  280. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/__init__.py +0 -0
  281. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_actiontable_serializer.py +0 -0
  282. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_base_server_service.py +0 -0
  283. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_blink_service.py +0 -0
  284. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_checksum_service.py +0 -0
  285. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_client_buffer_manager.py +0 -0
  286. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_blink_service.py +0 -0
  287. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_event_list_service.py +0 -0
  288. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_event_protocol.py +0 -0
  289. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_event_raw_service.py +0 -0
  290. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_receive_service.py +0 -0
  291. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_reverse_proxy_service.py +0 -0
  292. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_device_service_factory.py +0 -0
  293. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_discovery_service.py +0 -0
  294. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_homekit_cache_service.py +0 -0
  295. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_homekit_config_validator.py +0 -0
  296. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_homekit_conson_service.py +0 -0
  297. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_homekit_services.py +0 -0
  298. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_log_file_service.py +0 -0
  299. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_module_type_service.py +0 -0
  300. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_protocol.py +0 -0
  301. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_protocol_monitor_service.py +0 -0
  302. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_server_service.py +0 -0
  303. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_telegram_input_service.py +0 -0
  304. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_telegram_output_service.py +0 -0
  305. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_telegram_protocol.py +0 -0
  306. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_telegram_service.py +0 -0
  307. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_version_service.py +0 -0
  308. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_xp20_action_table_serializer.py +0 -0
  309. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_xp24_action_service.py +0 -0
  310. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_xp24_action_table_serializer.py +0 -0
  311. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_services/test_xp33_action_table_serializer.py +0 -0
  312. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_tui/__init__.py +0 -0
  313. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_tui/test_protocol_log.py +0 -0
  314. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_utils/__init__.py +0 -0
  315. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_utils/test_checksum.py +0 -0
  316. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_utils/test_event_helper.py +0 -0
  317. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_utils/test_logging.py +0 -0
  318. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_utils/test_serialization.py +0 -0
  319. {conson_xp-1.34.0 → conson_xp-1.36.0}/tests/unit/test_utils/test_time_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: conson-xp
3
- Version: 1.34.0
3
+ Version: 1.36.0
4
4
  Summary: XP Protocol Communication Tools
5
5
  Author-Email: ldvchosal <ldvchosal@github.com>
6
6
  License: MIT License
@@ -22,7 +22,7 @@ dependencies = [
22
22
  ]
23
23
  requires-python = ">=3.11"
24
24
  readme = "README.md"
25
- version = "1.34.0"
25
+ version = "1.36.0"
26
26
 
27
27
  [project.license]
28
28
  file = "LICENSE"
@@ -138,7 +138,7 @@ disable_error_code = [
138
138
  "method-assign",
139
139
  ]
140
140
  overrides = [
141
- { module = "tests.*", disallow_untyped_defs = false },
141
+ { module = "tests.*", disallow_untyped_defs = false, warn_unreachable = false },
142
142
  ]
143
143
 
144
144
  [tool.isort]
@@ -3,7 +3,7 @@
3
3
  conson-xp package.
4
4
  """
5
5
 
6
- __version__ = "1.34.0"
6
+ __version__ = "1.36.0"
7
7
  __manufacturer__ = "salchichon"
8
8
  __model__ = "xp.cli"
9
9
  __serial__ = "2025.09.23.000"
@@ -3,7 +3,6 @@
3
3
  import json
4
4
  from contextlib import suppress
5
5
  from pathlib import Path
6
- from typing import Any
7
6
 
8
7
  import click
9
8
  from click import Context
@@ -13,7 +12,6 @@ from xp.cli.utils.decorators import (
13
12
  connection_command,
14
13
  )
15
14
  from xp.cli.utils.serial_number_type import SERIAL
16
- from xp.models.actiontable.actiontable import ActionTable
17
15
  from xp.models.homekit.homekit_conson_config import (
18
16
  ConsonModuleConfig,
19
17
  ConsonModuleListConfig,
@@ -53,7 +51,7 @@ def conbus_download_actiontable(ctx: Context, serial_number: str) -> None:
53
51
  ctx.obj.get("container").get_container().resolve(ActionTableService)
54
52
  )
55
53
 
56
- def progress_callback(progress: str) -> None:
54
+ def on_progress(progress: str) -> None:
57
55
  """Handle progress updates during action table download.
58
56
 
59
57
  Args:
@@ -61,40 +59,36 @@ def conbus_download_actiontable(ctx: Context, serial_number: str) -> None:
61
59
  """
62
60
  click.echo(progress)
63
61
 
64
- def on_finish(
65
- _actiontable: ActionTable,
66
- actiontable_dict: dict[str, Any],
67
- actiontable_short: list[str],
68
- ) -> None:
62
+ def on_finish(result: tuple) -> None:
69
63
  """Handle successful completion of action table download.
70
64
 
71
65
  Args:
72
- _actiontable: Downloaded action table object.
73
- actiontable_dict: Dictionary representation of action table.
74
- actiontable_short: List of textual format strings.
66
+ result: Tuple of (_actiontable, actiontable_dict, actiontable_short).
75
67
  """
68
+ _actiontable, actiontable_dict, actiontable_short = result
76
69
  output = {
77
70
  "serial_number": serial_number,
78
71
  "actiontable_short": actiontable_short,
79
72
  "actiontable": actiontable_dict,
80
73
  }
81
74
  click.echo(json.dumps(output, indent=2, default=str))
75
+ service.stop_reactor()
82
76
 
83
- def error_callback(error: str) -> None:
77
+ def on_error(error: str) -> None:
84
78
  """Handle errors during action table download.
85
79
 
86
80
  Args:
87
81
  error: Error message string.
88
82
  """
89
83
  click.echo(error)
84
+ service.stop_reactor()
90
85
 
91
86
  with service:
92
- service.start(
93
- serial_number=serial_number,
94
- progress_callback=progress_callback,
95
- finish_callback=on_finish,
96
- error_callback=error_callback,
97
- )
87
+ service.on_progress.connect(on_progress)
88
+ service.on_finish.connect(on_finish)
89
+ service.on_error.connect(on_error)
90
+ service.start(serial_number=serial_number)
91
+ service.start_reactor()
98
92
 
99
93
 
100
94
  @conbus_actiontable.command("upload", short_help="Upload ActionTable")
@@ -125,13 +119,19 @@ def conbus_upload_actiontable(ctx: Context, serial_number: str) -> None:
125
119
  """
126
120
  click.echo(progress, nl=False)
127
121
 
128
- def success_callback() -> None:
129
- """Handle successful completion of action table upload."""
130
- click.echo("\nAction table uploaded successfully")
131
- if entries_count > 0:
132
- click.echo(f"{entries_count} entries written")
122
+ def on_finish(success: bool) -> None:
123
+ """Handle completion of action table upload.
133
124
 
134
- def error_callback(error: str) -> None:
125
+ Args:
126
+ success: True if upload succeeded.
127
+ """
128
+ if success:
129
+ click.echo("\nAction table uploaded successfully")
130
+ if entries_count > 0:
131
+ click.echo(f"{entries_count} entries written")
132
+ service.stop_reactor()
133
+
134
+ def on_error(error: str) -> None:
135
135
  """Handle errors during action table upload.
136
136
 
137
137
  Args:
@@ -140,6 +140,7 @@ def conbus_upload_actiontable(ctx: Context, serial_number: str) -> None:
140
140
  Raises:
141
141
  ActionTableError: Always raised with upload failure message.
142
142
  """
143
+ service.stop_reactor()
143
144
  raise ActionTableError(f"Upload failed: {error}")
144
145
 
145
146
  with service:
@@ -152,12 +153,11 @@ def conbus_upload_actiontable(ctx: Context, serial_number: str) -> None:
152
153
  if module and module.action_table:
153
154
  entries_count = len(module.action_table)
154
155
 
155
- service.start(
156
- serial_number=serial_number,
157
- progress_callback=progress_callback,
158
- success_callback=success_callback,
159
- error_callback=error_callback,
160
- )
156
+ service.on_progress.connect(progress_callback)
157
+ service.on_finish.connect(on_finish)
158
+ service.on_error.connect(on_error)
159
+ service.start(serial_number=serial_number)
160
+ service.start_reactor()
161
161
 
162
162
 
163
163
  @conbus_actiontable.command("list", short_help="List modules with ActionTable")
@@ -180,7 +180,7 @@ def conbus_list_actiontable(ctx: Context) -> None:
180
180
  """
181
181
  click.echo(json.dumps(module_list, indent=2, default=str))
182
182
 
183
- def error_callback(error: str) -> None:
183
+ def on_error(error: str) -> None:
184
184
  """Handle errors during action table list.
185
185
 
186
186
  Args:
@@ -189,10 +189,9 @@ def conbus_list_actiontable(ctx: Context) -> None:
189
189
  click.echo(error)
190
190
 
191
191
  with service:
192
- service.start(
193
- finish_callback=on_finish,
194
- error_callback=error_callback,
195
- )
192
+ service.on_finish.connect(on_finish)
193
+ service.on_error.connect(on_error)
194
+ service.start()
196
195
 
197
196
 
198
197
  @conbus_actiontable.command("show", short_help="Show ActionTable configuration")
@@ -55,10 +55,9 @@ def get_autoreport_command(ctx: Context, serial_number: str) -> None:
55
55
  click.echo(json.dumps(result, indent=2))
56
56
 
57
57
  with service:
58
+ service.on_finish.connect(on_finish)
58
59
  service.query_datapoint(
59
- serial_number=serial_number,
60
- datapoint_type=DataPointType.AUTO_REPORT_STATUS,
61
- finish_callback=on_finish,
60
+ serial_number=serial_number, datapoint_type=DataPointType.AUTO_REPORT_STATUS
62
61
  )
63
62
 
64
63
 
@@ -80,6 +79,12 @@ def set_autoreport_command(ctx: Context, serial_number: str, status: str) -> Non
80
79
  xp conbus autoreport set 0123450001 on
81
80
  xp conbus autoreport set 0123450001 off
82
81
  """
82
+ service: WriteConfigService = (
83
+ ctx.obj.get("container").get_container().resolve(WriteConfigService)
84
+ )
85
+ telegram_service: TelegramDatapointService = (
86
+ ctx.obj.get("container").get_container().resolve(TelegramDatapointService)
87
+ )
83
88
 
84
89
  def on_finish(response: "ConbusWriteConfigResponse") -> None:
85
90
  """Handle successful completion of light level on command.
@@ -88,21 +93,17 @@ def set_autoreport_command(ctx: Context, serial_number: str, status: str) -> Non
88
93
  response: Light level response object.
89
94
  """
90
95
  click.echo(json.dumps(response.to_dict(), indent=2))
96
+ service.stop_reactor()
91
97
 
92
- service: WriteConfigService = (
93
- ctx.obj.get("container").get_container().resolve(WriteConfigService)
94
- )
95
- telegram_service: TelegramDatapointService = (
96
- ctx.obj.get("container").get_container().resolve(TelegramDatapointService)
97
- )
98
98
  status_value = True if status == "on" else False
99
99
  data_value = telegram_service.get_autoreport_status_data_value(status_value)
100
100
 
101
101
  with service:
102
+ service.on_finish.connect(on_finish)
102
103
  service.write_config(
103
104
  serial_number=serial_number,
104
105
  datapoint_type=DataPointType.AUTO_REPORT_STATUS,
105
106
  data_value=data_value,
106
- finish_callback=on_finish,
107
107
  timeout_seconds=0.5,
108
108
  )
109
+ service.start_reactor()
@@ -40,18 +40,20 @@ def send_custom_telegram(
40
40
  ctx.obj.get("container").get_container().resolve(ConbusCustomService)
41
41
  )
42
42
 
43
- def on_finish(service_response: "ConbusCustomResponse") -> None:
43
+ def on_finish(response: ConbusCustomResponse) -> None:
44
44
  """Handle successful completion of custom telegram.
45
45
 
46
46
  Args:
47
- service_response: Custom response object.
47
+ response: Custom response object.
48
48
  """
49
- click.echo(json.dumps(service_response.to_dict(), indent=2))
49
+ click.echo(json.dumps(response.to_dict(), indent=2))
50
+ service.stop_reactor()
50
51
 
51
52
  with service:
53
+ service.on_finish.connect(on_finish)
52
54
  service.send_custom_telegram(
53
55
  serial_number=serial_number,
54
56
  function_code=function_code,
55
57
  data=datapoint_code,
56
- finish_callback=on_finish,
57
58
  )
59
+ service.start_reactor()
@@ -56,14 +56,16 @@ def query_datapoint(ctx: Context, serial_number: str, datapoint: DataPointType)
56
56
  service_response: Datapoint response object.
57
57
  """
58
58
  click.echo(json.dumps(service_response.to_dict(), indent=2))
59
+ service.stop_reactor()
59
60
 
60
61
  # Send telegram
61
62
  with service:
63
+ service.on_finish.connect(on_finish)
62
64
  service.query_datapoint(
63
65
  serial_number=serial_number,
64
66
  datapoint_type=datapoint,
65
- finish_callback=on_finish,
66
67
  )
68
+ service.start_reactor()
67
69
 
68
70
 
69
71
  # Add the single datapoint query command to the group
@@ -96,6 +98,7 @@ def query_all_datapoints(ctx: Context, serial_number: str) -> None:
96
98
  service_response: Datapoint response object with all datapoints.
97
99
  """
98
100
  click.echo(json.dumps(service_response.to_dict(), indent=2))
101
+ service.stop_reactor()
99
102
 
100
103
  def on_progress(reply_telegram: ReplyTelegram) -> None:
101
104
  """Handle progress updates during all datapoints query.
@@ -106,8 +109,7 @@ def query_all_datapoints(ctx: Context, serial_number: str) -> None:
106
109
  click.echo(json.dumps(reply_telegram.to_dict(), indent=2))
107
110
 
108
111
  with service:
109
- service.query_all_datapoints(
110
- serial_number=serial_number,
111
- finish_callback=on_finish,
112
- progress_callback=on_progress,
113
- )
112
+ service.on_finish.connect(on_finish)
113
+ service.on_progress.connect(on_progress)
114
+ service.query_all_datapoints(serial_number=serial_number)
115
+ service.start_reactor()
@@ -39,6 +39,9 @@ def xp_lightlevel_set(
39
39
  xp conbus lightlevel set 0123450001 2 50 # Set output 2 to 50%
40
40
  xp conbus lightlevel set 0011223344 0 100 # Set output 0 to 100%
41
41
  """
42
+ service: WriteConfigService = (
43
+ ctx.obj.get("container").get_container().resolve(WriteConfigService)
44
+ )
42
45
 
43
46
  def on_finish(response: "ConbusWriteConfigResponse") -> None:
44
47
  """Handle successful completion of light level on command.
@@ -47,21 +50,19 @@ def xp_lightlevel_set(
47
50
  response: Light level response object.
48
51
  """
49
52
  click.echo(json.dumps(response.to_dict(), indent=2))
50
-
51
- service: WriteConfigService = (
52
- ctx.obj.get("container").get_container().resolve(WriteConfigService)
53
- )
53
+ service.stop_reactor()
54
54
 
55
55
  data_value = f"{output_number:02d}:{level:03d}"
56
56
 
57
57
  with service:
58
+ service.on_finish.connect(on_finish)
58
59
  service.write_config(
59
60
  serial_number=serial_number,
60
61
  datapoint_type=DataPointType.MODULE_LIGHT_LEVEL,
61
62
  data_value=data_value,
62
- finish_callback=on_finish,
63
63
  timeout_seconds=0.5,
64
64
  )
65
+ service.start_reactor()
65
66
 
66
67
 
67
68
  @conbus_lightlevel.command("off")
@@ -84,6 +85,9 @@ def xp_lightlevel_off(
84
85
  xp conbus lightlevel off 0123450001 2 # Turn off output 2
85
86
  xp conbus lightlevel off 0011223344 0 # Turn off output 0
86
87
  """
88
+ service: WriteConfigService = (
89
+ ctx.obj.get("container").get_container().resolve(WriteConfigService)
90
+ )
87
91
 
88
92
  def on_finish(response: "ConbusWriteConfigResponse") -> None:
89
93
  """Handle successful completion of light level on command.
@@ -92,22 +96,20 @@ def xp_lightlevel_off(
92
96
  response: Light level response object.
93
97
  """
94
98
  click.echo(json.dumps(response.to_dict(), indent=2))
95
-
96
- service: WriteConfigService = (
97
- ctx.obj.get("container").get_container().resolve(WriteConfigService)
98
- )
99
+ service.stop_reactor()
99
100
 
100
101
  level = 0
101
102
  data_value = f"{output_number:02d}:{level:03d}"
102
103
 
103
104
  with service:
105
+ service.on_finish.connect(on_finish)
104
106
  service.write_config(
105
107
  serial_number=serial_number,
106
108
  datapoint_type=DataPointType.MODULE_LIGHT_LEVEL,
107
109
  data_value=data_value,
108
- finish_callback=on_finish,
109
110
  timeout_seconds=0.5,
110
111
  )
112
+ service.start_reactor()
111
113
 
112
114
 
113
115
  @conbus_lightlevel.command("on")
@@ -130,6 +132,9 @@ def xp_lightlevel_on(
130
132
  xp conbus lightlevel on 0123450001 2 # Turn on output 2 (80%)
131
133
  xp conbus lightlevel on 0011223344 0 # Turn on output 0 (80%)
132
134
  """
135
+ service: WriteConfigService = (
136
+ ctx.obj.get("container").get_container().resolve(WriteConfigService)
137
+ )
133
138
 
134
139
  def on_finish(response: "ConbusWriteConfigResponse") -> None:
135
140
  """Handle successful completion of light level on command.
@@ -138,22 +143,20 @@ def xp_lightlevel_on(
138
143
  response: Light level response object.
139
144
  """
140
145
  click.echo(json.dumps(response.to_dict(), indent=2))
141
-
142
- service: WriteConfigService = (
143
- ctx.obj.get("container").get_container().resolve(WriteConfigService)
144
- )
146
+ service.stop_reactor()
145
147
 
146
148
  level = 60
147
149
  data_value = f"{output_number:02d}:{level:03d}"
148
150
 
149
151
  with service:
152
+ service.on_finish.connect(on_finish)
150
153
  service.write_config(
151
154
  serial_number=serial_number,
152
155
  datapoint_type=DataPointType.MODULE_LIGHT_LEVEL,
153
156
  data_value=data_value,
154
- finish_callback=on_finish,
155
157
  timeout_seconds=0.5,
156
158
  )
159
+ service.start_reactor()
157
160
 
158
161
 
159
162
  @conbus_lightlevel.command("get")
@@ -199,9 +202,9 @@ def xp_lightlevel_get(
199
202
  click.echo(json.dumps(result, indent=2))
200
203
 
201
204
  with service:
205
+ service.on_finish.connect(on_finish)
202
206
  service.query_datapoint(
203
207
  serial_number=serial_number,
204
208
  datapoint_type=DataPointType.MODULE_LIGHT_LEVEL,
205
- finish_callback=on_finish,
206
209
  timeout_seconds=0.5,
207
210
  )
@@ -36,6 +36,9 @@ def set_linknumber_command(
36
36
  \b
37
37
  xp conbus linknumber set 0123450001 25
38
38
  """
39
+ service: WriteConfigService = (
40
+ ctx.obj.get("container").get_container().resolve(WriteConfigService)
41
+ )
39
42
 
40
43
  def on_finish(response: "ConbusWriteConfigResponse") -> None:
41
44
  """Handle successful completion of light level on command.
@@ -44,20 +47,18 @@ def set_linknumber_command(
44
47
  response: Light level response object.
45
48
  """
46
49
  click.echo(json.dumps(response.to_dict(), indent=2))
47
-
48
- service: WriteConfigService = (
49
- ctx.obj.get("container").get_container().resolve(WriteConfigService)
50
- )
50
+ service.stop_reactor()
51
51
 
52
52
  data_value = f"{link_number:02d}"
53
53
  with service:
54
+ service.on_finish.connect(on_finish)
54
55
  service.write_config(
55
56
  serial_number=serial_number,
56
57
  datapoint_type=DataPointType.LINK_NUMBER,
57
58
  data_value=data_value,
58
- finish_callback=on_finish,
59
59
  timeout_seconds=0.5,
60
60
  )
61
+ service.start_reactor()
61
62
 
62
63
 
63
64
  @conbus_linknumber.command("get", short_help="Get link number for a module")
@@ -94,9 +95,9 @@ def get_linknumber_command(ctx: click.Context, serial_number: str) -> None:
94
95
  click.echo(json.dumps(result, indent=2))
95
96
 
96
97
  with service:
98
+ service.on_finish.connect(on_finish)
97
99
  service.query_datapoint(
98
100
  serial_number=serial_number,
99
101
  datapoint_type=DataPointType.LINK_NUMBER,
100
- finish_callback=on_finish,
101
102
  timeout_seconds=0.5,
102
103
  )
@@ -36,6 +36,9 @@ def set_modulenumber_command(
36
36
  \b
37
37
  xp conbus modulenumber set 0123450001 25
38
38
  """
39
+ service: WriteConfigService = (
40
+ ctx.obj.get("container").get_container().resolve(WriteConfigService)
41
+ )
39
42
 
40
43
  def on_finish(response: "ConbusWriteConfigResponse") -> None:
41
44
  """Handle successful completion of light level on command.
@@ -44,20 +47,18 @@ def set_modulenumber_command(
44
47
  response: Light level response object.
45
48
  """
46
49
  click.echo(json.dumps(response.to_dict(), indent=2))
47
-
48
- service: WriteConfigService = (
49
- ctx.obj.get("container").get_container().resolve(WriteConfigService)
50
- )
50
+ service.stop_reactor()
51
51
 
52
52
  data_value = f"{module_number:02d}"
53
53
  with service:
54
+ service.on_finish.connect(on_finish)
54
55
  service.write_config(
55
56
  serial_number=serial_number,
56
57
  datapoint_type=DataPointType.MODULE_NUMBER,
57
58
  data_value=data_value,
58
- finish_callback=on_finish,
59
59
  timeout_seconds=0.5,
60
60
  )
61
+ service.start_reactor()
61
62
 
62
63
 
63
64
  @conbus_modulenumber.command("get", short_help="Get module number for a module")
@@ -96,9 +97,9 @@ def get_modulenumber_command(ctx: click.Context, serial_number: str) -> None:
96
97
  click.echo(json.dumps(result, indent=2))
97
98
 
98
99
  with service:
100
+ service.on_finish.connect(on_finish)
99
101
  service.query_datapoint(
100
102
  serial_number=serial_number,
101
103
  datapoint_type=DataPointType.MODULE_NUMBER,
102
- finish_callback=on_finish,
103
104
  timeout_seconds=0.5,
104
105
  )
@@ -40,7 +40,7 @@ def conbus_download_msactiontable(
40
40
  ctx.obj.get("container").get_container().resolve(MsActionTableService)
41
41
  )
42
42
 
43
- def progress_callback(progress: str) -> None:
43
+ def on_progress(progress: str) -> None:
44
44
  """Handle progress updates during MS action table download.
45
45
 
46
46
  Args:
@@ -61,6 +61,7 @@ def conbus_download_msactiontable(
61
61
  Raises:
62
62
  Abort: If action table download failed.
63
63
  """
64
+ service.stop_reactor()
64
65
  if action_table is None:
65
66
  click.echo("Error: Failed to download MS action table")
66
67
  raise click.Abort()
@@ -72,23 +73,20 @@ def conbus_download_msactiontable(
72
73
  }
73
74
  click.echo(json.dumps(output, indent=2, default=str))
74
75
 
75
- def error_callback(error: str) -> None:
76
+ def on_error(error: str) -> None:
76
77
  """Handle errors during MS action table download.
77
78
 
78
79
  Args:
79
80
  error: Error message string.
80
-
81
- Raises:
82
- Abort: Always raised to abort the command on error.
83
81
  """
84
82
  click.echo(f"Error: {error}")
85
- raise click.Abort()
86
83
 
87
84
  with service:
85
+ service.on_progress.connect(on_progress)
86
+ service.on_error.connect(on_error)
87
+ service.on_finish.connect(on_finish)
88
88
  service.start(
89
89
  serial_number=serial_number,
90
90
  xpmoduletype=xpmoduletype,
91
- progress_callback=progress_callback,
92
- finish_callback=on_finish,
93
- error_callback=error_callback,
94
91
  )
92
+ service.start_reactor()
@@ -5,9 +5,7 @@ import json
5
5
  import click
6
6
 
7
7
  from xp.cli.commands.conbus.conbus import conbus_output
8
- from xp.cli.utils.decorators import (
9
- connection_command,
10
- )
8
+ from xp.cli.utils.decorators import connection_command
11
9
  from xp.cli.utils.serial_number_type import SERIAL
12
10
  from xp.models import ConbusDatapointResponse
13
11
  from xp.models.conbus.conbus_output import ConbusOutputResponse
@@ -45,14 +43,16 @@ def xp_output_on(ctx: click.Context, serial_number: str, output_number: int) ->
45
43
  response: Output response object.
46
44
  """
47
45
  click.echo(json.dumps(response.to_dict(), indent=2))
46
+ service.stop_reactor()
48
47
 
49
48
  with service:
49
+ service.on_finish.connect(on_finish)
50
50
  service.send_action(
51
51
  serial_number=serial_number,
52
52
  output_number=output_number,
53
53
  action_type=ActionType.ON_RELEASE,
54
- finish_callback=on_finish,
55
54
  )
55
+ service.start_reactor()
56
56
 
57
57
 
58
58
  @conbus_output.command("off")
@@ -83,14 +83,16 @@ def xp_output_off(ctx: click.Context, serial_number: str, output_number: int) ->
83
83
  response: Output response object.
84
84
  """
85
85
  click.echo(json.dumps(response.to_dict(), indent=2))
86
+ service.stop_reactor()
86
87
 
87
88
  with service:
89
+ service.on_finish.connect(on_finish)
88
90
  service.send_action(
89
91
  serial_number=serial_number,
90
92
  output_number=output_number,
91
93
  action_type=ActionType.OFF_PRESS,
92
- finish_callback=on_finish,
93
94
  )
95
+ service.start_reactor()
94
96
 
95
97
 
96
98
  @conbus_output.command("status")
@@ -121,10 +123,10 @@ def xp_output_status(ctx: click.Context, serial_number: str) -> None:
121
123
  click.echo(json.dumps(response.to_dict(), indent=2))
122
124
 
123
125
  with service:
126
+ service.on_finish.connect(on_finish)
124
127
  service.query_datapoint(
125
128
  serial_number=serial_number,
126
129
  datapoint_type=DataPointType.MODULE_OUTPUT_STATE,
127
- finish_callback=on_finish,
128
130
  )
129
131
 
130
132
 
@@ -156,8 +158,8 @@ def xp_module_state(ctx: click.Context, serial_number: str) -> None:
156
158
  click.echo(json.dumps(response.to_dict(), indent=2))
157
159
 
158
160
  with service:
161
+ service.on_finish.connect(on_finish)
159
162
  service.query_datapoint(
160
163
  serial_number=serial_number,
161
164
  datapoint_type=DataPointType.MODULE_STATE,
162
- finish_callback=on_finish,
163
165
  )
@@ -52,11 +52,16 @@ def send_raw_telegrams(ctx: Context, raw_telegrams: str) -> None:
52
52
  service_response: Raw response object.
53
53
  """
54
54
  click.echo(json.dumps(service_response.to_dict(), indent=2))
55
+ service.stop_reactor()
55
56
 
56
57
  with service:
58
+ # Connect service signals
59
+ service.on_progress.connect(on_progress)
60
+ service.on_finish.connect(on_finish)
61
+ # Setup
57
62
  service.send_raw_telegram(
58
63
  raw_input=raw_telegrams,
59
- progress_callback=on_progress,
60
- finish_callback=on_finish,
61
64
  timeout_seconds=5.0,
62
65
  )
66
+ # Start (blocks until completion)
67
+ service.start_reactor()
@@ -48,11 +48,13 @@ def scan_module(ctx: Context, serial_number: str, function_code: str) -> None:
48
48
  service_response: Scan response object.
49
49
  """
50
50
  click.echo(json.dumps(service_response.to_dict(), indent=2))
51
+ service.stop_reactor()
51
52
 
52
53
  with service:
54
+ service.on_progress.connect(on_progress)
55
+ service.on_finish.connect(on_finish)
53
56
  service.scan_module(
54
57
  serial_number=serial_number,
55
58
  function_code=function_code,
56
- progress_callback=on_progress,
57
- finish_callback=on_finish,
58
59
  )
60
+ service.start_reactor()