isar 1.27.2__tar.gz → 1.28.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 (220) hide show
  1. {isar-1.27.2 → isar-1.28.1}/PKG-INFO +1 -1
  2. {isar-1.27.2 → isar-1.28.1}/requirements.txt +12 -12
  3. {isar-1.27.2 → isar-1.28.1}/src/isar/apis/models/start_mission_definition.py +7 -8
  4. {isar-1.27.2 → isar-1.28.1}/src/isar/apis/schedule/scheduling_controller.py +56 -24
  5. {isar-1.27.2 → isar-1.28.1}/src/isar/config/predefined_mission_definition/default_exr.json +0 -2
  6. {isar-1.27.2 → isar-1.28.1}/src/isar/config/predefined_mission_definition/default_mission.json +1 -5
  7. {isar-1.27.2 → isar-1.28.1}/src/isar/config/predefined_mission_definition/default_turtlebot.json +4 -11
  8. {isar-1.27.2 → isar-1.28.1}/src/isar/robot/robot.py +16 -11
  9. {isar-1.27.2 → isar-1.28.1}/src/isar/robot/robot_start_mission.py +7 -1
  10. {isar-1.27.2 → isar-1.28.1}/src/isar/storage/slimm_storage.py +6 -10
  11. {isar-1.27.2 → isar-1.28.1}/src/isar/storage/uploader.py +4 -2
  12. {isar-1.27.2 → isar-1.28.1}/src/isar/storage/utilities.py +9 -10
  13. {isar-1.27.2 → isar-1.28.1}/src/isar.egg-info/PKG-INFO +1 -1
  14. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/models/inspection/inspection.py +1 -2
  15. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/models/mission/task.py +1 -1
  16. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/telemetry/payloads.py +3 -1
  17. {isar-1.27.2 → isar-1.28.1}/.dockerignore +0 -0
  18. {isar-1.27.2 → isar-1.28.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {isar-1.27.2 → isar-1.28.1}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  20. {isar-1.27.2 → isar-1.28.1}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
  21. {isar-1.27.2 → isar-1.28.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  22. {isar-1.27.2 → isar-1.28.1}/.github/release.yml +0 -0
  23. {isar-1.27.2 → isar-1.28.1}/.github/workflows/compile_requirements.yml +0 -0
  24. {isar-1.27.2 → isar-1.28.1}/.github/workflows/project_automations.yml +0 -0
  25. {isar-1.27.2 → isar-1.28.1}/.github/workflows/pythonpackage.yml +0 -0
  26. {isar-1.27.2 → isar-1.28.1}/.github/workflows/pythonpublish.yml +0 -0
  27. {isar-1.27.2 → isar-1.28.1}/.github/workflows/stale.yml +0 -0
  28. {isar-1.27.2 → isar-1.28.1}/.gitignore +0 -0
  29. {isar-1.27.2 → isar-1.28.1}/.pre-commit-config.yaml +0 -0
  30. {isar-1.27.2 → isar-1.28.1}/LICENSE +0 -0
  31. {isar-1.27.2 → isar-1.28.1}/README.md +0 -0
  32. {isar-1.27.2 → isar-1.28.1}/SECURITY.md +0 -0
  33. {isar-1.27.2 → isar-1.28.1}/docs/Makefile +0 -0
  34. {isar-1.27.2 → isar-1.28.1}/docs/full_state_machine_diagram.png +0 -0
  35. {isar-1.27.2 → isar-1.28.1}/docs/make.bat +0 -0
  36. {isar-1.27.2 → isar-1.28.1}/docs/mission_state_machine_diagram.png +0 -0
  37. {isar-1.27.2 → isar-1.28.1}/docs/robot_status_state_machine_diagram.png +0 -0
  38. {isar-1.27.2 → isar-1.28.1}/docs/rst_processing.py +0 -0
  39. {isar-1.27.2 → isar-1.28.1}/docs/source/conf.py +0 -0
  40. {isar-1.27.2 → isar-1.28.1}/docs/source/index.rst +0 -0
  41. {isar-1.27.2 → isar-1.28.1}/docs/source/readme_link.md +0 -0
  42. {isar-1.27.2 → isar-1.28.1}/docs/update_state_diagram.py +0 -0
  43. {isar-1.27.2 → isar-1.28.1}/main.py +0 -0
  44. {isar-1.27.2 → isar-1.28.1}/pyproject.toml +0 -0
  45. {isar-1.27.2 → isar-1.28.1}/radixconfig.yml +0 -0
  46. {isar-1.27.2 → isar-1.28.1}/setup.cfg +0 -0
  47. {isar-1.27.2 → isar-1.28.1}/src/isar/__init__.py +0 -0
  48. {isar-1.27.2 → isar-1.28.1}/src/isar/apis/__init__.py +0 -0
  49. {isar-1.27.2 → isar-1.28.1}/src/isar/apis/api.py +0 -0
  50. {isar-1.27.2 → isar-1.28.1}/src/isar/apis/models/__init__.py +0 -0
  51. {isar-1.27.2 → isar-1.28.1}/src/isar/apis/models/models.py +0 -0
  52. {isar-1.27.2 → isar-1.28.1}/src/isar/apis/robot_control/robot_controller.py +0 -0
  53. {isar-1.27.2 → isar-1.28.1}/src/isar/apis/schedule/__init__.py +0 -0
  54. {isar-1.27.2 → isar-1.28.1}/src/isar/apis/security/__init__.py +0 -0
  55. {isar-1.27.2 → isar-1.28.1}/src/isar/apis/security/authentication.py +0 -0
  56. {isar-1.27.2 → isar-1.28.1}/src/isar/config/__init__.py +0 -0
  57. {isar-1.27.2 → isar-1.28.1}/src/isar/config/certs/ca-cert.pem +0 -0
  58. {isar-1.27.2 → isar-1.28.1}/src/isar/config/configuration_error.py +0 -0
  59. {isar-1.27.2 → isar-1.28.1}/src/isar/config/keyvault/__init__.py +0 -0
  60. {isar-1.27.2 → isar-1.28.1}/src/isar/config/keyvault/keyvault_error.py +0 -0
  61. {isar-1.27.2 → isar-1.28.1}/src/isar/config/keyvault/keyvault_service.py +0 -0
  62. {isar-1.27.2 → isar-1.28.1}/src/isar/config/log.py +0 -0
  63. {isar-1.27.2 → isar-1.28.1}/src/isar/config/logging.conf +0 -0
  64. {isar-1.27.2 → isar-1.28.1}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
  65. {isar-1.27.2 → isar-1.28.1}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
  66. {isar-1.27.2 → isar-1.28.1}/src/isar/config/maps/default_map.json +0 -0
  67. {isar-1.27.2 → isar-1.28.1}/src/isar/config/maps/klab_b.json +0 -0
  68. {isar-1.27.2 → isar-1.28.1}/src/isar/config/maps/klab_compressor.json +0 -0
  69. {isar-1.27.2 → isar-1.28.1}/src/isar/config/maps/klab_turtlebot.json +0 -0
  70. {isar-1.27.2 → isar-1.28.1}/src/isar/config/maps/turtleworld.json +0 -0
  71. {isar-1.27.2 → isar-1.28.1}/src/isar/config/predefined_mission_definition/__init__.py +0 -0
  72. {isar-1.27.2 → isar-1.28.1}/src/isar/config/predefined_missions/__init__.py +0 -0
  73. {isar-1.27.2 → isar-1.28.1}/src/isar/config/predefined_missions/default.json +0 -0
  74. {isar-1.27.2 → isar-1.28.1}/src/isar/config/predefined_missions/default_turtlebot.json +0 -0
  75. {isar-1.27.2 → isar-1.28.1}/src/isar/config/settings.env +0 -0
  76. {isar-1.27.2 → isar-1.28.1}/src/isar/config/settings.py +0 -0
  77. {isar-1.27.2 → isar-1.28.1}/src/isar/mission_planner/__init__.py +0 -0
  78. {isar-1.27.2 → isar-1.28.1}/src/isar/mission_planner/local_planner.py +0 -0
  79. {isar-1.27.2 → isar-1.28.1}/src/isar/mission_planner/mission_planner_interface.py +0 -0
  80. {isar-1.27.2 → isar-1.28.1}/src/isar/mission_planner/sequential_task_selector.py +0 -0
  81. {isar-1.27.2 → isar-1.28.1}/src/isar/mission_planner/task_selector_interface.py +0 -0
  82. {isar-1.27.2 → isar-1.28.1}/src/isar/models/__init__.py +0 -0
  83. {isar-1.27.2 → isar-1.28.1}/src/isar/models/communication/__init__.py +0 -0
  84. {isar-1.27.2 → isar-1.28.1}/src/isar/models/communication/message.py +0 -0
  85. {isar-1.27.2 → isar-1.28.1}/src/isar/models/communication/queues/__init__.py +0 -0
  86. {isar-1.27.2 → isar-1.28.1}/src/isar/models/communication/queues/events.py +0 -0
  87. {isar-1.27.2 → isar-1.28.1}/src/isar/models/communication/queues/queue_io.py +0 -0
  88. {isar-1.27.2 → isar-1.28.1}/src/isar/models/communication/queues/queue_timeout_error.py +0 -0
  89. {isar-1.27.2 → isar-1.28.1}/src/isar/models/communication/queues/queue_utils.py +0 -0
  90. {isar-1.27.2 → isar-1.28.1}/src/isar/models/communication/queues/status_queue.py +0 -0
  91. {isar-1.27.2 → isar-1.28.1}/src/isar/models/mission_metadata/__init__.py +0 -0
  92. {isar-1.27.2 → isar-1.28.1}/src/isar/modules.py +0 -0
  93. {isar-1.27.2 → isar-1.28.1}/src/isar/robot/robot_status.py +0 -0
  94. {isar-1.27.2 → isar-1.28.1}/src/isar/robot/robot_stop_mission.py +0 -0
  95. {isar-1.27.2 → isar-1.28.1}/src/isar/robot/robot_task_status.py +0 -0
  96. {isar-1.27.2 → isar-1.28.1}/src/isar/script.py +0 -0
  97. {isar-1.27.2 → isar-1.28.1}/src/isar/services/__init__.py +0 -0
  98. {isar-1.27.2 → isar-1.28.1}/src/isar/services/auth/__init__.py +0 -0
  99. {isar-1.27.2 → isar-1.28.1}/src/isar/services/auth/azure_credentials.py +0 -0
  100. {isar-1.27.2 → isar-1.28.1}/src/isar/services/service_connections/__init__.py +0 -0
  101. {isar-1.27.2 → isar-1.28.1}/src/isar/services/service_connections/mqtt/__init__.py +0 -0
  102. {isar-1.27.2 → isar-1.28.1}/src/isar/services/service_connections/mqtt/mqtt_client.py +0 -0
  103. {isar-1.27.2 → isar-1.28.1}/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +0 -0
  104. {isar-1.27.2 → isar-1.28.1}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +0 -0
  105. {isar-1.27.2 → isar-1.28.1}/src/isar/services/service_connections/request_handler.py +0 -0
  106. {isar-1.27.2 → isar-1.28.1}/src/isar/services/service_connections/stid/__init__.py +0 -0
  107. {isar-1.27.2 → isar-1.28.1}/src/isar/services/utilities/__init__.py +0 -0
  108. {isar-1.27.2 → isar-1.28.1}/src/isar/services/utilities/queue_utilities.py +0 -0
  109. {isar-1.27.2 → isar-1.28.1}/src/isar/services/utilities/robot_utilities.py +0 -0
  110. {isar-1.27.2 → isar-1.28.1}/src/isar/services/utilities/scheduling_utilities.py +0 -0
  111. {isar-1.27.2 → isar-1.28.1}/src/isar/services/utilities/threaded_request.py +0 -0
  112. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/__init__.py +0 -0
  113. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/state_machine.py +0 -0
  114. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/states/__init__.py +0 -0
  115. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/states/await_next_mission.py +0 -0
  116. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/states/blocked_protective_stop.py +0 -0
  117. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/states/home.py +0 -0
  118. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/states/monitor.py +0 -0
  119. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/states/offline.py +0 -0
  120. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/states/paused.py +0 -0
  121. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/states/returning_home.py +0 -0
  122. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/states/robot_standing_still.py +0 -0
  123. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/states/stopping.py +0 -0
  124. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/states/unknown_status.py +0 -0
  125. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/states_enum.py +0 -0
  126. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/transitions/functions/fail_mission.py +0 -0
  127. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/transitions/functions/finish_mission.py +0 -0
  128. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/transitions/functions/pause.py +0 -0
  129. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/transitions/functions/resume.py +0 -0
  130. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/transitions/functions/return_home.py +0 -0
  131. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/transitions/functions/robot_status.py +0 -0
  132. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/transitions/functions/start_mission.py +0 -0
  133. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/transitions/functions/stop.py +0 -0
  134. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/transitions/functions/utils.py +0 -0
  135. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/transitions/mission.py +0 -0
  136. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/transitions/return_home.py +0 -0
  137. {isar-1.27.2 → isar-1.28.1}/src/isar/state_machine/transitions/robot_status.py +0 -0
  138. {isar-1.27.2 → isar-1.28.1}/src/isar/storage/__init__.py +0 -0
  139. {isar-1.27.2 → isar-1.28.1}/src/isar/storage/blob_storage.py +0 -0
  140. {isar-1.27.2 → isar-1.28.1}/src/isar/storage/local_storage.py +0 -0
  141. {isar-1.27.2 → isar-1.28.1}/src/isar/storage/storage_interface.py +0 -0
  142. {isar-1.27.2 → isar-1.28.1}/src/isar.egg-info/SOURCES.txt +0 -0
  143. {isar-1.27.2 → isar-1.28.1}/src/isar.egg-info/dependency_links.txt +0 -0
  144. {isar-1.27.2 → isar-1.28.1}/src/isar.egg-info/entry_points.txt +0 -0
  145. {isar-1.27.2 → isar-1.28.1}/src/isar.egg-info/requires.txt +0 -0
  146. {isar-1.27.2 → isar-1.28.1}/src/isar.egg-info/top_level.txt +0 -0
  147. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/__init__.py +0 -0
  148. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/models/__init__.py +0 -0
  149. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/models/exceptions/__init__.py +0 -0
  150. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/models/exceptions/robot_exceptions.py +0 -0
  151. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/models/initialize/__init__.py +0 -0
  152. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/models/inspection/__init__.py +0 -0
  153. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/models/mission/__init__.py +0 -0
  154. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/models/mission/mission.py +0 -0
  155. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/models/mission/status.py +0 -0
  156. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/models/robots/__init__.py +0 -0
  157. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/models/robots/battery_state.py +0 -0
  158. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/models/robots/media.py +0 -0
  159. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/models/robots/robot_model.py +0 -0
  160. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/robot_interface.py +0 -0
  161. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/telemetry/__init__.py +0 -0
  162. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/telemetry/mqtt_client.py +0 -0
  163. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/test_robot_interface.py +0 -0
  164. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/utilities/__init__.py +0 -0
  165. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/utilities/json_service.py +0 -0
  166. {isar-1.27.2 → isar-1.28.1}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
  167. {isar-1.27.2 → isar-1.28.1}/tests/__init__.py +0 -0
  168. {isar-1.27.2 → isar-1.28.1}/tests/conftest.py +0 -0
  169. {isar-1.27.2 → isar-1.28.1}/tests/integration/__init__.py +0 -0
  170. {isar-1.27.2 → isar-1.28.1}/tests/integration/turtlebot/__init__.py +0 -0
  171. {isar-1.27.2 → isar-1.28.1}/tests/integration/turtlebot/config/__init__.py +0 -0
  172. {isar-1.27.2 → isar-1.28.1}/tests/integration/turtlebot/config/maps/__init__.py +0 -0
  173. {isar-1.27.2 → isar-1.28.1}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
  174. {isar-1.27.2 → isar-1.28.1}/tests/integration/turtlebot/config/missions/__init__.py +0 -0
  175. {isar-1.27.2 → isar-1.28.1}/tests/integration/turtlebot/config/missions/default.json +0 -0
  176. {isar-1.27.2 → isar-1.28.1}/tests/integration/turtlebot/test_successful_mission.py +0 -0
  177. {isar-1.27.2 → isar-1.28.1}/tests/isar/__init__.py +0 -0
  178. {isar-1.27.2 → isar-1.28.1}/tests/isar/apis/__init__.py +0 -0
  179. {isar-1.27.2 → isar-1.28.1}/tests/isar/apis/models/__init__.py +0 -0
  180. {isar-1.27.2 → isar-1.28.1}/tests/isar/apis/models/example_mission_definition.json +0 -0
  181. {isar-1.27.2 → isar-1.28.1}/tests/isar/apis/models/test_start_mission_definition.py +0 -0
  182. {isar-1.27.2 → isar-1.28.1}/tests/isar/apis/scheduler/__init__.py +0 -0
  183. {isar-1.27.2 → isar-1.28.1}/tests/isar/apis/scheduler/test_scheduler_router.py +0 -0
  184. {isar-1.27.2 → isar-1.28.1}/tests/isar/apis/security/__init__.py +0 -0
  185. {isar-1.27.2 → isar-1.28.1}/tests/isar/apis/security/test_authentication.py +0 -0
  186. {isar-1.27.2 → isar-1.28.1}/tests/isar/mission/__init__.py +0 -0
  187. {isar-1.27.2 → isar-1.28.1}/tests/isar/mission/test_mission.py +0 -0
  188. {isar-1.27.2 → isar-1.28.1}/tests/isar/models/__init__.py +0 -0
  189. {isar-1.27.2 → isar-1.28.1}/tests/isar/models/communication/__init__.py +0 -0
  190. {isar-1.27.2 → isar-1.28.1}/tests/isar/models/communication/test_queues.py +0 -0
  191. {isar-1.27.2 → isar-1.28.1}/tests/isar/services/__init__.py +0 -0
  192. {isar-1.27.2 → isar-1.28.1}/tests/isar/services/readers/__init__.py +0 -0
  193. {isar-1.27.2 → isar-1.28.1}/tests/isar/services/readers/test_mission_reader.py +0 -0
  194. {isar-1.27.2 → isar-1.28.1}/tests/isar/services/service_connections/__init__.py +0 -0
  195. {isar-1.27.2 → isar-1.28.1}/tests/isar/services/service_connections/echo/__init__.py +0 -0
  196. {isar-1.27.2 → isar-1.28.1}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
  197. {isar-1.27.2 → isar-1.28.1}/tests/isar/services/utilities/__init__.py +0 -0
  198. {isar-1.27.2 → isar-1.28.1}/tests/isar/services/utilities/test_queue_utilities.py +0 -0
  199. {isar-1.27.2 → isar-1.28.1}/tests/isar/services/utilities/test_scheduling_utilities.py +0 -0
  200. {isar-1.27.2 → isar-1.28.1}/tests/isar/state_machine/__init__.py +0 -0
  201. {isar-1.27.2 → isar-1.28.1}/tests/isar/state_machine/states/__init__.py +0 -0
  202. {isar-1.27.2 → isar-1.28.1}/tests/isar/state_machine/states/test_monitor.py +0 -0
  203. {isar-1.27.2 → isar-1.28.1}/tests/isar/state_machine/test_state_machine.py +0 -0
  204. {isar-1.27.2 → isar-1.28.1}/tests/isar/storage/test_blob_storage.py +0 -0
  205. {isar-1.27.2 → isar-1.28.1}/tests/isar/storage/test_uploader.py +0 -0
  206. {isar-1.27.2 → isar-1.28.1}/tests/mocks/__init__.py +0 -0
  207. {isar-1.27.2 → isar-1.28.1}/tests/mocks/blob_storage.py +0 -0
  208. {isar-1.27.2 → isar-1.28.1}/tests/mocks/mission_definition.py +0 -0
  209. {isar-1.27.2 → isar-1.28.1}/tests/mocks/mqtt_client.py +0 -0
  210. {isar-1.27.2 → isar-1.28.1}/tests/mocks/pose.py +0 -0
  211. {isar-1.27.2 → isar-1.28.1}/tests/mocks/request.py +0 -0
  212. {isar-1.27.2 → isar-1.28.1}/tests/mocks/robot_interface.py +0 -0
  213. {isar-1.27.2 → isar-1.28.1}/tests/mocks/status.py +0 -0
  214. {isar-1.27.2 → isar-1.28.1}/tests/mocks/task.py +0 -0
  215. {isar-1.27.2 → isar-1.28.1}/tests/mocks/token.py +0 -0
  216. {isar-1.27.2 → isar-1.28.1}/tests/test_data/test_map_config/test_map_config.json +0 -0
  217. {isar-1.27.2 → isar-1.28.1}/tests/test_data/test_mission_not_working.json +0 -0
  218. {isar-1.27.2 → isar-1.28.1}/tests/test_data/test_mission_working.json +0 -0
  219. {isar-1.27.2 → isar-1.28.1}/tests/test_data/test_mission_working_no_tasks.json +0 -0
  220. {isar-1.27.2 → isar-1.28.1}/tests/test_data/test_thermal_image_mission.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: isar
3
- Version: 1.27.2
3
+ Version: 1.28.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
@@ -12,13 +12,13 @@ anyio==4.9.0
12
12
  # via
13
13
  # httpx
14
14
  # starlette
15
- azure-core==1.33.0
15
+ azure-core==1.34.0
16
16
  # via
17
17
  # azure-identity
18
18
  # azure-keyvault-secrets
19
19
  # azure-storage-blob
20
20
  # opencensus-ext-azure
21
- azure-identity==1.21.0
21
+ azure-identity==1.23.0
22
22
  # via
23
23
  # isar (pyproject.toml)
24
24
  # opencensus-ext-azure
@@ -30,20 +30,20 @@ backoff==2.2.1
30
30
  # via isar (pyproject.toml)
31
31
  cachetools==5.5.2
32
32
  # via google-auth
33
- certifi==2025.1.31
33
+ certifi==2025.4.26
34
34
  # via
35
35
  # httpcore
36
36
  # httpx
37
37
  # requests
38
38
  cffi==1.17.1
39
39
  # via cryptography
40
- charset-normalizer==3.4.1
40
+ charset-normalizer==3.4.2
41
41
  # via requests
42
- click==8.1.8
42
+ click==8.2.0
43
43
  # via
44
44
  # isar (pyproject.toml)
45
45
  # uvicorn
46
- cryptography==44.0.2
46
+ cryptography==44.0.3
47
47
  # via
48
48
  # azure-identity
49
49
  # azure-storage-blob
@@ -64,7 +64,7 @@ fastapi-azure-auth==5.1.1
64
64
  # via isar (pyproject.toml)
65
65
  google-api-core==2.24.2
66
66
  # via opencensus
67
- google-auth==2.39.0
67
+ google-auth==2.40.1
68
68
  # via google-api-core
69
69
  googleapis-common-protos==1.70.0
70
70
  # via google-api-core
@@ -85,7 +85,7 @@ isodate==0.7.2
85
85
  # via
86
86
  # azure-keyvault-secrets
87
87
  # azure-storage-blob
88
- msal==1.32.2
88
+ msal==1.32.3
89
89
  # via
90
90
  # azure-identity
91
91
  # msal-extensions
@@ -113,7 +113,7 @@ paho-mqtt==2.1.0
113
113
  # via isar (pyproject.toml)
114
114
  proto-plus==1.26.1
115
115
  # via google-api-core
116
- protobuf==6.30.2
116
+ protobuf==6.31.0
117
117
  # via
118
118
  # google-api-core
119
119
  # googleapis-common-protos
@@ -128,12 +128,12 @@ pyasn1-modules==0.4.2
128
128
  # via google-auth
129
129
  pycparser==2.22
130
130
  # via cffi
131
- pydantic==2.11.3
131
+ pydantic==2.11.4
132
132
  # via
133
133
  # fastapi
134
134
  # isar (pyproject.toml)
135
135
  # pydantic-settings
136
- pydantic-core==2.33.1
136
+ pydantic-core==2.33.2
137
137
  # via pydantic
138
138
  pydantic-settings==2.9.1
139
139
  # via isar (pyproject.toml)
@@ -161,7 +161,7 @@ requests-toolbelt==1.0.0
161
161
  # via isar (pyproject.toml)
162
162
  rsa==4.9.1
163
163
  # via google-auth
164
- scipy==1.15.2
164
+ scipy==1.15.3
165
165
  # via alitra
166
166
  six==1.17.0
167
167
  # via
@@ -39,9 +39,8 @@ class TaskType(str, Enum):
39
39
  class StartMissionInspectionDefinition(BaseModel):
40
40
  type: InspectionTypes = Field(default=InspectionTypes.image)
41
41
  inspection_target: InputPosition
42
- analysis_type: Optional[str] = None
42
+ inspection_description: Optional[str] = None
43
43
  duration: Optional[float] = None
44
- metadata: Optional[dict] = None
45
44
 
46
45
 
47
46
  class StartMissionTaskDefinition(BaseModel):
@@ -107,8 +106,8 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
107
106
  id=task_definition.id if task_definition.id else uuid4_string(),
108
107
  robot_pose=task_definition.pose.to_alitra_pose(),
109
108
  tag_id=task_definition.tag,
109
+ inspection_description=task_definition.inspection.inspection_description,
110
110
  target=task_definition.inspection.inspection_target.to_alitra_position(),
111
- metadata=task_definition.inspection.metadata,
112
111
  zoom=task_definition.zoom,
113
112
  )
114
113
  elif inspection_definition.type == InspectionTypes.video:
@@ -116,9 +115,9 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
116
115
  id=task_definition.id if task_definition.id else uuid4_string(),
117
116
  robot_pose=task_definition.pose.to_alitra_pose(),
118
117
  tag_id=task_definition.tag,
118
+ inspection_description=task_definition.inspection.inspection_description,
119
119
  target=task_definition.inspection.inspection_target.to_alitra_position(),
120
120
  duration=inspection_definition.duration,
121
- metadata=task_definition.inspection.metadata,
122
121
  zoom=task_definition.zoom,
123
122
  )
124
123
  elif inspection_definition.type == InspectionTypes.thermal_image:
@@ -126,8 +125,8 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
126
125
  id=task_definition.id if task_definition.id else uuid4_string(),
127
126
  robot_pose=task_definition.pose.to_alitra_pose(),
128
127
  tag_id=task_definition.tag,
128
+ inspection_description=task_definition.inspection.inspection_description,
129
129
  target=task_definition.inspection.inspection_target.to_alitra_position(),
130
- metadata=task_definition.inspection.metadata,
131
130
  zoom=task_definition.zoom,
132
131
  )
133
132
  elif inspection_definition.type == InspectionTypes.thermal_video:
@@ -135,9 +134,9 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
135
134
  id=task_definition.id if task_definition.id else uuid4_string(),
136
135
  robot_pose=task_definition.pose.to_alitra_pose(),
137
136
  tag_id=task_definition.tag,
137
+ inspection_description=task_definition.inspection.inspection_description,
138
138
  target=task_definition.inspection.inspection_target.to_alitra_position(),
139
139
  duration=inspection_definition.duration,
140
- metadata=task_definition.inspection.metadata,
141
140
  zoom=task_definition.zoom,
142
141
  )
143
142
  elif inspection_definition.type == InspectionTypes.audio:
@@ -145,16 +144,16 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
145
144
  id=task_definition.id if task_definition.id else uuid4_string(),
146
145
  robot_pose=task_definition.pose.to_alitra_pose(),
147
146
  tag_id=task_definition.tag,
147
+ inspection_description=task_definition.inspection.inspection_description,
148
148
  target=task_definition.inspection.inspection_target.to_alitra_position(),
149
149
  duration=inspection_definition.duration,
150
- metadata=task_definition.inspection.metadata,
151
150
  )
152
151
  elif inspection_definition.type == InspectionTypes.gas_measurement:
153
152
  return TakeGasMeasurement(
154
153
  id=task_definition.id if task_definition.id else uuid4_string(),
155
154
  robot_pose=task_definition.pose.to_alitra_pose(),
156
155
  tag_id=task_definition.tag,
157
- metadata=task_definition.inspection.metadata,
156
+ inspection_description=task_definition.inspection.inspection_description,
158
157
  )
159
158
  else:
160
159
  raise ValueError(
@@ -1,5 +1,6 @@
1
1
  import logging
2
2
  from http import HTTPStatus
3
+ from threading import Lock
3
4
 
4
5
  from dependency_injector.wiring import inject
5
6
  from fastapi import Body, HTTPException, Path
@@ -29,6 +30,7 @@ class SchedulingController:
29
30
  ):
30
31
  self.scheduling_utilities: SchedulingUtilities = scheduling_utilities
31
32
  self.logger = logging.getLogger("api")
33
+ self.start_mission_lock: Lock = Lock()
32
34
 
33
35
  def start_mission_by_id(
34
36
  self,
@@ -67,46 +69,76 @@ class SchedulingController:
67
69
  self.logger.info("Received request to start new mission")
68
70
 
69
71
  if not mission_definition:
70
- error_message: str = (
72
+ error_message_no_mission_definition: str = (
71
73
  "Unprocessable entity - 'mission_definition' empty or invalid"
72
74
  )
73
- self.logger.error(error_message)
75
+ self.logger.error(error_message_no_mission_definition)
74
76
  raise HTTPException(
75
- status_code=HTTPStatus.UNPROCESSABLE_ENTITY, detail=error_message
77
+ status_code=HTTPStatus.UNPROCESSABLE_ENTITY,
78
+ detail=error_message_no_mission_definition,
76
79
  )
77
80
 
78
- state: States = self.scheduling_utilities.get_state()
79
- self.scheduling_utilities.verify_state_machine_ready_to_receive_mission(state)
81
+ if not self.start_mission_lock.acquire(blocking=False):
82
+ error_message_another_mission_starting: str = (
83
+ "Conflict - Another mission is currently being started"
84
+ )
85
+ self.logger.warning(error_message_another_mission_starting)
86
+ raise HTTPException(
87
+ status_code=HTTPStatus.CONFLICT,
88
+ detail=error_message_another_mission_starting,
89
+ )
80
90
 
81
91
  try:
82
- mission: Mission = to_isar_mission(
83
- start_mission_definition=mission_definition
92
+ state: States = self.scheduling_utilities.get_state()
93
+ self.scheduling_utilities.verify_state_machine_ready_to_receive_mission(
94
+ state
84
95
  )
85
- except MissionPlannerError as e:
86
- error_message = f"Bad Request - Cannot create ISAR mission: {e}"
87
- self.logger.warning(error_message)
88
- raise HTTPException(
89
- status_code=HTTPStatus.BAD_REQUEST,
90
- detail=error_message,
96
+
97
+ try:
98
+ mission: Mission = to_isar_mission(
99
+ start_mission_definition=mission_definition
100
+ )
101
+ except MissionPlannerError as e:
102
+ error_message = f"Bad Request - Cannot create ISAR mission: {e}"
103
+ self.logger.warning(error_message)
104
+ raise HTTPException(
105
+ status_code=HTTPStatus.BAD_REQUEST,
106
+ detail=error_message,
107
+ )
108
+
109
+ self.scheduling_utilities.verify_robot_capable_of_mission(
110
+ mission=mission, robot_capabilities=robot_settings.CAPABILITIES
91
111
  )
92
112
 
93
- self.scheduling_utilities.verify_robot_capable_of_mission(
94
- mission=mission, robot_capabilities=robot_settings.CAPABILITIES
95
- )
113
+ self.logger.info("Starting mission: %s", mission.id)
114
+ self.scheduling_utilities.start_mission(mission=mission)
115
+ return self._api_response(mission)
96
116
 
97
- self.logger.info("Starting mission: %s", mission.id)
98
- self.scheduling_utilities.start_mission(mission=mission)
99
- return self._api_response(mission)
117
+ finally:
118
+ self.start_mission_lock.release()
100
119
 
101
120
  def return_home(self) -> None:
102
121
  self.logger.info("Received request to return home")
103
122
 
104
- state: States = self.scheduling_utilities.get_state()
105
- self.scheduling_utilities.verify_state_machine_ready_to_receive_return_home_mission(
106
- state
107
- )
123
+ if not self.start_mission_lock.acquire(blocking=False):
124
+ error_message_another_mission_starting: str = (
125
+ "Conflict - Another mission is currently being started"
126
+ )
127
+ self.logger.warning(error_message_another_mission_starting)
128
+ raise HTTPException(
129
+ status_code=HTTPStatus.CONFLICT,
130
+ detail=error_message_another_mission_starting,
131
+ )
132
+
133
+ try:
134
+ state: States = self.scheduling_utilities.get_state()
135
+ self.scheduling_utilities.verify_state_machine_ready_to_receive_return_home_mission(
136
+ state
137
+ )
108
138
 
109
- self.scheduling_utilities.return_home()
139
+ self.scheduling_utilities.return_home()
140
+ finally:
141
+ self.start_mission_lock.release()
110
142
 
111
143
  def pause_mission(self) -> ControlMissionResponse:
112
144
  self.logger.info("Received request to pause current mission")
@@ -28,7 +28,6 @@
28
28
  "z": 0.6145,
29
29
  "frame_name": "robot"
30
30
  },
31
- "analysis_types": "CarSeal, Rust",
32
31
  "metadata": {
33
32
  "zoom": "2x"
34
33
  }
@@ -41,7 +40,6 @@
41
40
  "z": 0.6145,
42
41
  "frame_name": "robot"
43
42
  },
44
- "analysis_types": "GasDetection",
45
43
  "duration": 10
46
44
  }
47
45
  ]
@@ -28,7 +28,6 @@
28
28
  "z": 0,
29
29
  "frame_name": "robot"
30
30
  },
31
- "analysis_types": "CarSeal, Rust",
32
31
  "metadata": {
33
32
  "zoom": "2x"
34
33
  }
@@ -41,8 +40,6 @@
41
40
  "z": 0,
42
41
  "frame_name": "robot"
43
42
  },
44
- "analysis_types": "GasDetection"
45
- ,
46
43
  "duration": 10
47
44
  }
48
45
  ]
@@ -72,8 +69,7 @@
72
69
  "y": 0,
73
70
  "z": 0,
74
71
  "frame_name": "robot"
75
- },
76
- "analysis_types": "ColdSpot,HotSpot"
72
+ }
77
73
  },
78
74
  {
79
75
  "type": "Video",
@@ -28,8 +28,6 @@
28
28
  "z": 0,
29
29
  "frame": "robot"
30
30
  },
31
- "analysis_types": "CarSeal, Rust"
32
- ,
33
31
  "metadata": {
34
32
  "zoom": "2x"
35
33
  }
@@ -41,8 +39,7 @@
41
39
  "y": 4.9,
42
40
  "z": 0,
43
41
  "frame": "robot"
44
- },
45
- "analysis_types": "GasDetection"
42
+ }
46
43
  }
47
44
  ]
48
45
  },
@@ -72,9 +69,7 @@
72
69
  "y": 5.2,
73
70
  "z": 0,
74
71
  "frame": "robot"
75
- },
76
- "analysis_types": "ColdSpot, HotSpot"
77
-
72
+ }
78
73
  }
79
74
  ]
80
75
  },
@@ -104,8 +99,7 @@
104
99
  "y": 5.2,
105
100
  "z": 0,
106
101
  "frame": "robot"
107
- },
108
- "analysis_types": "ColdSpot, HotSpot"
102
+ }
109
103
  },
110
104
  {
111
105
  "type": "ThermalImage",
@@ -114,8 +108,7 @@
114
108
  "y": 1.9,
115
109
  "z": 0,
116
110
  "frame": "robot"
117
- },
118
- "analysis_types": "ColdSpot, HotSpot"
111
+ }
119
112
  }
120
113
  ]
121
114
  }
@@ -33,7 +33,7 @@ class Robot(object):
33
33
  self.start_mission_thread: Optional[RobotStartMissionThread] = None
34
34
  self.robot_status_thread: Optional[RobotStatusThread] = None
35
35
  self.robot_task_status_thread: Optional[RobotTaskStatusThread] = None
36
- self.stop_mission_thread_thread: Optional[RobotStopMissionThread] = None
36
+ self.stop_mission_thread: Optional[RobotStopMissionThread] = None
37
37
  self.signal_thread_quitting: Event = Event()
38
38
 
39
39
  def stop(self) -> None:
@@ -42,19 +42,16 @@ class Robot(object):
42
42
  self.robot_status_thread.join()
43
43
  if (
44
44
  self.robot_task_status_thread is not None
45
- and self.robot_status_thread.is_alive()
45
+ and self.robot_task_status_thread.is_alive()
46
46
  ):
47
47
  self.robot_task_status_thread.join()
48
48
  if (
49
49
  self.start_mission_thread is not None
50
- and self.robot_status_thread.is_alive()
50
+ and self.start_mission_thread.is_alive()
51
51
  ):
52
52
  self.start_mission_thread.join()
53
- if (
54
- self.stop_mission_thread_thread is not None
55
- and self.stop_mission_thread_thread.is_alive()
56
- ):
57
- self.stop_mission_thread_thread.join()
53
+ if self.stop_mission_thread is not None and self.stop_mission_thread.is_alive():
54
+ self.stop_mission_thread.join()
58
55
  self.robot_status_thread = None
59
56
  self.robot_task_status_thread = None
60
57
  self.start_mission_thread = None
@@ -92,7 +89,15 @@ class Robot(object):
92
89
  def _check_and_handle_stop_mission(self, event: Queue) -> None:
93
90
  if check_for_event(event):
94
91
  if (
95
- self.stop_mission_thread_thread is not None
92
+ self.stop_mission_thread is not None
93
+ and self.stop_mission_thread.is_alive()
94
+ ):
95
+ self.logger.warning(
96
+ "Received stop mission event while trying to stop a mission. Aborting stop attempt."
97
+ )
98
+ return
99
+ if (
100
+ self.start_mission_thread is not None
96
101
  and self.start_mission_thread.is_alive()
97
102
  ):
98
103
  error_description = "Received stop mission event while trying to start a mission. Aborting stop attempt."
@@ -104,10 +109,10 @@ class Robot(object):
104
109
  self.robot_service_events.mission_failed_to_stop, error_message
105
110
  )
106
111
  return
107
- self.stop_mission_thread_thread = RobotStopMissionThread(
112
+ self.stop_mission_thread = RobotStopMissionThread(
108
113
  self.robot_service_events, self.robot, self.signal_thread_quitting
109
114
  )
110
- self.stop_mission_thread_thread.start()
115
+ self.stop_mission_thread.start()
111
116
 
112
117
  def run(self) -> None:
113
118
  self.robot_status_thread = RobotStatusThread(
@@ -61,6 +61,10 @@ class RobotStartMissionThread(Thread):
61
61
  error_description=error_description,
62
62
  ),
63
63
  )
64
+ break
65
+
66
+ continue
67
+
64
68
  started_mission = True
65
69
  except RobotInfeasibleMissionException as e:
66
70
  trigger_event(
@@ -69,4 +73,6 @@ class RobotStartMissionThread(Thread):
69
73
  error_reason=e.error_reason, error_description=e.error_description
70
74
  ),
71
75
  )
72
- trigger_event_without_data(self.robot_service_events.mission_started)
76
+
77
+ if started_mission:
78
+ trigger_event_without_data(self.robot_service_events.mission_started)
@@ -125,13 +125,11 @@ class SlimmStorage(StorageInterface):
125
125
  "ImageMetadata.CameraOrientation2": str(array_of_orientation[1]),
126
126
  "ImageMetadata.CameraOrientation3": str(array_of_orientation[2]),
127
127
  "ImageMetadata.CameraOrientation4": str(array_of_orientation[3]),
128
- "ImageMetadata.AnalysisMethods": (
129
- inspection.metadata.additional["analysis_type"]
130
- if inspection.metadata.additional
131
- and inspection.metadata.additional["analysis_type"]
128
+ "ImageMetadata.Description": (
129
+ inspection.metadata.inspection_description
130
+ if inspection.metadata.inspection_description
132
131
  else "N/A"
133
132
  ),
134
- "ImageMetadata.Description": str(inspection.metadata.additional),
135
133
  "ImageMetadata.FunctionalLocation": (
136
134
  inspection.metadata.tag_id # noqa: E501
137
135
  if inspection.metadata.tag_id
@@ -175,13 +173,11 @@ class SlimmStorage(StorageInterface):
175
173
  "VideoMetadata.CameraOrientation2": str(array_of_orientation[1]),
176
174
  "VideoMetadata.CameraOrientation3": str(array_of_orientation[2]),
177
175
  "VideoMetadata.CameraOrientation4": str(array_of_orientation[3]),
178
- "VideoMetadata.AnalysisMethods": (
179
- inspection.metadata.additional["analysis_type"]
180
- if inspection.metadata.additional
181
- and inspection.metadata.additional["analysis_type"]
176
+ "VideoMetadata.Description": (
177
+ inspection.metadata.inspection_description
178
+ if inspection.metadata.inspection_description
182
179
  else "N/A"
183
180
  ),
184
- "VideoMetadata.Description": str(inspection.metadata.additional),
185
181
  "VideoMetadata.FunctionalLocation": (
186
182
  inspection.metadata.tag_id # noqa: E501
187
183
  if inspection.metadata.tag_id
@@ -163,8 +163,10 @@ class Uploader:
163
163
  inspection_id=inspection.id,
164
164
  inspection_path=inspection_path,
165
165
  installation_code=settings.PLANT_SHORT_NAME,
166
- analysis_to_be_run=inspection.metadata.analysis_type,
167
- timestamp=datetime.now(timezone.utc),
166
+ tag_id=inspection.metadata.tag_id,
167
+ inspection_type=type(inspection).__name__,
168
+ inspection_description=inspection.metadata.inspection_description,
169
+ timestamp=inspection.metadata.start_time,
168
170
  )
169
171
  self.mqtt_publisher.publish(
170
172
  topic=settings.TOPIC_ISAR_INSPECTION_RESULT,
@@ -1,5 +1,4 @@
1
1
  import json
2
- import time
3
2
  from datetime import datetime, timezone
4
3
  from pathlib import Path
5
4
  from typing import Tuple
@@ -41,11 +40,7 @@ def construct_metadata_file(
41
40
  "plant_name": settings.PLANT_NAME,
42
41
  "isar_id": settings.ISAR_ID,
43
42
  "robot_name": settings.ROBOT_NAME,
44
- "analysis_type": (
45
- inspection.metadata.additional["analysis_type"]
46
- if inspection.metadata.additional
47
- else "N/A"
48
- ),
43
+ "inspection_description": inspection.metadata.inspection_description,
49
44
  },
50
45
  "data": [
51
46
  {
@@ -71,12 +66,16 @@ def construct_metadata_file(
71
66
 
72
67
 
73
68
  def get_filename(inspection: Inspection) -> str:
74
- inspection_type: str = type(inspection).__name__
69
+ utc_time: str = datetime.now(timezone.utc).strftime("%Y%m%d-%H%M%S")
75
70
  tag: str = inspection.metadata.tag_id if inspection.metadata.tag_id else "no-tag"
76
- epoch_time: int = int(time.time())
77
- return f"{tag}__{inspection_type}__{epoch_time}"
71
+ inspection_type: str = type(inspection).__name__
72
+ inspection_description: str = inspection.metadata.inspection_description.replace(
73
+ " ", "-"
74
+ )
75
+ return f"{tag}__{inspection_type}__{inspection_description}__{utc_time}"
78
76
 
79
77
 
80
78
  def get_foldername(mission: Mission) -> str:
79
+ utc_date: str = datetime.now(timezone.utc).strftime("%Y-%m-%d")
81
80
  mission_name: str = mission.name.replace(" ", "-")
82
- return f"{datetime.now(timezone.utc).date()}__{settings.PLANT_SHORT_NAME}__{mission_name}__{mission.id}"
81
+ return f"{utc_date}__{settings.PLANT_SHORT_NAME}__{mission_name}__{mission.id}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: isar
3
- Version: 1.27.2
3
+ Version: 1.28.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
@@ -12,9 +12,8 @@ class InspectionMetadata(ABC):
12
12
  start_time: datetime
13
13
  pose: Pose
14
14
  file_type: str
15
- analysis_type: Optional[str] = field(default=None, init=False)
16
15
  tag_id: Optional[str] = field(default=None, init=False)
17
- additional: Optional[dict] = field(default_factory=dict, init=False)
16
+ inspection_description: Optional[str] = field(default=None, init=False)
18
17
 
19
18
 
20
19
  @dataclass
@@ -61,7 +61,7 @@ class InspectionTask(Task):
61
61
 
62
62
  inspection_id: str = Field(default_factory=uuid4_string, frozen=True)
63
63
  robot_pose: Pose = Field(default=None, init=True)
64
- metadata: Optional[dict] = Field(default_factory=dict)
64
+ inspection_description: Optional[str] = Field(default=None)
65
65
  zoom: Optional[ZoomDescription] = Field(default=None)
66
66
 
67
67
  @staticmethod
@@ -111,5 +111,7 @@ class InspectionResultPayload:
111
111
  inspection_id: str
112
112
  inspection_path: Union[str, dict]
113
113
  installation_code: str
114
- analysis_to_be_run: Optional[str]
114
+ tag_id: Optional[str]
115
+ inspection_type: Optional[str]
116
+ inspection_description: Optional[str]
115
117
  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