isar 1.14.4__tar.gz → 1.15.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (204) hide show
  1. {isar-1.14.4 → isar-1.15.0}/PKG-INFO +2 -2
  2. {isar-1.14.4 → isar-1.15.0}/README.md +1 -1
  3. {isar-1.14.4 → isar-1.15.0}/src/isar/apis/models/start_mission_definition.py +17 -2
  4. {isar-1.14.4 → isar-1.15.0}/src/isar/apis/schedule/scheduling_controller.py +9 -11
  5. {isar-1.14.4 → isar-1.15.0}/src/isar/config/predefined_mission_definition/default_mission.json +4 -11
  6. {isar-1.14.4 → isar-1.15.0}/src/isar/config/predefined_mission_definition/default_turtlebot.json +7 -19
  7. {isar-1.14.4 → isar-1.15.0}/src/isar/models/communication/message.py +0 -2
  8. {isar-1.14.4 → isar-1.15.0}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +1 -0
  9. {isar-1.14.4 → isar-1.15.0}/src/isar/services/utilities/scheduling_utilities.py +0 -3
  10. {isar-1.14.4 → isar-1.15.0}/src/isar/state_machine/state_machine.py +1 -6
  11. {isar-1.14.4 → isar-1.15.0}/src/isar/state_machine/states/idle.py +0 -1
  12. {isar-1.14.4 → isar-1.15.0}/src/isar/state_machine/states/monitor.py +4 -7
  13. {isar-1.14.4 → isar-1.15.0}/src/isar/storage/blob_storage.py +8 -8
  14. {isar-1.14.4 → isar-1.15.0}/src/isar/storage/local_storage.py +6 -6
  15. {isar-1.14.4 → isar-1.15.0}/src/isar/storage/slimm_storage.py +39 -36
  16. {isar-1.14.4 → isar-1.15.0}/src/isar/storage/storage_interface.py +4 -4
  17. {isar-1.14.4 → isar-1.15.0}/src/isar/storage/uploader.py +6 -6
  18. isar-1.15.0/src/isar/storage/utilities.py +78 -0
  19. {isar-1.14.4 → isar-1.15.0}/src/isar.egg-info/PKG-INFO +2 -2
  20. {isar-1.14.4 → isar-1.15.0}/src/isar.egg-info/SOURCES.txt +0 -1
  21. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/models/inspection/inspection.py +1 -1
  22. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/models/mission/mission.py +1 -0
  23. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/models/mission/step.py +1 -1
  24. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/telemetry/mqtt_client.py +2 -4
  25. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/telemetry/payloads.py +1 -0
  26. {isar-1.14.4 → isar-1.15.0}/tests/isar/mission/test_mission.py +1 -1
  27. {isar-1.14.4 → isar-1.15.0}/tests/isar/services/readers/test_mission_reader.py +0 -4
  28. {isar-1.14.4 → isar-1.15.0}/tests/isar/state_machine/test_state_machine.py +12 -29
  29. {isar-1.14.4 → isar-1.15.0}/tests/isar/storage/test_uploader.py +8 -12
  30. {isar-1.14.4 → isar-1.15.0}/tests/mocks/blob_storage.py +2 -2
  31. {isar-1.14.4 → isar-1.15.0}/tests/mocks/mission_definition.py +3 -3
  32. isar-1.14.4/src/isar/models/mission_metadata/mission_metadata.py +0 -26
  33. isar-1.14.4/src/isar/storage/utilities.py +0 -74
  34. {isar-1.14.4 → isar-1.15.0}/.dockerignore +0 -0
  35. {isar-1.14.4 → isar-1.15.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  36. {isar-1.14.4 → isar-1.15.0}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  37. {isar-1.14.4 → isar-1.15.0}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
  38. {isar-1.14.4 → isar-1.15.0}/.github/release.yml +0 -0
  39. {isar-1.14.4 → isar-1.15.0}/.github/workflows/project_automations.yml +0 -0
  40. {isar-1.14.4 → isar-1.15.0}/.github/workflows/publish_isar_base_image.yml +0 -0
  41. {isar-1.14.4 → isar-1.15.0}/.github/workflows/pythonpackage.yml +0 -0
  42. {isar-1.14.4 → isar-1.15.0}/.github/workflows/pythonpublish.yml +0 -0
  43. {isar-1.14.4 → isar-1.15.0}/.github/workflows/repository_dispatch_on_merge.yml +0 -0
  44. {isar-1.14.4 → isar-1.15.0}/.github/workflows/stale.yml +0 -0
  45. {isar-1.14.4 → isar-1.15.0}/.gitignore +0 -0
  46. {isar-1.14.4 → isar-1.15.0}/.pre-commit-config.yaml +0 -0
  47. {isar-1.14.4 → isar-1.15.0}/Dockerfile +0 -0
  48. {isar-1.14.4 → isar-1.15.0}/LICENSE +0 -0
  49. {isar-1.14.4 → isar-1.15.0}/docker-compose-turtlebot.yml +0 -0
  50. {isar-1.14.4 → isar-1.15.0}/docker-compose.yml +0 -0
  51. {isar-1.14.4 → isar-1.15.0}/docs/Makefile +0 -0
  52. {isar-1.14.4 → isar-1.15.0}/docs/make.bat +0 -0
  53. {isar-1.14.4 → isar-1.15.0}/docs/rst_processing.py +0 -0
  54. {isar-1.14.4 → isar-1.15.0}/docs/source/conf.py +0 -0
  55. {isar-1.14.4 → isar-1.15.0}/docs/source/index.rst +0 -0
  56. {isar-1.14.4 → isar-1.15.0}/docs/source/readme_link.md +0 -0
  57. {isar-1.14.4 → isar-1.15.0}/docs/state_machine_diagram.png +0 -0
  58. {isar-1.14.4 → isar-1.15.0}/main.py +0 -0
  59. {isar-1.14.4 → isar-1.15.0}/pyproject.toml +0 -0
  60. {isar-1.14.4 → isar-1.15.0}/radixconfig.yml +0 -0
  61. {isar-1.14.4 → isar-1.15.0}/setup.cfg +0 -0
  62. {isar-1.14.4 → isar-1.15.0}/setup.py +0 -0
  63. {isar-1.14.4 → isar-1.15.0}/src/isar/__init__.py +0 -0
  64. {isar-1.14.4 → isar-1.15.0}/src/isar/apis/__init__.py +0 -0
  65. {isar-1.14.4 → isar-1.15.0}/src/isar/apis/api.py +0 -0
  66. {isar-1.14.4 → isar-1.15.0}/src/isar/apis/models/__init__.py +0 -0
  67. {isar-1.14.4 → isar-1.15.0}/src/isar/apis/models/models.py +0 -0
  68. {isar-1.14.4 → isar-1.15.0}/src/isar/apis/schedule/__init__.py +0 -0
  69. {isar-1.14.4 → isar-1.15.0}/src/isar/apis/security/__init__.py +0 -0
  70. {isar-1.14.4 → isar-1.15.0}/src/isar/apis/security/authentication.py +0 -0
  71. {isar-1.14.4 → isar-1.15.0}/src/isar/config/__init__.py +0 -0
  72. {isar-1.14.4 → isar-1.15.0}/src/isar/config/certs/ca-cert.pem +0 -0
  73. {isar-1.14.4 → isar-1.15.0}/src/isar/config/configuration_error.py +0 -0
  74. {isar-1.14.4 → isar-1.15.0}/src/isar/config/keyvault/__init__.py +0 -0
  75. {isar-1.14.4 → isar-1.15.0}/src/isar/config/keyvault/keyvault_error.py +0 -0
  76. {isar-1.14.4 → isar-1.15.0}/src/isar/config/keyvault/keyvault_service.py +0 -0
  77. {isar-1.14.4 → isar-1.15.0}/src/isar/config/log.py +0 -0
  78. {isar-1.14.4 → isar-1.15.0}/src/isar/config/logging.conf +0 -0
  79. {isar-1.14.4 → isar-1.15.0}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
  80. {isar-1.14.4 → isar-1.15.0}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
  81. {isar-1.14.4 → isar-1.15.0}/src/isar/config/maps/default_map.json +0 -0
  82. {isar-1.14.4 → isar-1.15.0}/src/isar/config/maps/klab_b.json +0 -0
  83. {isar-1.14.4 → isar-1.15.0}/src/isar/config/maps/klab_compressor.json +0 -0
  84. {isar-1.14.4 → isar-1.15.0}/src/isar/config/maps/klab_turtlebot.json +0 -0
  85. {isar-1.14.4 → isar-1.15.0}/src/isar/config/maps/turtleworld.json +0 -0
  86. {isar-1.14.4 → isar-1.15.0}/src/isar/config/predefined_mission_definition/__init__.py +0 -0
  87. {isar-1.14.4 → isar-1.15.0}/src/isar/config/predefined_missions/__init__.py +0 -0
  88. {isar-1.14.4 → isar-1.15.0}/src/isar/config/predefined_missions/default.json +0 -0
  89. {isar-1.14.4 → isar-1.15.0}/src/isar/config/predefined_missions/default_turtlebot.json +0 -0
  90. {isar-1.14.4 → isar-1.15.0}/src/isar/config/predefined_poses/__init__.py +0 -0
  91. {isar-1.14.4 → isar-1.15.0}/src/isar/config/predefined_poses/predefined_poses.py +0 -0
  92. {isar-1.14.4 → isar-1.15.0}/src/isar/config/settings.env +0 -0
  93. {isar-1.14.4 → isar-1.15.0}/src/isar/config/settings.py +0 -0
  94. {isar-1.14.4 → isar-1.15.0}/src/isar/mission_planner/__init__.py +0 -0
  95. {isar-1.14.4 → isar-1.15.0}/src/isar/mission_planner/local_planner.py +0 -0
  96. {isar-1.14.4 → isar-1.15.0}/src/isar/mission_planner/mission_planner_interface.py +0 -0
  97. {isar-1.14.4 → isar-1.15.0}/src/isar/mission_planner/sequential_task_selector.py +0 -0
  98. {isar-1.14.4 → isar-1.15.0}/src/isar/mission_planner/task_selector_interface.py +0 -0
  99. {isar-1.14.4 → isar-1.15.0}/src/isar/models/__init__.py +0 -0
  100. {isar-1.14.4 → isar-1.15.0}/src/isar/models/communication/__init__.py +0 -0
  101. {isar-1.14.4 → isar-1.15.0}/src/isar/models/communication/queues/__init__.py +0 -0
  102. {isar-1.14.4 → isar-1.15.0}/src/isar/models/communication/queues/queue_io.py +0 -0
  103. {isar-1.14.4 → isar-1.15.0}/src/isar/models/communication/queues/queue_timeout_error.py +0 -0
  104. {isar-1.14.4 → isar-1.15.0}/src/isar/models/communication/queues/queues.py +0 -0
  105. {isar-1.14.4 → isar-1.15.0}/src/isar/models/communication/queues/status_queue.py +0 -0
  106. {isar-1.14.4 → isar-1.15.0}/src/isar/models/mission_metadata/__init__.py +0 -0
  107. {isar-1.14.4 → isar-1.15.0}/src/isar/modules.py +0 -0
  108. {isar-1.14.4 → isar-1.15.0}/src/isar/services/__init__.py +0 -0
  109. {isar-1.14.4 → isar-1.15.0}/src/isar/services/auth/__init__.py +0 -0
  110. {isar-1.14.4 → isar-1.15.0}/src/isar/services/auth/azure_credentials.py +0 -0
  111. {isar-1.14.4 → isar-1.15.0}/src/isar/services/readers/__init__.py +0 -0
  112. {isar-1.14.4 → isar-1.15.0}/src/isar/services/readers/base_reader.py +0 -0
  113. {isar-1.14.4 → isar-1.15.0}/src/isar/services/service_connections/__init__.py +0 -0
  114. {isar-1.14.4 → isar-1.15.0}/src/isar/services/service_connections/mqtt/__init__.py +0 -0
  115. {isar-1.14.4 → isar-1.15.0}/src/isar/services/service_connections/mqtt/mqtt_client.py +0 -0
  116. {isar-1.14.4 → isar-1.15.0}/src/isar/services/service_connections/mqtt/robot_status_publisher.py +0 -0
  117. {isar-1.14.4 → isar-1.15.0}/src/isar/services/service_connections/request_handler.py +0 -0
  118. {isar-1.14.4 → isar-1.15.0}/src/isar/services/service_connections/stid/__init__.py +0 -0
  119. {isar-1.14.4 → isar-1.15.0}/src/isar/services/service_connections/stid/stid_service.py +0 -0
  120. {isar-1.14.4 → isar-1.15.0}/src/isar/services/utilities/__init__.py +0 -0
  121. {isar-1.14.4 → isar-1.15.0}/src/isar/services/utilities/queue_utilities.py +0 -0
  122. {isar-1.14.4 → isar-1.15.0}/src/isar/services/utilities/threaded_request.py +0 -0
  123. {isar-1.14.4 → isar-1.15.0}/src/isar/state_machine/__init__.py +0 -0
  124. {isar-1.14.4 → isar-1.15.0}/src/isar/state_machine/states/__init__.py +0 -0
  125. {isar-1.14.4 → isar-1.15.0}/src/isar/state_machine/states/initialize.py +0 -0
  126. {isar-1.14.4 → isar-1.15.0}/src/isar/state_machine/states/initiate.py +0 -0
  127. {isar-1.14.4 → isar-1.15.0}/src/isar/state_machine/states/off.py +0 -0
  128. {isar-1.14.4 → isar-1.15.0}/src/isar/state_machine/states/paused.py +0 -0
  129. {isar-1.14.4 → isar-1.15.0}/src/isar/state_machine/states/stop.py +0 -0
  130. {isar-1.14.4 → isar-1.15.0}/src/isar/state_machine/states_enum.py +0 -0
  131. {isar-1.14.4 → isar-1.15.0}/src/isar/storage/__init__.py +0 -0
  132. {isar-1.14.4 → isar-1.15.0}/src/isar.egg-info/dependency_links.txt +0 -0
  133. {isar-1.14.4 → isar-1.15.0}/src/isar.egg-info/requires.txt +0 -0
  134. {isar-1.14.4 → isar-1.15.0}/src/isar.egg-info/top_level.txt +0 -0
  135. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/__init__.py +0 -0
  136. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/models/__init__.py +0 -0
  137. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/models/exceptions/__init__.py +0 -0
  138. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/models/exceptions/robot_exceptions.py +0 -0
  139. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/models/initialize/__init__.py +0 -0
  140. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/models/initialize/initialize_params.py +0 -0
  141. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/models/inspection/__init__.py +0 -0
  142. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/models/mission/__init__.py +0 -0
  143. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/models/mission/status.py +0 -0
  144. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/models/mission/task.py +0 -0
  145. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/models/robots/__init__.py +0 -0
  146. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/models/robots/robot_model.py +0 -0
  147. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/robot_interface.py +0 -0
  148. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/telemetry/__init__.py +0 -0
  149. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/test_robot_interface.py +0 -0
  150. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/utilities/__init__.py +0 -0
  151. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/utilities/json_service.py +0 -0
  152. {isar-1.14.4 → isar-1.15.0}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
  153. {isar-1.14.4 → isar-1.15.0}/tests/__init__.py +0 -0
  154. {isar-1.14.4 → isar-1.15.0}/tests/conftest.py +0 -0
  155. {isar-1.14.4 → isar-1.15.0}/tests/integration/__init__.py +0 -0
  156. {isar-1.14.4 → isar-1.15.0}/tests/integration/turtlebot/__init__.py +0 -0
  157. {isar-1.14.4 → isar-1.15.0}/tests/integration/turtlebot/config/__init__.py +0 -0
  158. {isar-1.14.4 → isar-1.15.0}/tests/integration/turtlebot/config/maps/__init__.py +0 -0
  159. {isar-1.14.4 → isar-1.15.0}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
  160. {isar-1.14.4 → isar-1.15.0}/tests/integration/turtlebot/config/missions/__init__.py +0 -0
  161. {isar-1.14.4 → isar-1.15.0}/tests/integration/turtlebot/config/missions/default.json +0 -0
  162. {isar-1.14.4 → isar-1.15.0}/tests/integration/turtlebot/test_successful_mission.py +0 -0
  163. {isar-1.14.4 → isar-1.15.0}/tests/isar/__init__.py +0 -0
  164. {isar-1.14.4 → isar-1.15.0}/tests/isar/apis/__init__.py +0 -0
  165. {isar-1.14.4 → isar-1.15.0}/tests/isar/apis/scheduler/__init__.py +0 -0
  166. {isar-1.14.4 → isar-1.15.0}/tests/isar/apis/scheduler/test_scheduler_router.py +0 -0
  167. {isar-1.14.4 → isar-1.15.0}/tests/isar/apis/security/__init__.py +0 -0
  168. {isar-1.14.4 → isar-1.15.0}/tests/isar/apis/security/test_authentication.py +0 -0
  169. {isar-1.14.4 → isar-1.15.0}/tests/isar/mission/__init__.py +0 -0
  170. {isar-1.14.4 → isar-1.15.0}/tests/isar/models/__init__.py +0 -0
  171. {isar-1.14.4 → isar-1.15.0}/tests/isar/models/communication/__init__.py +0 -0
  172. {isar-1.14.4 → isar-1.15.0}/tests/isar/models/communication/test_queues.py +0 -0
  173. {isar-1.14.4 → isar-1.15.0}/tests/isar/models/test_start_mission_definition.py +0 -0
  174. {isar-1.14.4 → isar-1.15.0}/tests/isar/services/__init__.py +0 -0
  175. {isar-1.14.4 → isar-1.15.0}/tests/isar/services/readers/__init__.py +0 -0
  176. {isar-1.14.4 → isar-1.15.0}/tests/isar/services/readers/test_base_reader.py +0 -0
  177. {isar-1.14.4 → isar-1.15.0}/tests/isar/services/service_connections/__init__.py +0 -0
  178. {isar-1.14.4 → isar-1.15.0}/tests/isar/services/service_connections/echo/__init__.py +0 -0
  179. {isar-1.14.4 → isar-1.15.0}/tests/isar/services/service_connections/stid/__init__.py +0 -0
  180. {isar-1.14.4 → isar-1.15.0}/tests/isar/services/service_connections/stid/test_stid_service.py +0 -0
  181. {isar-1.14.4 → isar-1.15.0}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
  182. {isar-1.14.4 → isar-1.15.0}/tests/isar/services/utilities/__init__.py +0 -0
  183. {isar-1.14.4 → isar-1.15.0}/tests/isar/services/utilities/test_queue_utilities.py +0 -0
  184. {isar-1.14.4 → isar-1.15.0}/tests/isar/services/utilities/test_scheduling_utilities.py +0 -0
  185. {isar-1.14.4 → isar-1.15.0}/tests/isar/state_machine/__init__.py +0 -0
  186. {isar-1.14.4 → isar-1.15.0}/tests/isar/state_machine/states/__init__.py +0 -0
  187. {isar-1.14.4 → isar-1.15.0}/tests/isar/state_machine/states/test_monitor.py +0 -0
  188. {isar-1.14.4 → isar-1.15.0}/tests/isar/storage/test_blob_storage.py +0 -0
  189. {isar-1.14.4 → isar-1.15.0}/tests/mocks/__init__.py +0 -0
  190. {isar-1.14.4 → isar-1.15.0}/tests/mocks/mqtt_client.py +0 -0
  191. {isar-1.14.4 → isar-1.15.0}/tests/mocks/pose.py +0 -0
  192. {isar-1.14.4 → isar-1.15.0}/tests/mocks/request.py +0 -0
  193. {isar-1.14.4 → isar-1.15.0}/tests/mocks/robot_interface.py +0 -0
  194. {isar-1.14.4 → isar-1.15.0}/tests/mocks/status.py +0 -0
  195. {isar-1.14.4 → isar-1.15.0}/tests/mocks/step.py +0 -0
  196. {isar-1.14.4 → isar-1.15.0}/tests/mocks/task.py +0 -0
  197. {isar-1.14.4 → isar-1.15.0}/tests/mocks/token.py +0 -0
  198. {isar-1.14.4 → isar-1.15.0}/tests/test_data/test_json_file.json +0 -0
  199. {isar-1.14.4 → isar-1.15.0}/tests/test_data/test_map_config/test_map_config.json +0 -0
  200. {isar-1.14.4 → isar-1.15.0}/tests/test_data/test_mission_not_working.json +0 -0
  201. {isar-1.14.4 → isar-1.15.0}/tests/test_data/test_mission_working.json +0 -0
  202. {isar-1.14.4 → isar-1.15.0}/tests/test_data/test_mission_working_no_tasks.json +0 -0
  203. {isar-1.14.4 → isar-1.15.0}/tests/test_data/test_thermal_image_mission.json +0 -0
  204. {isar-1.14.4 → isar-1.15.0}/tests/test_modules.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: isar
3
- Version: 1.14.4
3
+ Version: 1.15.0
4
4
  Summary: Integration and Supervisory control of Autonomous Robots
5
5
  Home-page: https://github.com/equinor/isar
6
6
  Author: Equinor ASA
@@ -41,7 +41,7 @@ Steps:
41
41
  For local development, please fork the repository. Then, clone and install in the repository root folder:
42
42
 
43
43
  ```
44
- git clone https://github.com/equinor/isar
44
+ git clone https://github.com/<path_to_parent>/isar
45
45
  cd isar
46
46
  pip install -e .[dev]
47
47
  ```
@@ -22,7 +22,7 @@ Steps:
22
22
  For local development, please fork the repository. Then, clone and install in the repository root folder:
23
23
 
24
24
  ```
25
- git clone https://github.com/equinor/isar
25
+ git clone https://github.com/<path_to_parent>/isar
26
26
  cd isar
27
27
  pip install -e .[dev]
28
28
  ```
@@ -1,3 +1,4 @@
1
+ import time
1
2
  from enum import Enum
2
3
  from typing import Any, Dict, List, Optional, Union
3
4
 
@@ -5,6 +6,7 @@ from alitra import Position
5
6
  from pydantic import BaseModel, Field
6
7
 
7
8
  from isar.apis.models.models import InputPose, InputPosition
9
+ from isar.config.settings import settings
8
10
  from isar.mission_planner.mission_planner_interface import MissionPlannerError
9
11
  from robot_interface.models.mission.mission import Mission
10
12
  from robot_interface.models.mission.step import (
@@ -30,7 +32,7 @@ class InspectionTypes(str, Enum):
30
32
  class StartMissionInspectionDefinition(BaseModel):
31
33
  type: InspectionTypes = Field(default=InspectionTypes.image)
32
34
  inspection_target: InputPosition
33
- analysis_types: Optional[List]
35
+ analysis_types: Optional[str]
34
36
  duration: Optional[float]
35
37
  metadata: Optional[dict]
36
38
  id: Optional[str]
@@ -46,6 +48,7 @@ class StartMissionTaskDefinition(BaseModel):
46
48
  class StartMissionDefinition(BaseModel):
47
49
  tasks: List[StartMissionTaskDefinition]
48
50
  id: Optional[str]
51
+ name: Optional[str]
49
52
 
50
53
 
51
54
  def to_isar_mission(mission_definition: StartMissionDefinition) -> Mission:
@@ -101,6 +104,14 @@ def to_isar_mission(mission_definition: StartMissionDefinition) -> Mission:
101
104
 
102
105
  isar_mission: Mission = Mission(tasks=isar_tasks)
103
106
 
107
+ if mission_definition.name:
108
+ isar_mission.name = mission_definition.name
109
+ else:
110
+ isar_mission.name = _build_mission_name()
111
+
112
+ if mission_definition.id:
113
+ isar_mission.id = mission_definition.id
114
+
104
115
  return isar_mission
105
116
 
106
117
 
@@ -108,7 +119,7 @@ def create_inspection_step(
108
119
  inspection_type: InspectionTypes,
109
120
  duration: float,
110
121
  target: Position,
111
- analysis: Optional[List],
122
+ analysis: Optional[str],
112
123
  tag_id: Optional[str],
113
124
  metadata: Optional[dict],
114
125
  id: Optional[str],
@@ -151,3 +162,7 @@ def get_duplicate_ids(items: Union[List[Task], List[STEPS]]) -> List[str]:
151
162
  duplicate_ids.append(id)
152
163
 
153
164
  return duplicate_ids
165
+
166
+
167
+ def _build_mission_name() -> str:
168
+ return f"{settings.PLANT_SHORT_NAME}{settings.ROBOT_NAME}{int(time.time())}"
@@ -18,7 +18,6 @@ from isar.apis.models.start_mission_definition import (
18
18
  )
19
19
  from isar.config.settings import robot_settings, settings
20
20
  from isar.mission_planner.mission_planner_interface import MissionPlannerError
21
- from isar.models.mission_metadata.mission_metadata import MissionMetadata
22
21
  from isar.services.utilities.scheduling_utilities import SchedulingUtilities
23
22
  from isar.state_machine.states_enum import States
24
23
  from robot_interface.models.mission.mission import Mission
@@ -76,10 +75,11 @@ class SchedulingController:
76
75
  )
77
76
 
78
77
  self.logger.info(f"Starting mission with ISAR Mission ID: '{mission.id}'")
79
- metadata: MissionMetadata = MissionMetadata(mission.id)
78
+
80
79
  self.scheduling_utilities.start_mission(
81
- mission=mission, initial_pose=initial_pose_alitra, mission_metadata=metadata
80
+ mission=mission, initial_pose=initial_pose_alitra
82
81
  )
82
+
83
83
  return self._api_response(mission)
84
84
 
85
85
  def start_mission(
@@ -139,10 +139,9 @@ class SchedulingController:
139
139
  initial_pose.to_alitra_pose() if initial_pose else None
140
140
  )
141
141
 
142
- metadata: MissionMetadata = MissionMetadata(mission.id)
143
142
  self.logger.info(f"Starting mission: {mission.id}")
144
143
  self.scheduling_utilities.start_mission(
145
- mission=mission, mission_metadata=metadata, initial_pose=initial_pose_alitra
144
+ mission=mission, initial_pose=initial_pose_alitra
146
145
  )
147
146
  return self._api_response(mission)
148
147
 
@@ -220,13 +219,11 @@ class SchedulingController:
220
219
  pose: Pose = target_pose.to_alitra_pose()
221
220
  step: DriveToPose = DriveToPose(pose=pose)
222
221
  mission: Mission = Mission(tasks=[Task(steps=[step])])
223
- metadata: MissionMetadata = MissionMetadata(mission.id)
222
+
224
223
  self.logger.info(
225
224
  f"Starting drive to mission with ISAR Mission ID: '{mission.id}'"
226
225
  )
227
- self.scheduling_utilities.start_mission(
228
- mission=mission, initial_pose=None, mission_metadata=metadata
229
- )
226
+ self.scheduling_utilities.start_mission(mission=mission, initial_pose=None)
230
227
  return self._api_response(mission)
231
228
 
232
229
  def start_localization_mission(
@@ -247,12 +244,13 @@ class SchedulingController:
247
244
  pose: Pose = localization_pose.to_alitra_pose()
248
245
  step: Localize = Localize(localization_pose=pose)
249
246
  mission: Mission = Mission(tasks=[Task(steps=[step])])
250
- metadata: MissionMetadata = MissionMetadata(mission.id)
247
+
251
248
  self.logger.info(
252
249
  f"Starting localization mission with ISAR Mission ID: '{mission.id}'"
253
250
  )
254
251
  self.scheduling_utilities.start_mission(
255
- mission=mission, initial_pose=None, mission_metadata=metadata
252
+ mission=mission,
253
+ initial_pose=None,
256
254
  )
257
255
  return self._api_response(mission)
258
256
 
@@ -28,10 +28,7 @@
28
28
  "z": 0,
29
29
  "frame_name": "robot"
30
30
  },
31
- "analysis_types": [
32
- "CarSeal",
33
- "Rust"
34
- ],
31
+ "analysis_types": "CarSeal, Rust",
35
32
  "metadata": {
36
33
  "zoom": "2x"
37
34
  }
@@ -44,9 +41,8 @@
44
41
  "z": 0,
45
42
  "frame_name": "robot"
46
43
  },
47
- "analysis_types": [
48
- "GasDetection"
49
- ],
44
+ "analysis_types": "GasDetection"
45
+ ,
50
46
  "duration": 10
51
47
  }
52
48
  ]
@@ -77,10 +73,7 @@
77
73
  "z": 0,
78
74
  "frame_name": "robot"
79
75
  },
80
- "analysis_types": [
81
- "ColdSpot",
82
- "HotSpot"
83
- ]
76
+ "analysis_types": "ColdSpot,HotSpot"
84
77
  },
85
78
  {
86
79
  "type": "Video",
@@ -28,10 +28,8 @@
28
28
  "z": 0,
29
29
  "frame": "robot"
30
30
  },
31
- "analysis_types": [
32
- "CarSeal",
33
- "Rust"
34
- ],
31
+ "analysis_types": "CarSeal, Rust"
32
+ ,
35
33
  "metadata": {
36
34
  "zoom": "2x"
37
35
  }
@@ -44,9 +42,7 @@
44
42
  "z": 0,
45
43
  "frame": "robot"
46
44
  },
47
- "analysis_types": [
48
- "GasDetection"
49
- ]
45
+ "analysis_types": "GasDetection"
50
46
  }
51
47
  ]
52
48
  },
@@ -77,10 +73,8 @@
77
73
  "z": 0,
78
74
  "frame": "robot"
79
75
  },
80
- "analysis_types": [
81
- "ColdSpot",
82
- "HotSpot"
83
- ]
76
+ "analysis_types": "ColdSpot, HotSpot"
77
+
84
78
  }
85
79
  ]
86
80
  },
@@ -111,10 +105,7 @@
111
105
  "z": 0,
112
106
  "frame": "robot"
113
107
  },
114
- "analysis_types": [
115
- "ColdSpot",
116
- "HotSpot"
117
- ]
108
+ "analysis_types": "ColdSpot, HotSpot"
118
109
  },
119
110
  {
120
111
  "type": "ThermalImage",
@@ -124,10 +115,7 @@
124
115
  "z": 0,
125
116
  "frame": "robot"
126
117
  },
127
- "analysis_types": [
128
- "ColdSpot",
129
- "HotSpot"
130
- ]
118
+ "analysis_types": "ColdSpot, HotSpot"
131
119
  }
132
120
  ]
133
121
  }
@@ -3,12 +3,10 @@ from typing import Optional
3
3
 
4
4
  from alitra import Pose
5
5
 
6
- from isar.models.mission_metadata.mission_metadata import MissionMetadata
7
6
  from robot_interface.models.mission.mission import Mission
8
7
 
9
8
 
10
9
  @dataclass
11
10
  class StartMissionMessage:
12
11
  mission: Mission
13
- mission_metadata: MissionMetadata
14
12
  initial_pose: Optional[Pose]
@@ -20,6 +20,7 @@ class RobotInfoPublisher:
20
20
  robot_name=settings.ROBOT_NAME,
21
21
  robot_model=robot_settings.ROBOT_MODEL, # type: ignore
22
22
  robot_serial_number=settings.SERIAL_NUMBER,
23
+ robot_asset=settings.PLANT_SHORT_NAME,
23
24
  video_streams=settings.VIDEO_STREAMS,
24
25
  host=settings.API_HOST_VIEWED_EXTERNALLY,
25
26
  port=settings.API_PORT,
@@ -18,7 +18,6 @@ from isar.mission_planner.mission_planner_interface import (
18
18
  )
19
19
  from isar.models.communication.message import StartMissionMessage
20
20
  from isar.models.communication.queues import QueueIO, Queues, QueueTimeoutError
21
- from isar.models.mission_metadata.mission_metadata import MissionMetadata
22
21
  from isar.services.utilities.queue_utilities import QueueUtilities
23
22
  from isar.state_machine.states_enum import States
24
23
  from robot_interface.models.mission.mission import Mission
@@ -139,7 +138,6 @@ class SchedulingUtilities:
139
138
  def start_mission(
140
139
  self,
141
140
  mission: Mission,
142
- mission_metadata: MissionMetadata,
143
141
  initial_pose: Optional[Pose],
144
142
  ) -> None:
145
143
  """Start mission
@@ -153,7 +151,6 @@ class SchedulingUtilities:
153
151
  self._send_command(
154
152
  StartMissionMessage(
155
153
  mission=deepcopy(mission),
156
- mission_metadata=deepcopy(mission_metadata),
157
154
  initial_pose=initial_pose,
158
155
  ),
159
156
  self.queues.start_mission,
@@ -19,7 +19,6 @@ from isar.mission_planner.task_selector_interface import (
19
19
  )
20
20
  from isar.models.communication.message import StartMissionMessage
21
21
  from isar.models.communication.queues.queues import Queues
22
- from isar.models.mission_metadata.mission_metadata import MissionMetadata
23
22
  from isar.state_machine.states import (
24
23
  Idle,
25
24
  Initialize,
@@ -203,7 +202,6 @@ class StateMachine(object):
203
202
 
204
203
  self.stopped: bool = False
205
204
  self.current_mission: Optional[Mission] = None
206
- self.current_mission_metadata: Optional[MissionMetadata] = None
207
205
  self.current_task: Optional[Task] = None
208
206
  self.current_step: Optional[Step] = None
209
207
  self.initial_pose: Optional[Pose] = None
@@ -436,12 +434,9 @@ class StateMachine(object):
436
434
  self.current_mission = None
437
435
  self.initial_pose = None
438
436
 
439
- def start_mission(
440
- self, mission: Mission, mission_metadata: MissionMetadata, initial_pose: Pose
441
- ):
437
+ def start_mission(self, mission: Mission, initial_pose: Pose):
442
438
  """Starts a scheduled mission."""
443
439
  self.current_mission = mission
444
- self.current_mission_metadata = mission_metadata
445
440
  self.initial_pose = initial_pose
446
441
 
447
442
  self.task_selector.initialize(tasks=self.current_mission.tasks)
@@ -31,7 +31,6 @@ class Idle(State):
31
31
  if start_mission:
32
32
  self.state_machine.start_mission(
33
33
  mission=start_mission.mission,
34
- mission_metadata=start_mission.mission_metadata,
35
34
  initial_pose=start_mission.initial_pose,
36
35
  )
37
36
  transition = self.state_machine.mission_started # type: ignore
@@ -6,7 +6,6 @@ from typing import Callable, Optional, Sequence, TYPE_CHECKING, Tuple, Union
6
6
  from injector import inject
7
7
  from transitions import State
8
8
 
9
- from isar.models.mission_metadata.mission_metadata import MissionMetadata
10
9
  from isar.services.utilities.threaded_request import (
11
10
  ThreadedRequest,
12
11
  ThreadedRequestNotFinishedError,
@@ -129,18 +128,16 @@ class Monitor(State):
129
128
  f"No inspection data retrieved for step {str(current_step.id)[:8]}"
130
129
  )
131
130
 
132
- # A deepcopy is made to freeze the metadata before passing it to another thread
131
+ # A deepcopy is made to freeze the mission before passing it to another thread
133
132
  # through the queue
134
- mission_metadata: MissionMetadata = deepcopy(
135
- self.state_machine.current_mission_metadata
136
- )
133
+ mission: Mission = deepcopy(self.state_machine.current_mission)
137
134
 
138
135
  for inspection in inspections:
139
136
  inspection.metadata.tag_id = current_step.tag_id
140
137
 
141
- message: Tuple[Inspection, MissionMetadata] = (
138
+ message: Tuple[Inspection, Mission] = (
142
139
  inspection,
143
- mission_metadata,
140
+ mission,
144
141
  )
145
142
  self.state_machine.queues.upload_queue.put(message)
146
143
  self.logger.info(f"Inspection: {str(inspection.id)[:8]} queued for upload")
@@ -7,9 +7,9 @@ from injector import inject
7
7
 
8
8
  from isar.config.keyvault.keyvault_service import Keyvault
9
9
  from isar.config.settings import settings
10
- from isar.models.mission_metadata.mission_metadata import MissionMetadata
10
+ from robot_interface.models.mission.mission import Mission
11
11
  from isar.storage.storage_interface import StorageException, StorageInterface
12
- from isar.storage.utilities import construct_local_paths, construct_metadata_file
12
+ from isar.storage.utilities import construct_metadata_file, construct_paths
13
13
  from robot_interface.models.inspection.inspection import Inspection
14
14
 
15
15
 
@@ -31,17 +31,17 @@ class BlobStorage(StorageInterface):
31
31
 
32
32
  self.logger = logging.getLogger("uploader")
33
33
 
34
- def store(self, inspection: Inspection, metadata: MissionMetadata) -> str:
35
- local_path, local_metadata_path = construct_local_paths(
36
- inspection=inspection, metadata=metadata
34
+ def store(self, inspection: Inspection, mission: Mission) -> str:
35
+ data_path, metadata_path = construct_paths(
36
+ inspection=inspection, mission=mission
37
37
  )
38
38
 
39
39
  metadata_bytes: bytes = construct_metadata_file(
40
- inspection=inspection, metadata=metadata, filename=local_path.name
40
+ inspection=inspection, mission=mission, filename=data_path.name
41
41
  )
42
42
 
43
- self._upload_file(path=local_metadata_path, data=metadata_bytes)
44
- return self._upload_file(path=local_path, data=inspection.data)
43
+ self._upload_file(path=metadata_path, data=metadata_bytes)
44
+ return self._upload_file(path=data_path, data=inspection.data)
45
45
 
46
46
  def _upload_file(self, path: Path, data: bytes) -> str:
47
47
  blob_client = self._get_blob_client(path)
@@ -2,9 +2,9 @@ import logging
2
2
  from pathlib import Path
3
3
 
4
4
  from isar.config.settings import settings
5
- from isar.models.mission_metadata.mission_metadata import MissionMetadata
5
+ from robot_interface.models.mission.mission import Mission
6
6
  from isar.storage.storage_interface import StorageException, StorageInterface
7
- from isar.storage.utilities import construct_local_paths, construct_metadata_file
7
+ from isar.storage.utilities import construct_metadata_file, construct_paths
8
8
  from robot_interface.models.inspection.inspection import Inspection
9
9
 
10
10
 
@@ -13,9 +13,9 @@ class LocalStorage(StorageInterface):
13
13
  self.root_folder: Path = Path(settings.LOCAL_STORAGE_PATH)
14
14
  self.logger = logging.getLogger("uploader")
15
15
 
16
- def store(self, inspection: Inspection, metadata: MissionMetadata) -> str:
17
- local_path, local_metadata_path = construct_local_paths(
18
- inspection=inspection, metadata=metadata
16
+ def store(self, inspection: Inspection, mission: Mission) -> str:
17
+ local_path, local_metadata_path = construct_paths(
18
+ inspection=inspection, mission=mission
19
19
  )
20
20
 
21
21
  absolute_path: Path = self.root_folder.joinpath(local_path)
@@ -24,7 +24,7 @@ class LocalStorage(StorageInterface):
24
24
  absolute_path.parent.mkdir(parents=True, exist_ok=True)
25
25
 
26
26
  metadata_bytes: bytes = construct_metadata_file(
27
- inspection=inspection, metadata=metadata, filename=local_path.name
27
+ inspection=inspection, mission=mission, filename=local_path.name
28
28
  )
29
29
  try:
30
30
  with open(absolute_path, "wb") as file, open(
@@ -7,7 +7,7 @@ from requests import HTTPError, RequestException
7
7
  from requests_toolbelt import MultipartEncoder
8
8
 
9
9
  from isar.config.settings import settings
10
- from isar.models.mission_metadata.mission_metadata import MissionMetadata
10
+ from robot_interface.models.mission.mission import Mission
11
11
  from isar.services.auth.azure_credentials import AzureCredentials
12
12
  from isar.services.service_connections.request_handler import RequestHandler
13
13
  from isar.storage.storage_interface import StorageException, StorageInterface
@@ -31,24 +31,22 @@ class SlimmStorage(StorageInterface):
31
31
 
32
32
  self.url: str = settings.SLIMM_API_URL
33
33
 
34
- def store(self, inspection: Inspection, metadata: MissionMetadata) -> str:
34
+ def store(self, inspection: Inspection, mission: Mission) -> str:
35
35
  filename: str = get_filename(
36
- mission_id=metadata.mission_id,
37
- inspection_type=type(inspection).__name__,
38
- inspection_id=inspection.id,
36
+ inspection=inspection,
39
37
  )
40
38
  filename = f"{filename}.{inspection.metadata.file_type}"
41
39
  if type(inspection) in [Video, ThermalVideo]:
42
- inspection_path = self._store_video(filename, inspection, metadata)
40
+ inspection_path = self._store_video(filename, inspection, mission)
43
41
  else:
44
- inspection_path = self._store_image(filename, inspection, metadata)
42
+ inspection_path = self._store_image(filename, inspection, mission)
45
43
  return inspection_path
46
44
 
47
45
  def _store_image(
48
- self, filename: str, inspection: Inspection, metadata: MissionMetadata
46
+ self, filename: str, inspection: Inspection, mission: Mission
49
47
  ) -> str:
50
48
  multiform_body: MultipartEncoder = self._construct_multiform_request_image(
51
- filename=filename, inspection=inspection, metadata=metadata
49
+ filename=filename, inspection=inspection, mission=mission
52
50
  )
53
51
  request_url: str = f"{self.url}/UploadSingleImage"
54
52
  inspection_path = self._ingest(
@@ -59,10 +57,10 @@ class SlimmStorage(StorageInterface):
59
57
  return inspection_path
60
58
 
61
59
  def _store_video(
62
- self, filename: str, inspection: Inspection, metadata: MissionMetadata
60
+ self, filename: str, inspection: Inspection, mission: Mission
63
61
  ) -> str:
64
62
  multiform_body: MultipartEncoder = self._construct_multiform_request_video(
65
- filename=filename, inspection=inspection, metadata=metadata
63
+ filename=filename, inspection=inspection, mission=mission
66
64
  )
67
65
  request_url = f"{self.url}/UploadSingleVideo"
68
66
  inspection_path = self._ingest(
@@ -98,23 +96,23 @@ class SlimmStorage(StorageInterface):
98
96
 
99
97
  @staticmethod
100
98
  def _construct_multiform_request_image(
101
- filename: str, inspection: Inspection, metadata: MissionMetadata
99
+ filename: str, inspection: Inspection, mission: Mission
102
100
  ):
103
101
  array_of_orientation = (
104
102
  inspection.metadata.pose.orientation.to_quat_array().tolist()
105
103
  )
106
104
  multiform_body: MultipartEncoder = MultipartEncoder(
107
105
  fields={
108
- "PlantFacilitySAPCode": metadata.plant_code,
109
- "InstCode": metadata.plant_short_name,
110
- "InternalClassification": metadata.data_classification,
106
+ "PlantFacilitySAPCode": settings.PLANT_CODE,
107
+ "InstCode": settings.PLANT_SHORT_NAME,
108
+ "InternalClassification": settings.DATA_CLASSIFICATION,
111
109
  "IsoCountryCode": "NO",
112
- "Geodetic.CoordinateReferenceSystemCode": metadata.coordinate_reference_system, # noqa: E501
113
- "Geodetic.VerticalCoordinateReferenceSystemCode": metadata.vertical_reference_system, # noqa: E501
114
- "Geodetic.OrientationReferenceSystem": metadata.media_orientation_reference_system, # noqa: E501
115
- "SensorCarrier.SensorCarrierId": metadata.isar_id,
116
- "SensorCarrier.ModelName": metadata.robot_model,
117
- "Mission.MissionId": metadata.mission_id,
110
+ "Geodetic.CoordinateReferenceSystemCode": settings.COORDINATE_REFERENCE_SYSTEM, # noqa: E501
111
+ "Geodetic.VerticalCoordinateReferenceSystemCode": settings.VERTICAL_REFERENCE_SYSTEM, # noqa: E501
112
+ "Geodetic.OrientationReferenceSystem": settings.MEDIA_ORIENTATION_REFERENCE_SYSTEM, # noqa: E501
113
+ "SensorCarrier.SensorCarrierId": settings.ISAR_ID,
114
+ "SensorCarrier.ModelName": settings.ROBOT_TYPE,
115
+ "Mission.MissionId": mission.id,
118
116
  "Mission.Client": "Equinor",
119
117
  "ImageMetadata.Timestamp": inspection.metadata.start_time.isoformat(), # noqa: E501
120
118
  "ImageMetadata.X": str(inspection.metadata.pose.position.x),
@@ -124,11 +122,13 @@ class SlimmStorage(StorageInterface):
124
122
  "ImageMetadata.CameraOrientation2": str(array_of_orientation[1]),
125
123
  "ImageMetadata.CameraOrientation3": str(array_of_orientation[2]),
126
124
  "ImageMetadata.CameraOrientation4": str(array_of_orientation[3]),
127
- "ImageMetadata.AnalysisMethods": str(inspection.metadata.analysis),
125
+ "ImageMetadata.AnalysisMethods": inspection.metadata.analysis
126
+ if inspection.metadata.analysis
127
+ else "N/A",
128
128
  "ImageMetadata.Description": str(inspection.metadata.additional),
129
129
  "ImageMetadata.FunctionalLocation": inspection.metadata.tag_id # noqa: E501
130
130
  if inspection.metadata.tag_id
131
- else "NA",
131
+ else "N/A",
132
132
  "Filename": filename,
133
133
  "AttachedFile": (filename, inspection.data),
134
134
  }
@@ -139,26 +139,27 @@ class SlimmStorage(StorageInterface):
139
139
  def _construct_multiform_request_video(
140
140
  filename: str,
141
141
  inspection: Inspection,
142
- metadata: MissionMetadata,
142
+ mission: Mission,
143
143
  ):
144
144
  array_of_orientation = (
145
145
  inspection.metadata.pose.orientation.to_quat_array().tolist()
146
146
  )
147
147
  multiform_body: MultipartEncoder = MultipartEncoder(
148
148
  fields={
149
- "PlantFacilitySAPCode": metadata.plant_code,
150
- "InstCode": metadata.plant_short_name,
151
- "InternalClassification": metadata.data_classification,
149
+ "PlantFacilitySAPCode": settings.PLANT_CODE,
150
+ "InstCode": settings.PLANT_SHORT_NAME,
151
+ "InternalClassification": settings.DATA_CLASSIFICATION,
152
152
  "IsoCountryCode": "NO",
153
- "Geodetic.CoordinateReferenceSystemCode": metadata.coordinate_reference_system, # noqa: E501
154
- "Geodetic.VerticalCoordinateReferenceSystemCode": metadata.vertical_reference_system, # noqa: E501
155
- "Geodetic.OrientationReferenceSystem": metadata.media_orientation_reference_system, # noqa: E501
156
- "SensorCarrier.SensorCarrierId": metadata.isar_id,
157
- "SensorCarrier.ModelName": metadata.robot_model,
158
- "Mission.MissionId": metadata.mission_id,
153
+ "Geodetic.CoordinateReferenceSystemCode": settings.COORDINATE_REFERENCE_SYSTEM, # noqa: E501
154
+ "Geodetic.VerticalCoordinateReferenceSystemCode": settings.VERTICAL_REFERENCE_SYSTEM, # noqa: E501
155
+ "Geodetic.OrientationReferenceSystem": settings.MEDIA_ORIENTATION_REFERENCE_SYSTEM, # noqa: E501
156
+ "SensorCarrier.SensorCarrierId": settings.ISAR_ID,
157
+ "SensorCarrier.ModelName": settings.ROBOT_TYPE,
158
+ "Mission.MissionId": mission.id,
159
159
  "Mission.Client": "Equinor",
160
160
  "VideoMetadata.Timestamp": inspection.metadata.start_time.isoformat(), # noqa: E501
161
- "VideoMetadata.Duration": str(inspection.metadata.duration), # type: ignore
161
+ # Converting to int because SLIMM expects an int, while we use floats in operations.
162
+ "VideoMetadata.Duration": str(int(inspection.metadata.duration)), # type: ignore
162
163
  "VideoMetadata.X": str(inspection.metadata.pose.position.x),
163
164
  "VideoMetadata.Y": str(inspection.metadata.pose.position.y),
164
165
  "VideoMetadata.Z": str(inspection.metadata.pose.position.z),
@@ -166,11 +167,13 @@ class SlimmStorage(StorageInterface):
166
167
  "VideoMetadata.CameraOrientation2": str(array_of_orientation[1]),
167
168
  "VideoMetadata.CameraOrientation3": str(array_of_orientation[2]),
168
169
  "VideoMetadata.CameraOrientation4": str(array_of_orientation[3]),
169
- "VideoMetadata.AnalysisMethods": str(inspection.metadata.analysis),
170
+ "VideoMetadata.AnalysisMethods": inspection.metadata.analysis
171
+ if inspection.metadata.analysis
172
+ else "N/A",
170
173
  "VideoMetadata.Description": str(inspection.metadata.additional),
171
174
  "VideoMetadata.FunctionalLocation": inspection.metadata.tag_id # noqa: E501
172
175
  if inspection.metadata.tag_id
173
- else "NA",
176
+ else "N/A",
174
177
  "Filename": filename,
175
178
  "AttachedFile": (filename, inspection.data),
176
179
  }
@@ -1,17 +1,17 @@
1
1
  from abc import ABCMeta, abstractmethod
2
2
 
3
- from isar.models.mission_metadata.mission_metadata import MissionMetadata
3
+ from robot_interface.models.mission.mission import Mission
4
4
  from robot_interface.models.inspection.inspection import Inspection
5
5
 
6
6
 
7
7
  class StorageInterface(metaclass=ABCMeta):
8
8
  @abstractmethod
9
- def store(self, inspection: Inspection, metadata: MissionMetadata) -> str:
9
+ def store(self, inspection: Inspection, mission: Mission) -> str:
10
10
  """
11
11
  Parameters
12
12
  ----------
13
- metadata : MissionMetadata
14
- Metadata for the mission the inspection is a part of.
13
+ mission : Mission
14
+ Mission the inspection is a part of.
15
15
  inspection : Inspection
16
16
  The inspection object to be stored.
17
17