isar 1.12.3__tar.gz → 1.12.5__tar.gz

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

Potentially problematic release.


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

Files changed (202) hide show
  1. {isar-1.12.3 → isar-1.12.5}/PKG-INFO +1 -1
  2. {isar-1.12.3 → isar-1.12.5}/main.py +8 -3
  3. {isar-1.12.3 → isar-1.12.5}/radixconfig.yml +1 -1
  4. {isar-1.12.3 → isar-1.12.5}/src/isar/apis/api.py +6 -7
  5. {isar-1.12.3 → isar-1.12.5}/src/isar/apis/security/authentication.py +3 -5
  6. {isar-1.12.3 → isar-1.12.5}/src/isar/config/settings.py +10 -5
  7. {isar-1.12.3 → isar-1.12.5}/src/isar.egg-info/PKG-INFO +1 -1
  8. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/models/inspection/inspection.py +21 -1
  9. {isar-1.12.3 → isar-1.12.5}/.dockerignore +0 -0
  10. {isar-1.12.3 → isar-1.12.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  11. {isar-1.12.3 → isar-1.12.5}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  12. {isar-1.12.3 → isar-1.12.5}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
  13. {isar-1.12.3 → isar-1.12.5}/.github/release.yml +0 -0
  14. {isar-1.12.3 → isar-1.12.5}/.github/workflows/project_automations.yml +0 -0
  15. {isar-1.12.3 → isar-1.12.5}/.github/workflows/publish_isar_base_image.yml +0 -0
  16. {isar-1.12.3 → isar-1.12.5}/.github/workflows/pythonpackage.yml +0 -0
  17. {isar-1.12.3 → isar-1.12.5}/.github/workflows/pythonpublish.yml +0 -0
  18. {isar-1.12.3 → isar-1.12.5}/.github/workflows/repository_dispatch_on_merge.yml +0 -0
  19. {isar-1.12.3 → isar-1.12.5}/.github/workflows/stale.yml +0 -0
  20. {isar-1.12.3 → isar-1.12.5}/.gitignore +0 -0
  21. {isar-1.12.3 → isar-1.12.5}/.pre-commit-config.yaml +0 -0
  22. {isar-1.12.3 → isar-1.12.5}/Dockerfile +0 -0
  23. {isar-1.12.3 → isar-1.12.5}/LICENSE +0 -0
  24. {isar-1.12.3 → isar-1.12.5}/README.md +0 -0
  25. {isar-1.12.3 → isar-1.12.5}/docker-compose-turtlebot.yml +0 -0
  26. {isar-1.12.3 → isar-1.12.5}/docker-compose.yml +0 -0
  27. {isar-1.12.3 → isar-1.12.5}/docs/Makefile +0 -0
  28. {isar-1.12.3 → isar-1.12.5}/docs/make.bat +0 -0
  29. {isar-1.12.3 → isar-1.12.5}/docs/rst_processing.py +0 -0
  30. {isar-1.12.3 → isar-1.12.5}/docs/source/conf.py +0 -0
  31. {isar-1.12.3 → isar-1.12.5}/docs/source/index.rst +0 -0
  32. {isar-1.12.3 → isar-1.12.5}/docs/source/readme_link.md +0 -0
  33. {isar-1.12.3 → isar-1.12.5}/docs/state_machine_diagram.png +0 -0
  34. {isar-1.12.3 → isar-1.12.5}/pyproject.toml +0 -0
  35. {isar-1.12.3 → isar-1.12.5}/setup.cfg +0 -0
  36. {isar-1.12.3 → isar-1.12.5}/setup.py +0 -0
  37. {isar-1.12.3 → isar-1.12.5}/src/isar/__init__.py +0 -0
  38. {isar-1.12.3 → isar-1.12.5}/src/isar/apis/__init__.py +0 -0
  39. {isar-1.12.3 → isar-1.12.5}/src/isar/apis/models/__init__.py +0 -0
  40. {isar-1.12.3 → isar-1.12.5}/src/isar/apis/models/models.py +0 -0
  41. {isar-1.12.3 → isar-1.12.5}/src/isar/apis/models/start_mission_definition.py +0 -0
  42. {isar-1.12.3 → isar-1.12.5}/src/isar/apis/schedule/__init__.py +0 -0
  43. {isar-1.12.3 → isar-1.12.5}/src/isar/apis/schedule/scheduling_controller.py +0 -0
  44. {isar-1.12.3 → isar-1.12.5}/src/isar/apis/security/__init__.py +0 -0
  45. {isar-1.12.3 → isar-1.12.5}/src/isar/config/__init__.py +0 -0
  46. {isar-1.12.3 → isar-1.12.5}/src/isar/config/certs/ca-cert.pem +0 -0
  47. {isar-1.12.3 → isar-1.12.5}/src/isar/config/configuration_error.py +0 -0
  48. {isar-1.12.3 → isar-1.12.5}/src/isar/config/keyvault/__init__.py +0 -0
  49. {isar-1.12.3 → isar-1.12.5}/src/isar/config/keyvault/keyvault_error.py +0 -0
  50. {isar-1.12.3 → isar-1.12.5}/src/isar/config/keyvault/keyvault_service.py +0 -0
  51. {isar-1.12.3 → isar-1.12.5}/src/isar/config/log.py +0 -0
  52. {isar-1.12.3 → isar-1.12.5}/src/isar/config/logging.conf +0 -0
  53. {isar-1.12.3 → isar-1.12.5}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
  54. {isar-1.12.3 → isar-1.12.5}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
  55. {isar-1.12.3 → isar-1.12.5}/src/isar/config/maps/default_map.json +0 -0
  56. {isar-1.12.3 → isar-1.12.5}/src/isar/config/maps/klab_b.json +0 -0
  57. {isar-1.12.3 → isar-1.12.5}/src/isar/config/maps/klab_compressor.json +0 -0
  58. {isar-1.12.3 → isar-1.12.5}/src/isar/config/maps/klab_turtlebot.json +0 -0
  59. {isar-1.12.3 → isar-1.12.5}/src/isar/config/maps/turtleworld.json +0 -0
  60. {isar-1.12.3 → isar-1.12.5}/src/isar/config/predefined_mission_definition/__init__.py +0 -0
  61. {isar-1.12.3 → isar-1.12.5}/src/isar/config/predefined_mission_definition/default_mission.json +0 -0
  62. {isar-1.12.3 → isar-1.12.5}/src/isar/config/predefined_mission_definition/default_turtlebot.json +0 -0
  63. {isar-1.12.3 → isar-1.12.5}/src/isar/config/predefined_missions/__init__.py +0 -0
  64. {isar-1.12.3 → isar-1.12.5}/src/isar/config/predefined_missions/default.json +0 -0
  65. {isar-1.12.3 → isar-1.12.5}/src/isar/config/predefined_missions/default_turtlebot.json +0 -0
  66. {isar-1.12.3 → isar-1.12.5}/src/isar/config/predefined_poses/__init__.py +0 -0
  67. {isar-1.12.3 → isar-1.12.5}/src/isar/config/predefined_poses/predefined_poses.py +0 -0
  68. {isar-1.12.3 → isar-1.12.5}/src/isar/config/settings.env +0 -0
  69. {isar-1.12.3 → isar-1.12.5}/src/isar/mission_planner/__init__.py +0 -0
  70. {isar-1.12.3 → isar-1.12.5}/src/isar/mission_planner/echo_planner.py +0 -0
  71. {isar-1.12.3 → isar-1.12.5}/src/isar/mission_planner/local_planner.py +0 -0
  72. {isar-1.12.3 → isar-1.12.5}/src/isar/mission_planner/mission_planner_interface.py +0 -0
  73. {isar-1.12.3 → isar-1.12.5}/src/isar/mission_planner/sequential_task_selector.py +0 -0
  74. {isar-1.12.3 → isar-1.12.5}/src/isar/mission_planner/task_selector_interface.py +0 -0
  75. {isar-1.12.3 → isar-1.12.5}/src/isar/models/__init__.py +0 -0
  76. {isar-1.12.3 → isar-1.12.5}/src/isar/models/communication/__init__.py +0 -0
  77. {isar-1.12.3 → isar-1.12.5}/src/isar/models/communication/message.py +0 -0
  78. {isar-1.12.3 → isar-1.12.5}/src/isar/models/communication/queues/__init__.py +0 -0
  79. {isar-1.12.3 → isar-1.12.5}/src/isar/models/communication/queues/queue_io.py +0 -0
  80. {isar-1.12.3 → isar-1.12.5}/src/isar/models/communication/queues/queue_timeout_error.py +0 -0
  81. {isar-1.12.3 → isar-1.12.5}/src/isar/models/communication/queues/queues.py +0 -0
  82. {isar-1.12.3 → isar-1.12.5}/src/isar/models/communication/queues/status_queue.py +0 -0
  83. {isar-1.12.3 → isar-1.12.5}/src/isar/models/mission/__init__.py +0 -0
  84. {isar-1.12.3 → isar-1.12.5}/src/isar/models/mission/mission.py +0 -0
  85. {isar-1.12.3 → isar-1.12.5}/src/isar/models/mission/status.py +0 -0
  86. {isar-1.12.3 → isar-1.12.5}/src/isar/models/mission_metadata/__init__.py +0 -0
  87. {isar-1.12.3 → isar-1.12.5}/src/isar/models/mission_metadata/mission_metadata.py +0 -0
  88. {isar-1.12.3 → isar-1.12.5}/src/isar/modules.py +0 -0
  89. {isar-1.12.3 → isar-1.12.5}/src/isar/services/__init__.py +0 -0
  90. {isar-1.12.3 → isar-1.12.5}/src/isar/services/auth/__init__.py +0 -0
  91. {isar-1.12.3 → isar-1.12.5}/src/isar/services/auth/azure_credentials.py +0 -0
  92. {isar-1.12.3 → isar-1.12.5}/src/isar/services/readers/__init__.py +0 -0
  93. {isar-1.12.3 → isar-1.12.5}/src/isar/services/readers/base_reader.py +0 -0
  94. {isar-1.12.3 → isar-1.12.5}/src/isar/services/service_connections/__init__.py +0 -0
  95. {isar-1.12.3 → isar-1.12.5}/src/isar/services/service_connections/mqtt/__init__.py +0 -0
  96. {isar-1.12.3 → isar-1.12.5}/src/isar/services/service_connections/mqtt/mqtt_client.py +0 -0
  97. {isar-1.12.3 → isar-1.12.5}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +0 -0
  98. {isar-1.12.3 → isar-1.12.5}/src/isar/services/service_connections/mqtt/robot_status_publisher.py +0 -0
  99. {isar-1.12.3 → isar-1.12.5}/src/isar/services/service_connections/request_handler.py +0 -0
  100. {isar-1.12.3 → isar-1.12.5}/src/isar/services/service_connections/stid/__init__.py +0 -0
  101. {isar-1.12.3 → isar-1.12.5}/src/isar/services/service_connections/stid/stid_service.py +0 -0
  102. {isar-1.12.3 → isar-1.12.5}/src/isar/services/utilities/__init__.py +0 -0
  103. {isar-1.12.3 → isar-1.12.5}/src/isar/services/utilities/queue_utilities.py +0 -0
  104. {isar-1.12.3 → isar-1.12.5}/src/isar/services/utilities/scheduling_utilities.py +0 -0
  105. {isar-1.12.3 → isar-1.12.5}/src/isar/services/utilities/threaded_request.py +0 -0
  106. {isar-1.12.3 → isar-1.12.5}/src/isar/state_machine/__init__.py +0 -0
  107. {isar-1.12.3 → isar-1.12.5}/src/isar/state_machine/state_machine.py +0 -0
  108. {isar-1.12.3 → isar-1.12.5}/src/isar/state_machine/states/__init__.py +0 -0
  109. {isar-1.12.3 → isar-1.12.5}/src/isar/state_machine/states/idle.py +0 -0
  110. {isar-1.12.3 → isar-1.12.5}/src/isar/state_machine/states/initialize.py +0 -0
  111. {isar-1.12.3 → isar-1.12.5}/src/isar/state_machine/states/initiate_step.py +0 -0
  112. {isar-1.12.3 → isar-1.12.5}/src/isar/state_machine/states/monitor.py +0 -0
  113. {isar-1.12.3 → isar-1.12.5}/src/isar/state_machine/states/off.py +0 -0
  114. {isar-1.12.3 → isar-1.12.5}/src/isar/state_machine/states/paused.py +0 -0
  115. {isar-1.12.3 → isar-1.12.5}/src/isar/state_machine/states/stop_step.py +0 -0
  116. {isar-1.12.3 → isar-1.12.5}/src/isar/state_machine/states_enum.py +0 -0
  117. {isar-1.12.3 → isar-1.12.5}/src/isar/storage/__init__.py +0 -0
  118. {isar-1.12.3 → isar-1.12.5}/src/isar/storage/blob_storage.py +0 -0
  119. {isar-1.12.3 → isar-1.12.5}/src/isar/storage/local_storage.py +0 -0
  120. {isar-1.12.3 → isar-1.12.5}/src/isar/storage/slimm_storage.py +0 -0
  121. {isar-1.12.3 → isar-1.12.5}/src/isar/storage/storage_interface.py +0 -0
  122. {isar-1.12.3 → isar-1.12.5}/src/isar/storage/uploader.py +0 -0
  123. {isar-1.12.3 → isar-1.12.5}/src/isar/storage/utilities.py +0 -0
  124. {isar-1.12.3 → isar-1.12.5}/src/isar.egg-info/SOURCES.txt +0 -0
  125. {isar-1.12.3 → isar-1.12.5}/src/isar.egg-info/dependency_links.txt +0 -0
  126. {isar-1.12.3 → isar-1.12.5}/src/isar.egg-info/requires.txt +0 -0
  127. {isar-1.12.3 → isar-1.12.5}/src/isar.egg-info/top_level.txt +0 -0
  128. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/__init__.py +0 -0
  129. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/models/__init__.py +0 -0
  130. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/models/exceptions/__init__.py +0 -0
  131. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/models/exceptions/robot_exceptions.py +0 -0
  132. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/models/initialize/__init__.py +0 -0
  133. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/models/initialize/initialize_params.py +0 -0
  134. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/models/inspection/__init__.py +0 -0
  135. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/models/mission/__init__.py +0 -0
  136. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/models/mission/status.py +0 -0
  137. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/models/mission/step.py +0 -0
  138. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/models/robots/__init__.py +0 -0
  139. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/models/robots/robot_model.py +0 -0
  140. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/robot_interface.py +0 -0
  141. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/telemetry/__init__.py +0 -0
  142. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/telemetry/mqtt_client.py +0 -0
  143. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/telemetry/payloads.py +0 -0
  144. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/test_robot_interface.py +0 -0
  145. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/utilities/__init__.py +0 -0
  146. {isar-1.12.3 → isar-1.12.5}/src/robot_interface/utilities/json_service.py +0 -0
  147. {isar-1.12.3 → isar-1.12.5}/tests/__init__.py +0 -0
  148. {isar-1.12.3 → isar-1.12.5}/tests/conftest.py +0 -0
  149. {isar-1.12.3 → isar-1.12.5}/tests/integration/__init__.py +0 -0
  150. {isar-1.12.3 → isar-1.12.5}/tests/integration/turtlebot/__init__.py +0 -0
  151. {isar-1.12.3 → isar-1.12.5}/tests/integration/turtlebot/config/__init__.py +0 -0
  152. {isar-1.12.3 → isar-1.12.5}/tests/integration/turtlebot/config/maps/__init__.py +0 -0
  153. {isar-1.12.3 → isar-1.12.5}/tests/integration/turtlebot/config/maps/turtleworld.json +0 -0
  154. {isar-1.12.3 → isar-1.12.5}/tests/integration/turtlebot/config/missions/__init__.py +0 -0
  155. {isar-1.12.3 → isar-1.12.5}/tests/integration/turtlebot/config/missions/default.json +0 -0
  156. {isar-1.12.3 → isar-1.12.5}/tests/integration/turtlebot/test_successful_mission.py +0 -0
  157. {isar-1.12.3 → isar-1.12.5}/tests/isar/__init__.py +0 -0
  158. {isar-1.12.3 → isar-1.12.5}/tests/isar/apis/__init__.py +0 -0
  159. {isar-1.12.3 → isar-1.12.5}/tests/isar/apis/scheduler/__init__.py +0 -0
  160. {isar-1.12.3 → isar-1.12.5}/tests/isar/apis/scheduler/test_scheduler_router.py +0 -0
  161. {isar-1.12.3 → isar-1.12.5}/tests/isar/apis/security/__init__.py +0 -0
  162. {isar-1.12.3 → isar-1.12.5}/tests/isar/apis/security/test_authentication.py +0 -0
  163. {isar-1.12.3 → isar-1.12.5}/tests/isar/models/__init__.py +0 -0
  164. {isar-1.12.3 → isar-1.12.5}/tests/isar/models/communication/__init__.py +0 -0
  165. {isar-1.12.3 → isar-1.12.5}/tests/isar/models/communication/test_queues.py +0 -0
  166. {isar-1.12.3 → isar-1.12.5}/tests/isar/services/__init__.py +0 -0
  167. {isar-1.12.3 → isar-1.12.5}/tests/isar/services/readers/__init__.py +0 -0
  168. {isar-1.12.3 → isar-1.12.5}/tests/isar/services/readers/test_base_reader.py +0 -0
  169. {isar-1.12.3 → isar-1.12.5}/tests/isar/services/readers/test_mission_reader.py +0 -0
  170. {isar-1.12.3 → isar-1.12.5}/tests/isar/services/service_connections/__init__.py +0 -0
  171. {isar-1.12.3 → isar-1.12.5}/tests/isar/services/service_connections/echo/__init__.py +0 -0
  172. {isar-1.12.3 → isar-1.12.5}/tests/isar/services/service_connections/echo/test_echo_service.py +0 -0
  173. {isar-1.12.3 → isar-1.12.5}/tests/isar/services/service_connections/stid/__init__.py +0 -0
  174. {isar-1.12.3 → isar-1.12.5}/tests/isar/services/service_connections/stid/test_stid_service.py +0 -0
  175. {isar-1.12.3 → isar-1.12.5}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
  176. {isar-1.12.3 → isar-1.12.5}/tests/isar/services/utilities/__init__.py +0 -0
  177. {isar-1.12.3 → isar-1.12.5}/tests/isar/services/utilities/test_queue_utilities.py +0 -0
  178. {isar-1.12.3 → isar-1.12.5}/tests/isar/services/utilities/test_scheduling_utilities.py +0 -0
  179. {isar-1.12.3 → isar-1.12.5}/tests/isar/state_machine/__init__.py +0 -0
  180. {isar-1.12.3 → isar-1.12.5}/tests/isar/state_machine/states/__init__.py +0 -0
  181. {isar-1.12.3 → isar-1.12.5}/tests/isar/state_machine/states/test_monitor.py +0 -0
  182. {isar-1.12.3 → isar-1.12.5}/tests/isar/state_machine/test_state_machine.py +0 -0
  183. {isar-1.12.3 → isar-1.12.5}/tests/isar/storage/test_blob_storage.py +0 -0
  184. {isar-1.12.3 → isar-1.12.5}/tests/isar/storage/test_uploader.py +0 -0
  185. {isar-1.12.3 → isar-1.12.5}/tests/mocks/__init__.py +0 -0
  186. {isar-1.12.3 → isar-1.12.5}/tests/mocks/blob_storage.py +0 -0
  187. {isar-1.12.3 → isar-1.12.5}/tests/mocks/mission_definition.py +0 -0
  188. {isar-1.12.3 → isar-1.12.5}/tests/mocks/mqtt_client.py +0 -0
  189. {isar-1.12.3 → isar-1.12.5}/tests/mocks/pose.py +0 -0
  190. {isar-1.12.3 → isar-1.12.5}/tests/mocks/request.py +0 -0
  191. {isar-1.12.3 → isar-1.12.5}/tests/mocks/robot_interface.py +0 -0
  192. {isar-1.12.3 → isar-1.12.5}/tests/mocks/status.py +0 -0
  193. {isar-1.12.3 → isar-1.12.5}/tests/mocks/step.py +0 -0
  194. {isar-1.12.3 → isar-1.12.5}/tests/mocks/task.py +0 -0
  195. {isar-1.12.3 → isar-1.12.5}/tests/mocks/token.py +0 -0
  196. {isar-1.12.3 → isar-1.12.5}/tests/test_data/test_json_file.json +0 -0
  197. {isar-1.12.3 → isar-1.12.5}/tests/test_data/test_map_config/test_map_config.json +0 -0
  198. {isar-1.12.3 → isar-1.12.5}/tests/test_data/test_mission_not_working.json +0 -0
  199. {isar-1.12.3 → isar-1.12.5}/tests/test_data/test_mission_working.json +0 -0
  200. {isar-1.12.3 → isar-1.12.5}/tests/test_data/test_mission_working_no_tasks.json +0 -0
  201. {isar-1.12.3 → isar-1.12.5}/tests/test_data/test_thermal_image_mission.json +0 -0
  202. {isar-1.12.3 → isar-1.12.5}/tests/test_modules.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: isar
3
- Version: 1.12.3
3
+ Version: 1.12.5
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,4 +1,6 @@
1
1
  import logging
2
+ import os
3
+ import time
2
4
  from logging import Logger
3
5
  from threading import Thread
4
6
  from typing import List
@@ -93,6 +95,9 @@ if __name__ == "__main__":
93
95
  thread.start()
94
96
  logger.info(f"Started thread: {thread.name}")
95
97
 
96
- for thread in threads:
97
- thread.join()
98
- logger.info(f"Joined thread: {thread.name}")
98
+ while True:
99
+ for thread in threads:
100
+ if not thread.is_alive():
101
+ logger.critical("Thread '%s' failed - ISAR shutting down", thread.name)
102
+ exit(1)
103
+ time.sleep(state_machine.sleep_time)
@@ -27,7 +27,7 @@ spec:
27
27
  environmentConfig:
28
28
  - environment: dev
29
29
  variables:
30
- AZURE_CLIENT_ID: b29bed99-7637-4fdc-8809-48c777a9b714
30
+ AZURE_CLIENT_ID: fd384acd-5c1b-4c44-a1ac-d41d720ed0fe
31
31
  runAsNonRoot: true
32
32
  secrets:
33
33
  - AZURE_CLIENT_SECRET
@@ -1,22 +1,21 @@
1
1
  import logging
2
+ import os
2
3
  from http import HTTPStatus
3
4
  from logging import Logger
4
- import os
5
5
  from typing import List, Union
6
6
 
7
7
  import click
8
8
  import uvicorn
9
- from fastapi import FastAPI, Security, Request
9
+ from fastapi import FastAPI, Request, Security
10
10
  from fastapi.middleware.cors import CORSMiddleware
11
11
  from fastapi.routing import APIRouter
12
12
  from injector import inject
13
- from pydantic import AnyHttpUrl
14
-
15
13
  from opencensus.ext.azure.trace_exporter import AzureExporter
14
+ from opencensus.trace.attributes_helper import COMMON_ATTRIBUTES
16
15
  from opencensus.trace.samplers import ProbabilitySampler
17
- from opencensus.trace.tracer import Tracer
18
16
  from opencensus.trace.span import SpanKind
19
- from opencensus.trace.attributes_helper import COMMON_ATTRIBUTES
17
+ from opencensus.trace.tracer import Tracer
18
+ from pydantic import AnyHttpUrl
20
19
 
21
20
  from isar.apis.models.models import ControlMissionResponse, StartMissionResponse
22
21
  from isar.apis.schedule.scheduling_controller import SchedulingController
@@ -76,7 +75,7 @@ class API:
76
75
  swagger_ui_oauth2_redirect_url="/oauth2-redirect",
77
76
  swagger_ui_init_oauth={
78
77
  "usePkceWithAuthorizationCodeGrant": True,
79
- "clientId": self.authenticator.openapi_client_id,
78
+ "clientId": settings.AZURE_CLIENT_ID,
80
79
  },
81
80
  )
82
81
 
@@ -21,10 +21,10 @@ class NoSecurity(SecurityBase):
21
21
 
22
22
 
23
23
  azure_scheme = SingleTenantAzureAuthorizationCodeBearer(
24
- app_client_id=settings.APP_CLIENT_ID,
24
+ app_client_id=settings.AZURE_CLIENT_ID,
25
25
  tenant_id=settings.AZURE_TENANT_ID,
26
26
  scopes={
27
- f"api://{settings.APP_CLIENT_ID}/user_impersonation": "user_impersonation",
27
+ f"api://{settings.AZURE_CLIENT_ID}/user_impersonation": "user_impersonation",
28
28
  },
29
29
  )
30
30
 
@@ -32,7 +32,7 @@ azure_scheme = SingleTenantAzureAuthorizationCodeBearer(
32
32
  async def validate_has_role(user: User = Depends(azure_scheme)) -> None:
33
33
  """
34
34
  Validate if the user has the required role in order to access the API.
35
- Raises a 401 authorization error if not.
35
+ Raises a 403 authorization error if not.
36
36
  """
37
37
  if settings.REQUIRED_ROLE not in user.roles:
38
38
  raise InvalidAuth(
@@ -43,11 +43,9 @@ async def validate_has_role(user: User = Depends(azure_scheme)) -> None:
43
43
  class Authenticator:
44
44
  def __init__(
45
45
  self,
46
- openapi_client_id: str = settings.OPENAPI_CLIENT_ID,
47
46
  authentication_enabled: bool = settings.AUTHENTICATION_ENABLED,
48
47
  ) -> None:
49
48
  self.logger = logging.getLogger("api")
50
- self.openapi_client_id: str = openapi_client_id
51
49
  self.authentication_enabled: bool = authentication_enabled
52
50
  enabled_string = "enabled" if self.authentication_enabled else "disabled"
53
51
  self.logger.info(f"API authentication is {enabled_string}")
@@ -1,6 +1,7 @@
1
1
  import importlib.resources as pkg_resources
2
2
  import os
3
3
  from typing import List
4
+
4
5
  from dotenv import load_dotenv
5
6
  from pydantic import BaseSettings, Field, validator
6
7
 
@@ -100,11 +101,15 @@ class Settings(BaseSettings):
100
101
  # Tenant ID for the Azure tenant with your Azure Active Directory application
101
102
  AZURE_TENANT_ID: str = Field(default="3aa4a235-b6e2-48d5-9195-7fcf05b459b0")
102
103
 
103
- # Client ID for the API client
104
- APP_CLIENT_ID: str = Field(default="68cca82d-84e7-495c-96b4-4c32509f2a46")
105
-
106
- # Client ID for the OpenAPI client
107
- OPENAPI_CLIENT_ID: str = Field(default="5f412c20-8c36-4c69-898f-d2b5051f5fb6")
104
+ # Client ID for ISAR
105
+ AZURE_CLIENT_ID: str = Field(default="fd384acd-5c1b-4c44-a1ac-d41d720ed0fe")
106
+ # If AZURE_CLIENT_ID is set as an environment variable, overwrite this despite missing prefix.
107
+ # This is done to avoid double config of ISAR_AZURE_CLIENT_ID and AZURE_CLIENT_ID.
108
+ # We need the latter as an environment variable for the EnvironmentCredential method for AzureAD.
109
+ azure_client_id_name: str = "AZURE_CLIENT_ID"
110
+ if os.environ.get(azure_client_id_name) is not None:
111
+ print("Using environment variable for AZURE_CLIENT_ID")
112
+ AZURE_CLIENT_ID = os.environ[azure_client_id_name]
108
113
 
109
114
  # MQTT username
110
115
  # The username and password is set by the MQTT broker and must be known in advance
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: isar
3
- Version: 1.12.3
3
+ Version: 1.12.5
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,7 +1,7 @@
1
1
  from abc import ABC
2
2
  from dataclasses import dataclass, field
3
3
  from datetime import datetime
4
- from typing import List, Optional
4
+ from typing import List, Optional, Type
5
5
  from uuid import UUID, uuid4
6
6
 
7
7
  from alitra import Pose
@@ -43,22 +43,42 @@ class Inspection:
43
43
  metadata: InspectionMetadata
44
44
  data: Optional[bytes] = field(default=None, init=False)
45
45
 
46
+ @staticmethod
47
+ def get_metadata_type() -> Type[InspectionMetadata]:
48
+ return InspectionMetadata
49
+
46
50
 
47
51
  @dataclass
48
52
  class Image(Inspection):
49
53
  metadata: ImageMetadata
50
54
 
55
+ @staticmethod
56
+ def get_metadata_type() -> Type[InspectionMetadata]:
57
+ return ImageMetadata
58
+
51
59
 
52
60
  @dataclass
53
61
  class ThermalImage(Inspection):
54
62
  metadata: ThermalImageMetadata
55
63
 
64
+ @staticmethod
65
+ def get_metadata_type() -> Type[InspectionMetadata]:
66
+ return ThermalImageMetadata
67
+
56
68
 
57
69
  @dataclass
58
70
  class Video(Inspection):
59
71
  metadata: VideoMetadata
60
72
 
73
+ @staticmethod
74
+ def get_metadata_type() -> Type[InspectionMetadata]:
75
+ return VideoMetadata
76
+
61
77
 
62
78
  @dataclass
63
79
  class ThermalVideo(Inspection):
64
80
  metadata: ThermalVideoMetadata
81
+
82
+ @staticmethod
83
+ def get_metadata_type() -> Type[InspectionMetadata]:
84
+ return ThermalVideoMetadata
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
File without changes
File without changes
File without changes
File without changes
File without changes