isar 1.31.0__tar.gz → 1.31.1__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.

Potentially problematic release.


This version of isar might be problematic. Click here for more details.

Files changed (238) hide show
  1. {isar-1.31.0 → isar-1.31.1}/PKG-INFO +1 -1
  2. {isar-1.31.0 → isar-1.31.1}/requirements.txt +21 -21
  3. {isar-1.31.0 → isar-1.31.1}/src/isar/config/open_telemetry.py +2 -8
  4. isar-1.31.1/src/isar/eventhandlers/eventhandler.py +93 -0
  5. isar-1.31.1/src/isar/models/events.py +118 -0
  6. {isar-1.31.0 → isar-1.31.1}/src/isar/modules.py +1 -1
  7. {isar-1.31.0 → isar-1.31.1}/src/isar/robot/robot.py +16 -18
  8. {isar-1.31.0 → isar-1.31.1}/src/isar/robot/robot_start_mission.py +8 -14
  9. {isar-1.31.0 → isar-1.31.1}/src/isar/robot/robot_status.py +2 -3
  10. {isar-1.31.0 → isar-1.31.1}/src/isar/robot/robot_stop_mission.py +3 -9
  11. {isar-1.31.0 → isar-1.31.1}/src/isar/robot/robot_task_status.py +3 -7
  12. {isar-1.31.0 → isar-1.31.1}/src/isar/script.py +2 -1
  13. {isar-1.31.0 → isar-1.31.1}/src/isar/services/utilities/scheduling_utilities.py +26 -24
  14. {isar-1.31.0 → isar-1.31.1}/src/isar/state_machine/state_machine.py +79 -9
  15. isar-1.31.1/src/isar/state_machine/states/await_next_mission.py +55 -0
  16. isar-1.31.1/src/isar/state_machine/states/blocked_protective_stop.py +33 -0
  17. isar-1.31.1/src/isar/state_machine/states/home.py +50 -0
  18. isar-1.31.1/src/isar/state_machine/states/monitor.py +93 -0
  19. isar-1.31.1/src/isar/state_machine/states/offline.py +34 -0
  20. isar-1.31.1/src/isar/state_machine/states/paused.py +30 -0
  21. isar-1.31.1/src/isar/state_machine/states/returning_home.py +85 -0
  22. isar-1.31.1/src/isar/state_machine/states/robot_standing_still.py +50 -0
  23. isar-1.31.1/src/isar/state_machine/states/stopping.py +60 -0
  24. isar-1.31.1/src/isar/state_machine/states/unknown_status.py +47 -0
  25. {isar-1.31.0 → isar-1.31.1}/src/isar/state_machine/transitions/functions/robot_status.py +4 -5
  26. {isar-1.31.0 → isar-1.31.1}/src/isar/state_machine/transitions/functions/stop.py +3 -12
  27. isar-1.31.1/src/isar/state_machine/utils/common_event_handlers.py +166 -0
  28. {isar-1.31.0 → isar-1.31.1}/src/isar/storage/uploader.py +1 -1
  29. {isar-1.31.0 → isar-1.31.1}/src/isar.egg-info/PKG-INFO +1 -1
  30. {isar-1.31.0 → isar-1.31.1}/src/isar.egg-info/SOURCES.txt +4 -15
  31. {isar-1.31.0 → isar-1.31.1}/tests/isar/apis/scheduler/test_scheduler_router.py +2 -2
  32. isar-1.31.1/tests/isar/models/communication/test_events.py +44 -0
  33. isar-1.31.1/tests/isar/services/utilities/test_queue_utilities.py +34 -0
  34. {isar-1.31.0 → isar-1.31.1}/tests/isar/services/utilities/test_scheduling_utilities.py +4 -6
  35. {isar-1.31.0 → isar-1.31.1}/tests/isar/state_machine/states/test_monitor.py +9 -5
  36. {isar-1.31.0 → isar-1.31.1}/tests/isar/state_machine/test_state_machine.py +18 -10
  37. {isar-1.31.0 → isar-1.31.1}/tests/test_double/robot_interface.py +39 -40
  38. isar-1.31.0/src/isar/models/communication/message.py +0 -8
  39. isar-1.31.0/src/isar/models/communication/queues/events.py +0 -58
  40. isar-1.31.0/src/isar/models/communication/queues/queue_io.py +0 -12
  41. isar-1.31.0/src/isar/models/communication/queues/queue_timeout_error.py +0 -2
  42. isar-1.31.0/src/isar/models/communication/queues/queue_utils.py +0 -38
  43. isar-1.31.0/src/isar/models/communication/queues/status_queue.py +0 -22
  44. isar-1.31.0/src/isar/services/utilities/queue_utilities.py +0 -39
  45. isar-1.31.0/src/isar/state_machine/generic_states/idle.py +0 -133
  46. isar-1.31.0/src/isar/state_machine/generic_states/ongoing_mission.py +0 -309
  47. isar-1.31.0/src/isar/state_machine/generic_states/robot_unavailable.py +0 -61
  48. isar-1.31.0/src/isar/state_machine/states/await_next_mission.py +0 -20
  49. isar-1.31.0/src/isar/state_machine/states/blocked_protective_stop.py +0 -24
  50. isar-1.31.0/src/isar/state_machine/states/home.py +0 -19
  51. isar-1.31.0/src/isar/state_machine/states/monitor.py +0 -22
  52. isar-1.31.0/src/isar/state_machine/states/offline.py +0 -22
  53. isar-1.31.0/src/isar/state_machine/states/paused.py +0 -44
  54. isar-1.31.0/src/isar/state_machine/states/returning_home.py +0 -24
  55. isar-1.31.0/src/isar/state_machine/states/robot_standing_still.py +0 -20
  56. isar-1.31.0/src/isar/state_machine/states/stopping.py +0 -75
  57. isar-1.31.0/src/isar/state_machine/states/unknown_status.py +0 -74
  58. isar-1.31.0/tests/isar/models/communication/test_queues.py +0 -49
  59. isar-1.31.0/tests/isar/services/utilities/__init__.py +0 -0
  60. isar-1.31.0/tests/isar/services/utilities/test_queue_utilities.py +0 -38
  61. isar-1.31.0/tests/isar/state_machine/__init__.py +0 -0
  62. isar-1.31.0/tests/isar/state_machine/states/__init__.py +0 -0
  63. isar-1.31.0/tests/test_double/__init__.py +0 -0
  64. {isar-1.31.0 → isar-1.31.1}/.dockerignore +0 -0
  65. {isar-1.31.0 → isar-1.31.1}/.env.test +0 -0
  66. {isar-1.31.0 → isar-1.31.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  67. {isar-1.31.0 → isar-1.31.1}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  68. {isar-1.31.0 → isar-1.31.1}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
  69. {isar-1.31.0 → isar-1.31.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  70. {isar-1.31.0 → isar-1.31.1}/.github/release.yml +0 -0
  71. {isar-1.31.0 → isar-1.31.1}/.github/workflows/compile_requirements.yml +0 -0
  72. {isar-1.31.0 → isar-1.31.1}/.github/workflows/project_automations.yml +0 -0
  73. {isar-1.31.0 → isar-1.31.1}/.github/workflows/pythonpackage.yml +0 -0
  74. {isar-1.31.0 → isar-1.31.1}/.github/workflows/pythonpublish.yml +0 -0
  75. {isar-1.31.0 → isar-1.31.1}/.github/workflows/stale.yml +0 -0
  76. {isar-1.31.0 → isar-1.31.1}/.gitignore +0 -0
  77. {isar-1.31.0 → isar-1.31.1}/.pre-commit-config.yaml +0 -0
  78. {isar-1.31.0 → isar-1.31.1}/LICENSE +0 -0
  79. {isar-1.31.0 → isar-1.31.1}/README.md +0 -0
  80. {isar-1.31.0 → isar-1.31.1}/SECURITY.md +0 -0
  81. {isar-1.31.0 → isar-1.31.1}/docs/Makefile +0 -0
  82. {isar-1.31.0 → isar-1.31.1}/docs/full_state_machine_diagram.png +0 -0
  83. {isar-1.31.0 → isar-1.31.1}/docs/make.bat +0 -0
  84. {isar-1.31.0 → isar-1.31.1}/docs/mission_state_machine_diagram.png +0 -0
  85. {isar-1.31.0 → isar-1.31.1}/docs/robot_status_state_machine_diagram.png +0 -0
  86. {isar-1.31.0 → isar-1.31.1}/docs/rst_processing.py +0 -0
  87. {isar-1.31.0 → isar-1.31.1}/docs/source/conf.py +0 -0
  88. {isar-1.31.0 → isar-1.31.1}/docs/source/index.rst +0 -0
  89. {isar-1.31.0 → isar-1.31.1}/docs/source/readme_link.md +0 -0
  90. {isar-1.31.0 → isar-1.31.1}/docs/update_state_diagram.py +0 -0
  91. {isar-1.31.0 → isar-1.31.1}/main.py +0 -0
  92. {isar-1.31.0 → isar-1.31.1}/pyproject.toml +0 -0
  93. {isar-1.31.0 → isar-1.31.1}/radixconfig.yml +0 -0
  94. {isar-1.31.0 → isar-1.31.1}/setup.cfg +0 -0
  95. {isar-1.31.0 → isar-1.31.1}/src/isar/__init__.py +0 -0
  96. {isar-1.31.0 → isar-1.31.1}/src/isar/apis/__init__.py +0 -0
  97. {isar-1.31.0 → isar-1.31.1}/src/isar/apis/api.py +0 -0
  98. {isar-1.31.0 → isar-1.31.1}/src/isar/apis/models/__init__.py +0 -0
  99. {isar-1.31.0 → isar-1.31.1}/src/isar/apis/models/models.py +0 -0
  100. {isar-1.31.0 → isar-1.31.1}/src/isar/apis/models/start_mission_definition.py +0 -0
  101. {isar-1.31.0 → isar-1.31.1}/src/isar/apis/robot_control/robot_controller.py +0 -0
  102. {isar-1.31.0 → isar-1.31.1}/src/isar/apis/schedule/__init__.py +0 -0
  103. {isar-1.31.0 → isar-1.31.1}/src/isar/apis/schedule/scheduling_controller.py +0 -0
  104. {isar-1.31.0 → isar-1.31.1}/src/isar/apis/security/__init__.py +0 -0
  105. {isar-1.31.0 → isar-1.31.1}/src/isar/apis/security/authentication.py +0 -0
  106. {isar-1.31.0 → isar-1.31.1}/src/isar/config/__init__.py +0 -0
  107. {isar-1.31.0 → isar-1.31.1}/src/isar/config/certs/ca-cert.pem +0 -0
  108. {isar-1.31.0 → isar-1.31.1}/src/isar/config/configuration_error.py +0 -0
  109. {isar-1.31.0 → isar-1.31.1}/src/isar/config/keyvault/__init__.py +0 -0
  110. {isar-1.31.0 → isar-1.31.1}/src/isar/config/keyvault/keyvault_error.py +0 -0
  111. {isar-1.31.0 → isar-1.31.1}/src/isar/config/keyvault/keyvault_service.py +0 -0
  112. {isar-1.31.0 → isar-1.31.1}/src/isar/config/log.py +0 -0
  113. {isar-1.31.0 → isar-1.31.1}/src/isar/config/logging.conf +0 -0
  114. {isar-1.31.0 → isar-1.31.1}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
  115. {isar-1.31.0 → isar-1.31.1}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
  116. {isar-1.31.0 → isar-1.31.1}/src/isar/config/maps/default_map.json +0 -0
  117. {isar-1.31.0 → isar-1.31.1}/src/isar/config/maps/klab_b.json +0 -0
  118. {isar-1.31.0 → isar-1.31.1}/src/isar/config/maps/klab_compressor.json +0 -0
  119. {isar-1.31.0 → isar-1.31.1}/src/isar/config/maps/klab_turtlebot.json +0 -0
  120. {isar-1.31.0 → isar-1.31.1}/src/isar/config/maps/turtleworld.json +0 -0
  121. {isar-1.31.0 → isar-1.31.1}/src/isar/config/predefined_mission_definition/__init__.py +0 -0
  122. {isar-1.31.0 → isar-1.31.1}/src/isar/config/predefined_mission_definition/default_exr.json +0 -0
  123. {isar-1.31.0 → isar-1.31.1}/src/isar/config/predefined_mission_definition/default_mission.json +0 -0
  124. {isar-1.31.0 → isar-1.31.1}/src/isar/config/predefined_mission_definition/default_turtlebot.json +0 -0
  125. {isar-1.31.0 → isar-1.31.1}/src/isar/config/predefined_missions/__init__.py +0 -0
  126. {isar-1.31.0 → isar-1.31.1}/src/isar/config/predefined_missions/default.json +0 -0
  127. {isar-1.31.0 → isar-1.31.1}/src/isar/config/predefined_missions/default_turtlebot.json +0 -0
  128. {isar-1.31.0 → isar-1.31.1}/src/isar/config/settings.py +0 -0
  129. {isar-1.31.0 → isar-1.31.1}/src/isar/mission_planner/__init__.py +0 -0
  130. {isar-1.31.0 → isar-1.31.1}/src/isar/mission_planner/local_planner.py +0 -0
  131. {isar-1.31.0 → isar-1.31.1}/src/isar/mission_planner/mission_planner_interface.py +0 -0
  132. {isar-1.31.0 → isar-1.31.1}/src/isar/mission_planner/sequential_task_selector.py +0 -0
  133. {isar-1.31.0 → isar-1.31.1}/src/isar/mission_planner/task_selector_interface.py +0 -0
  134. {isar-1.31.0 → isar-1.31.1}/src/isar/models/__init__.py +0 -0
  135. {isar-1.31.0/src/isar/models/communication → isar-1.31.1/src/isar/services}/__init__.py +0 -0
  136. {isar-1.31.0/src/isar/models/communication/queues → isar-1.31.1/src/isar/services/auth}/__init__.py +0 -0
  137. {isar-1.31.0 → isar-1.31.1}/src/isar/services/auth/azure_credentials.py +0 -0
  138. {isar-1.31.0/src/isar/models/mission_metadata → isar-1.31.1/src/isar/services/service_connections}/__init__.py +0 -0
  139. {isar-1.31.0/src/isar/services → isar-1.31.1/src/isar/services/service_connections/mqtt}/__init__.py +0 -0
  140. {isar-1.31.0 → isar-1.31.1}/src/isar/services/service_connections/mqtt/mqtt_client.py +0 -0
  141. {isar-1.31.0 → isar-1.31.1}/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +0 -0
  142. {isar-1.31.0 → isar-1.31.1}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +0 -0
  143. {isar-1.31.0 → isar-1.31.1}/src/isar/services/service_connections/request_handler.py +0 -0
  144. {isar-1.31.0/src/isar/services/auth → isar-1.31.1/src/isar/services/utilities}/__init__.py +0 -0
  145. {isar-1.31.0 → isar-1.31.1}/src/isar/services/utilities/robot_utilities.py +0 -0
  146. {isar-1.31.0 → isar-1.31.1}/src/isar/services/utilities/threaded_request.py +0 -0
  147. {isar-1.31.0/src/isar/services/service_connections → isar-1.31.1/src/isar/state_machine}/__init__.py +0 -0
  148. {isar-1.31.0/src/isar/services/service_connections/mqtt → isar-1.31.1/src/isar/state_machine/states}/__init__.py +0 -0
  149. {isar-1.31.0 → isar-1.31.1}/src/isar/state_machine/states_enum.py +0 -0
  150. {isar-1.31.0 → isar-1.31.1}/src/isar/state_machine/transitions/functions/fail_mission.py +0 -0
  151. {isar-1.31.0 → isar-1.31.1}/src/isar/state_machine/transitions/functions/finish_mission.py +0 -0
  152. {isar-1.31.0 → isar-1.31.1}/src/isar/state_machine/transitions/functions/pause.py +0 -0
  153. {isar-1.31.0 → isar-1.31.1}/src/isar/state_machine/transitions/functions/resume.py +0 -0
  154. {isar-1.31.0 → isar-1.31.1}/src/isar/state_machine/transitions/functions/return_home.py +0 -0
  155. {isar-1.31.0 → isar-1.31.1}/src/isar/state_machine/transitions/functions/start_mission.py +0 -0
  156. {isar-1.31.0 → isar-1.31.1}/src/isar/state_machine/transitions/functions/utils.py +0 -0
  157. {isar-1.31.0 → isar-1.31.1}/src/isar/state_machine/transitions/mission.py +0 -0
  158. {isar-1.31.0 → isar-1.31.1}/src/isar/state_machine/transitions/return_home.py +0 -0
  159. {isar-1.31.0 → isar-1.31.1}/src/isar/state_machine/transitions/robot_status.py +0 -0
  160. {isar-1.31.0/src/isar/services/service_connections/stid → isar-1.31.1/src/isar/storage}/__init__.py +0 -0
  161. {isar-1.31.0 → isar-1.31.1}/src/isar/storage/blob_storage.py +0 -0
  162. {isar-1.31.0 → isar-1.31.1}/src/isar/storage/local_storage.py +0 -0
  163. {isar-1.31.0 → isar-1.31.1}/src/isar/storage/storage_interface.py +0 -0
  164. {isar-1.31.0 → isar-1.31.1}/src/isar/storage/utilities.py +0 -0
  165. {isar-1.31.0 → isar-1.31.1}/src/isar.egg-info/dependency_links.txt +0 -0
  166. {isar-1.31.0 → isar-1.31.1}/src/isar.egg-info/entry_points.txt +0 -0
  167. {isar-1.31.0 → isar-1.31.1}/src/isar.egg-info/requires.txt +0 -0
  168. {isar-1.31.0 → isar-1.31.1}/src/isar.egg-info/top_level.txt +0 -0
  169. {isar-1.31.0/src/isar/services/utilities → isar-1.31.1/src/robot_interface}/__init__.py +0 -0
  170. {isar-1.31.0/src/isar/state_machine → isar-1.31.1/src/robot_interface/models}/__init__.py +0 -0
  171. {isar-1.31.0/src/isar/state_machine/states → isar-1.31.1/src/robot_interface/models/exceptions}/__init__.py +0 -0
  172. {isar-1.31.0 → isar-1.31.1}/src/robot_interface/models/exceptions/robot_exceptions.py +0 -0
  173. {isar-1.31.0/src/isar/storage → isar-1.31.1/src/robot_interface/models/initialize}/__init__.py +0 -0
  174. {isar-1.31.0/src/robot_interface → isar-1.31.1/src/robot_interface/models/inspection}/__init__.py +0 -0
  175. {isar-1.31.0 → isar-1.31.1}/src/robot_interface/models/inspection/inspection.py +0 -0
  176. {isar-1.31.0/src/robot_interface/models → isar-1.31.1/src/robot_interface/models/mission}/__init__.py +0 -0
  177. {isar-1.31.0 → isar-1.31.1}/src/robot_interface/models/mission/mission.py +0 -0
  178. {isar-1.31.0 → isar-1.31.1}/src/robot_interface/models/mission/status.py +0 -0
  179. {isar-1.31.0 → isar-1.31.1}/src/robot_interface/models/mission/task.py +0 -0
  180. {isar-1.31.0/src/robot_interface/models/exceptions → isar-1.31.1/src/robot_interface/models/robots}/__init__.py +0 -0
  181. {isar-1.31.0 → isar-1.31.1}/src/robot_interface/models/robots/battery_state.py +0 -0
  182. {isar-1.31.0 → isar-1.31.1}/src/robot_interface/models/robots/media.py +0 -0
  183. {isar-1.31.0 → isar-1.31.1}/src/robot_interface/models/robots/robot_model.py +0 -0
  184. {isar-1.31.0 → isar-1.31.1}/src/robot_interface/robot_interface.py +0 -0
  185. {isar-1.31.0/src/robot_interface/models/initialize → isar-1.31.1/src/robot_interface/telemetry}/__init__.py +0 -0
  186. {isar-1.31.0 → isar-1.31.1}/src/robot_interface/telemetry/mqtt_client.py +0 -0
  187. {isar-1.31.0 → isar-1.31.1}/src/robot_interface/telemetry/payloads.py +0 -0
  188. {isar-1.31.0 → isar-1.31.1}/src/robot_interface/test_robot_interface.py +0 -0
  189. {isar-1.31.0/src/robot_interface/models/inspection → isar-1.31.1/src/robot_interface/utilities}/__init__.py +0 -0
  190. {isar-1.31.0 → isar-1.31.1}/src/robot_interface/utilities/json_service.py +0 -0
  191. {isar-1.31.0 → isar-1.31.1}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
  192. {isar-1.31.0/src/robot_interface/models/mission → isar-1.31.1/tests}/__init__.py +0 -0
  193. {isar-1.31.0 → isar-1.31.1}/tests/conftest.py +0 -0
  194. {isar-1.31.0/src/robot_interface/models/robots → isar-1.31.1/tests/integration}/__init__.py +0 -0
  195. {isar-1.31.0/src/robot_interface/telemetry → isar-1.31.1/tests/integration/turtlebot}/__init__.py +0 -0
  196. {isar-1.31.0/src/robot_interface/utilities → isar-1.31.1/tests/integration/turtlebot/config}/__init__.py +0 -0
  197. {isar-1.31.0/tests → isar-1.31.1/tests/integration/turtlebot/config/maps}/__init__.py +0 -0
  198. {isar-1.31.0 → isar-1.31.1}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
  199. {isar-1.31.0/tests/integration → isar-1.31.1/tests/integration/turtlebot/config/missions}/__init__.py +0 -0
  200. {isar-1.31.0 → isar-1.31.1}/tests/integration/turtlebot/config/missions/default.json +0 -0
  201. {isar-1.31.0 → isar-1.31.1}/tests/integration/turtlebot/test_successful_mission.py +0 -0
  202. {isar-1.31.0/tests/integration/turtlebot → isar-1.31.1/tests/isar}/__init__.py +0 -0
  203. {isar-1.31.0/tests/integration/turtlebot/config → isar-1.31.1/tests/isar/apis}/__init__.py +0 -0
  204. {isar-1.31.0/tests/integration/turtlebot/config/maps → isar-1.31.1/tests/isar/apis/models}/__init__.py +0 -0
  205. {isar-1.31.0 → isar-1.31.1}/tests/isar/apis/models/example_mission_definition.json +0 -0
  206. {isar-1.31.0 → isar-1.31.1}/tests/isar/apis/models/test_start_mission_definition.py +0 -0
  207. {isar-1.31.0/tests/integration/turtlebot/config/missions → isar-1.31.1/tests/isar/apis/scheduler}/__init__.py +0 -0
  208. {isar-1.31.0/tests/isar → isar-1.31.1/tests/isar/apis/security}/__init__.py +0 -0
  209. {isar-1.31.0 → isar-1.31.1}/tests/isar/apis/security/test_authentication.py +0 -0
  210. {isar-1.31.0/tests/isar/apis → isar-1.31.1/tests/isar/mission}/__init__.py +0 -0
  211. {isar-1.31.0 → isar-1.31.1}/tests/isar/mission/test_mission.py +0 -0
  212. {isar-1.31.0/tests/isar/apis → isar-1.31.1/tests/isar}/models/__init__.py +0 -0
  213. {isar-1.31.0/tests/isar/apis/scheduler → isar-1.31.1/tests/isar/models/communication}/__init__.py +0 -0
  214. {isar-1.31.0/tests/isar/apis/security → isar-1.31.1/tests/isar/services}/__init__.py +0 -0
  215. {isar-1.31.0/tests/isar/mission → isar-1.31.1/tests/isar/services/readers}/__init__.py +0 -0
  216. {isar-1.31.0 → isar-1.31.1}/tests/isar/services/readers/test_mission_reader.py +0 -0
  217. {isar-1.31.0/tests/isar/models → isar-1.31.1/tests/isar/services/service_connections}/__init__.py +0 -0
  218. {isar-1.31.0/tests/isar/models/communication → isar-1.31.1/tests/isar/services/service_connections/echo}/__init__.py +0 -0
  219. {isar-1.31.0 → isar-1.31.1}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
  220. {isar-1.31.0/tests/isar/services → isar-1.31.1/tests/isar/services/utilities}/__init__.py +0 -0
  221. {isar-1.31.0/tests/isar/services/readers → isar-1.31.1/tests/isar/state_machine}/__init__.py +0 -0
  222. {isar-1.31.0/tests/isar/services/service_connections → isar-1.31.1/tests/isar/state_machine/states}/__init__.py +0 -0
  223. {isar-1.31.0 → isar-1.31.1}/tests/isar/storage/test_blob_storage.py +0 -0
  224. {isar-1.31.0 → isar-1.31.1}/tests/isar/storage/test_uploader.py +0 -0
  225. {isar-1.31.0 → isar-1.31.1}/tests/test_data/test_map_config/test_map_config.json +0 -0
  226. {isar-1.31.0 → isar-1.31.1}/tests/test_data/test_mission_not_working.json +0 -0
  227. {isar-1.31.0 → isar-1.31.1}/tests/test_data/test_mission_working.json +0 -0
  228. {isar-1.31.0 → isar-1.31.1}/tests/test_data/test_mission_working_no_tasks.json +0 -0
  229. {isar-1.31.0 → isar-1.31.1}/tests/test_data/test_thermal_image_mission.json +0 -0
  230. {isar-1.31.0/tests/isar/services/service_connections/echo → isar-1.31.1/tests/test_double}/__init__.py +0 -0
  231. {isar-1.31.0 → isar-1.31.1}/tests/test_double/blob_storage.py +0 -0
  232. {isar-1.31.0 → isar-1.31.1}/tests/test_double/mission_definition.py +0 -0
  233. {isar-1.31.0 → isar-1.31.1}/tests/test_double/mqtt_client.py +0 -0
  234. {isar-1.31.0 → isar-1.31.1}/tests/test_double/pose.py +0 -0
  235. {isar-1.31.0 → isar-1.31.1}/tests/test_double/request.py +0 -0
  236. {isar-1.31.0 → isar-1.31.1}/tests/test_double/status.py +0 -0
  237. {isar-1.31.0 → isar-1.31.1}/tests/test_double/task.py +0 -0
  238. {isar-1.31.0 → isar-1.31.1}/tests/test_double/token.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: isar
3
- Version: 1.31.0
3
+ Version: 1.31.1
4
4
  Summary: Integration and Supervisory control of Autonomous Robots
5
5
  Author-email: Equinor ASA <fg_robots_dev@equinor.com>
6
6
  License: Eclipse Public License version 2.0
@@ -31,7 +31,7 @@ azure-identity==1.23.1
31
31
  # isar (pyproject.toml)
32
32
  azure-keyvault-secrets==4.10.0
33
33
  # via isar (pyproject.toml)
34
- azure-monitor-opentelemetry==1.6.7
34
+ azure-monitor-opentelemetry==1.6.13
35
35
  # via isar (pyproject.toml)
36
36
  azure-monitor-opentelemetry-exporter==1.0.0b40
37
37
  # via
@@ -117,7 +117,7 @@ numpy==2.3.2
117
117
  # scipy
118
118
  oauthlib==3.3.1
119
119
  # via requests-oauthlib
120
- opentelemetry-api==1.35.0
120
+ opentelemetry-api==1.36.0
121
121
  # via
122
122
  # azure-core-tracing-opentelemetry
123
123
  # azure-monitor-opentelemetry-exporter
@@ -137,17 +137,17 @@ opentelemetry-api==1.35.0
137
137
  # opentelemetry-instrumentation-wsgi
138
138
  # opentelemetry-sdk
139
139
  # opentelemetry-semantic-conventions
140
- opentelemetry-exporter-otlp==1.35.0
140
+ opentelemetry-exporter-otlp==1.36.0
141
141
  # via isar (pyproject.toml)
142
- opentelemetry-exporter-otlp-proto-common==1.35.0
142
+ opentelemetry-exporter-otlp-proto-common==1.36.0
143
143
  # via
144
144
  # opentelemetry-exporter-otlp-proto-grpc
145
145
  # opentelemetry-exporter-otlp-proto-http
146
- opentelemetry-exporter-otlp-proto-grpc==1.35.0
146
+ opentelemetry-exporter-otlp-proto-grpc==1.36.0
147
147
  # via opentelemetry-exporter-otlp
148
- opentelemetry-exporter-otlp-proto-http==1.35.0
148
+ opentelemetry-exporter-otlp-proto-http==1.36.0
149
149
  # via opentelemetry-exporter-otlp
150
- opentelemetry-instrumentation==0.56b0
150
+ opentelemetry-instrumentation==0.57b0
151
151
  # via
152
152
  # opentelemetry-instrumentation-asgi
153
153
  # opentelemetry-instrumentation-dbapi
@@ -159,38 +159,38 @@ opentelemetry-instrumentation==0.56b0
159
159
  # opentelemetry-instrumentation-urllib
160
160
  # opentelemetry-instrumentation-urllib3
161
161
  # opentelemetry-instrumentation-wsgi
162
- opentelemetry-instrumentation-asgi==0.56b0
162
+ opentelemetry-instrumentation-asgi==0.57b0
163
163
  # via opentelemetry-instrumentation-fastapi
164
- opentelemetry-instrumentation-dbapi==0.56b0
164
+ opentelemetry-instrumentation-dbapi==0.57b0
165
165
  # via opentelemetry-instrumentation-psycopg2
166
- opentelemetry-instrumentation-django==0.56b0
166
+ opentelemetry-instrumentation-django==0.57b0
167
167
  # via azure-monitor-opentelemetry
168
- opentelemetry-instrumentation-fastapi==0.56b0
168
+ opentelemetry-instrumentation-fastapi==0.57b0
169
169
  # via
170
170
  # azure-monitor-opentelemetry
171
171
  # isar (pyproject.toml)
172
- opentelemetry-instrumentation-flask==0.56b0
172
+ opentelemetry-instrumentation-flask==0.57b0
173
173
  # via azure-monitor-opentelemetry
174
- opentelemetry-instrumentation-psycopg2==0.56b0
174
+ opentelemetry-instrumentation-psycopg2==0.57b0
175
175
  # via azure-monitor-opentelemetry
176
- opentelemetry-instrumentation-requests==0.56b0
176
+ opentelemetry-instrumentation-requests==0.57b0
177
177
  # via azure-monitor-opentelemetry
178
- opentelemetry-instrumentation-urllib==0.56b0
178
+ opentelemetry-instrumentation-urllib==0.57b0
179
179
  # via azure-monitor-opentelemetry
180
- opentelemetry-instrumentation-urllib3==0.56b0
180
+ opentelemetry-instrumentation-urllib3==0.57b0
181
181
  # via azure-monitor-opentelemetry
182
- opentelemetry-instrumentation-wsgi==0.56b0
182
+ opentelemetry-instrumentation-wsgi==0.57b0
183
183
  # via
184
184
  # opentelemetry-instrumentation-django
185
185
  # opentelemetry-instrumentation-flask
186
- opentelemetry-proto==1.35.0
186
+ opentelemetry-proto==1.36.0
187
187
  # via
188
188
  # opentelemetry-exporter-otlp-proto-common
189
189
  # opentelemetry-exporter-otlp-proto-grpc
190
190
  # opentelemetry-exporter-otlp-proto-http
191
191
  opentelemetry-resource-detector-azure==0.1.5
192
192
  # via azure-monitor-opentelemetry
193
- opentelemetry-sdk==1.35.0
193
+ opentelemetry-sdk==1.36.0
194
194
  # via
195
195
  # azure-monitor-opentelemetry
196
196
  # azure-monitor-opentelemetry-exporter
@@ -198,7 +198,7 @@ opentelemetry-sdk==1.35.0
198
198
  # opentelemetry-exporter-otlp-proto-grpc
199
199
  # opentelemetry-exporter-otlp-proto-http
200
200
  # opentelemetry-resource-detector-azure
201
- opentelemetry-semantic-conventions==0.56b0
201
+ opentelemetry-semantic-conventions==0.57b0
202
202
  # via
203
203
  # opentelemetry-instrumentation
204
204
  # opentelemetry-instrumentation-asgi
@@ -211,7 +211,7 @@ opentelemetry-semantic-conventions==0.56b0
211
211
  # opentelemetry-instrumentation-urllib3
212
212
  # opentelemetry-instrumentation-wsgi
213
213
  # opentelemetry-sdk
214
- opentelemetry-util-http==0.56b0
214
+ opentelemetry-util-http==0.57b0
215
215
  # via
216
216
  # opentelemetry-instrumentation-asgi
217
217
  # opentelemetry-instrumentation-django
@@ -1,6 +1,5 @@
1
1
  import logging
2
2
 
3
- from azure.identity import ManagedIdentityCredential
4
3
  from azure.monitor.opentelemetry.exporter import (
5
4
  AzureMonitorLogExporter,
6
5
  AzureMonitorTraceExporter,
@@ -57,12 +56,7 @@ def get_azure_monitor_exporters() -> (
57
56
  Else use Azure Managed Identity to create Azure Monitor Exporters.
58
57
  """
59
58
  connection_string = settings.APPLICATIONINSIGHTS_CONNECTION_STRING
60
- if connection_string:
61
- trace_exporter = AzureMonitorTraceExporter(connection_string=connection_string)
62
- log_exporter = AzureMonitorLogExporter(connection_string=connection_string)
63
- else:
64
- credential = ManagedIdentityCredential()
65
- trace_exporter = AzureMonitorTraceExporter(credential=credential)
66
- log_exporter = AzureMonitorLogExporter(credential=credential)
59
+ trace_exporter = AzureMonitorTraceExporter(connection_string=connection_string)
60
+ log_exporter = AzureMonitorLogExporter(connection_string=connection_string)
67
61
 
68
62
  return trace_exporter, log_exporter
@@ -0,0 +1,93 @@
1
+ import logging
2
+ import time
3
+ from copy import deepcopy
4
+ from dataclasses import dataclass
5
+ from threading import Event as ThreadEvent
6
+ from typing import TYPE_CHECKING, Callable, Generic, List, Optional, TypeVar
7
+
8
+ from transitions import State
9
+
10
+ from isar.config.settings import settings
11
+ from isar.models.events import Event
12
+
13
+ T = TypeVar("T")
14
+
15
+
16
+ @dataclass
17
+ class EventHandlerMapping(Generic[T]):
18
+ name: str
19
+ event: Event[T]
20
+ handler: Callable[[Event[T]], Optional[Callable]]
21
+
22
+
23
+ @dataclass
24
+ class TimeoutHandlerMapping:
25
+ name: str
26
+ timeout_in_seconds: float
27
+ handler: Callable[[], Optional[Callable]]
28
+
29
+
30
+ if TYPE_CHECKING:
31
+ from isar.state_machine.state_machine import StateMachine
32
+
33
+
34
+ class EventHandlerBase(State):
35
+ def __init__(
36
+ self,
37
+ state_machine: "StateMachine",
38
+ state_name: str,
39
+ event_handler_mappings: List[EventHandlerMapping],
40
+ timers: List[TimeoutHandlerMapping] = [],
41
+ ) -> None:
42
+
43
+ super().__init__(name=state_name, on_enter=self.start)
44
+ self.state_machine: "StateMachine" = state_machine
45
+ self.logger = logging.getLogger("state_machine")
46
+ self.events = state_machine.events
47
+ self.signal_state_machine_to_stop: ThreadEvent = (
48
+ state_machine.signal_state_machine_to_stop
49
+ )
50
+ self.event_handler_mappings = event_handler_mappings
51
+ self.state_name: str = state_name
52
+ self.timers = timers
53
+
54
+ def start(self) -> None:
55
+ self.state_machine.update_state()
56
+ self._run()
57
+
58
+ def stop(self) -> None:
59
+ return
60
+
61
+ def _run(self) -> None:
62
+ should_exit_state: bool = False
63
+ timers = deepcopy(self.timers)
64
+ entered_time = time.time()
65
+ while True:
66
+ if self.signal_state_machine_to_stop.is_set():
67
+ self.logger.info(
68
+ "Stopping state machine from %s state", self.state_name
69
+ )
70
+ break
71
+
72
+ for timer in timers:
73
+ if time.time() - entered_time > timer.timeout_in_seconds:
74
+ transition_func = timer.handler()
75
+ timers.remove(timer)
76
+ if transition_func is not None:
77
+ transition_func()
78
+ should_exit_state = True
79
+ break
80
+
81
+ if should_exit_state:
82
+ break
83
+
84
+ for handler_mapping in self.event_handler_mappings:
85
+ transition_func = handler_mapping.handler(handler_mapping.event)
86
+ if transition_func is not None:
87
+ transition_func()
88
+ should_exit_state = True
89
+ break
90
+
91
+ if should_exit_state:
92
+ break
93
+ time.sleep(settings.FSM_SLEEP_TIME)
@@ -0,0 +1,118 @@
1
+ from collections import deque
2
+ from queue import Empty, Queue
3
+ from typing import Generic, Optional, TypeVar
4
+
5
+ from transitions import State
6
+
7
+ from isar.apis.models.models import ControlMissionResponse
8
+ from isar.config.settings import settings
9
+ from robot_interface.models.exceptions.robot_exceptions import ErrorMessage
10
+ from robot_interface.models.mission.mission import Mission
11
+ from robot_interface.models.mission.status import RobotStatus, TaskStatus
12
+ from robot_interface.models.mission.task import TASKS
13
+
14
+ T = TypeVar("T")
15
+ T1 = TypeVar("T1")
16
+ T2 = TypeVar("T2")
17
+
18
+
19
+ class Event(Queue[T]):
20
+ def __init__(self) -> None:
21
+ super().__init__(maxsize=1)
22
+
23
+ def trigger_event(self, data: T) -> None:
24
+ self.put(data)
25
+
26
+ def consume_event(self, timeout: int = None) -> Optional[T]:
27
+ try:
28
+ return self.get(block=timeout is not None, timeout=timeout)
29
+ except Empty:
30
+ if timeout is not None:
31
+ raise EventTimeoutError
32
+ return None
33
+
34
+ def clear_event(self) -> None:
35
+ while True:
36
+ try:
37
+ self.get(block=False)
38
+ except Empty:
39
+ break
40
+
41
+ def has_event(self) -> bool:
42
+ return (
43
+ self.qsize() != 0
44
+ ) # Queue size is not reliable, but should be sufficient for this case
45
+
46
+ def check(self) -> Optional[T]:
47
+ if not self._qsize():
48
+ return None
49
+ with self.mutex:
50
+ queueList = list(self.queue)
51
+ return queueList.pop()
52
+
53
+ def update(self, item: T):
54
+ with self.mutex:
55
+ self.queue: deque[T] = deque()
56
+ self.queue.append(item)
57
+
58
+
59
+ class Events:
60
+ def __init__(self) -> None:
61
+ self.api_requests: APIRequests = APIRequests()
62
+ self.state_machine_events: StateMachineEvents = StateMachineEvents()
63
+ self.robot_service_events: RobotServiceEvents = RobotServiceEvents()
64
+
65
+ self.upload_queue: Queue = Queue(maxsize=10)
66
+
67
+ if settings.MQTT_ENABLED:
68
+ self.mqtt_queue: Queue = Queue()
69
+
70
+
71
+ class APIEvent(Generic[T1, T2]):
72
+ """
73
+ Creates input and output event. The events are defined such that the input is from
74
+ api to state machine while the output is from state machine to api.
75
+ """
76
+
77
+ def __init__(self):
78
+ self.input: Event[T1] = Event()
79
+ self.output: Event[T2] = Event()
80
+
81
+
82
+ class APIRequests:
83
+ def __init__(self) -> None:
84
+ self.start_mission: APIEvent[Mission, bool] = APIEvent()
85
+ self.stop_mission: APIEvent[str, ControlMissionResponse] = APIEvent()
86
+ self.pause_mission: APIEvent[bool, ControlMissionResponse] = APIEvent()
87
+ self.resume_mission: APIEvent[bool, ControlMissionResponse] = APIEvent()
88
+ self.return_home: APIEvent[bool, bool] = APIEvent()
89
+
90
+
91
+ class StateMachineEvents:
92
+ def __init__(self) -> None:
93
+ self.start_mission: Event[Mission] = Event()
94
+ self.stop_mission: Event[bool] = Event()
95
+ self.pause_mission: Event[bool] = Event()
96
+ self.task_status_request: Event[str] = Event()
97
+
98
+
99
+ class RobotServiceEvents:
100
+ def __init__(self) -> None:
101
+ self.task_status_updated: Event[TaskStatus] = Event()
102
+ self.task_status_failed: Event[ErrorMessage] = Event()
103
+ self.mission_started: Event[bool] = Event()
104
+ self.mission_failed: Event[ErrorMessage] = Event()
105
+ self.robot_status_changed: Event[bool] = Event()
106
+ self.mission_failed_to_stop: Event[ErrorMessage] = Event()
107
+ self.mission_successfully_stopped: Event[bool] = Event()
108
+
109
+
110
+ class SharedState:
111
+ def __init__(self) -> None:
112
+ self.state: Event[State] = Event()
113
+ self.robot_status: Event[RobotStatus] = Event()
114
+ self.state_machine_current_task: Event[TASKS] = Event()
115
+
116
+
117
+ class EventTimeoutError(Exception):
118
+ pass
@@ -12,7 +12,7 @@ from isar.config.settings import settings
12
12
  from isar.mission_planner.local_planner import LocalPlanner
13
13
  from isar.mission_planner.sequential_task_selector import SequentialTaskSelector
14
14
  from isar.mission_planner.task_selector_interface import TaskSelectorInterface
15
- from isar.models.communication.queues.events import Events, SharedState
15
+ from isar.models.events import Events, SharedState
16
16
  from isar.robot.robot import Robot
17
17
  from isar.services.utilities.robot_utilities import RobotUtilities
18
18
  from isar.services.utilities.scheduling_utilities import SchedulingUtilities
@@ -1,20 +1,20 @@
1
1
  import logging
2
- from queue import Queue
3
- from threading import Event
2
+ from threading import Event as ThreadEvent
4
3
  from typing import Optional
5
4
 
6
- from isar.models.communication.queues.events import (
5
+ from isar.models.events import (
6
+ Event,
7
7
  Events,
8
8
  RobotServiceEvents,
9
9
  SharedState,
10
10
  StateMachineEvents,
11
11
  )
12
- from isar.models.communication.queues.queue_utils import check_for_event, trigger_event
13
12
  from isar.robot.robot_start_mission import RobotStartMissionThread
14
13
  from isar.robot.robot_status import RobotStatusThread
15
14
  from isar.robot.robot_stop_mission import RobotStopMissionThread
16
15
  from isar.robot.robot_task_status import RobotTaskStatusThread
17
16
  from robot_interface.models.exceptions.robot_exceptions import ErrorMessage, ErrorReason
17
+ from robot_interface.models.mission.mission import Mission
18
18
  from robot_interface.robot_interface import RobotInterface
19
19
 
20
20
 
@@ -31,7 +31,7 @@ class Robot(object):
31
31
  self.robot_status_thread: Optional[RobotStatusThread] = None
32
32
  self.robot_task_status_thread: Optional[RobotTaskStatusThread] = None
33
33
  self.stop_mission_thread: Optional[RobotStopMissionThread] = None
34
- self.signal_thread_quitting: Event = Event()
34
+ self.signal_thread_quitting: ThreadEvent = ThreadEvent()
35
35
 
36
36
  def stop(self) -> None:
37
37
  self.signal_thread_quitting.set()
@@ -53,8 +53,8 @@ class Robot(object):
53
53
  self.robot_task_status_thread = None
54
54
  self.start_mission_thread = None
55
55
 
56
- def _check_and_handle_start_mission(self, event: Queue) -> None:
57
- start_mission = check_for_event(event)
56
+ def _start_mission_event_handler(self, event: Event[Mission]) -> None:
57
+ start_mission = event.consume_event()
58
58
  if start_mission is not None:
59
59
  if (
60
60
  self.start_mission_thread is not None
@@ -72,8 +72,8 @@ class Robot(object):
72
72
  )
73
73
  self.start_mission_thread.start()
74
74
 
75
- def _check_and_handle_task_status_request(self, event: Queue[str]) -> None:
76
- task_id: str = check_for_event(event)
75
+ def _task_status_request_handler(self, event: Event[str]) -> None:
76
+ task_id: str = event.consume_event()
77
77
  if task_id:
78
78
  self.robot_task_status_thread = RobotTaskStatusThread(
79
79
  self.robot_service_events,
@@ -83,8 +83,8 @@ class Robot(object):
83
83
  )
84
84
  self.robot_task_status_thread.start()
85
85
 
86
- def _check_and_handle_stop_mission(self, event: Queue) -> None:
87
- if check_for_event(event):
86
+ def _stop_mission_request_handler(self, event: Event[bool]) -> None:
87
+ if event.consume_event():
88
88
  if (
89
89
  self.stop_mission_thread is not None
90
90
  and self.stop_mission_thread.is_alive()
@@ -102,8 +102,8 @@ class Robot(object):
102
102
  error_reason=ErrorReason.RobotStillStartingMissionException,
103
103
  error_description=error_description,
104
104
  )
105
- trigger_event(
106
- self.robot_service_events.mission_failed_to_stop, error_message
105
+ self.robot_service_events.mission_failed_to_stop.trigger_event(
106
+ error_message
107
107
  )
108
108
  return
109
109
  self.stop_mission_thread = RobotStopMissionThread(
@@ -118,14 +118,12 @@ class Robot(object):
118
118
  self.robot_status_thread.start()
119
119
 
120
120
  while not self.signal_thread_quitting.wait(0):
121
- self._check_and_handle_start_mission(
122
- self.state_machine_events.start_mission
123
- )
121
+ self._start_mission_event_handler(self.state_machine_events.start_mission)
124
122
 
125
- self._check_and_handle_task_status_request(
123
+ self._task_status_request_handler(
126
124
  self.state_machine_events.task_status_request
127
125
  )
128
126
 
129
- self._check_and_handle_stop_mission(self.state_machine_events.stop_mission)
127
+ self._stop_mission_request_handler(self.state_machine_events.stop_mission)
130
128
 
131
129
  self.logger.info("Exiting robot service main thread")
@@ -2,11 +2,7 @@ import logging
2
2
  from threading import Event, Thread
3
3
 
4
4
  from isar.config.settings import settings
5
- from isar.models.communication.queues.events import RobotServiceEvents
6
- from isar.models.communication.queues.queue_utils import (
7
- trigger_event,
8
- trigger_event_without_data,
9
- )
5
+ from isar.models.events import RobotServiceEvents
10
6
  from robot_interface.models.exceptions.robot_exceptions import (
11
7
  ErrorMessage,
12
8
  RobotException,
@@ -44,13 +40,13 @@ class RobotStartMissionThread(Thread):
44
40
  self.logger.error(
45
41
  f"Mission is infeasible and cannot be scheduled because: {e.error_description}"
46
42
  )
47
- trigger_event(
48
- self.robot_service_events.mission_failed,
43
+ self.robot_service_events.mission_failed.trigger_event(
49
44
  ErrorMessage(
50
45
  error_reason=e.error_reason,
51
46
  error_description=e.error_description,
52
- ),
47
+ )
53
48
  )
49
+
54
50
  break
55
51
  except RobotException as e:
56
52
  retries += 1
@@ -66,12 +62,11 @@ class RobotStartMissionThread(Thread):
66
62
  f"{e.error_description}"
67
63
  )
68
64
 
69
- trigger_event(
70
- self.robot_service_events.mission_failed,
65
+ self.robot_service_events.mission_failed.trigger_event(
71
66
  ErrorMessage(
72
67
  error_reason=e.error_reason,
73
68
  error_description=e.error_description,
74
- ),
69
+ )
75
70
  )
76
71
  break
77
72
 
@@ -79,12 +74,11 @@ class RobotStartMissionThread(Thread):
79
74
 
80
75
  started_mission = True
81
76
  except RobotInfeasibleMissionException as e:
82
- trigger_event(
83
- self.robot_service_events.mission_failed,
77
+ self.robot_service_events.mission_failed.trigger_event(
84
78
  ErrorMessage(
85
79
  error_reason=e.error_reason, error_description=e.error_description
86
80
  ),
87
81
  )
88
82
 
89
83
  if started_mission:
90
- trigger_event_without_data(self.robot_service_events.mission_started)
84
+ self.robot_service_events.mission_started.trigger_event(True)
@@ -3,8 +3,7 @@ import time
3
3
  from threading import Event, Thread
4
4
 
5
5
  from isar.config.settings import settings
6
- from isar.models.communication.queues.events import SharedState
7
- from isar.models.communication.queues.queue_utils import update_shared_state
6
+ from isar.models.events import SharedState
8
7
  from robot_interface.models.exceptions.robot_exceptions import RobotException
9
8
  from robot_interface.robot_interface import RobotInterface
10
9
 
@@ -49,7 +48,7 @@ class RobotStatusThread(Thread):
49
48
  self.last_robot_status_poll_time = time.time()
50
49
 
51
50
  robot_status = self.robot.robot_status()
52
- update_shared_state(self.shared_state.robot_status, robot_status)
51
+ self.shared_state.robot_status.update(robot_status)
53
52
  except RobotException as e:
54
53
  self.logger.error(f"Failed to retrieve robot status: {e}")
55
54
  continue
@@ -4,11 +4,7 @@ from threading import Event, Thread
4
4
  from typing import Optional
5
5
 
6
6
  from isar.config.settings import settings
7
- from isar.models.communication.queues.events import RobotServiceEvents
8
- from isar.models.communication.queues.queue_utils import (
9
- trigger_event,
10
- trigger_event_without_data,
11
- )
7
+ from isar.models.events import RobotServiceEvents
12
8
  from robot_interface.models.exceptions.robot_exceptions import (
13
9
  ErrorMessage,
14
10
  RobotActionException,
@@ -51,9 +47,7 @@ class RobotStopMissionThread(Thread):
51
47
  time.sleep(settings.FSM_SLEEP_TIME)
52
48
  continue
53
49
 
54
- trigger_event_without_data(
55
- self.robot_service_events.mission_successfully_stopped
56
- )
50
+ self.robot_service_events.mission_successfully_stopped.trigger_event(True)
57
51
  return
58
52
 
59
53
  error_description = (
@@ -68,4 +62,4 @@ class RobotStopMissionThread(Thread):
68
62
  error_description=error_description,
69
63
  )
70
64
 
71
- trigger_event(self.robot_service_events.mission_failed_to_stop, error_message)
65
+ self.robot_service_events.mission_failed_to_stop.trigger_event(error_message)
@@ -4,8 +4,7 @@ from threading import Event, Thread
4
4
  from typing import Optional
5
5
 
6
6
  from isar.config.settings import settings
7
- from isar.models.communication.queues.events import RobotServiceEvents
8
- from isar.models.communication.queues.queue_utils import trigger_event
7
+ from isar.models.events import RobotServiceEvents
9
8
  from isar.services.utilities.threaded_request import ThreadedRequest
10
9
  from robot_interface.models.exceptions.robot_exceptions import (
11
10
  ErrorMessage,
@@ -82,10 +81,7 @@ class RobotTaskStatusThread(Thread):
82
81
  )
83
82
  break
84
83
 
85
- trigger_event(self.robot_service_events.task_status_updated, task_status)
84
+ self.robot_service_events.task_status_updated.trigger_event(task_status)
86
85
  return
87
86
 
88
- trigger_event(
89
- self.robot_service_events.task_status_failed,
90
- failed_task_error,
91
- )
87
+ self.robot_service_events.task_status_failed.trigger_event(failed_task_error)
@@ -10,7 +10,7 @@ from isar.apis.api import API
10
10
  from isar.config.log import setup_loggers
11
11
  from isar.config.open_telemetry import setup_open_telemetry
12
12
  from isar.config.settings import robot_settings, settings
13
- from isar.models.communication.queues.events import Events
13
+ from isar.models.events import Events
14
14
  from isar.modules import ApplicationContainer, get_injector
15
15
  from isar.robot.robot import Robot
16
16
  from isar.services.service_connections.mqtt.mqtt_client import MqttClient
@@ -69,6 +69,7 @@ def print_startup_info():
69
69
  print_setting("Mission planner", settings.MISSION_PLANNER)
70
70
  print_setting("Using local storage", settings.STORAGE_LOCAL_ENABLED)
71
71
  print_setting("Using blob storage", settings.STORAGE_BLOB_ENABLED)
72
+ print_setting("Blob storage account", settings.BLOB_STORAGE_ACCOUNT)
72
73
  print_setting("Using async inspection uploading", settings.UPLOAD_INSPECTIONS_ASYNC)
73
74
  print_setting("Plant code", settings.PLANT_CODE)
74
75
  print_setting("Plant name", settings.PLANT_NAME)