isar 1.16.15__tar.gz → 1.16.16__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 (205) hide show
  1. {isar-1.16.15 → isar-1.16.16}/PKG-INFO +1 -1
  2. {isar-1.16.15 → isar-1.16.16}/src/isar/storage/blob_storage.py +12 -4
  3. {isar-1.16.15 → isar-1.16.16}/src/isar/storage/storage_interface.py +3 -2
  4. {isar-1.16.15 → isar-1.16.16}/src/isar/storage/uploader.py +4 -4
  5. {isar-1.16.15 → isar-1.16.16}/src/isar/storage/utilities.py +2 -1
  6. {isar-1.16.15 → isar-1.16.16}/src/isar.egg-info/PKG-INFO +1 -1
  7. {isar-1.16.15 → isar-1.16.16}/tests/isar/services/readers/test_base_reader.py +3 -3
  8. {isar-1.16.15 → isar-1.16.16}/tests/isar/state_machine/states/test_monitor.py +2 -2
  9. {isar-1.16.15 → isar-1.16.16}/tests/isar/state_machine/test_state_machine.py +10 -10
  10. {isar-1.16.15 → isar-1.16.16}/tests/mocks/mission_definition.py +6 -3
  11. isar-1.16.16/tests/mocks/pose.py +11 -0
  12. isar-1.16.16/tests/mocks/step.py +14 -0
  13. isar-1.16.15/tests/mocks/pose.py +0 -9
  14. isar-1.16.15/tests/mocks/step.py +0 -11
  15. {isar-1.16.15 → isar-1.16.16}/.dockerignore +0 -0
  16. {isar-1.16.15 → isar-1.16.16}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {isar-1.16.15 → isar-1.16.16}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  18. {isar-1.16.15 → isar-1.16.16}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
  19. {isar-1.16.15 → isar-1.16.16}/.github/release.yml +0 -0
  20. {isar-1.16.15 → isar-1.16.16}/.github/workflows/project_automations.yml +0 -0
  21. {isar-1.16.15 → isar-1.16.16}/.github/workflows/publish_isar_base_image.yml +0 -0
  22. {isar-1.16.15 → isar-1.16.16}/.github/workflows/pythonpackage.yml +0 -0
  23. {isar-1.16.15 → isar-1.16.16}/.github/workflows/pythonpublish.yml +0 -0
  24. {isar-1.16.15 → isar-1.16.16}/.github/workflows/repository_dispatch_on_merge.yml +0 -0
  25. {isar-1.16.15 → isar-1.16.16}/.github/workflows/stale.yml +0 -0
  26. {isar-1.16.15 → isar-1.16.16}/.gitignore +0 -0
  27. {isar-1.16.15 → isar-1.16.16}/.pre-commit-config.yaml +0 -0
  28. {isar-1.16.15 → isar-1.16.16}/Dockerfile +0 -0
  29. {isar-1.16.15 → isar-1.16.16}/LICENSE +0 -0
  30. {isar-1.16.15 → isar-1.16.16}/README.md +0 -0
  31. {isar-1.16.15 → isar-1.16.16}/SECURITY.md +0 -0
  32. {isar-1.16.15 → isar-1.16.16}/docker-compose-turtlebot.yml +0 -0
  33. {isar-1.16.15 → isar-1.16.16}/docker-compose.yml +0 -0
  34. {isar-1.16.15 → isar-1.16.16}/docs/Makefile +0 -0
  35. {isar-1.16.15 → isar-1.16.16}/docs/make.bat +0 -0
  36. {isar-1.16.15 → isar-1.16.16}/docs/rst_processing.py +0 -0
  37. {isar-1.16.15 → isar-1.16.16}/docs/source/conf.py +0 -0
  38. {isar-1.16.15 → isar-1.16.16}/docs/source/index.rst +0 -0
  39. {isar-1.16.15 → isar-1.16.16}/docs/source/readme_link.md +0 -0
  40. {isar-1.16.15 → isar-1.16.16}/docs/state_machine_diagram.png +0 -0
  41. {isar-1.16.15 → isar-1.16.16}/main.py +0 -0
  42. {isar-1.16.15 → isar-1.16.16}/pyproject.toml +0 -0
  43. {isar-1.16.15 → isar-1.16.16}/radixconfig.yml +0 -0
  44. {isar-1.16.15 → isar-1.16.16}/setup.cfg +0 -0
  45. {isar-1.16.15 → isar-1.16.16}/setup.py +0 -0
  46. {isar-1.16.15 → isar-1.16.16}/src/isar/__init__.py +0 -0
  47. {isar-1.16.15 → isar-1.16.16}/src/isar/apis/__init__.py +0 -0
  48. {isar-1.16.15 → isar-1.16.16}/src/isar/apis/api.py +0 -0
  49. {isar-1.16.15 → isar-1.16.16}/src/isar/apis/models/__init__.py +0 -0
  50. {isar-1.16.15 → isar-1.16.16}/src/isar/apis/models/models.py +0 -0
  51. {isar-1.16.15 → isar-1.16.16}/src/isar/apis/models/start_mission_definition.py +0 -0
  52. {isar-1.16.15 → isar-1.16.16}/src/isar/apis/schedule/__init__.py +0 -0
  53. {isar-1.16.15 → isar-1.16.16}/src/isar/apis/schedule/scheduling_controller.py +0 -0
  54. {isar-1.16.15 → isar-1.16.16}/src/isar/apis/security/__init__.py +0 -0
  55. {isar-1.16.15 → isar-1.16.16}/src/isar/apis/security/authentication.py +0 -0
  56. {isar-1.16.15 → isar-1.16.16}/src/isar/config/__init__.py +0 -0
  57. {isar-1.16.15 → isar-1.16.16}/src/isar/config/certs/ca-cert.pem +0 -0
  58. {isar-1.16.15 → isar-1.16.16}/src/isar/config/configuration_error.py +0 -0
  59. {isar-1.16.15 → isar-1.16.16}/src/isar/config/keyvault/__init__.py +0 -0
  60. {isar-1.16.15 → isar-1.16.16}/src/isar/config/keyvault/keyvault_error.py +0 -0
  61. {isar-1.16.15 → isar-1.16.16}/src/isar/config/keyvault/keyvault_service.py +0 -0
  62. {isar-1.16.15 → isar-1.16.16}/src/isar/config/log.py +0 -0
  63. {isar-1.16.15 → isar-1.16.16}/src/isar/config/logging.conf +0 -0
  64. {isar-1.16.15 → isar-1.16.16}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
  65. {isar-1.16.15 → isar-1.16.16}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
  66. {isar-1.16.15 → isar-1.16.16}/src/isar/config/maps/default_map.json +0 -0
  67. {isar-1.16.15 → isar-1.16.16}/src/isar/config/maps/klab_b.json +0 -0
  68. {isar-1.16.15 → isar-1.16.16}/src/isar/config/maps/klab_compressor.json +0 -0
  69. {isar-1.16.15 → isar-1.16.16}/src/isar/config/maps/klab_turtlebot.json +0 -0
  70. {isar-1.16.15 → isar-1.16.16}/src/isar/config/maps/turtleworld.json +0 -0
  71. {isar-1.16.15 → isar-1.16.16}/src/isar/config/predefined_mission_definition/__init__.py +0 -0
  72. {isar-1.16.15 → isar-1.16.16}/src/isar/config/predefined_mission_definition/default_exr.json +0 -0
  73. {isar-1.16.15 → isar-1.16.16}/src/isar/config/predefined_mission_definition/default_mission.json +0 -0
  74. {isar-1.16.15 → isar-1.16.16}/src/isar/config/predefined_mission_definition/default_turtlebot.json +0 -0
  75. {isar-1.16.15 → isar-1.16.16}/src/isar/config/predefined_missions/__init__.py +0 -0
  76. {isar-1.16.15 → isar-1.16.16}/src/isar/config/predefined_missions/default.json +0 -0
  77. {isar-1.16.15 → isar-1.16.16}/src/isar/config/predefined_missions/default_turtlebot.json +0 -0
  78. {isar-1.16.15 → isar-1.16.16}/src/isar/config/predefined_poses/__init__.py +0 -0
  79. {isar-1.16.15 → isar-1.16.16}/src/isar/config/predefined_poses/predefined_poses.py +0 -0
  80. {isar-1.16.15 → isar-1.16.16}/src/isar/config/settings.env +0 -0
  81. {isar-1.16.15 → isar-1.16.16}/src/isar/config/settings.py +0 -0
  82. {isar-1.16.15 → isar-1.16.16}/src/isar/mission_planner/__init__.py +0 -0
  83. {isar-1.16.15 → isar-1.16.16}/src/isar/mission_planner/local_planner.py +0 -0
  84. {isar-1.16.15 → isar-1.16.16}/src/isar/mission_planner/mission_planner_interface.py +0 -0
  85. {isar-1.16.15 → isar-1.16.16}/src/isar/mission_planner/sequential_task_selector.py +0 -0
  86. {isar-1.16.15 → isar-1.16.16}/src/isar/mission_planner/task_selector_interface.py +0 -0
  87. {isar-1.16.15 → isar-1.16.16}/src/isar/models/__init__.py +0 -0
  88. {isar-1.16.15 → isar-1.16.16}/src/isar/models/communication/__init__.py +0 -0
  89. {isar-1.16.15 → isar-1.16.16}/src/isar/models/communication/message.py +0 -0
  90. {isar-1.16.15 → isar-1.16.16}/src/isar/models/communication/queues/__init__.py +0 -0
  91. {isar-1.16.15 → isar-1.16.16}/src/isar/models/communication/queues/queue_io.py +0 -0
  92. {isar-1.16.15 → isar-1.16.16}/src/isar/models/communication/queues/queue_timeout_error.py +0 -0
  93. {isar-1.16.15 → isar-1.16.16}/src/isar/models/communication/queues/queues.py +0 -0
  94. {isar-1.16.15 → isar-1.16.16}/src/isar/models/communication/queues/status_queue.py +0 -0
  95. {isar-1.16.15 → isar-1.16.16}/src/isar/models/mission_metadata/__init__.py +0 -0
  96. {isar-1.16.15 → isar-1.16.16}/src/isar/modules.py +0 -0
  97. {isar-1.16.15 → isar-1.16.16}/src/isar/services/__init__.py +0 -0
  98. {isar-1.16.15 → isar-1.16.16}/src/isar/services/auth/__init__.py +0 -0
  99. {isar-1.16.15 → isar-1.16.16}/src/isar/services/auth/azure_credentials.py +0 -0
  100. {isar-1.16.15 → isar-1.16.16}/src/isar/services/readers/__init__.py +0 -0
  101. {isar-1.16.15 → isar-1.16.16}/src/isar/services/readers/base_reader.py +0 -0
  102. {isar-1.16.15 → isar-1.16.16}/src/isar/services/service_connections/__init__.py +0 -0
  103. {isar-1.16.15 → isar-1.16.16}/src/isar/services/service_connections/mqtt/__init__.py +0 -0
  104. {isar-1.16.15 → isar-1.16.16}/src/isar/services/service_connections/mqtt/mqtt_client.py +0 -0
  105. {isar-1.16.15 → isar-1.16.16}/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +0 -0
  106. {isar-1.16.15 → isar-1.16.16}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +0 -0
  107. {isar-1.16.15 → isar-1.16.16}/src/isar/services/service_connections/mqtt/robot_status_publisher.py +0 -0
  108. {isar-1.16.15 → isar-1.16.16}/src/isar/services/service_connections/request_handler.py +0 -0
  109. {isar-1.16.15 → isar-1.16.16}/src/isar/services/service_connections/stid/__init__.py +0 -0
  110. {isar-1.16.15 → isar-1.16.16}/src/isar/services/utilities/__init__.py +0 -0
  111. {isar-1.16.15 → isar-1.16.16}/src/isar/services/utilities/queue_utilities.py +0 -0
  112. {isar-1.16.15 → isar-1.16.16}/src/isar/services/utilities/scheduling_utilities.py +0 -0
  113. {isar-1.16.15 → isar-1.16.16}/src/isar/services/utilities/threaded_request.py +0 -0
  114. {isar-1.16.15 → isar-1.16.16}/src/isar/state_machine/__init__.py +0 -0
  115. {isar-1.16.15 → isar-1.16.16}/src/isar/state_machine/state_machine.py +0 -0
  116. {isar-1.16.15 → isar-1.16.16}/src/isar/state_machine/states/__init__.py +0 -0
  117. {isar-1.16.15 → isar-1.16.16}/src/isar/state_machine/states/idle.py +0 -0
  118. {isar-1.16.15 → isar-1.16.16}/src/isar/state_machine/states/initialize.py +0 -0
  119. {isar-1.16.15 → isar-1.16.16}/src/isar/state_machine/states/initiate.py +0 -0
  120. {isar-1.16.15 → isar-1.16.16}/src/isar/state_machine/states/monitor.py +0 -0
  121. {isar-1.16.15 → isar-1.16.16}/src/isar/state_machine/states/off.py +0 -0
  122. {isar-1.16.15 → isar-1.16.16}/src/isar/state_machine/states/paused.py +0 -0
  123. {isar-1.16.15 → isar-1.16.16}/src/isar/state_machine/states/stop.py +0 -0
  124. {isar-1.16.15 → isar-1.16.16}/src/isar/state_machine/states_enum.py +0 -0
  125. {isar-1.16.15 → isar-1.16.16}/src/isar/storage/__init__.py +0 -0
  126. {isar-1.16.15 → isar-1.16.16}/src/isar/storage/local_storage.py +0 -0
  127. {isar-1.16.15 → isar-1.16.16}/src/isar/storage/slimm_storage.py +0 -0
  128. {isar-1.16.15 → isar-1.16.16}/src/isar.egg-info/SOURCES.txt +0 -0
  129. {isar-1.16.15 → isar-1.16.16}/src/isar.egg-info/dependency_links.txt +0 -0
  130. {isar-1.16.15 → isar-1.16.16}/src/isar.egg-info/requires.txt +0 -0
  131. {isar-1.16.15 → isar-1.16.16}/src/isar.egg-info/top_level.txt +0 -0
  132. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/__init__.py +0 -0
  133. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/models/__init__.py +0 -0
  134. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/models/exceptions/__init__.py +0 -0
  135. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/models/exceptions/robot_exceptions.py +0 -0
  136. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/models/initialize/__init__.py +0 -0
  137. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/models/initialize/initialize_params.py +0 -0
  138. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/models/inspection/__init__.py +0 -0
  139. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/models/inspection/inspection.py +0 -0
  140. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/models/mission/__init__.py +0 -0
  141. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/models/mission/mission.py +0 -0
  142. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/models/mission/status.py +0 -0
  143. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/models/mission/step.py +0 -0
  144. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/models/mission/task.py +0 -0
  145. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/models/robots/__init__.py +0 -0
  146. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/models/robots/robot_model.py +0 -0
  147. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/robot_interface.py +0 -0
  148. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/telemetry/__init__.py +0 -0
  149. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/telemetry/mqtt_client.py +0 -0
  150. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/telemetry/payloads.py +0 -0
  151. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/test_robot_interface.py +0 -0
  152. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/utilities/__init__.py +0 -0
  153. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/utilities/json_service.py +0 -0
  154. {isar-1.16.15 → isar-1.16.16}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
  155. {isar-1.16.15 → isar-1.16.16}/tests/__init__.py +0 -0
  156. {isar-1.16.15 → isar-1.16.16}/tests/conftest.py +0 -0
  157. {isar-1.16.15 → isar-1.16.16}/tests/integration/__init__.py +0 -0
  158. {isar-1.16.15 → isar-1.16.16}/tests/integration/turtlebot/__init__.py +0 -0
  159. {isar-1.16.15 → isar-1.16.16}/tests/integration/turtlebot/config/__init__.py +0 -0
  160. {isar-1.16.15 → isar-1.16.16}/tests/integration/turtlebot/config/maps/__init__.py +0 -0
  161. {isar-1.16.15 → isar-1.16.16}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
  162. {isar-1.16.15 → isar-1.16.16}/tests/integration/turtlebot/config/missions/__init__.py +0 -0
  163. {isar-1.16.15 → isar-1.16.16}/tests/integration/turtlebot/config/missions/default.json +0 -0
  164. {isar-1.16.15 → isar-1.16.16}/tests/integration/turtlebot/test_successful_mission.py +0 -0
  165. {isar-1.16.15 → isar-1.16.16}/tests/isar/__init__.py +0 -0
  166. {isar-1.16.15 → isar-1.16.16}/tests/isar/apis/__init__.py +0 -0
  167. {isar-1.16.15 → isar-1.16.16}/tests/isar/apis/scheduler/__init__.py +0 -0
  168. {isar-1.16.15 → isar-1.16.16}/tests/isar/apis/scheduler/test_scheduler_router.py +0 -0
  169. {isar-1.16.15 → isar-1.16.16}/tests/isar/apis/security/__init__.py +0 -0
  170. {isar-1.16.15 → isar-1.16.16}/tests/isar/apis/security/test_authentication.py +0 -0
  171. {isar-1.16.15 → isar-1.16.16}/tests/isar/mission/__init__.py +0 -0
  172. {isar-1.16.15 → isar-1.16.16}/tests/isar/mission/test_mission.py +0 -0
  173. {isar-1.16.15 → isar-1.16.16}/tests/isar/models/__init__.py +0 -0
  174. {isar-1.16.15 → isar-1.16.16}/tests/isar/models/communication/__init__.py +0 -0
  175. {isar-1.16.15 → isar-1.16.16}/tests/isar/models/communication/test_queues.py +0 -0
  176. {isar-1.16.15 → isar-1.16.16}/tests/isar/models/example_mission_definition.json +0 -0
  177. {isar-1.16.15 → isar-1.16.16}/tests/isar/models/test_start_mission_definition.py +0 -0
  178. {isar-1.16.15 → isar-1.16.16}/tests/isar/services/__init__.py +0 -0
  179. {isar-1.16.15 → isar-1.16.16}/tests/isar/services/readers/__init__.py +0 -0
  180. {isar-1.16.15 → isar-1.16.16}/tests/isar/services/readers/test_mission_reader.py +0 -0
  181. {isar-1.16.15 → isar-1.16.16}/tests/isar/services/service_connections/__init__.py +0 -0
  182. {isar-1.16.15 → isar-1.16.16}/tests/isar/services/service_connections/echo/__init__.py +0 -0
  183. {isar-1.16.15 → isar-1.16.16}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
  184. {isar-1.16.15 → isar-1.16.16}/tests/isar/services/utilities/__init__.py +0 -0
  185. {isar-1.16.15 → isar-1.16.16}/tests/isar/services/utilities/test_queue_utilities.py +0 -0
  186. {isar-1.16.15 → isar-1.16.16}/tests/isar/services/utilities/test_scheduling_utilities.py +0 -0
  187. {isar-1.16.15 → isar-1.16.16}/tests/isar/state_machine/__init__.py +0 -0
  188. {isar-1.16.15 → isar-1.16.16}/tests/isar/state_machine/states/__init__.py +0 -0
  189. {isar-1.16.15 → isar-1.16.16}/tests/isar/storage/test_blob_storage.py +0 -0
  190. {isar-1.16.15 → isar-1.16.16}/tests/isar/storage/test_uploader.py +0 -0
  191. {isar-1.16.15 → isar-1.16.16}/tests/mocks/__init__.py +0 -0
  192. {isar-1.16.15 → isar-1.16.16}/tests/mocks/blob_storage.py +0 -0
  193. {isar-1.16.15 → isar-1.16.16}/tests/mocks/mqtt_client.py +0 -0
  194. {isar-1.16.15 → isar-1.16.16}/tests/mocks/request.py +0 -0
  195. {isar-1.16.15 → isar-1.16.16}/tests/mocks/robot_interface.py +0 -0
  196. {isar-1.16.15 → isar-1.16.16}/tests/mocks/status.py +0 -0
  197. {isar-1.16.15 → isar-1.16.16}/tests/mocks/task.py +0 -0
  198. {isar-1.16.15 → isar-1.16.16}/tests/mocks/token.py +0 -0
  199. {isar-1.16.15 → isar-1.16.16}/tests/test_data/test_json_file.json +0 -0
  200. {isar-1.16.15 → isar-1.16.16}/tests/test_data/test_map_config/test_map_config.json +0 -0
  201. {isar-1.16.15 → isar-1.16.16}/tests/test_data/test_mission_not_working.json +0 -0
  202. {isar-1.16.15 → isar-1.16.16}/tests/test_data/test_mission_working.json +0 -0
  203. {isar-1.16.15 → isar-1.16.16}/tests/test_data/test_mission_working_no_tasks.json +0 -0
  204. {isar-1.16.15 → isar-1.16.16}/tests/test_data/test_thermal_image_mission.json +0 -0
  205. {isar-1.16.15 → isar-1.16.16}/tests/test_modules.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: isar
3
- Version: 1.16.15
3
+ Version: 1.16.16
4
4
  Summary: Integration and Supervisory control of Autonomous Robots
5
5
  Home-page: https://github.com/equinor/isar
6
6
  Author: Equinor ASA
@@ -1,5 +1,6 @@
1
1
  import logging
2
2
  from pathlib import Path
3
+ from typing import Union
3
4
 
4
5
  from azure.core.exceptions import ResourceExistsError
5
6
  from azure.storage.blob import BlobClient, BlobServiceClient, ContainerClient
@@ -7,10 +8,10 @@ from injector import inject
7
8
 
8
9
  from isar.config.keyvault.keyvault_service import Keyvault
9
10
  from isar.config.settings import settings
10
- from robot_interface.models.mission.mission import Mission
11
11
  from isar.storage.storage_interface import StorageException, StorageInterface
12
12
  from isar.storage.utilities import construct_metadata_file, construct_paths
13
13
  from robot_interface.models.inspection.inspection import Inspection
14
+ from robot_interface.models.mission.mission import Mission
14
15
 
15
16
 
16
17
  class BlobStorage(StorageInterface):
@@ -31,7 +32,7 @@ class BlobStorage(StorageInterface):
31
32
 
32
33
  self.logger = logging.getLogger("uploader")
33
34
 
34
- def store(self, inspection: Inspection, mission: Mission) -> str:
35
+ def store(self, inspection: Inspection, mission: Mission) -> Union[str, dict]:
35
36
  data_path, metadata_path = construct_paths(
36
37
  inspection=inspection, mission=mission
37
38
  )
@@ -43,7 +44,7 @@ class BlobStorage(StorageInterface):
43
44
  self._upload_file(path=metadata_path, data=metadata_bytes)
44
45
  return self._upload_file(path=data_path, data=inspection.data)
45
46
 
46
- def _upload_file(self, path: Path, data: bytes) -> str:
47
+ def _upload_file(self, path: Path, data: bytes) -> Union[str, dict]:
47
48
  blob_client = self._get_blob_client(path)
48
49
  try:
49
50
  blob_properties = blob_client.upload_blob(data=data)
@@ -55,7 +56,14 @@ class BlobStorage(StorageInterface):
55
56
  except Exception as e:
56
57
  self.logger.error("An unexpected error occurred while uploading blob")
57
58
  raise StorageException from e
58
- return blob_properties["etag"]
59
+
60
+ absolute_inspection_path = {
61
+ "source": "blob",
62
+ "blob_storage_account_url": settings.BLOB_STORAGE_ACCOUNT_URL,
63
+ "blob_container": settings.BLOB_CONTAINER,
64
+ "blob_name": blob_client.blob_name,
65
+ }
66
+ return absolute_inspection_path
59
67
 
60
68
  def _get_blob_service_client(self) -> BlobServiceClient:
61
69
  try:
@@ -1,12 +1,13 @@
1
1
  from abc import ABCMeta, abstractmethod
2
+ from typing import Union
2
3
 
3
- from robot_interface.models.mission.mission import Mission
4
4
  from robot_interface.models.inspection.inspection import Inspection
5
+ from robot_interface.models.mission.mission import Mission
5
6
 
6
7
 
7
8
  class StorageInterface(metaclass=ABCMeta):
8
9
  @abstractmethod
9
- def store(self, inspection: Inspection, mission: Mission) -> str:
10
+ def store(self, inspection: Inspection, mission: Mission) -> Union[str, dict]:
10
11
  """
11
12
  Parameters
12
13
  ----------
@@ -3,7 +3,7 @@ import logging
3
3
  from dataclasses import dataclass
4
4
  from datetime import datetime, timedelta
5
5
  from queue import Empty, Queue
6
- from typing import List
6
+ from typing import List, Union
7
7
 
8
8
  from injector import inject
9
9
 
@@ -100,8 +100,8 @@ class Uploader:
100
100
  except Empty:
101
101
  continue
102
102
 
103
- def _upload(self, upload_item: UploaderQueueItem) -> str:
104
- inspection_path = ""
103
+ def _upload(self, upload_item: UploaderQueueItem) -> Union[str, dict]:
104
+ inspection_path: Union[str, dict] = ""
105
105
  try:
106
106
  inspection_path = upload_item.storage_handler.store(
107
107
  inspection=upload_item.inspection, mission=upload_item.mission
@@ -140,7 +140,7 @@ class Uploader:
140
140
  )
141
141
 
142
142
  def _publish_inspection_result(
143
- self, inspection: Inspection, inspection_path: str
143
+ self, inspection: Inspection, inspection_path: Union[str, dict]
144
144
  ) -> None:
145
145
  """Publishes the reference of the inspection result to the MQTT Broker
146
146
  along with the analysis type
@@ -79,4 +79,5 @@ def get_filename(
79
79
 
80
80
 
81
81
  def get_foldername(mission: Mission) -> str:
82
- return f"{datetime.utcnow().date()}__{settings.PLANT_SHORT_NAME}__{mission.name}__{mission.id}"
82
+ mission_name: str = mission.name.replace(" ", "-")
83
+ return f"{datetime.utcnow().date()}__{settings.PLANT_SHORT_NAME}__{mission_name}__{mission.id}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: isar
3
- Version: 1.16.15
3
+ Version: 1.16.16
4
4
  Summary: Integration and Supervisory control of Autonomous Robots
5
5
  Home-page: https://github.com/equinor/isar
6
6
  Author: Equinor ASA
@@ -17,9 +17,9 @@ class TestBaseReader:
17
17
  "dataclass_dict, expected_dataclass",
18
18
  [
19
19
  (asdict(MockMissionDefinition.default_mission), Mission),
20
- (asdict(MockStep.drive_to), Step),
21
- (asdict(MockStep.take_image_in_coordinate_direction), Step),
22
- (asdict(MockPose.default_pose), Pose),
20
+ (asdict(MockStep.drive_to()), Step),
21
+ (asdict(MockStep.take_image_in_coordinate_direction()), Step),
22
+ (asdict(MockPose.default_pose()), Pose),
23
23
  ],
24
24
  )
25
25
  def test_dict_to_dataclass(self, dataclass_dict: dict, expected_dataclass: Any):
@@ -17,7 +17,7 @@ from tests.mocks.step import MockStep
17
17
  ],
18
18
  )
19
19
  def test_step_finished(monitor: Monitor, mock_status, expected_output):
20
- step: Step = MockStep.drive_to
20
+ step: Step = MockStep.drive_to()
21
21
  step.status = mock_status
22
22
  step_completed: bool = monitor._step_finished(
23
23
  step=step,
@@ -36,7 +36,7 @@ def test_step_finished(monitor: Monitor, mock_status, expected_output):
36
36
  def test_should_only_upload_if_status_is_completed(
37
37
  monitor: Monitor, mock_status, should_queue_upload
38
38
  ):
39
- step: TakeImage = MockStep.take_image_in_coordinate_direction
39
+ step: TakeImage = MockStep.take_image_in_coordinate_direction()
40
40
  step.status = mock_status
41
41
  task: Task = Task(steps=[step])
42
42
  mission: Mission = Mission(tasks=[task])
@@ -91,8 +91,8 @@ empty_mission: Mission = Mission([], None)
91
91
 
92
92
 
93
93
  def test_state_machine_transitions(injector, state_machine_thread) -> None:
94
- step_1: Step = DriveToPose(pose=MockPose.default_pose)
95
- step_2: Step = TakeImage(target=MockPose.default_pose.position)
94
+ step_1: Step = DriveToPose(pose=MockPose.default_pose())
95
+ step_2: Step = TakeImage(target=MockPose.default_pose().position)
96
96
  mission: Mission = Mission(tasks=[Task(steps=[step_1, step_2])]) # type: ignore
97
97
 
98
98
  scheduling_utilities: SchedulingUtilities = injector.get(SchedulingUtilities)
@@ -121,8 +121,8 @@ def test_state_machine_transitions_when_running_full_mission(
121
121
  ) -> None:
122
122
  state_machine_thread.state_machine.stepwise_mission = False
123
123
 
124
- step_1: Step = DriveToPose(pose=MockPose.default_pose)
125
- step_2: Step = TakeImage(target=MockPose.default_pose.position)
124
+ step_1: Step = DriveToPose(pose=MockPose.default_pose())
125
+ step_2: Step = TakeImage(target=MockPose.default_pose().position)
126
126
  mission: Mission = Mission(tasks=[Task(steps=[step_1, step_2])]) # type: ignore
127
127
 
128
128
  scheduling_utilities: SchedulingUtilities = injector.get(SchedulingUtilities)
@@ -147,8 +147,8 @@ def test_state_machine_transitions_when_running_full_mission(
147
147
  def test_state_machine_failed_dependency(
148
148
  injector, state_machine_thread, mocker
149
149
  ) -> None:
150
- drive_to_step: Step = DriveToPose(pose=MockPose.default_pose)
151
- inspection_step: Step = MockStep.take_image_in_coordinate_direction
150
+ drive_to_step: Step = DriveToPose(pose=MockPose.default_pose())
151
+ inspection_step: Step = MockStep.take_image_in_coordinate_direction()
152
152
  mission: Mission = Mission(tasks=[Task(steps=[drive_to_step, inspection_step])]) # type: ignore
153
153
 
154
154
  mocker.patch.object(MockRobot, "step_status", return_value=StepStatus.Failed)
@@ -177,7 +177,7 @@ def test_state_machine_with_successful_collection(
177
177
  ) -> None:
178
178
  storage_mock: StorageInterface = injector.get(List[StorageInterface])[0]
179
179
 
180
- step: TakeImage = MockStep.take_image_in_coordinate_direction
180
+ step: TakeImage = MockStep.take_image_in_coordinate_direction()
181
181
  mission: Mission = Mission(tasks=[Task(steps=[step])])
182
182
  scheduling_utilities: SchedulingUtilities = injector.get(SchedulingUtilities)
183
183
 
@@ -207,7 +207,7 @@ def test_state_machine_with_unsuccessful_collection(
207
207
 
208
208
  mocker.patch.object(MockRobot, "get_inspections", return_value=[])
209
209
 
210
- step: TakeImage = MockStep.take_image_in_coordinate_direction
210
+ step: TakeImage = MockStep.take_image_in_coordinate_direction()
211
211
  mission: Mission = Mission(tasks=[Task(steps=[step])])
212
212
  scheduling_utilities: SchedulingUtilities = injector.get(SchedulingUtilities)
213
213
 
@@ -236,7 +236,7 @@ def test_state_machine_with_successful_mission_stop(
236
236
  state_machine_thread: StateMachineThread,
237
237
  caplog: pytest.LogCaptureFixture,
238
238
  ) -> None:
239
- step: TakeImage = MockStep.take_image_in_coordinate_direction
239
+ step: TakeImage = MockStep.take_image_in_coordinate_direction()
240
240
  mission: Mission = Mission(tasks=[Task(steps=[step])])
241
241
 
242
242
  scheduling_utilities: SchedulingUtilities = injector.get(SchedulingUtilities)
@@ -266,7 +266,7 @@ def test_state_machine_with_unsuccessful_mission_stop(
266
266
  state_machine_thread: StateMachineThread,
267
267
  caplog: pytest.LogCaptureFixture,
268
268
  ) -> None:
269
- step: TakeImage = MockStep.take_image_in_coordinate_direction
269
+ step: TakeImage = MockStep.take_image_in_coordinate_direction()
270
270
  mission: Mission = Mission(tasks=[Task(steps=[step])])
271
271
 
272
272
  scheduling_utilities: SchedulingUtilities = injector.get(SchedulingUtilities)
@@ -30,12 +30,15 @@ class MockMissionDefinition:
30
30
  id="default_mission",
31
31
  tasks=[
32
32
  Task(
33
- steps=[MockStep.take_image_in_coordinate_direction, MockStep.drive_to]
33
+ steps=[
34
+ MockStep.take_image_in_coordinate_direction(),
35
+ MockStep.drive_to(),
36
+ ]
34
37
  ),
35
38
  Task(
36
39
  steps=[
37
- MockStep.take_image_in_coordinate_direction,
38
- MockStep.take_image_in_coordinate_direction,
40
+ MockStep.take_image_in_coordinate_direction(),
41
+ MockStep.take_image_in_coordinate_direction(),
39
42
  ]
40
43
  ),
41
44
  ],
@@ -0,0 +1,11 @@
1
+ from alitra import Frame, Orientation, Pose, Position
2
+
3
+
4
+ class MockPose:
5
+ @staticmethod
6
+ def default_pose():
7
+ return Pose(
8
+ position=Position(x=0, y=0, z=0, frame=Frame("robot")),
9
+ orientation=Orientation(x=0, y=0, z=0, w=1, frame=Frame("robot")),
10
+ frame=Frame("robot"),
11
+ )
@@ -0,0 +1,14 @@
1
+ from alitra import Frame, Position
2
+
3
+ from robot_interface.models.mission.step import DriveToPose, TakeImage
4
+ from tests.mocks.pose import MockPose
5
+
6
+
7
+ class MockStep:
8
+ @staticmethod
9
+ def drive_to() -> DriveToPose:
10
+ return DriveToPose(pose=MockPose.default_pose())
11
+
12
+ @staticmethod
13
+ def take_image_in_coordinate_direction() -> TakeImage:
14
+ return TakeImage(target=Position(x=1, y=1, z=1, frame=Frame("robot")))
@@ -1,9 +0,0 @@
1
- from alitra import Frame, Orientation, Pose, Position
2
-
3
-
4
- class MockPose:
5
- default_pose = Pose(
6
- position=Position(x=0, y=0, z=0, frame=Frame("robot")),
7
- orientation=Orientation(x=0, y=0, z=0, w=1, frame=Frame("robot")),
8
- frame=Frame("robot"),
9
- )
@@ -1,11 +0,0 @@
1
- from alitra import Frame, Position
2
-
3
- from robot_interface.models.mission.step import DriveToPose, TakeImage
4
- from tests.mocks.pose import MockPose
5
-
6
-
7
- class MockStep:
8
- drive_to = DriveToPose(pose=MockPose.default_pose)
9
- take_image_in_coordinate_direction = TakeImage(
10
- target=Position(x=1, y=1, z=1, frame=Frame("robot"))
11
- )
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes