isar 1.30.5__tar.gz → 1.34.5__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 (287) hide show
  1. {isar-1.30.5 → isar-1.34.5}/.github/workflows/compile_requirements.yml +1 -1
  2. isar-1.34.5/.github/workflows/execute_stale_labeler.yml +17 -0
  3. {isar-1.30.5 → isar-1.34.5}/.github/workflows/project_automations.yml +11 -5
  4. {isar-1.30.5 → isar-1.34.5}/.github/workflows/pythonpackage.yml +3 -0
  5. {isar-1.30.5 → isar-1.34.5}/.github/workflows/pythonpublish.yml +3 -0
  6. isar-1.34.5/.github/workflows/synchronize_labels.yml +13 -0
  7. isar-1.34.5/.github/workflows/trivy-config.yml +43 -0
  8. isar-1.34.5/Makefile +23 -0
  9. {isar-1.30.5 → isar-1.34.5}/PKG-INFO +23 -68
  10. {isar-1.30.5 → isar-1.34.5}/README.md +11 -63
  11. isar-1.34.5/docs/full_state_machine_diagram.png +0 -0
  12. isar-1.34.5/docs/mission_state_machine_diagram.png +0 -0
  13. isar-1.34.5/docs/robot_status_state_machine_diagram.png +0 -0
  14. {isar-1.30.5 → isar-1.34.5}/docs/update_state_diagram.py +53 -3
  15. {isar-1.30.5 → isar-1.34.5}/pyproject.toml +11 -4
  16. isar-1.34.5/requirements.txt +324 -0
  17. {isar-1.30.5 → isar-1.34.5}/src/isar/apis/api.py +78 -60
  18. {isar-1.30.5 → isar-1.34.5}/src/isar/apis/models/models.py +18 -4
  19. {isar-1.30.5 → isar-1.34.5}/src/isar/apis/models/start_mission_definition.py +8 -0
  20. {isar-1.30.5 → isar-1.34.5}/src/isar/apis/robot_control/robot_controller.py +5 -2
  21. {isar-1.30.5 → isar-1.34.5}/src/isar/apis/schedule/scheduling_controller.py +117 -90
  22. isar-1.34.5/src/isar/config/log.py +58 -0
  23. isar-1.34.5/src/isar/config/logging.conf +40 -0
  24. isar-1.34.5/src/isar/config/open_telemetry.py +102 -0
  25. {isar-1.30.5 → isar-1.34.5}/src/isar/config/predefined_missions/default.json +1 -1
  26. isar-1.30.5/src/isar/config/predefined_missions/default_turtlebot.json → isar-1.34.5/src/isar/config/predefined_missions/default_extra_capabilities.json +1 -1
  27. {isar-1.30.5 → isar-1.34.5}/src/isar/config/settings.py +45 -11
  28. isar-1.34.5/src/isar/eventhandlers/eventhandler.py +115 -0
  29. {isar-1.30.5 → isar-1.34.5}/src/isar/mission_planner/local_planner.py +0 -3
  30. isar-1.34.5/src/isar/models/events.py +183 -0
  31. isar-1.34.5/src/isar/models/status.py +18 -0
  32. {isar-1.30.5 → isar-1.34.5}/src/isar/modules.py +6 -12
  33. isar-1.34.5/src/isar/robot/robot.py +348 -0
  34. isar-1.34.5/src/isar/robot/robot_battery.py +60 -0
  35. isar-1.34.5/src/isar/robot/robot_monitor_mission.py +415 -0
  36. isar-1.34.5/src/isar/robot/robot_pause_mission.py +74 -0
  37. isar-1.34.5/src/isar/robot/robot_resume_mission.py +67 -0
  38. {isar-1.30.5 → isar-1.34.5}/src/isar/robot/robot_start_mission.py +13 -31
  39. {isar-1.30.5 → isar-1.34.5}/src/isar/robot/robot_status.py +14 -9
  40. {isar-1.30.5 → isar-1.34.5}/src/isar/robot/robot_stop_mission.py +11 -14
  41. isar-1.34.5/src/isar/robot/robot_upload_inspection.py +75 -0
  42. {isar-1.30.5 → isar-1.34.5}/src/isar/script.py +11 -17
  43. {isar-1.30.5 → isar-1.34.5}/src/isar/services/service_connections/mqtt/mqtt_client.py +45 -9
  44. {isar-1.30.5 → isar-1.34.5}/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +3 -0
  45. isar-1.34.5/src/isar/services/service_connections/persistent_memory.py +69 -0
  46. {isar-1.30.5 → isar-1.34.5}/src/isar/services/utilities/robot_utilities.py +0 -3
  47. isar-1.34.5/src/isar/services/utilities/scheduling_utilities.py +563 -0
  48. {isar-1.30.5 → isar-1.34.5}/src/isar/state_machine/state_machine.py +136 -134
  49. isar-1.34.5/src/isar/state_machine/states/await_next_mission.py +108 -0
  50. isar-1.34.5/src/isar/state_machine/states/blocked_protective_stop.py +49 -0
  51. isar-1.34.5/src/isar/state_machine/states/going_to_lockdown.py +88 -0
  52. isar-1.34.5/src/isar/state_machine/states/going_to_recharging.py +81 -0
  53. isar-1.34.5/src/isar/state_machine/states/home.py +112 -0
  54. isar-1.34.5/src/isar/state_machine/states/intervention_needed.py +59 -0
  55. isar-1.34.5/src/isar/state_machine/states/lockdown.py +38 -0
  56. isar-1.34.5/src/isar/state_machine/states/maintenance.py +36 -0
  57. isar-1.34.5/src/isar/state_machine/states/monitor.py +131 -0
  58. isar-1.34.5/src/isar/state_machine/states/offline.py +49 -0
  59. isar-1.34.5/src/isar/state_machine/states/paused.py +90 -0
  60. isar-1.34.5/src/isar/state_machine/states/pausing.py +59 -0
  61. isar-1.34.5/src/isar/state_machine/states/pausing_return_home.py +59 -0
  62. isar-1.34.5/src/isar/state_machine/states/recharging.py +80 -0
  63. isar-1.34.5/src/isar/state_machine/states/resuming.py +57 -0
  64. isar-1.34.5/src/isar/state_machine/states/resuming_return_home.py +64 -0
  65. isar-1.34.5/src/isar/state_machine/states/return_home_paused.py +103 -0
  66. isar-1.34.5/src/isar/state_machine/states/returning_home.py +160 -0
  67. isar-1.34.5/src/isar/state_machine/states/stopping.py +58 -0
  68. isar-1.34.5/src/isar/state_machine/states/stopping_due_to_maintenance.py +61 -0
  69. isar-1.34.5/src/isar/state_machine/states/stopping_go_to_lockdown.py +59 -0
  70. isar-1.34.5/src/isar/state_machine/states/stopping_go_to_recharge.py +51 -0
  71. isar-1.34.5/src/isar/state_machine/states/stopping_return_home.py +73 -0
  72. isar-1.34.5/src/isar/state_machine/states/unknown_status.py +65 -0
  73. isar-1.34.5/src/isar/state_machine/states_enum.py +31 -0
  74. isar-1.34.5/src/isar/state_machine/transitions/functions/fail_mission.py +19 -0
  75. isar-1.34.5/src/isar/state_machine/transitions/functions/finish_mission.py +9 -0
  76. isar-1.34.5/src/isar/state_machine/transitions/functions/pause.py +9 -0
  77. isar-1.34.5/src/isar/state_machine/transitions/functions/resume.py +9 -0
  78. {isar-1.30.5 → isar-1.34.5}/src/isar/state_machine/transitions/functions/return_home.py +11 -10
  79. isar-1.34.5/src/isar/state_machine/transitions/functions/robot_status.py +36 -0
  80. isar-1.34.5/src/isar/state_machine/transitions/functions/start_mission.py +40 -0
  81. isar-1.34.5/src/isar/state_machine/transitions/functions/stop.py +33 -0
  82. isar-1.34.5/src/isar/state_machine/transitions/mission.py +255 -0
  83. isar-1.34.5/src/isar/state_machine/transitions/return_home.py +172 -0
  84. {isar-1.30.5 → isar-1.34.5}/src/isar/state_machine/transitions/robot_status.py +21 -10
  85. isar-1.34.5/src/isar/state_machine/utils/common_event_handlers.py +98 -0
  86. isar-1.34.5/src/isar/storage/blob_storage.py +101 -0
  87. {isar-1.30.5 → isar-1.34.5}/src/isar/storage/local_storage.py +25 -12
  88. {isar-1.30.5 → isar-1.34.5}/src/isar/storage/storage_interface.py +28 -7
  89. {isar-1.30.5 → isar-1.34.5}/src/isar/storage/uploader.py +49 -17
  90. {isar-1.30.5 → isar-1.34.5}/src/isar.egg-info/PKG-INFO +23 -68
  91. {isar-1.30.5 → isar-1.34.5}/src/isar.egg-info/SOURCES.txt +33 -23
  92. {isar-1.30.5 → isar-1.34.5}/src/isar.egg-info/requires.txt +11 -4
  93. {isar-1.30.5 → isar-1.34.5}/src/robot_interface/models/exceptions/robot_exceptions.py +24 -0
  94. {isar-1.30.5 → isar-1.34.5}/src/robot_interface/models/inspection/inspection.py +6 -15
  95. {isar-1.30.5 → isar-1.34.5}/src/robot_interface/models/mission/status.py +1 -2
  96. {isar-1.30.5 → isar-1.34.5}/src/robot_interface/models/mission/task.py +0 -24
  97. {isar-1.30.5 → isar-1.34.5}/src/robot_interface/robot_interface.py +53 -5
  98. {isar-1.30.5 → isar-1.34.5}/src/robot_interface/telemetry/mqtt_client.py +62 -6
  99. {isar-1.30.5 → isar-1.34.5}/src/robot_interface/telemetry/payloads.py +26 -5
  100. {isar-1.30.5 → isar-1.34.5}/src/robot_interface/utilities/json_service.py +6 -0
  101. {isar-1.30.5 → isar-1.34.5}/tests/conftest.py +30 -7
  102. {isar-1.30.5 → isar-1.34.5}/tests/integration/turtlebot/test_successful_mission.py +2 -2
  103. {isar-1.30.5 → isar-1.34.5}/tests/isar/apis/scheduler/test_scheduler_router.py +57 -75
  104. isar-1.34.5/tests/isar/models/communication/test_events.py +44 -0
  105. isar-1.34.5/tests/isar/services/utilities/test_queue_utilities.py +34 -0
  106. isar-1.34.5/tests/isar/services/utilities/test_scheduling_utilities.py +124 -0
  107. isar-1.34.5/tests/isar/state_machine/test_state_machine.py +1591 -0
  108. {isar-1.30.5 → isar-1.34.5}/tests/isar/storage/test_uploader.py +32 -1
  109. isar-1.34.5/tests/test_double/blob_storage.py +41 -0
  110. isar-1.34.5/tests/test_double/mqtt_client.py +37 -0
  111. {isar-1.30.5 → isar-1.34.5}/tests/test_double/robot_interface.py +81 -47
  112. {isar-1.30.5 → isar-1.34.5}/tests/test_double/status.py +1 -1
  113. isar-1.34.5/tests/test_maintenance_mode.py +103 -0
  114. isar-1.30.5/docs/full_state_machine_diagram.png +0 -0
  115. isar-1.30.5/docs/mission_state_machine_diagram.png +0 -0
  116. isar-1.30.5/docs/robot_status_state_machine_diagram.png +0 -0
  117. isar-1.30.5/requirements.txt +0 -196
  118. isar-1.30.5/src/isar/config/log.py +0 -67
  119. isar-1.30.5/src/isar/config/logging.conf +0 -58
  120. isar-1.30.5/src/isar/mission_planner/sequential_task_selector.py +0 -23
  121. isar-1.30.5/src/isar/mission_planner/task_selector_interface.py +0 -31
  122. isar-1.30.5/src/isar/models/communication/message.py +0 -8
  123. isar-1.30.5/src/isar/models/communication/queues/events.py +0 -58
  124. isar-1.30.5/src/isar/models/communication/queues/queue_io.py +0 -12
  125. isar-1.30.5/src/isar/models/communication/queues/queue_timeout_error.py +0 -2
  126. isar-1.30.5/src/isar/models/communication/queues/queue_utils.py +0 -38
  127. isar-1.30.5/src/isar/models/communication/queues/status_queue.py +0 -22
  128. isar-1.30.5/src/isar/robot/robot.py +0 -134
  129. isar-1.30.5/src/isar/robot/robot_task_status.py +0 -91
  130. isar-1.30.5/src/isar/services/utilities/queue_utilities.py +0 -39
  131. isar-1.30.5/src/isar/services/utilities/scheduling_utilities.py +0 -291
  132. isar-1.30.5/src/isar/state_machine/generic_states/idle.py +0 -133
  133. isar-1.30.5/src/isar/state_machine/generic_states/ongoing_mission.py +0 -294
  134. isar-1.30.5/src/isar/state_machine/generic_states/robot_unavailable.py +0 -61
  135. isar-1.30.5/src/isar/state_machine/states/await_next_mission.py +0 -20
  136. isar-1.30.5/src/isar/state_machine/states/blocked_protective_stop.py +0 -24
  137. isar-1.30.5/src/isar/state_machine/states/home.py +0 -19
  138. isar-1.30.5/src/isar/state_machine/states/monitor.py +0 -24
  139. isar-1.30.5/src/isar/state_machine/states/offline.py +0 -22
  140. isar-1.30.5/src/isar/state_machine/states/paused.py +0 -44
  141. isar-1.30.5/src/isar/state_machine/states/returning_home.py +0 -24
  142. isar-1.30.5/src/isar/state_machine/states/robot_standing_still.py +0 -20
  143. isar-1.30.5/src/isar/state_machine/states/stopping.py +0 -75
  144. isar-1.30.5/src/isar/state_machine/states/unknown_status.py +0 -74
  145. isar-1.30.5/src/isar/state_machine/states_enum.py +0 -17
  146. isar-1.30.5/src/isar/state_machine/transitions/functions/fail_mission.py +0 -13
  147. isar-1.30.5/src/isar/state_machine/transitions/functions/finish_mission.py +0 -39
  148. isar-1.30.5/src/isar/state_machine/transitions/functions/pause.py +0 -24
  149. isar-1.30.5/src/isar/state_machine/transitions/functions/resume.py +0 -27
  150. isar-1.30.5/src/isar/state_machine/transitions/functions/robot_status.py +0 -27
  151. isar-1.30.5/src/isar/state_machine/transitions/functions/start_mission.py +0 -74
  152. isar-1.30.5/src/isar/state_machine/transitions/functions/stop.py +0 -92
  153. isar-1.30.5/src/isar/state_machine/transitions/mission.py +0 -134
  154. isar-1.30.5/src/isar/state_machine/transitions/return_home.py +0 -69
  155. isar-1.30.5/src/isar/storage/blob_storage.py +0 -83
  156. isar-1.30.5/tests/isar/models/communication/test_queues.py +0 -49
  157. isar-1.30.5/tests/isar/services/service_connections/echo/__init__.py +0 -0
  158. isar-1.30.5/tests/isar/services/utilities/__init__.py +0 -0
  159. isar-1.30.5/tests/isar/services/utilities/test_queue_utilities.py +0 -38
  160. isar-1.30.5/tests/isar/services/utilities/test_scheduling_utilities.py +0 -65
  161. isar-1.30.5/tests/isar/state_machine/__init__.py +0 -0
  162. isar-1.30.5/tests/isar/state_machine/states/__init__.py +0 -0
  163. isar-1.30.5/tests/isar/state_machine/states/test_monitor.py +0 -50
  164. isar-1.30.5/tests/isar/state_machine/test_state_machine.py +0 -530
  165. isar-1.30.5/tests/isar/storage/test_blob_storage.py +0 -18
  166. isar-1.30.5/tests/test_double/__init__.py +0 -0
  167. isar-1.30.5/tests/test_double/blob_storage.py +0 -20
  168. isar-1.30.5/tests/test_double/mqtt_client.py +0 -10
  169. {isar-1.30.5 → isar-1.34.5}/.dockerignore +0 -0
  170. {isar-1.30.5 → isar-1.34.5}/.env.test +0 -0
  171. {isar-1.30.5 → isar-1.34.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  172. {isar-1.30.5 → isar-1.34.5}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  173. {isar-1.30.5 → isar-1.34.5}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
  174. {isar-1.30.5 → isar-1.34.5}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  175. {isar-1.30.5 → isar-1.34.5}/.github/release.yml +0 -0
  176. {isar-1.30.5 → isar-1.34.5}/.github/workflows/stale.yml +0 -0
  177. {isar-1.30.5 → isar-1.34.5}/.gitignore +0 -0
  178. {isar-1.30.5 → isar-1.34.5}/.pre-commit-config.yaml +0 -0
  179. {isar-1.30.5 → isar-1.34.5}/LICENSE +0 -0
  180. {isar-1.30.5 → isar-1.34.5}/SECURITY.md +0 -0
  181. {isar-1.30.5 → isar-1.34.5}/docs/Makefile +0 -0
  182. {isar-1.30.5 → isar-1.34.5}/docs/make.bat +0 -0
  183. {isar-1.30.5 → isar-1.34.5}/docs/rst_processing.py +0 -0
  184. {isar-1.30.5 → isar-1.34.5}/docs/source/conf.py +0 -0
  185. {isar-1.30.5 → isar-1.34.5}/docs/source/index.rst +0 -0
  186. {isar-1.30.5 → isar-1.34.5}/docs/source/readme_link.md +0 -0
  187. {isar-1.30.5 → isar-1.34.5}/main.py +0 -0
  188. {isar-1.30.5 → isar-1.34.5}/radixconfig.yml +0 -0
  189. {isar-1.30.5 → isar-1.34.5}/setup.cfg +0 -0
  190. {isar-1.30.5 → isar-1.34.5}/src/isar/__init__.py +0 -0
  191. {isar-1.30.5 → isar-1.34.5}/src/isar/apis/__init__.py +0 -0
  192. {isar-1.30.5 → isar-1.34.5}/src/isar/apis/models/__init__.py +0 -0
  193. {isar-1.30.5 → isar-1.34.5}/src/isar/apis/schedule/__init__.py +0 -0
  194. {isar-1.30.5 → isar-1.34.5}/src/isar/apis/security/__init__.py +0 -0
  195. {isar-1.30.5 → isar-1.34.5}/src/isar/apis/security/authentication.py +0 -0
  196. {isar-1.30.5 → isar-1.34.5}/src/isar/config/__init__.py +0 -0
  197. {isar-1.30.5 → isar-1.34.5}/src/isar/config/certs/ca-cert.pem +0 -0
  198. {isar-1.30.5 → isar-1.34.5}/src/isar/config/configuration_error.py +0 -0
  199. {isar-1.30.5 → isar-1.34.5}/src/isar/config/keyvault/__init__.py +0 -0
  200. {isar-1.30.5 → isar-1.34.5}/src/isar/config/keyvault/keyvault_error.py +0 -0
  201. {isar-1.30.5 → isar-1.34.5}/src/isar/config/keyvault/keyvault_service.py +0 -0
  202. {isar-1.30.5 → isar-1.34.5}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
  203. {isar-1.30.5 → isar-1.34.5}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
  204. {isar-1.30.5 → isar-1.34.5}/src/isar/config/maps/default_map.json +0 -0
  205. {isar-1.30.5 → isar-1.34.5}/src/isar/config/maps/klab_b.json +0 -0
  206. {isar-1.30.5 → isar-1.34.5}/src/isar/config/maps/klab_compressor.json +0 -0
  207. {isar-1.30.5 → isar-1.34.5}/src/isar/config/maps/klab_turtlebot.json +0 -0
  208. {isar-1.30.5 → isar-1.34.5}/src/isar/config/maps/turtleworld.json +0 -0
  209. {isar-1.30.5 → isar-1.34.5}/src/isar/config/predefined_mission_definition/__init__.py +0 -0
  210. {isar-1.30.5 → isar-1.34.5}/src/isar/config/predefined_mission_definition/default_exr.json +0 -0
  211. {isar-1.30.5 → isar-1.34.5}/src/isar/config/predefined_mission_definition/default_mission.json +0 -0
  212. {isar-1.30.5 → isar-1.34.5}/src/isar/config/predefined_mission_definition/default_turtlebot.json +0 -0
  213. {isar-1.30.5 → isar-1.34.5}/src/isar/config/predefined_missions/__init__.py +0 -0
  214. {isar-1.30.5 → isar-1.34.5}/src/isar/mission_planner/__init__.py +0 -0
  215. {isar-1.30.5 → isar-1.34.5}/src/isar/mission_planner/mission_planner_interface.py +0 -0
  216. {isar-1.30.5 → isar-1.34.5}/src/isar/models/__init__.py +0 -0
  217. {isar-1.30.5/src/isar/models/communication → isar-1.34.5/src/isar/services}/__init__.py +0 -0
  218. {isar-1.30.5/src/isar/models/communication/queues → isar-1.34.5/src/isar/services/auth}/__init__.py +0 -0
  219. {isar-1.30.5 → isar-1.34.5}/src/isar/services/auth/azure_credentials.py +0 -0
  220. {isar-1.30.5/src/isar/models/mission_metadata → isar-1.34.5/src/isar/services/service_connections}/__init__.py +0 -0
  221. {isar-1.30.5/src/isar/services → isar-1.34.5/src/isar/services/service_connections/mqtt}/__init__.py +0 -0
  222. {isar-1.30.5 → isar-1.34.5}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +0 -0
  223. {isar-1.30.5 → isar-1.34.5}/src/isar/services/service_connections/request_handler.py +0 -0
  224. {isar-1.30.5/src/isar/services/auth → isar-1.34.5/src/isar/services/utilities}/__init__.py +0 -0
  225. {isar-1.30.5 → isar-1.34.5}/src/isar/services/utilities/threaded_request.py +0 -0
  226. {isar-1.30.5/src/isar/services/service_connections → isar-1.34.5/src/isar/state_machine}/__init__.py +0 -0
  227. {isar-1.30.5/src/isar/services/service_connections/mqtt → isar-1.34.5/src/isar/state_machine/states}/__init__.py +0 -0
  228. {isar-1.30.5 → isar-1.34.5}/src/isar/state_machine/transitions/functions/utils.py +0 -0
  229. {isar-1.30.5/src/isar/services/service_connections/stid → isar-1.34.5/src/isar/storage}/__init__.py +0 -0
  230. {isar-1.30.5 → isar-1.34.5}/src/isar/storage/utilities.py +0 -0
  231. {isar-1.30.5 → isar-1.34.5}/src/isar.egg-info/dependency_links.txt +0 -0
  232. {isar-1.30.5 → isar-1.34.5}/src/isar.egg-info/entry_points.txt +0 -0
  233. {isar-1.30.5 → isar-1.34.5}/src/isar.egg-info/top_level.txt +0 -0
  234. {isar-1.30.5/src/isar/services/utilities → isar-1.34.5/src/robot_interface}/__init__.py +0 -0
  235. {isar-1.30.5/src/isar/state_machine → isar-1.34.5/src/robot_interface/models}/__init__.py +0 -0
  236. {isar-1.30.5/src/isar/state_machine/states → isar-1.34.5/src/robot_interface/models/exceptions}/__init__.py +0 -0
  237. {isar-1.30.5/src/isar/storage → isar-1.34.5/src/robot_interface/models/initialize}/__init__.py +0 -0
  238. {isar-1.30.5/src/robot_interface → isar-1.34.5/src/robot_interface/models/inspection}/__init__.py +0 -0
  239. {isar-1.30.5/src/robot_interface/models → isar-1.34.5/src/robot_interface/models/mission}/__init__.py +0 -0
  240. {isar-1.30.5 → isar-1.34.5}/src/robot_interface/models/mission/mission.py +0 -0
  241. {isar-1.30.5/src/robot_interface/models/exceptions → isar-1.34.5/src/robot_interface/models/robots}/__init__.py +0 -0
  242. {isar-1.30.5 → isar-1.34.5}/src/robot_interface/models/robots/battery_state.py +0 -0
  243. {isar-1.30.5 → isar-1.34.5}/src/robot_interface/models/robots/media.py +0 -0
  244. {isar-1.30.5 → isar-1.34.5}/src/robot_interface/models/robots/robot_model.py +0 -0
  245. {isar-1.30.5/src/robot_interface/models/initialize → isar-1.34.5/src/robot_interface/telemetry}/__init__.py +0 -0
  246. {isar-1.30.5 → isar-1.34.5}/src/robot_interface/test_robot_interface.py +0 -0
  247. {isar-1.30.5/src/robot_interface/models/inspection → isar-1.34.5/src/robot_interface/utilities}/__init__.py +0 -0
  248. {isar-1.30.5 → isar-1.34.5}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
  249. {isar-1.30.5/src/robot_interface/models/mission → isar-1.34.5/tests}/__init__.py +0 -0
  250. {isar-1.30.5/src/robot_interface/models/robots → isar-1.34.5/tests/integration}/__init__.py +0 -0
  251. {isar-1.30.5/src/robot_interface/telemetry → isar-1.34.5/tests/integration/turtlebot}/__init__.py +0 -0
  252. {isar-1.30.5/src/robot_interface/utilities → isar-1.34.5/tests/integration/turtlebot/config}/__init__.py +0 -0
  253. {isar-1.30.5/tests → isar-1.34.5/tests/integration/turtlebot/config/maps}/__init__.py +0 -0
  254. {isar-1.30.5 → isar-1.34.5}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
  255. {isar-1.30.5/tests/integration → isar-1.34.5/tests/integration/turtlebot/config/missions}/__init__.py +0 -0
  256. {isar-1.30.5 → isar-1.34.5}/tests/integration/turtlebot/config/missions/default.json +0 -0
  257. {isar-1.30.5/tests/integration/turtlebot → isar-1.34.5/tests/isar}/__init__.py +0 -0
  258. {isar-1.30.5/tests/integration/turtlebot/config → isar-1.34.5/tests/isar/apis}/__init__.py +0 -0
  259. {isar-1.30.5/tests/integration/turtlebot/config/maps → isar-1.34.5/tests/isar/apis/models}/__init__.py +0 -0
  260. {isar-1.30.5 → isar-1.34.5}/tests/isar/apis/models/example_mission_definition.json +0 -0
  261. {isar-1.30.5 → isar-1.34.5}/tests/isar/apis/models/test_start_mission_definition.py +0 -0
  262. {isar-1.30.5/tests/integration/turtlebot/config/missions → isar-1.34.5/tests/isar/apis/scheduler}/__init__.py +0 -0
  263. {isar-1.30.5/tests/isar → isar-1.34.5/tests/isar/apis/security}/__init__.py +0 -0
  264. {isar-1.30.5 → isar-1.34.5}/tests/isar/apis/security/test_authentication.py +0 -0
  265. {isar-1.30.5/tests/isar/apis → isar-1.34.5/tests/isar/mission}/__init__.py +0 -0
  266. {isar-1.30.5 → isar-1.34.5}/tests/isar/mission/test_mission.py +0 -0
  267. {isar-1.30.5/tests/isar/apis → isar-1.34.5/tests/isar}/models/__init__.py +0 -0
  268. {isar-1.30.5/tests/isar/apis/scheduler → isar-1.34.5/tests/isar/models/communication}/__init__.py +0 -0
  269. {isar-1.30.5/tests/isar/apis/security → isar-1.34.5/tests/isar/services}/__init__.py +0 -0
  270. {isar-1.30.5/tests/isar/mission → isar-1.34.5/tests/isar/services/readers}/__init__.py +0 -0
  271. {isar-1.30.5 → isar-1.34.5}/tests/isar/services/readers/test_mission_reader.py +0 -0
  272. {isar-1.30.5/tests/isar/models → isar-1.34.5/tests/isar/services/service_connections}/__init__.py +0 -0
  273. {isar-1.30.5/tests/isar/models/communication → isar-1.34.5/tests/isar/services/service_connections/echo}/__init__.py +0 -0
  274. {isar-1.30.5 → isar-1.34.5}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
  275. {isar-1.30.5/tests/isar/services → isar-1.34.5/tests/isar/services/utilities}/__init__.py +0 -0
  276. {isar-1.30.5/tests/isar/services/readers → isar-1.34.5/tests/isar/state_machine}/__init__.py +0 -0
  277. {isar-1.30.5 → isar-1.34.5}/tests/test_data/test_map_config/test_map_config.json +0 -0
  278. {isar-1.30.5 → isar-1.34.5}/tests/test_data/test_mission_not_working.json +0 -0
  279. {isar-1.30.5 → isar-1.34.5}/tests/test_data/test_mission_working.json +0 -0
  280. {isar-1.30.5 → isar-1.34.5}/tests/test_data/test_mission_working_no_tasks.json +0 -0
  281. {isar-1.30.5 → isar-1.34.5}/tests/test_data/test_thermal_image_mission.json +0 -0
  282. {isar-1.30.5/tests/isar/services/service_connections → isar-1.34.5/tests/test_double}/__init__.py +0 -0
  283. {isar-1.30.5 → isar-1.34.5}/tests/test_double/mission_definition.py +0 -0
  284. {isar-1.30.5 → isar-1.34.5}/tests/test_double/pose.py +0 -0
  285. {isar-1.30.5 → isar-1.34.5}/tests/test_double/request.py +0 -0
  286. {isar-1.30.5 → isar-1.34.5}/tests/test_double/task.py +0 -0
  287. {isar-1.30.5 → isar-1.34.5}/tests/test_double/token.py +0 -0
@@ -38,7 +38,7 @@ jobs:
38
38
  pip-compile --output-file=requirements.txt pyproject.toml --upgrade
39
39
 
40
40
  - name: Create Pull Request
41
- uses: peter-evans/create-pull-request@v6
41
+ uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e #v7
42
42
  with:
43
43
  commit-message: "GHA: Update dependencies"
44
44
  title: Update dependencies
@@ -0,0 +1,17 @@
1
+ name: Execute stale labeler
2
+ on:
3
+ workflow_dispatch:
4
+ schedule:
5
+ - cron: "35 6 * * *"
6
+
7
+ permissions:
8
+ contents: read
9
+ actions: write
10
+ issues: write
11
+ pull-requests: write
12
+
13
+ jobs:
14
+ labels:
15
+ uses: equinor/armada/.github/workflows/mark_issues_and_prs_as_stale.yml@main
16
+ secrets:
17
+ STALE_ISSUE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -1,4 +1,10 @@
1
1
  name: Project automations
2
+
3
+ permissions:
4
+ contents: read
5
+ issues: write
6
+ pull-requests: write
7
+
2
8
  on:
3
9
  issues:
4
10
  types:
@@ -19,7 +25,7 @@ jobs:
19
25
  if: github.event_name == 'issues' && github.event.action == 'opened' || github.event.action == 'reopened'
20
26
  steps:
21
27
  - name: 'Move issue to "Todo"'
22
- uses: leonsteinhaeuser/project-beta-automations@v2.1.0
28
+ uses: leonsteinhaeuser/project-beta-automations@939000fb1900c9fc4f7b5058a09d9f833ebc6859 #Version 2.2.1
23
29
  with:
24
30
  gh_token: ${{ secrets.MY_GITHUB_TOKEN }}
25
31
  organization: equinor
@@ -32,7 +38,7 @@ jobs:
32
38
  if: github.event_name == 'issues' && github.event.action == 'closed'
33
39
  steps:
34
40
  - name: 'Moved issue to "Done"'
35
- uses: leonsteinhaeuser/project-beta-automations@v2.1.0
41
+ uses: leonsteinhaeuser/project-beta-automations@939000fb1900c9fc4f7b5058a09d9f833ebc6859 #Version 2.2.1
36
42
  with:
37
43
  gh_token: ${{ secrets.MY_GITHUB_TOKEN }}
38
44
  organization: equinor
@@ -45,7 +51,7 @@ jobs:
45
51
  if: github.event_name == 'pull_request' && github.event.action == 'opened' || github.event.action == 'reopened' || github.event.action == 'review_requested'
46
52
  steps:
47
53
  - name: 'Move PR to "In Progress"'
48
- uses: leonsteinhaeuser/project-beta-automations@v2.1.0
54
+ uses: leonsteinhaeuser/project-beta-automations@939000fb1900c9fc4f7b5058a09d9f833ebc6859 #Version 2.2.1
49
55
  with:
50
56
  gh_token: ${{ secrets.MY_GITHUB_TOKEN }}
51
57
  organization: equinor
@@ -58,7 +64,7 @@ jobs:
58
64
  if: github.event_name == 'pull_request' && github.event.action == 'ready_for_review'
59
65
  steps:
60
66
  - name: 'Move PR to "Review"'
61
- uses: leonsteinhaeuser/project-beta-automations@v2.1.0
67
+ uses: leonsteinhaeuser/project-beta-automations@939000fb1900c9fc4f7b5058a09d9f833ebc6859 #Version 2.2.1
62
68
  with:
63
69
  gh_token: ${{ secrets.MY_GITHUB_TOKEN }}
64
70
  organization: equinor
@@ -71,7 +77,7 @@ jobs:
71
77
  if: github.event_name == 'pull_request' && github.event.action == 'closed'
72
78
  steps:
73
79
  - name: 'Move PR to "Done"'
74
- uses: leonsteinhaeuser/project-beta-automations@v2.1.0
80
+ uses: leonsteinhaeuser/project-beta-automations@939000fb1900c9fc4f7b5058a09d9f833ebc6859 #Version 2.2.1
75
81
  with:
76
82
  gh_token: ${{ secrets.MY_GITHUB_TOKEN }}
77
83
  organization: equinor
@@ -1,5 +1,8 @@
1
1
  name: Python package
2
2
 
3
+ permissions:
4
+ contents: read
5
+
3
6
  on:
4
7
  push:
5
8
  branches:
@@ -1,5 +1,8 @@
1
1
  name: Upload Python Package
2
2
 
3
+ permissions:
4
+ contents: read
5
+
3
6
  on:
4
7
  release:
5
8
  types: [created]
@@ -0,0 +1,13 @@
1
+ name: Execute label synchronization
2
+ on:
3
+ workflow_dispatch:
4
+
5
+ permissions:
6
+ contents: read
7
+ issues: write
8
+
9
+ jobs:
10
+ labels:
11
+ uses: equinor/armada/.github/workflows/synchronize_labels.yml@main
12
+ secrets:
13
+ LABEL_SYNC_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,43 @@
1
+ # from https://github.com/equinor/appsec-ghas-examples/blob/main/.github/workflows/trivy-config.yml
2
+ name: Trivy IaC & Dockerfile Scanning
3
+ permissions: {}
4
+ on:
5
+ push:
6
+ branches: [ "main" ]
7
+ pull_request:
8
+ branches: [ "main" ]
9
+ schedule:
10
+ - cron: '36 0 * * 3'
11
+
12
+ jobs:
13
+ trivy-scan:
14
+ name: Scan on Main with Trivy
15
+ runs-on: ubuntu-latest
16
+ timeout-minutes: 30
17
+ permissions:
18
+ security-events: write
19
+
20
+ contents: read
21
+ actions: read
22
+
23
+ steps:
24
+ - name: Checkout code
25
+ uses: actions/checkout@v5
26
+ with:
27
+ persist-credentials: false
28
+
29
+ - name: Run Trivy vulnerability Scanner
30
+ uses: aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8
31
+ with:
32
+ scan-type: 'config'
33
+ severity: 'CRITICAL,HIGH'
34
+ limit-severities-for-sarif: true
35
+ format: 'sarif'
36
+ output: 'trivy-results-iac.sarif'
37
+ exit-code: '0'
38
+
39
+ - name: Upload scan results to GitHub Security tab
40
+ uses: github/codeql-action/upload-sarif@v3
41
+ with:
42
+ sarif_file: 'trivy-results-iac.sarif'
43
+
isar-1.34.5/Makefile ADDED
@@ -0,0 +1,23 @@
1
+ run:
2
+ isar-start
3
+
4
+ test:
5
+ ENVIRONMENT=local ISAR_ENV=test pytest .
6
+
7
+ format:
8
+ isort .
9
+ black .
10
+ ruff check . --fix
11
+
12
+ check:
13
+ mypy .
14
+
15
+ run-debug: # debug logs
16
+ API_LOG_LEVEL=DEBUG \
17
+ MAIN_LOG_LEVEL=DEBUG \
18
+ MQTT_LOG_LEVEL=DEBUG \
19
+ STATE_MACHINE_LOG_LEVEL=DEBUG \
20
+ UPLOADER_LOG_LEVEL=DEBUG \
21
+ CONSOLE_LOG_LEVEL=DEBUG \
22
+ ISAR_DEBUG_LOG_FORMATTER=True \
23
+ isar-start
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: isar
3
- Version: 1.30.5
3
+ Version: 1.34.5
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
@@ -110,12 +110,9 @@ Requires-Dist: backoff
110
110
  Requires-Dist: click
111
111
  Requires-Dist: dacite
112
112
  Requires-Dist: fastapi-azure-auth
113
- Requires-Dist: fastapi
113
+ Requires-Dist: fastapi>=0.121.0
114
114
  Requires-Dist: dependency-injector
115
115
  Requires-Dist: numpy
116
- Requires-Dist: opencensus-ext-azure
117
- Requires-Dist: opencensus-ext-logging
118
- Requires-Dist: opencensus-ext-requests
119
116
  Requires-Dist: paho-mqtt
120
117
  Requires-Dist: pydantic_settings
121
118
  Requires-Dist: pydantic
@@ -124,8 +121,17 @@ Requires-Dist: python-dotenv
124
121
  Requires-Dist: PyYAML
125
122
  Requires-Dist: requests-toolbelt
126
123
  Requires-Dist: requests
124
+ Requires-Dist: starlette>=0.49.1
127
125
  Requires-Dist: transitions
128
126
  Requires-Dist: uvicorn
127
+ Requires-Dist: opentelemetry-api
128
+ Requires-Dist: opentelemetry-sdk
129
+ Requires-Dist: opentelemetry-exporter-otlp
130
+ Requires-Dist: opentelemetry-instrumentation-fastapi
131
+ Requires-Dist: azure-monitor-opentelemetry
132
+ Requires-Dist: azure-monitor-opentelemetry-exporter>=1.0.0b38
133
+ Requires-Dist: pymysql
134
+ Requires-Dist: sqlalchemy
129
135
  Provides-Extra: dev
130
136
  Requires-Dist: black; extra == "dev"
131
137
  Requires-Dist: isort; extra == "dev"
@@ -137,6 +143,7 @@ Requires-Dist: pytest-xdist; extra == "dev"
137
143
  Requires-Dist: pytest; extra == "dev"
138
144
  Requires-Dist: requests-mock; extra == "dev"
139
145
  Requires-Dist: ruff; extra == "dev"
146
+ Requires-Dist: testcontainers[mysql]; extra == "dev"
140
147
  Dynamic: license-file
141
148
 
142
149
  # ISAR
@@ -230,6 +237,15 @@ ISAR_ROBOT_PACKAGE = isar_turtlebot
230
237
  ISAR_DEFAULT_MAP = turtleworld
231
238
  ```
232
239
 
240
+ ### Run with make
241
+ Common commands for the project are in [Makefile](./Makefile).
242
+ This requires the CLI program `make`.
243
+
244
+ Usage:
245
+ ```bash
246
+ make <command-in-makefile> # for example: make run
247
+ ```
248
+
233
249
  ### Run ISAR server
234
250
 
235
251
  To run ISAR:
@@ -366,7 +382,7 @@ States.Paused,
366
382
  indicates that the state machine is already running. For running a mission the state machine need to be in the states
367
383
 
368
384
  ```
369
- States.Home, States.RobotStandingStill, States.AwaitNextMission or States.ReturningHome
385
+ States.Home, States.AwaitNextMission or States.ReturningHome
370
386
  ```
371
387
 
372
388
  ### FastAPI
@@ -399,68 +415,6 @@ You can create your own storage module by implementing the [storage interface](.
399
415
  and adding your storage module to the selection [here](./src/isar/modules.py). Note that you must add your module as an
400
416
  option in the dictionary.
401
417
 
402
- ## Task selection
403
-
404
- The tasks of a mission are selected based on a task selector module, defined by the `TASK_SELECTOR` configuration variable. The default task selector is `sequential`. When using the default module, tasks are executed in sequential order defined by the current input mission.
405
-
406
- ### Implement you own task selector module
407
-
408
- Custom task selector modules may be added by implementing additional versions of the [task selector interface](./src/isar/mission_planner/task_selector_interface.py).
409
-
410
- For every custom module, the interface function `next_task()` must be implemented. All interface implementations by default have access to the list of tasks in the current mission through the member `self.tasks`, however additional variables may be supplied by adding arguments to `next_task()`. To comply with the interface definition, the function should return the next task upon every call, and raise the `TaskSelectorStop` exception when all tasks in the current mission have been completed:
411
-
412
- ```python
413
- class CustomTaskSelector(TaskSelectorInterface):
414
- ...
415
- def next_task(...) -> Task:
416
-
417
- # Add code here
418
- ...
419
-
420
- # Raise `TaskSelectorStop` when all tasks have been completed
421
- ...
422
- ```
423
-
424
- Optionally, the `initialize()` function may be extended by supplementing the parameter list or function body:
425
-
426
- ```python
427
- class CustomTaskSelector(TaskSelectorInterface):
428
- ...
429
- def initialize(self, tasks: List[Task], ...) -> None:
430
- super.initialize(tasks=tasks)
431
-
432
- # Add supplementary code here
433
- ...
434
- ```
435
-
436
- A custom task selector may be made available during [module selection](./src/isar/modules.py) by adding it to the series of options in the dictionary of injector modules. It can then be activated by overriding the task selector configuration variable:
437
-
438
- ```python
439
- # Add custom task selector module to `modules.py`
440
-
441
- class CustomTaskSelectorModule(Module):
442
- @provider
443
- @singleton
444
- def provide_task_selector(self) -> TaskSelectorInterface:
445
- return CustomTaskSelector()
446
-
447
- ...
448
-
449
- # Make it available to select during injector instantiation
450
-
451
- modules: dict[str, tuple[Module, Union[str, bool]]] = {
452
- ...
453
- "task_selector": (
454
- {
455
- "sequential": SequentialTaskSelectorModule,
456
- "custom": CustomTaskSelectorModule
457
- }
458
- ...
459
- )
460
- ...
461
- }
462
- ```
463
-
464
418
  ## API authentication
465
419
 
466
420
  The API has an option to include user authentication. This can be enabled by setting the environment variable
@@ -477,6 +431,7 @@ Enabling API authentication also requires the same environment variables. The re
477
431
  AZURE_CLIENT_ID
478
432
  AZURE_TENANT_ID
479
433
  AZURE_CLIENT_SECRET
434
+ ISAR_BLOB_STORAGE_ACCOUNT
480
435
  ```
481
436
 
482
437
  ## MQTT communication
@@ -89,6 +89,15 @@ ISAR_ROBOT_PACKAGE = isar_turtlebot
89
89
  ISAR_DEFAULT_MAP = turtleworld
90
90
  ```
91
91
 
92
+ ### Run with make
93
+ Common commands for the project are in [Makefile](./Makefile).
94
+ This requires the CLI program `make`.
95
+
96
+ Usage:
97
+ ```bash
98
+ make <command-in-makefile> # for example: make run
99
+ ```
100
+
92
101
  ### Run ISAR server
93
102
 
94
103
  To run ISAR:
@@ -225,7 +234,7 @@ States.Paused,
225
234
  indicates that the state machine is already running. For running a mission the state machine need to be in the states
226
235
 
227
236
  ```
228
- States.Home, States.RobotStandingStill, States.AwaitNextMission or States.ReturningHome
237
+ States.Home, States.AwaitNextMission or States.ReturningHome
229
238
  ```
230
239
 
231
240
  ### FastAPI
@@ -258,68 +267,6 @@ You can create your own storage module by implementing the [storage interface](.
258
267
  and adding your storage module to the selection [here](./src/isar/modules.py). Note that you must add your module as an
259
268
  option in the dictionary.
260
269
 
261
- ## Task selection
262
-
263
- The tasks of a mission are selected based on a task selector module, defined by the `TASK_SELECTOR` configuration variable. The default task selector is `sequential`. When using the default module, tasks are executed in sequential order defined by the current input mission.
264
-
265
- ### Implement you own task selector module
266
-
267
- Custom task selector modules may be added by implementing additional versions of the [task selector interface](./src/isar/mission_planner/task_selector_interface.py).
268
-
269
- For every custom module, the interface function `next_task()` must be implemented. All interface implementations by default have access to the list of tasks in the current mission through the member `self.tasks`, however additional variables may be supplied by adding arguments to `next_task()`. To comply with the interface definition, the function should return the next task upon every call, and raise the `TaskSelectorStop` exception when all tasks in the current mission have been completed:
270
-
271
- ```python
272
- class CustomTaskSelector(TaskSelectorInterface):
273
- ...
274
- def next_task(...) -> Task:
275
-
276
- # Add code here
277
- ...
278
-
279
- # Raise `TaskSelectorStop` when all tasks have been completed
280
- ...
281
- ```
282
-
283
- Optionally, the `initialize()` function may be extended by supplementing the parameter list or function body:
284
-
285
- ```python
286
- class CustomTaskSelector(TaskSelectorInterface):
287
- ...
288
- def initialize(self, tasks: List[Task], ...) -> None:
289
- super.initialize(tasks=tasks)
290
-
291
- # Add supplementary code here
292
- ...
293
- ```
294
-
295
- A custom task selector may be made available during [module selection](./src/isar/modules.py) by adding it to the series of options in the dictionary of injector modules. It can then be activated by overriding the task selector configuration variable:
296
-
297
- ```python
298
- # Add custom task selector module to `modules.py`
299
-
300
- class CustomTaskSelectorModule(Module):
301
- @provider
302
- @singleton
303
- def provide_task_selector(self) -> TaskSelectorInterface:
304
- return CustomTaskSelector()
305
-
306
- ...
307
-
308
- # Make it available to select during injector instantiation
309
-
310
- modules: dict[str, tuple[Module, Union[str, bool]]] = {
311
- ...
312
- "task_selector": (
313
- {
314
- "sequential": SequentialTaskSelectorModule,
315
- "custom": CustomTaskSelectorModule
316
- }
317
- ...
318
- )
319
- ...
320
- }
321
- ```
322
-
323
270
  ## API authentication
324
271
 
325
272
  The API has an option to include user authentication. This can be enabled by setting the environment variable
@@ -336,6 +283,7 @@ Enabling API authentication also requires the same environment variables. The re
336
283
  AZURE_CLIENT_ID
337
284
  AZURE_TENANT_ID
338
285
  AZURE_CLIENT_SECRET
286
+ ISAR_BLOB_STORAGE_ACCOUNT
339
287
  ```
340
288
 
341
289
  ## MQTT communication
@@ -13,9 +13,59 @@ from isar.state_machine.transitions.return_home import get_return_home_transitio
13
13
  from isar.state_machine.transitions.robot_status import get_robot_status_transitions
14
14
 
15
15
 
16
+ def extract_function_name_from_callable(func):
17
+ try:
18
+ closure = getattr(func, "__closure__", None)
19
+ if closure:
20
+ for cell in closure:
21
+ obj = cell.cell_contents
22
+ if callable(obj):
23
+ return getattr(obj, "__name__", str(obj))
24
+
25
+ return getattr(func, "__name__", str(func))
26
+ except Exception:
27
+ return "unknown"
28
+
29
+
30
+ def embed_conditions_in_trigger(transitions: List[dict]) -> List[dict]:
31
+ updated = []
32
+ for t in transitions:
33
+ trigger = t.get("trigger", "")
34
+ conditions = t.get("conditions", [])
35
+
36
+ if not isinstance(conditions, list):
37
+ conditions = [conditions]
38
+
39
+ condition_names = []
40
+
41
+ for cond in conditions:
42
+ name = extract_function_name_from_callable(cond)
43
+ condition_names.append(name)
44
+
45
+ befores = t.get("before", [])
46
+ if not isinstance(befores, list):
47
+ befores = [befores]
48
+ before_names = [extract_function_name_from_callable(b) for b in befores]
49
+
50
+ label_parts = [trigger]
51
+ if condition_names:
52
+ label_parts.append(f"[{'; '.join(condition_names)}]")
53
+ if before_names:
54
+ label_parts.append(f"/ {'; '.join(before_names)}")
55
+
56
+ new_trigger = " ".join(label_parts)
57
+
58
+ t_copy = t.copy()
59
+ t_copy["trigger"] = new_trigger
60
+ updated.append(t_copy)
61
+
62
+ return updated
63
+
64
+
16
65
  def draw_diagram(states: List[State], transitions: List[dict], name: str):
66
+ transitions_with_conditions = embed_conditions_in_trigger(transitions)
17
67
  machine = GraphMachine(states=states, initial="unknown_status", queued=True)
18
- machine.add_transitions(transitions)
68
+ machine.add_transitions(transitions_with_conditions)
19
69
  gp = machine.get_combined_graph()
20
70
 
21
71
  state_machine_diagram_file = (
@@ -25,12 +75,12 @@ def draw_diagram(states: List[State], transitions: List[dict], name: str):
25
75
  if os.path.isfile(state_machine_diagram_file):
26
76
  os.remove(state_machine_diagram_file)
27
77
 
28
- gp.draw(state_machine_diagram_file, prog="dot")
78
+ gp.draw(str(state_machine_diagram_file), prog="dot", format="png")
29
79
 
30
80
 
31
81
  if __name__ == "__main__":
32
82
  injector: Injector = get_injector()
33
- state_machine: StateMachine = injector.get(StateMachine)
83
+ state_machine: StateMachine = injector.state_machine()
34
84
 
35
85
  mission_extended_transitions: List[dict] = []
36
86
  for transition in get_mission_transitions(state_machine):
@@ -33,12 +33,9 @@ dependencies = [
33
33
  "click",
34
34
  "dacite",
35
35
  "fastapi-azure-auth",
36
- "fastapi",
36
+ "fastapi>=0.121.0",
37
37
  "dependency-injector",
38
38
  "numpy",
39
- "opencensus-ext-azure",
40
- "opencensus-ext-logging",
41
- "opencensus-ext-requests",
42
39
  "paho-mqtt",
43
40
  "pydantic_settings",
44
41
  "pydantic",
@@ -47,8 +44,17 @@ dependencies = [
47
44
  "PyYAML",
48
45
  "requests-toolbelt",
49
46
  "requests",
47
+ "starlette>=0.49.1",
50
48
  "transitions",
51
49
  "uvicorn",
50
+ "opentelemetry-api",
51
+ "opentelemetry-sdk",
52
+ "opentelemetry-exporter-otlp",
53
+ "opentelemetry-instrumentation-fastapi",
54
+ "azure-monitor-opentelemetry",
55
+ "azure-monitor-opentelemetry-exporter>=1.0.0b38",
56
+ "pymysql",
57
+ "sqlalchemy"
52
58
  ]
53
59
  dynamic = ["version"]
54
60
 
@@ -70,6 +76,7 @@ dev = [
70
76
  "pytest",
71
77
  "requests-mock",
72
78
  "ruff",
79
+ "testcontainers[mysql]",
73
80
  ]
74
81
 
75
82
  [tool.setuptools_scm]