conson-xp 1.33.0__tar.gz → 1.35.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.33.0 → conson_xp-1.35.0}/PKG-INFO +1 -1
  2. {conson_xp-1.33.0 → conson_xp-1.35.0}/pyproject.toml +2 -2
  3. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/__init__.py +1 -1
  4. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_actiontable_commands.py +34 -35
  5. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_autoreport_commands.py +11 -10
  6. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_blink_commands.py +20 -6
  7. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_custom_commands.py +6 -4
  8. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_datapoint_commands.py +8 -6
  9. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_lightlevel_commands.py +19 -16
  10. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_linknumber_commands.py +7 -6
  11. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_modulenumber_commands.py +7 -6
  12. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_msactiontable_commands.py +7 -9
  13. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_output_commands.py +9 -7
  14. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_raw_commands.py +7 -2
  15. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_scan_commands.py +4 -2
  16. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/actiontable/actiontable_download_service.py +79 -37
  17. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/actiontable/actiontable_list_service.py +17 -17
  18. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/actiontable/actiontable_upload_service.py +78 -36
  19. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/actiontable/msactiontable_service.py +88 -48
  20. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/conbus_blink_all_service.py +89 -35
  21. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/conbus_blink_service.py +82 -24
  22. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/conbus_custom_service.py +81 -26
  23. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/conbus_datapoint_queryall_service.py +90 -43
  24. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/conbus_datapoint_service.py +76 -28
  25. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/conbus_output_service.py +82 -22
  26. conson_xp-1.35.0/src/xp/services/conbus/conbus_raw_service.py +163 -0
  27. conson_xp-1.35.0/src/xp/services/conbus/conbus_scan_service.py +194 -0
  28. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/write_config_service.py +76 -26
  29. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/utils/dependencies.py +12 -24
  30. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_actiontable_integration.py +34 -7
  31. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_conbus_blink_integration.py +27 -33
  32. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_conbus_datapoint_integration.py +105 -31
  33. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_conbus_raw_integration.py +130 -25
  34. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_xp20_action_table_integration.py +12 -4
  35. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_xp24_action_table_integration.py +120 -33
  36. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_cli/test_conbus_actiontable_commands.py +130 -31
  37. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_actiontable_service.py +53 -57
  38. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_actiontable_upload_service.py +201 -179
  39. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_conbus_blink_service.py +104 -49
  40. conson_xp-1.35.0/tests/unit/test_services/test_conbus_output_service.py +257 -0
  41. conson_xp-1.35.0/tests/unit/test_services/test_conbus_raw_service.py +216 -0
  42. conson_xp-1.35.0/tests/unit/test_services/test_conbus_scan_service.py +225 -0
  43. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_xp24_action_table_service.py +88 -124
  44. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_xp_server_services.py +1 -1
  45. conson_xp-1.33.0/src/xp/services/conbus/conbus_raw_service.py +0 -122
  46. conson_xp-1.33.0/src/xp/services/conbus/conbus_scan_service.py +0 -150
  47. conson_xp-1.33.0/tests/unit/test_services/test_conbus_raw_service.py +0 -144
  48. {conson_xp-1.33.0 → conson_xp-1.35.0}/LICENSE +0 -0
  49. {conson_xp-1.33.0 → conson_xp-1.35.0}/README.md +0 -0
  50. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/__init__.py +0 -0
  51. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/__main__.py +0 -0
  52. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/__init__.py +0 -0
  53. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/__init__.py +0 -0
  54. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus.py +0 -0
  55. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_config_commands.py +0 -0
  56. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_discover_commands.py +0 -0
  57. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_event_commands.py +0 -0
  58. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_export_commands.py +0 -0
  59. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/conbus/conbus_receive_commands.py +0 -0
  60. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/file_commands.py +0 -0
  61. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/homekit/__init__.py +0 -0
  62. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/homekit/homekit.py +0 -0
  63. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/homekit/homekit_start_commands.py +0 -0
  64. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/module_commands.py +0 -0
  65. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/reverse_proxy_commands.py +0 -0
  66. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/server/__init__.py +0 -0
  67. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/server/server_commands.py +0 -0
  68. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/telegram/__init__.py +0 -0
  69. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/telegram/telegram.py +0 -0
  70. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/telegram/telegram_blink_commands.py +0 -0
  71. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/telegram/telegram_checksum_commands.py +0 -0
  72. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/telegram/telegram_discover_commands.py +0 -0
  73. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/telegram/telegram_linknumber_commands.py +0 -0
  74. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/telegram/telegram_parse_commands.py +0 -0
  75. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/telegram/telegram_version_commands.py +0 -0
  76. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/term/__init__.py +0 -0
  77. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/term/term.py +0 -0
  78. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/commands/term/term_commands.py +0 -0
  79. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/main.py +0 -0
  80. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/utils/__init__.py +0 -0
  81. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/utils/click_tree.py +0 -0
  82. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/utils/datapoint_type_choice.py +0 -0
  83. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/utils/decorators.py +0 -0
  84. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/utils/error_handlers.py +0 -0
  85. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/utils/formatters.py +0 -0
  86. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/utils/module_type_choice.py +0 -0
  87. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/utils/serial_number_type.py +0 -0
  88. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/utils/system_function_choice.py +0 -0
  89. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/cli/utils/xp_module_type.py +0 -0
  90. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/connection/__init__.py +0 -0
  91. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/connection/exceptions.py +0 -0
  92. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/__init__.py +0 -0
  93. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/actiontable/__init__.py +0 -0
  94. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/actiontable/actiontable.py +0 -0
  95. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/actiontable/msactiontable_xp20.py +0 -0
  96. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/actiontable/msactiontable_xp24.py +0 -0
  97. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/actiontable/msactiontable_xp33.py +0 -0
  98. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/__init__.py +0 -0
  99. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus.py +0 -0
  100. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_autoreport.py +0 -0
  101. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_blink.py +0 -0
  102. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_client_config.py +0 -0
  103. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_connection_status.py +0 -0
  104. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_custom.py +0 -0
  105. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_datapoint.py +0 -0
  106. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_discover.py +0 -0
  107. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_event_list.py +0 -0
  108. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_event_raw.py +0 -0
  109. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_export.py +0 -0
  110. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_lightlevel.py +0 -0
  111. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_linknumber.py +0 -0
  112. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_logger_config.py +0 -0
  113. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_output.py +0 -0
  114. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_raw.py +0 -0
  115. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_receive.py +0 -0
  116. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/conbus/conbus_writeconfig.py +0 -0
  117. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/homekit/__init__.py +0 -0
  118. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/homekit/homekit_accessory.py +0 -0
  119. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/homekit/homekit_config.py +0 -0
  120. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/homekit/homekit_conson_config.py +0 -0
  121. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/log_entry.py +0 -0
  122. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/protocol/__init__.py +0 -0
  123. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/protocol/conbus_protocol.py +0 -0
  124. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/response.py +0 -0
  125. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/__init__.py +0 -0
  126. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/action_type.py +0 -0
  127. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/datapoint_type.py +0 -0
  128. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/event_telegram.py +0 -0
  129. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/event_type.py +0 -0
  130. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/input_action_type.py +0 -0
  131. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/input_type.py +0 -0
  132. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/module_type.py +0 -0
  133. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/module_type_code.py +0 -0
  134. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/output_telegram.py +0 -0
  135. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/reply_telegram.py +0 -0
  136. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/system_function.py +0 -0
  137. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/system_telegram.py +0 -0
  138. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/telegram.py +0 -0
  139. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/telegram_type.py +0 -0
  140. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/telegram/timeparam_type.py +0 -0
  141. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/term/__init__.py +0 -0
  142. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/term/connection_state.py +0 -0
  143. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/term/module_state.py +0 -0
  144. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/term/protocol_keys_config.py +0 -0
  145. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/term/status_message.py +0 -0
  146. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/term/telegram_display.py +0 -0
  147. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/models/write_config_type.py +0 -0
  148. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/__init__.py +0 -0
  149. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/actiontable/__init__.py +0 -0
  150. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/actiontable/actiontable_serializer.py +0 -0
  151. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/actiontable/msactiontable_serializer.py +0 -0
  152. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/actiontable/msactiontable_xp20_serializer.py +0 -0
  153. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/actiontable/msactiontable_xp24_serializer.py +0 -0
  154. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/actiontable/msactiontable_xp33_serializer.py +0 -0
  155. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/__init__.py +0 -0
  156. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/actiontable/__init__.py +0 -0
  157. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/actiontable/actiontable_show_service.py +0 -0
  158. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/conbus_discover_service.py +0 -0
  159. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/conbus_event_list_service.py +0 -0
  160. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/conbus_event_raw_service.py +0 -0
  161. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/conbus_export_service.py +0 -0
  162. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/conbus/conbus_receive_service.py +0 -0
  163. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/homekit/__init__.py +0 -0
  164. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/homekit/homekit_cache_service.py +0 -0
  165. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/homekit/homekit_conbus_service.py +0 -0
  166. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/homekit/homekit_config_validator.py +0 -0
  167. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/homekit/homekit_conson_validator.py +0 -0
  168. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/homekit/homekit_dimminglight.py +0 -0
  169. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/homekit/homekit_dimminglight_service.py +0 -0
  170. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/homekit/homekit_hap_service.py +0 -0
  171. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/homekit/homekit_lightbulb.py +0 -0
  172. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/homekit/homekit_lightbulb_service.py +0 -0
  173. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/homekit/homekit_module_service.py +0 -0
  174. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/homekit/homekit_outlet.py +0 -0
  175. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/homekit/homekit_outlet_service.py +0 -0
  176. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/homekit/homekit_service.py +0 -0
  177. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/log_file_service.py +0 -0
  178. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/module_type_service.py +0 -0
  179. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/protocol/__init__.py +0 -0
  180. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/protocol/conbus_event_protocol.py +0 -0
  181. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/protocol/conbus_protocol.py +0 -0
  182. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/protocol/protocol_factory.py +0 -0
  183. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/protocol/telegram_protocol.py +0 -0
  184. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/reverse_proxy_service.py +0 -0
  185. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/server/__init__.py +0 -0
  186. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/server/base_server_service.py +0 -0
  187. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/server/client_buffer_manager.py +0 -0
  188. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/server/cp20_server_service.py +0 -0
  189. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/server/device_service_factory.py +0 -0
  190. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/server/server_service.py +0 -0
  191. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/server/xp130_server_service.py +0 -0
  192. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/server/xp20_server_service.py +0 -0
  193. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/server/xp230_server_service.py +0 -0
  194. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/server/xp24_server_service.py +0 -0
  195. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/server/xp33_server_service.py +0 -0
  196. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/telegram/__init__.py +0 -0
  197. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/telegram/telegram_blink_service.py +0 -0
  198. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/telegram/telegram_checksum_service.py +0 -0
  199. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/telegram/telegram_datapoint_service.py +0 -0
  200. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/telegram/telegram_discover_service.py +0 -0
  201. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/telegram/telegram_link_number_service.py +0 -0
  202. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/telegram/telegram_output_service.py +0 -0
  203. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/telegram/telegram_service.py +0 -0
  204. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/telegram/telegram_version_service.py +0 -0
  205. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/term/__init__.py +0 -0
  206. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/term/protocol_monitor_service.py +0 -0
  207. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/services/term/state_monitor_service.py +0 -0
  208. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/term/__init__.py +0 -0
  209. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/term/protocol.py +0 -0
  210. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/term/protocol.tcss +0 -0
  211. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/term/state.py +0 -0
  212. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/term/state.tcss +0 -0
  213. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/term/widgets/__init__.py +0 -0
  214. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/term/widgets/help_menu.py +0 -0
  215. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/term/widgets/modules_list.py +0 -0
  216. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/term/widgets/protocol_log.py +0 -0
  217. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/term/widgets/status_footer.py +0 -0
  218. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/utils/__init__.py +0 -0
  219. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/utils/checksum.py +0 -0
  220. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/utils/event_helper.py +0 -0
  221. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/utils/logging.py +0 -0
  222. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/utils/serialization.py +0 -0
  223. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/utils/state_machine.py +0 -0
  224. {conson_xp-1.33.0 → conson_xp-1.35.0}/src/xp/utils/time_utils.py +0 -0
  225. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/.coverage +0 -0
  226. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/__init__.py +0 -0
  227. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/conftest.py +0 -0
  228. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/.coverage +0 -0
  229. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/__init__.py +0 -0
  230. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/telegram_test_data.py +0 -0
  231. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_api/.coverage +0 -0
  232. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_api/__init__.py +0 -0
  233. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_blink_integration.py +0 -0
  234. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_checksum_integration.py +0 -0
  235. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_conbus_receive_integration.py +0 -0
  236. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_discovery_integration.py +0 -0
  237. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_event_telegram_integration.py +0 -0
  238. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_homekit_config_integration.py +0 -0
  239. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_link_number_integration.py +0 -0
  240. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_module_integration.py +0 -0
  241. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_output_integration.py +0 -0
  242. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_reverse_proxy_integration.py +0 -0
  243. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_system_reply_telegram_integration.py +0 -0
  244. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_term_logging_integration.py +0 -0
  245. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/integration/test_version_integration.py +0 -0
  246. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/__init__.py +0 -0
  247. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_api/__init__.py +0 -0
  248. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_cli/__init__.py +0 -0
  249. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_cli/test_click_tree.py +0 -0
  250. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_cli/test_conbus_blink_commands.py +0 -0
  251. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_cli/test_datapoint_type_choice.py +0 -0
  252. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_cli/test_decorators.py +0 -0
  253. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_cli/test_error_handlers.py +0 -0
  254. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_cli/test_formatters.py +0 -0
  255. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_cli/test_serial_number_type.py +0 -0
  256. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_cli/test_system_function_choice.py +0 -0
  257. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_cli/test_term_commands.py +0 -0
  258. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_connection/__init__.py +0 -0
  259. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_connection/test_connection_init.py +0 -0
  260. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_connection/test_exceptions.py +0 -0
  261. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_encoding/__init__.py +0 -0
  262. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_encoding/test_latin1_edge_cases.py +0 -0
  263. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/__init__.py +0 -0
  264. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_conbus.py +0 -0
  265. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_conbus_client_send.py +0 -0
  266. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_conbus_discover.py +0 -0
  267. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_conbus_linknumber.py +0 -0
  268. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_event_telegram.py +0 -0
  269. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_log_entry.py +0 -0
  270. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_logger_config.py +0 -0
  271. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_module_type.py +0 -0
  272. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_reply_telegram.py +0 -0
  273. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_system_telegram.py +0 -0
  274. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_system_telegram_enhancements.py +0 -0
  275. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_version_telegram.py +0 -0
  276. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_write_config_type.py +0 -0
  277. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_xp20_action_table.py +0 -0
  278. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_xp24_action_table.py +0 -0
  279. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_models/test_xp24_action_telegram.py +0 -0
  280. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/__init__.py +0 -0
  281. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_actiontable_serializer.py +0 -0
  282. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_base_server_service.py +0 -0
  283. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_blink_service.py +0 -0
  284. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_checksum_service.py +0 -0
  285. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_client_buffer_manager.py +0 -0
  286. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_conbus_event_list_service.py +0 -0
  287. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_conbus_event_protocol.py +0 -0
  288. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_conbus_event_raw_service.py +0 -0
  289. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_conbus_receive_service.py +0 -0
  290. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_conbus_reverse_proxy_service.py +0 -0
  291. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_device_service_factory.py +0 -0
  292. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_discovery_service.py +0 -0
  293. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_homekit_cache_service.py +0 -0
  294. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_homekit_config_validator.py +0 -0
  295. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_homekit_conson_service.py +0 -0
  296. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_homekit_services.py +0 -0
  297. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_log_file_service.py +0 -0
  298. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_module_type_service.py +0 -0
  299. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_protocol.py +0 -0
  300. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_protocol_monitor_service.py +0 -0
  301. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_server_service.py +0 -0
  302. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_state_monitor_service.py +0 -0
  303. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_telegram_input_service.py +0 -0
  304. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_telegram_output_service.py +0 -0
  305. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_telegram_protocol.py +0 -0
  306. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_telegram_service.py +0 -0
  307. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_version_service.py +0 -0
  308. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_xp20_action_table_serializer.py +0 -0
  309. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_xp24_action_service.py +0 -0
  310. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_xp24_action_table_serializer.py +0 -0
  311. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_services/test_xp33_action_table_serializer.py +0 -0
  312. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_tui/__init__.py +0 -0
  313. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_tui/test_protocol_log.py +0 -0
  314. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_utils/__init__.py +0 -0
  315. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_utils/test_checksum.py +0 -0
  316. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_utils/test_event_helper.py +0 -0
  317. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_utils/test_logging.py +0 -0
  318. {conson_xp-1.33.0 → conson_xp-1.35.0}/tests/unit/test_utils/test_serialization.py +0 -0
  319. {conson_xp-1.33.0 → conson_xp-1.35.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.33.0
3
+ Version: 1.35.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.33.0"
25
+ version = "1.35.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.33.0"
6
+ __version__ = "1.35.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()
@@ -41,12 +41,15 @@ def send_blink_on_telegram(ctx: Context, serial_number: str) -> None:
41
41
  service_response: Blink response object.
42
42
  """
43
43
  click.echo(json.dumps(service_response.to_dict(), indent=2))
44
+ service.stop_reactor()
44
45
 
45
46
  service: ConbusBlinkService = (
46
47
  ctx.obj.get("container").get_container().resolve(ConbusBlinkService)
47
48
  )
48
49
  with service:
49
- service.send_blink_telegram(serial_number, "on", on_finish, 0.5)
50
+ service.on_finish.connect(on_finish)
51
+ service.send_blink_telegram(serial_number, "on", 0.5)
52
+ service.start_reactor()
50
53
 
51
54
 
52
55
  @conbus_blink.command("off")
@@ -73,12 +76,15 @@ def send_blink_off_telegram(ctx: Context, serial_number: str) -> None:
73
76
  service_response: Blink response object.
74
77
  """
75
78
  click.echo(json.dumps(service_response.to_dict(), indent=2))
79
+ service.stop_reactor()
76
80
 
77
81
  service: ConbusBlinkService = (
78
82
  ctx.obj.get("container").get_container().resolve(ConbusBlinkService)
79
83
  )
80
84
  with service:
81
- service.send_blink_telegram(serial_number, "off", on_finish, 0.5)
85
+ service.on_finish.connect(on_finish)
86
+ service.send_blink_telegram(serial_number, "off", 0.5)
87
+ service.start_reactor()
82
88
 
83
89
 
84
90
  @conbus_blink.group("all", short_help="Control blink state for all devices")
@@ -109,6 +115,7 @@ def blink_all_off(ctx: Context) -> None:
109
115
  discovered_devices: Blink response with all devices.
110
116
  """
111
117
  click.echo(json.dumps(discovered_devices.to_dict(), indent=2))
118
+ service.stop_reactor()
112
119
 
113
120
  def progress(message: str) -> None:
114
121
  """Handle progress updates during blink all off operation.
@@ -116,13 +123,16 @@ def blink_all_off(ctx: Context) -> None:
116
123
  Args:
117
124
  message: Progress message string.
118
125
  """
119
- click.echo(message)
126
+ click.echo(message, nl=False)
120
127
 
121
128
  service: ConbusBlinkAllService = (
122
129
  ctx.obj.get("container").get_container().resolve(ConbusBlinkAllService)
123
130
  )
124
131
  with service:
125
- service.send_blink_all_telegram("off", progress, on_finish, 0.5)
132
+ service.on_progress.connect(progress)
133
+ service.on_finish.connect(on_finish)
134
+ service.send_blink_all_telegram("off", 5)
135
+ service.start_reactor()
126
136
 
127
137
 
128
138
  @conbus_blink_all.command("on", short_help="Turn on blinking for all devices")
@@ -147,6 +157,7 @@ def blink_all_on(ctx: Context) -> None:
147
157
  discovered_devices: Blink response with all devices.
148
158
  """
149
159
  click.echo(json.dumps(discovered_devices.to_dict(), indent=2))
160
+ service.stop_reactor()
150
161
 
151
162
  def progress(message: str) -> None:
152
163
  """Handle progress updates during blink all on operation.
@@ -154,10 +165,13 @@ def blink_all_on(ctx: Context) -> None:
154
165
  Args:
155
166
  message: Progress message string.
156
167
  """
157
- click.echo(message)
168
+ click.echo(message, nl=False)
158
169
 
159
170
  service: ConbusBlinkAllService = (
160
171
  ctx.obj.get("container").get_container().resolve(ConbusBlinkAllService)
161
172
  )
162
173
  with service:
163
- service.send_blink_all_telegram("on", progress, on_finish, 0.5)
174
+ service.on_progress.connect(progress)
175
+ service.on_finish.connect(on_finish)
176
+ service.send_blink_all_telegram("on", 5)
177
+ 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()