isar 1.30.3__tar.gz → 1.30.4__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 (222) hide show
  1. {isar-1.30.3 → isar-1.30.4}/PKG-INFO +1 -1
  2. {isar-1.30.3 → isar-1.30.4}/requirements.txt +1 -1
  3. {isar-1.30.3 → isar-1.30.4}/src/isar/apis/api.py +40 -3
  4. {isar-1.30.3 → isar-1.30.4}/src/isar/config/settings.py +2 -0
  5. {isar-1.30.3 → isar-1.30.4}/src/isar/modules.py +11 -10
  6. {isar-1.30.3 → isar-1.30.4}/src/isar/script.py +3 -1
  7. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/transitions/functions/start_mission.py +1 -1
  8. {isar-1.30.3 → isar-1.30.4}/src/isar.egg-info/PKG-INFO +1 -1
  9. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/telemetry/payloads.py +6 -0
  10. {isar-1.30.3 → isar-1.30.4}/.dockerignore +0 -0
  11. {isar-1.30.3 → isar-1.30.4}/.env.test +0 -0
  12. {isar-1.30.3 → isar-1.30.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  13. {isar-1.30.3 → isar-1.30.4}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  14. {isar-1.30.3 → isar-1.30.4}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
  15. {isar-1.30.3 → isar-1.30.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  16. {isar-1.30.3 → isar-1.30.4}/.github/release.yml +0 -0
  17. {isar-1.30.3 → isar-1.30.4}/.github/workflows/compile_requirements.yml +0 -0
  18. {isar-1.30.3 → isar-1.30.4}/.github/workflows/project_automations.yml +0 -0
  19. {isar-1.30.3 → isar-1.30.4}/.github/workflows/pythonpackage.yml +0 -0
  20. {isar-1.30.3 → isar-1.30.4}/.github/workflows/pythonpublish.yml +0 -0
  21. {isar-1.30.3 → isar-1.30.4}/.github/workflows/stale.yml +0 -0
  22. {isar-1.30.3 → isar-1.30.4}/.gitignore +0 -0
  23. {isar-1.30.3 → isar-1.30.4}/.pre-commit-config.yaml +0 -0
  24. {isar-1.30.3 → isar-1.30.4}/LICENSE +0 -0
  25. {isar-1.30.3 → isar-1.30.4}/README.md +0 -0
  26. {isar-1.30.3 → isar-1.30.4}/SECURITY.md +0 -0
  27. {isar-1.30.3 → isar-1.30.4}/docs/Makefile +0 -0
  28. {isar-1.30.3 → isar-1.30.4}/docs/full_state_machine_diagram.png +0 -0
  29. {isar-1.30.3 → isar-1.30.4}/docs/make.bat +0 -0
  30. {isar-1.30.3 → isar-1.30.4}/docs/mission_state_machine_diagram.png +0 -0
  31. {isar-1.30.3 → isar-1.30.4}/docs/robot_status_state_machine_diagram.png +0 -0
  32. {isar-1.30.3 → isar-1.30.4}/docs/rst_processing.py +0 -0
  33. {isar-1.30.3 → isar-1.30.4}/docs/source/conf.py +0 -0
  34. {isar-1.30.3 → isar-1.30.4}/docs/source/index.rst +0 -0
  35. {isar-1.30.3 → isar-1.30.4}/docs/source/readme_link.md +0 -0
  36. {isar-1.30.3 → isar-1.30.4}/docs/update_state_diagram.py +0 -0
  37. {isar-1.30.3 → isar-1.30.4}/main.py +0 -0
  38. {isar-1.30.3 → isar-1.30.4}/pyproject.toml +0 -0
  39. {isar-1.30.3 → isar-1.30.4}/radixconfig.yml +0 -0
  40. {isar-1.30.3 → isar-1.30.4}/setup.cfg +0 -0
  41. {isar-1.30.3 → isar-1.30.4}/src/isar/__init__.py +0 -0
  42. {isar-1.30.3 → isar-1.30.4}/src/isar/apis/__init__.py +0 -0
  43. {isar-1.30.3 → isar-1.30.4}/src/isar/apis/models/__init__.py +0 -0
  44. {isar-1.30.3 → isar-1.30.4}/src/isar/apis/models/models.py +0 -0
  45. {isar-1.30.3 → isar-1.30.4}/src/isar/apis/models/start_mission_definition.py +0 -0
  46. {isar-1.30.3 → isar-1.30.4}/src/isar/apis/robot_control/robot_controller.py +0 -0
  47. {isar-1.30.3 → isar-1.30.4}/src/isar/apis/schedule/__init__.py +0 -0
  48. {isar-1.30.3 → isar-1.30.4}/src/isar/apis/schedule/scheduling_controller.py +0 -0
  49. {isar-1.30.3 → isar-1.30.4}/src/isar/apis/security/__init__.py +0 -0
  50. {isar-1.30.3 → isar-1.30.4}/src/isar/apis/security/authentication.py +0 -0
  51. {isar-1.30.3 → isar-1.30.4}/src/isar/config/__init__.py +0 -0
  52. {isar-1.30.3 → isar-1.30.4}/src/isar/config/certs/ca-cert.pem +0 -0
  53. {isar-1.30.3 → isar-1.30.4}/src/isar/config/configuration_error.py +0 -0
  54. {isar-1.30.3 → isar-1.30.4}/src/isar/config/keyvault/__init__.py +0 -0
  55. {isar-1.30.3 → isar-1.30.4}/src/isar/config/keyvault/keyvault_error.py +0 -0
  56. {isar-1.30.3 → isar-1.30.4}/src/isar/config/keyvault/keyvault_service.py +0 -0
  57. {isar-1.30.3 → isar-1.30.4}/src/isar/config/log.py +0 -0
  58. {isar-1.30.3 → isar-1.30.4}/src/isar/config/logging.conf +0 -0
  59. {isar-1.30.3 → isar-1.30.4}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
  60. {isar-1.30.3 → isar-1.30.4}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
  61. {isar-1.30.3 → isar-1.30.4}/src/isar/config/maps/default_map.json +0 -0
  62. {isar-1.30.3 → isar-1.30.4}/src/isar/config/maps/klab_b.json +0 -0
  63. {isar-1.30.3 → isar-1.30.4}/src/isar/config/maps/klab_compressor.json +0 -0
  64. {isar-1.30.3 → isar-1.30.4}/src/isar/config/maps/klab_turtlebot.json +0 -0
  65. {isar-1.30.3 → isar-1.30.4}/src/isar/config/maps/turtleworld.json +0 -0
  66. {isar-1.30.3 → isar-1.30.4}/src/isar/config/predefined_mission_definition/__init__.py +0 -0
  67. {isar-1.30.3 → isar-1.30.4}/src/isar/config/predefined_mission_definition/default_exr.json +0 -0
  68. {isar-1.30.3 → isar-1.30.4}/src/isar/config/predefined_mission_definition/default_mission.json +0 -0
  69. {isar-1.30.3 → isar-1.30.4}/src/isar/config/predefined_mission_definition/default_turtlebot.json +0 -0
  70. {isar-1.30.3 → isar-1.30.4}/src/isar/config/predefined_missions/__init__.py +0 -0
  71. {isar-1.30.3 → isar-1.30.4}/src/isar/config/predefined_missions/default.json +0 -0
  72. {isar-1.30.3 → isar-1.30.4}/src/isar/config/predefined_missions/default_turtlebot.json +0 -0
  73. {isar-1.30.3 → isar-1.30.4}/src/isar/mission_planner/__init__.py +0 -0
  74. {isar-1.30.3 → isar-1.30.4}/src/isar/mission_planner/local_planner.py +0 -0
  75. {isar-1.30.3 → isar-1.30.4}/src/isar/mission_planner/mission_planner_interface.py +0 -0
  76. {isar-1.30.3 → isar-1.30.4}/src/isar/mission_planner/sequential_task_selector.py +0 -0
  77. {isar-1.30.3 → isar-1.30.4}/src/isar/mission_planner/task_selector_interface.py +0 -0
  78. {isar-1.30.3 → isar-1.30.4}/src/isar/models/__init__.py +0 -0
  79. {isar-1.30.3 → isar-1.30.4}/src/isar/models/communication/__init__.py +0 -0
  80. {isar-1.30.3 → isar-1.30.4}/src/isar/models/communication/message.py +0 -0
  81. {isar-1.30.3 → isar-1.30.4}/src/isar/models/communication/queues/__init__.py +0 -0
  82. {isar-1.30.3 → isar-1.30.4}/src/isar/models/communication/queues/events.py +0 -0
  83. {isar-1.30.3 → isar-1.30.4}/src/isar/models/communication/queues/queue_io.py +0 -0
  84. {isar-1.30.3 → isar-1.30.4}/src/isar/models/communication/queues/queue_timeout_error.py +0 -0
  85. {isar-1.30.3 → isar-1.30.4}/src/isar/models/communication/queues/queue_utils.py +0 -0
  86. {isar-1.30.3 → isar-1.30.4}/src/isar/models/communication/queues/status_queue.py +0 -0
  87. {isar-1.30.3 → isar-1.30.4}/src/isar/models/mission_metadata/__init__.py +0 -0
  88. {isar-1.30.3 → isar-1.30.4}/src/isar/robot/robot.py +0 -0
  89. {isar-1.30.3 → isar-1.30.4}/src/isar/robot/robot_start_mission.py +0 -0
  90. {isar-1.30.3 → isar-1.30.4}/src/isar/robot/robot_status.py +0 -0
  91. {isar-1.30.3 → isar-1.30.4}/src/isar/robot/robot_stop_mission.py +0 -0
  92. {isar-1.30.3 → isar-1.30.4}/src/isar/robot/robot_task_status.py +0 -0
  93. {isar-1.30.3 → isar-1.30.4}/src/isar/services/__init__.py +0 -0
  94. {isar-1.30.3 → isar-1.30.4}/src/isar/services/auth/__init__.py +0 -0
  95. {isar-1.30.3 → isar-1.30.4}/src/isar/services/auth/azure_credentials.py +0 -0
  96. {isar-1.30.3 → isar-1.30.4}/src/isar/services/service_connections/__init__.py +0 -0
  97. {isar-1.30.3 → isar-1.30.4}/src/isar/services/service_connections/mqtt/__init__.py +0 -0
  98. {isar-1.30.3 → isar-1.30.4}/src/isar/services/service_connections/mqtt/mqtt_client.py +0 -0
  99. {isar-1.30.3 → isar-1.30.4}/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +0 -0
  100. {isar-1.30.3 → isar-1.30.4}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +0 -0
  101. {isar-1.30.3 → isar-1.30.4}/src/isar/services/service_connections/request_handler.py +0 -0
  102. {isar-1.30.3 → isar-1.30.4}/src/isar/services/service_connections/stid/__init__.py +0 -0
  103. {isar-1.30.3 → isar-1.30.4}/src/isar/services/utilities/__init__.py +0 -0
  104. {isar-1.30.3 → isar-1.30.4}/src/isar/services/utilities/queue_utilities.py +0 -0
  105. {isar-1.30.3 → isar-1.30.4}/src/isar/services/utilities/robot_utilities.py +0 -0
  106. {isar-1.30.3 → isar-1.30.4}/src/isar/services/utilities/scheduling_utilities.py +0 -0
  107. {isar-1.30.3 → isar-1.30.4}/src/isar/services/utilities/threaded_request.py +0 -0
  108. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/__init__.py +0 -0
  109. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/generic_states/idle.py +0 -0
  110. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/generic_states/ongoing_mission.py +0 -0
  111. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/generic_states/robot_unavailable.py +0 -0
  112. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/state_machine.py +0 -0
  113. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/states/__init__.py +0 -0
  114. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/states/await_next_mission.py +0 -0
  115. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/states/blocked_protective_stop.py +0 -0
  116. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/states/home.py +0 -0
  117. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/states/monitor.py +0 -0
  118. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/states/offline.py +0 -0
  119. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/states/paused.py +0 -0
  120. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/states/returning_home.py +0 -0
  121. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/states/robot_standing_still.py +0 -0
  122. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/states/stopping.py +0 -0
  123. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/states/unknown_status.py +0 -0
  124. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/states_enum.py +0 -0
  125. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/transitions/functions/fail_mission.py +0 -0
  126. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/transitions/functions/finish_mission.py +0 -0
  127. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/transitions/functions/pause.py +0 -0
  128. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/transitions/functions/resume.py +0 -0
  129. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/transitions/functions/return_home.py +0 -0
  130. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/transitions/functions/robot_status.py +0 -0
  131. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/transitions/functions/stop.py +0 -0
  132. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/transitions/functions/utils.py +0 -0
  133. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/transitions/mission.py +0 -0
  134. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/transitions/return_home.py +0 -0
  135. {isar-1.30.3 → isar-1.30.4}/src/isar/state_machine/transitions/robot_status.py +0 -0
  136. {isar-1.30.3 → isar-1.30.4}/src/isar/storage/__init__.py +0 -0
  137. {isar-1.30.3 → isar-1.30.4}/src/isar/storage/blob_storage.py +0 -0
  138. {isar-1.30.3 → isar-1.30.4}/src/isar/storage/local_storage.py +0 -0
  139. {isar-1.30.3 → isar-1.30.4}/src/isar/storage/storage_interface.py +0 -0
  140. {isar-1.30.3 → isar-1.30.4}/src/isar/storage/uploader.py +0 -0
  141. {isar-1.30.3 → isar-1.30.4}/src/isar/storage/utilities.py +0 -0
  142. {isar-1.30.3 → isar-1.30.4}/src/isar.egg-info/SOURCES.txt +0 -0
  143. {isar-1.30.3 → isar-1.30.4}/src/isar.egg-info/dependency_links.txt +0 -0
  144. {isar-1.30.3 → isar-1.30.4}/src/isar.egg-info/entry_points.txt +0 -0
  145. {isar-1.30.3 → isar-1.30.4}/src/isar.egg-info/requires.txt +0 -0
  146. {isar-1.30.3 → isar-1.30.4}/src/isar.egg-info/top_level.txt +0 -0
  147. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/__init__.py +0 -0
  148. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/models/__init__.py +0 -0
  149. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/models/exceptions/__init__.py +0 -0
  150. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/models/exceptions/robot_exceptions.py +0 -0
  151. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/models/initialize/__init__.py +0 -0
  152. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/models/inspection/__init__.py +0 -0
  153. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/models/inspection/inspection.py +0 -0
  154. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/models/mission/__init__.py +0 -0
  155. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/models/mission/mission.py +0 -0
  156. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/models/mission/status.py +0 -0
  157. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/models/mission/task.py +0 -0
  158. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/models/robots/__init__.py +0 -0
  159. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/models/robots/battery_state.py +0 -0
  160. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/models/robots/media.py +0 -0
  161. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/models/robots/robot_model.py +0 -0
  162. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/robot_interface.py +0 -0
  163. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/telemetry/__init__.py +0 -0
  164. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/telemetry/mqtt_client.py +0 -0
  165. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/test_robot_interface.py +0 -0
  166. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/utilities/__init__.py +0 -0
  167. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/utilities/json_service.py +0 -0
  168. {isar-1.30.3 → isar-1.30.4}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
  169. {isar-1.30.3 → isar-1.30.4}/tests/__init__.py +0 -0
  170. {isar-1.30.3 → isar-1.30.4}/tests/conftest.py +0 -0
  171. {isar-1.30.3 → isar-1.30.4}/tests/integration/__init__.py +0 -0
  172. {isar-1.30.3 → isar-1.30.4}/tests/integration/turtlebot/__init__.py +0 -0
  173. {isar-1.30.3 → isar-1.30.4}/tests/integration/turtlebot/config/__init__.py +0 -0
  174. {isar-1.30.3 → isar-1.30.4}/tests/integration/turtlebot/config/maps/__init__.py +0 -0
  175. {isar-1.30.3 → isar-1.30.4}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
  176. {isar-1.30.3 → isar-1.30.4}/tests/integration/turtlebot/config/missions/__init__.py +0 -0
  177. {isar-1.30.3 → isar-1.30.4}/tests/integration/turtlebot/config/missions/default.json +0 -0
  178. {isar-1.30.3 → isar-1.30.4}/tests/integration/turtlebot/test_successful_mission.py +0 -0
  179. {isar-1.30.3 → isar-1.30.4}/tests/isar/__init__.py +0 -0
  180. {isar-1.30.3 → isar-1.30.4}/tests/isar/apis/__init__.py +0 -0
  181. {isar-1.30.3 → isar-1.30.4}/tests/isar/apis/models/__init__.py +0 -0
  182. {isar-1.30.3 → isar-1.30.4}/tests/isar/apis/models/example_mission_definition.json +0 -0
  183. {isar-1.30.3 → isar-1.30.4}/tests/isar/apis/models/test_start_mission_definition.py +0 -0
  184. {isar-1.30.3 → isar-1.30.4}/tests/isar/apis/scheduler/__init__.py +0 -0
  185. {isar-1.30.3 → isar-1.30.4}/tests/isar/apis/scheduler/test_scheduler_router.py +0 -0
  186. {isar-1.30.3 → isar-1.30.4}/tests/isar/apis/security/__init__.py +0 -0
  187. {isar-1.30.3 → isar-1.30.4}/tests/isar/apis/security/test_authentication.py +0 -0
  188. {isar-1.30.3 → isar-1.30.4}/tests/isar/mission/__init__.py +0 -0
  189. {isar-1.30.3 → isar-1.30.4}/tests/isar/mission/test_mission.py +0 -0
  190. {isar-1.30.3 → isar-1.30.4}/tests/isar/models/__init__.py +0 -0
  191. {isar-1.30.3 → isar-1.30.4}/tests/isar/models/communication/__init__.py +0 -0
  192. {isar-1.30.3 → isar-1.30.4}/tests/isar/models/communication/test_queues.py +0 -0
  193. {isar-1.30.3 → isar-1.30.4}/tests/isar/services/__init__.py +0 -0
  194. {isar-1.30.3 → isar-1.30.4}/tests/isar/services/readers/__init__.py +0 -0
  195. {isar-1.30.3 → isar-1.30.4}/tests/isar/services/readers/test_mission_reader.py +0 -0
  196. {isar-1.30.3 → isar-1.30.4}/tests/isar/services/service_connections/__init__.py +0 -0
  197. {isar-1.30.3 → isar-1.30.4}/tests/isar/services/service_connections/echo/__init__.py +0 -0
  198. {isar-1.30.3 → isar-1.30.4}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
  199. {isar-1.30.3 → isar-1.30.4}/tests/isar/services/utilities/__init__.py +0 -0
  200. {isar-1.30.3 → isar-1.30.4}/tests/isar/services/utilities/test_queue_utilities.py +0 -0
  201. {isar-1.30.3 → isar-1.30.4}/tests/isar/services/utilities/test_scheduling_utilities.py +0 -0
  202. {isar-1.30.3 → isar-1.30.4}/tests/isar/state_machine/__init__.py +0 -0
  203. {isar-1.30.3 → isar-1.30.4}/tests/isar/state_machine/states/__init__.py +0 -0
  204. {isar-1.30.3 → isar-1.30.4}/tests/isar/state_machine/states/test_monitor.py +0 -0
  205. {isar-1.30.3 → isar-1.30.4}/tests/isar/state_machine/test_state_machine.py +0 -0
  206. {isar-1.30.3 → isar-1.30.4}/tests/isar/storage/test_blob_storage.py +0 -0
  207. {isar-1.30.3 → isar-1.30.4}/tests/isar/storage/test_uploader.py +0 -0
  208. {isar-1.30.3 → isar-1.30.4}/tests/test_data/test_map_config/test_map_config.json +0 -0
  209. {isar-1.30.3 → isar-1.30.4}/tests/test_data/test_mission_not_working.json +0 -0
  210. {isar-1.30.3 → isar-1.30.4}/tests/test_data/test_mission_working.json +0 -0
  211. {isar-1.30.3 → isar-1.30.4}/tests/test_data/test_mission_working_no_tasks.json +0 -0
  212. {isar-1.30.3 → isar-1.30.4}/tests/test_data/test_thermal_image_mission.json +0 -0
  213. {isar-1.30.3 → isar-1.30.4}/tests/test_double/__init__.py +0 -0
  214. {isar-1.30.3 → isar-1.30.4}/tests/test_double/blob_storage.py +0 -0
  215. {isar-1.30.3 → isar-1.30.4}/tests/test_double/mission_definition.py +0 -0
  216. {isar-1.30.3 → isar-1.30.4}/tests/test_double/mqtt_client.py +0 -0
  217. {isar-1.30.3 → isar-1.30.4}/tests/test_double/pose.py +0 -0
  218. {isar-1.30.3 → isar-1.30.4}/tests/test_double/request.py +0 -0
  219. {isar-1.30.3 → isar-1.30.4}/tests/test_double/robot_interface.py +0 -0
  220. {isar-1.30.3 → isar-1.30.4}/tests/test_double/status.py +0 -0
  221. {isar-1.30.3 → isar-1.30.4}/tests/test_double/task.py +0 -0
  222. {isar-1.30.3 → isar-1.30.4}/tests/test_double/token.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: isar
3
- Version: 1.30.3
3
+ Version: 1.30.4
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
@@ -174,7 +174,7 @@ starlette==0.46.2
174
174
  # via fastapi
175
175
  transitions==0.9.3
176
176
  # via isar (pyproject.toml)
177
- typing-extensions==4.14.0
177
+ typing-extensions==4.14.1
178
178
  # via
179
179
  # azure-core
180
180
  # azure-identity
@@ -1,4 +1,7 @@
1
+ import json
1
2
  import logging
3
+ import time
4
+ from datetime import datetime, timezone
2
5
  from http import HTTPStatus
3
6
  from logging import Logger
4
7
  from typing import List, Union
@@ -24,6 +27,9 @@ from isar.config.configuration_error import ConfigurationError
24
27
  from isar.config.keyvault.keyvault_error import KeyvaultError
25
28
  from isar.config.keyvault.keyvault_service import Keyvault
26
29
  from isar.config.settings import settings
30
+ from robot_interface.telemetry.mqtt_client import MqttClientInterface
31
+ from robot_interface.telemetry.payloads import StartUpMessagePayload
32
+ from robot_interface.utilities.json_service import EnhancedJSONEncoder
27
33
 
28
34
  HTTP_URL = COMMON_ATTRIBUTES["HTTP_URL"]
29
35
  HTTP_STATUS_CODE = COMMON_ATTRIBUTES["HTTP_STATUS_CODE"]
@@ -37,6 +43,7 @@ class API:
37
43
  scheduling_controller: SchedulingController,
38
44
  robot_controller: RobotController,
39
45
  keyvault: Keyvault,
46
+ mqtt_publisher: MqttClientInterface,
40
47
  port: int = settings.API_PORT,
41
48
  azure_ai_logging_enabled: bool = settings.LOG_HANDLER_APPLICATION_INSIGHTS_ENABLED,
42
49
  ) -> None:
@@ -47,22 +54,31 @@ class API:
47
54
  self.host: str = "0.0.0.0" # Locking uvicorn to use 0.0.0.0
48
55
  self.port: int = port
49
56
  self.azure_ai_logging_enabled: bool = azure_ai_logging_enabled
57
+ self.mqtt_publisher: MqttClientInterface = mqtt_publisher
50
58
 
51
59
  self.logger: Logger = logging.getLogger("api")
52
60
 
53
61
  self.app: FastAPI = self._create_app()
62
+ self.server = self._setup_server()
54
63
 
55
64
  def get_app(self) -> FastAPI:
56
65
  return self.app
57
66
 
58
- def run_app(self) -> None:
59
- uvicorn.run(
67
+ def _setup_server(self) -> uvicorn.Server:
68
+ config = uvicorn.Config(
60
69
  self.app,
61
70
  port=self.port,
62
71
  host=self.host,
63
72
  reload=False,
64
73
  log_config=None,
65
74
  )
75
+ return uvicorn.Server(config)
76
+
77
+ def wait_for_api_server_ready(self) -> None:
78
+ while not self.server.started:
79
+ time.sleep(0.01)
80
+ self.logger.info("Uvicorn server has been started")
81
+ self._publish_startup_message()
66
82
 
67
83
  def _create_app(self) -> FastAPI:
68
84
  tags_metadata = [
@@ -73,7 +89,10 @@ class API:
73
89
  ]
74
90
  app = FastAPI(
75
91
  openapi_tags=tags_metadata,
76
- on_startup=[self.authenticator.load_config, self._log_startup_message],
92
+ on_startup=[
93
+ self.authenticator.load_config,
94
+ self._log_startup_message,
95
+ ],
77
96
  swagger_ui_oauth2_redirect_url="/oauth2-redirect",
78
97
  swagger_ui_init_oauth={
79
98
  "usePkceWithAuthorizationCodeGrant": True,
@@ -349,3 +368,21 @@ class API:
349
368
  )
350
369
 
351
370
  return response
371
+
372
+ def _publish_startup_message(self) -> None:
373
+ if not self.mqtt_publisher:
374
+ return
375
+
376
+ payload: StartUpMessagePayload = StartUpMessagePayload(
377
+ isar_id=settings.ISAR_ID,
378
+ timestamp=datetime.now(timezone.utc),
379
+ )
380
+
381
+ self.logger.info("Publishing startup message to MQTT broker")
382
+
383
+ self.mqtt_publisher.publish(
384
+ topic=settings.TOPIC_ISAR_STARTUP,
385
+ payload=json.dumps(payload, cls=EnhancedJSONEncoder),
386
+ qos=1,
387
+ retain=True,
388
+ )
@@ -211,6 +211,7 @@ class Settings(BaseSettings):
211
211
  TOPIC_ISAR_ROBOT_HEARTBEAT: str = Field(
212
212
  default="robot_heartbeat", validate_default=True
213
213
  )
214
+ TOPIC_ISAR_STARTUP: str = Field(default="startup", validate_default=True)
214
215
 
215
216
  # Logging
216
217
 
@@ -261,6 +262,7 @@ class Settings(BaseSettings):
261
262
  "TOPIC_ISAR_ROBOT_HEARTBEAT",
262
263
  "TOPIC_ISAR_INSPECTION_RESULT",
263
264
  "TOPIC_ISAR_INSPECTION_VALUE",
265
+ "TOPIC_ISAR_STARTUP",
264
266
  )
265
267
  @classmethod
266
268
  def prefix_isar_topics(cls, v: Any, info: ValidationInfo):
@@ -45,6 +45,16 @@ class ApplicationContainer(containers.DeclarativeContainer):
45
45
  )
46
46
  robot_utilities = providers.Singleton(RobotUtilities, robot=robot_interface)
47
47
 
48
+ # Mqtt client
49
+ mqtt_client = (
50
+ providers.Singleton(
51
+ MqttPublisher,
52
+ mqtt_queue=providers.Callable(events.provided.mqtt_queue),
53
+ )
54
+ if settings.MQTT_ENABLED
55
+ else None
56
+ )
57
+
48
58
  # API and controllers
49
59
  authenticator = providers.Singleton(Authenticator)
50
60
  scheduling_utilities = providers.Singleton(
@@ -65,6 +75,7 @@ class ApplicationContainer(containers.DeclarativeContainer):
65
75
  scheduling_controller=scheduling_controller,
66
76
  robot_controller=robot_controller,
67
77
  keyvault=keyvault,
78
+ mqtt_publisher=mqtt_client,
68
79
  )
69
80
 
70
81
  # Storage
@@ -77,16 +88,6 @@ class ApplicationContainer(containers.DeclarativeContainer):
77
88
  storage_handlers_temp.append(blob_storage)
78
89
  storage_handlers = providers.List(*storage_handlers_temp)
79
90
 
80
- # Mqtt client
81
- mqtt_client = (
82
- providers.Singleton(
83
- MqttPublisher,
84
- mqtt_queue=providers.Callable(events.provided.mqtt_queue),
85
- )
86
- if settings.MQTT_ENABLED
87
- else None
88
- )
89
-
90
91
  # State machine
91
92
  task_selector = providers.Singleton(
92
93
  SequentialTaskSelector
@@ -160,13 +160,15 @@ def start() -> None:
160
160
  threads.extend(publishers)
161
161
 
162
162
  api: API = injector.api()
163
- api_thread: Thread = Thread(target=api.run_app, name="ISAR API", daemon=True)
163
+ api_thread: Thread = Thread(target=api.server.run, name="ISAR API", daemon=True)
164
164
  threads.append(api_thread)
165
165
 
166
166
  for thread in threads:
167
167
  thread.start()
168
168
  logger.info("Started thread: %s", thread.name)
169
169
 
170
+ api.wait_for_api_server_ready()
171
+
170
172
  while True:
171
173
  for thread in threads:
172
174
  if not thread.is_alive():
@@ -18,7 +18,7 @@ def put_start_mission_on_queue(state_machine: "StateMachine") -> bool:
18
18
 
19
19
  def initiate_mission(state_machine: "StateMachine") -> bool:
20
20
  state_machine.logger.info(
21
- "Initialization successful. Starting new mission:\n"
21
+ "Initiating mission:\n"
22
22
  f" Mission ID: {state_machine.current_mission.id}\n"
23
23
  f" Mission Name: {state_machine.current_mission.name}\n"
24
24
  f" Number of Tasks: {len(state_machine.current_mission.tasks)}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: isar
3
- Version: 1.30.3
3
+ Version: 1.30.4
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
@@ -132,3 +132,9 @@ class InspectionValuePayload:
132
132
  y: float
133
133
  z: float
134
134
  timestamp: datetime
135
+
136
+
137
+ @dataclass
138
+ class StartUpMessagePayload:
139
+ isar_id: str
140
+ timestamp: datetime
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes