isar 1.22.0__tar.gz → 1.22.1__tar.gz

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

Potentially problematic release.


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

Files changed (205) hide show
  1. {isar-1.22.0 → isar-1.22.1}/.github/workflows/pythonpackage.yml +11 -2
  2. {isar-1.22.0 → isar-1.22.1}/PKG-INFO +4 -2
  3. {isar-1.22.0 → isar-1.22.1}/pyproject.toml +3 -1
  4. {isar-1.22.0 → isar-1.22.1}/requirements.txt +37 -85
  5. {isar-1.22.0 → isar-1.22.1}/src/isar/apis/models/start_mission_definition.py +21 -15
  6. {isar-1.22.0 → isar-1.22.1}/src/isar/config/settings.py +4 -1
  7. {isar-1.22.0 → isar-1.22.1}/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +2 -2
  8. {isar-1.22.0 → isar-1.22.1}/src/isar/services/service_connections/mqtt/robot_info_publisher.py +3 -2
  9. {isar-1.22.0 → isar-1.22.1}/src/isar/state_machine/state_machine.py +17 -15
  10. {isar-1.22.0 → isar-1.22.1}/src/isar/state_machine/states/monitor.py +75 -80
  11. {isar-1.22.0 → isar-1.22.1}/src/isar/storage/uploader.py +8 -6
  12. {isar-1.22.0 → isar-1.22.1}/src/isar/storage/utilities.py +3 -3
  13. {isar-1.22.0 → isar-1.22.1}/src/isar.egg-info/PKG-INFO +4 -2
  14. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/models/mission/mission.py +2 -0
  15. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/models/mission/task.py +8 -5
  16. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/telemetry/mqtt_client.py +2 -2
  17. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/telemetry/payloads.py +7 -0
  18. {isar-1.22.0 → isar-1.22.1}/tests/integration/turtlebot/test_successful_mission.py +3 -3
  19. {isar-1.22.0 → isar-1.22.1}/tests/isar/state_machine/states/test_monitor.py +1 -1
  20. {isar-1.22.0 → isar-1.22.1}/.dockerignore +0 -0
  21. {isar-1.22.0 → isar-1.22.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  22. {isar-1.22.0 → isar-1.22.1}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  23. {isar-1.22.0 → isar-1.22.1}/.github/ISSUE_TEMPLATE/improvement.md +0 -0
  24. {isar-1.22.0 → isar-1.22.1}/.github/release.yml +0 -0
  25. {isar-1.22.0 → isar-1.22.1}/.github/workflows/compile_requirements.yml +0 -0
  26. {isar-1.22.0 → isar-1.22.1}/.github/workflows/project_automations.yml +0 -0
  27. {isar-1.22.0 → isar-1.22.1}/.github/workflows/publish_isar_base_image.yml +0 -0
  28. {isar-1.22.0 → isar-1.22.1}/.github/workflows/pythonpublish.yml +0 -0
  29. {isar-1.22.0 → isar-1.22.1}/.github/workflows/stale.yml +0 -0
  30. {isar-1.22.0 → isar-1.22.1}/.gitignore +0 -0
  31. {isar-1.22.0 → isar-1.22.1}/.pre-commit-config.yaml +0 -0
  32. {isar-1.22.0 → isar-1.22.1}/Dockerfile +0 -0
  33. {isar-1.22.0 → isar-1.22.1}/LICENSE +0 -0
  34. {isar-1.22.0 → isar-1.22.1}/README.md +0 -0
  35. {isar-1.22.0 → isar-1.22.1}/SECURITY.md +0 -0
  36. {isar-1.22.0 → isar-1.22.1}/docker-compose-turtlebot.yml +0 -0
  37. {isar-1.22.0 → isar-1.22.1}/docker-compose.yml +0 -0
  38. {isar-1.22.0 → isar-1.22.1}/docs/Makefile +0 -0
  39. {isar-1.22.0 → isar-1.22.1}/docs/make.bat +0 -0
  40. {isar-1.22.0 → isar-1.22.1}/docs/rst_processing.py +0 -0
  41. {isar-1.22.0 → isar-1.22.1}/docs/source/conf.py +0 -0
  42. {isar-1.22.0 → isar-1.22.1}/docs/source/index.rst +0 -0
  43. {isar-1.22.0 → isar-1.22.1}/docs/source/readme_link.md +0 -0
  44. {isar-1.22.0 → isar-1.22.1}/docs/state_machine_diagram.png +0 -0
  45. {isar-1.22.0 → isar-1.22.1}/main.py +0 -0
  46. {isar-1.22.0 → isar-1.22.1}/radixconfig.yml +0 -0
  47. {isar-1.22.0 → isar-1.22.1}/setup.cfg +0 -0
  48. {isar-1.22.0 → isar-1.22.1}/src/isar/__init__.py +0 -0
  49. {isar-1.22.0/tests/mocks → isar-1.22.1/src/isar/apis}/__init__.py +0 -0
  50. {isar-1.22.0 → isar-1.22.1}/src/isar/apis/api.py +0 -0
  51. {isar-1.22.0 → isar-1.22.1}/src/isar/apis/models/__init__.py +0 -0
  52. {isar-1.22.0 → isar-1.22.1}/src/isar/apis/models/models.py +0 -0
  53. {isar-1.22.0/tests/isar/state_machine/states → isar-1.22.1/src/isar/apis/schedule}/__init__.py +0 -0
  54. {isar-1.22.0 → isar-1.22.1}/src/isar/apis/schedule/scheduling_controller.py +0 -0
  55. {isar-1.22.0/tests/isar/state_machine → isar-1.22.1/src/isar/apis/security}/__init__.py +0 -0
  56. {isar-1.22.0 → isar-1.22.1}/src/isar/apis/security/authentication.py +0 -0
  57. {isar-1.22.0/tests/isar/services/utilities → isar-1.22.1/src/isar/config}/__init__.py +0 -0
  58. {isar-1.22.0 → isar-1.22.1}/src/isar/config/certs/ca-cert.pem +0 -0
  59. {isar-1.22.0 → isar-1.22.1}/src/isar/config/configuration_error.py +0 -0
  60. {isar-1.22.0/tests/isar/services/service_connections/echo → isar-1.22.1/src/isar/config/keyvault}/__init__.py +0 -0
  61. {isar-1.22.0 → isar-1.22.1}/src/isar/config/keyvault/keyvault_error.py +0 -0
  62. {isar-1.22.0 → isar-1.22.1}/src/isar/config/keyvault/keyvault_service.py +0 -0
  63. {isar-1.22.0 → isar-1.22.1}/src/isar/config/log.py +0 -0
  64. {isar-1.22.0 → isar-1.22.1}/src/isar/config/logging.conf +0 -0
  65. {isar-1.22.0 → isar-1.22.1}/src/isar/config/maps/JSP1_intermediate_deck.json +0 -0
  66. {isar-1.22.0 → isar-1.22.1}/src/isar/config/maps/JSP1_weather_deck.json +0 -0
  67. {isar-1.22.0 → isar-1.22.1}/src/isar/config/maps/default_map.json +0 -0
  68. {isar-1.22.0 → isar-1.22.1}/src/isar/config/maps/klab_b.json +0 -0
  69. {isar-1.22.0 → isar-1.22.1}/src/isar/config/maps/klab_compressor.json +0 -0
  70. {isar-1.22.0 → isar-1.22.1}/src/isar/config/maps/klab_turtlebot.json +0 -0
  71. {isar-1.22.0/tests/integration/turtlebot → isar-1.22.1/src/isar}/config/maps/turtleworld.json +0 -0
  72. {isar-1.22.0/tests/isar/services/service_connections → isar-1.22.1/src/isar/config/predefined_mission_definition}/__init__.py +0 -0
  73. {isar-1.22.0 → isar-1.22.1}/src/isar/config/predefined_mission_definition/default_exr.json +0 -0
  74. {isar-1.22.0 → isar-1.22.1}/src/isar/config/predefined_mission_definition/default_mission.json +0 -0
  75. {isar-1.22.0 → isar-1.22.1}/src/isar/config/predefined_mission_definition/default_turtlebot.json +0 -0
  76. {isar-1.22.0/tests/isar/services/readers → isar-1.22.1/src/isar/config/predefined_missions}/__init__.py +0 -0
  77. {isar-1.22.0 → isar-1.22.1}/src/isar/config/predefined_missions/default.json +0 -0
  78. {isar-1.22.0 → isar-1.22.1}/src/isar/config/predefined_missions/default_turtlebot.json +0 -0
  79. {isar-1.22.0/tests/isar/services → isar-1.22.1/src/isar/config/predefined_poses}/__init__.py +0 -0
  80. {isar-1.22.0 → isar-1.22.1}/src/isar/config/predefined_poses/predefined_poses.py +0 -0
  81. {isar-1.22.0 → isar-1.22.1}/src/isar/config/settings.env +0 -0
  82. {isar-1.22.0/tests/isar/models/communication → isar-1.22.1/src/isar/mission_planner}/__init__.py +0 -0
  83. {isar-1.22.0 → isar-1.22.1}/src/isar/mission_planner/local_planner.py +0 -0
  84. {isar-1.22.0 → isar-1.22.1}/src/isar/mission_planner/mission_planner_interface.py +0 -0
  85. {isar-1.22.0 → isar-1.22.1}/src/isar/mission_planner/sequential_task_selector.py +0 -0
  86. {isar-1.22.0 → isar-1.22.1}/src/isar/mission_planner/task_selector_interface.py +0 -0
  87. {isar-1.22.0/tests → isar-1.22.1/src}/isar/models/__init__.py +0 -0
  88. {isar-1.22.0/tests/isar/mission → isar-1.22.1/src/isar/models/communication}/__init__.py +0 -0
  89. {isar-1.22.0 → isar-1.22.1}/src/isar/models/communication/message.py +0 -0
  90. {isar-1.22.0 → isar-1.22.1}/src/isar/models/communication/queues/__init__.py +0 -0
  91. {isar-1.22.0 → isar-1.22.1}/src/isar/models/communication/queues/queue_io.py +0 -0
  92. {isar-1.22.0 → isar-1.22.1}/src/isar/models/communication/queues/queue_timeout_error.py +0 -0
  93. {isar-1.22.0 → isar-1.22.1}/src/isar/models/communication/queues/queues.py +0 -0
  94. {isar-1.22.0 → isar-1.22.1}/src/isar/models/communication/queues/status_queue.py +0 -0
  95. {isar-1.22.0/tests/isar/apis/security → isar-1.22.1/src/isar/models/mission_metadata}/__init__.py +0 -0
  96. {isar-1.22.0 → isar-1.22.1}/src/isar/modules.py +0 -0
  97. {isar-1.22.0 → isar-1.22.1}/src/isar/script.py +0 -0
  98. {isar-1.22.0/tests/isar/apis/scheduler → isar-1.22.1/src/isar/services}/__init__.py +0 -0
  99. {isar-1.22.0/tests/isar/apis → isar-1.22.1/src/isar/services/auth}/__init__.py +0 -0
  100. {isar-1.22.0 → isar-1.22.1}/src/isar/services/auth/azure_credentials.py +0 -0
  101. {isar-1.22.0/tests/isar → isar-1.22.1/src/isar/services/readers}/__init__.py +0 -0
  102. {isar-1.22.0 → isar-1.22.1}/src/isar/services/readers/base_reader.py +0 -0
  103. {isar-1.22.0/tests/integration/turtlebot/config/missions → isar-1.22.1/src/isar/services/service_connections}/__init__.py +0 -0
  104. {isar-1.22.0/tests/integration/turtlebot/config/maps → isar-1.22.1/src/isar/services/service_connections/mqtt}/__init__.py +0 -0
  105. {isar-1.22.0 → isar-1.22.1}/src/isar/services/service_connections/mqtt/mqtt_client.py +0 -0
  106. {isar-1.22.0 → isar-1.22.1}/src/isar/services/service_connections/request_handler.py +0 -0
  107. {isar-1.22.0/tests/integration/turtlebot/config → isar-1.22.1/src/isar/services/service_connections/stid}/__init__.py +0 -0
  108. {isar-1.22.0/tests/integration/turtlebot → isar-1.22.1/src/isar/services/utilities}/__init__.py +0 -0
  109. {isar-1.22.0 → isar-1.22.1}/src/isar/services/utilities/queue_utilities.py +0 -0
  110. {isar-1.22.0 → isar-1.22.1}/src/isar/services/utilities/scheduling_utilities.py +0 -0
  111. {isar-1.22.0 → isar-1.22.1}/src/isar/services/utilities/threaded_request.py +0 -0
  112. {isar-1.22.0/tests/integration → isar-1.22.1/src/isar/state_machine}/__init__.py +0 -0
  113. {isar-1.22.0 → isar-1.22.1}/src/isar/state_machine/states/__init__.py +0 -0
  114. {isar-1.22.0 → isar-1.22.1}/src/isar/state_machine/states/idle.py +0 -0
  115. {isar-1.22.0 → isar-1.22.1}/src/isar/state_machine/states/initialize.py +0 -0
  116. {isar-1.22.0 → isar-1.22.1}/src/isar/state_machine/states/initiate.py +0 -0
  117. {isar-1.22.0 → isar-1.22.1}/src/isar/state_machine/states/off.py +0 -0
  118. {isar-1.22.0 → isar-1.22.1}/src/isar/state_machine/states/offline.py +0 -0
  119. {isar-1.22.0 → isar-1.22.1}/src/isar/state_machine/states/paused.py +0 -0
  120. {isar-1.22.0 → isar-1.22.1}/src/isar/state_machine/states/stop.py +0 -0
  121. {isar-1.22.0 → isar-1.22.1}/src/isar/state_machine/states_enum.py +0 -0
  122. {isar-1.22.0/tests → isar-1.22.1/src/isar/storage}/__init__.py +0 -0
  123. {isar-1.22.0 → isar-1.22.1}/src/isar/storage/blob_storage.py +0 -0
  124. {isar-1.22.0 → isar-1.22.1}/src/isar/storage/local_storage.py +0 -0
  125. {isar-1.22.0 → isar-1.22.1}/src/isar/storage/slimm_storage.py +0 -0
  126. {isar-1.22.0 → isar-1.22.1}/src/isar/storage/storage_interface.py +0 -0
  127. {isar-1.22.0 → isar-1.22.1}/src/isar.egg-info/SOURCES.txt +0 -0
  128. {isar-1.22.0 → isar-1.22.1}/src/isar.egg-info/dependency_links.txt +0 -0
  129. {isar-1.22.0 → isar-1.22.1}/src/isar.egg-info/entry_points.txt +0 -0
  130. {isar-1.22.0 → isar-1.22.1}/src/isar.egg-info/requires.txt +0 -0
  131. {isar-1.22.0 → isar-1.22.1}/src/isar.egg-info/top_level.txt +0 -0
  132. {isar-1.22.0/src/robot_interface/utilities → isar-1.22.1/src/robot_interface}/__init__.py +0 -0
  133. {isar-1.22.0/src/robot_interface/telemetry → isar-1.22.1/src/robot_interface/models}/__init__.py +0 -0
  134. {isar-1.22.0/src/robot_interface/models/robots → isar-1.22.1/src/robot_interface/models/exceptions}/__init__.py +0 -0
  135. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/models/exceptions/robot_exceptions.py +0 -0
  136. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/models/initialize/__init__.py +0 -0
  137. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/models/initialize/initialize_params.py +0 -0
  138. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/models/inspection/__init__.py +0 -0
  139. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/models/inspection/inspection.py +0 -0
  140. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/models/mission/__init__.py +0 -0
  141. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/models/mission/status.py +0 -0
  142. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/models/mission/step.py +0 -0
  143. {isar-1.22.0/src/robot_interface/models/exceptions → isar-1.22.1/src/robot_interface/models/robots}/__init__.py +0 -0
  144. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/models/robots/robot_model.py +0 -0
  145. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/robot_interface.py +0 -0
  146. {isar-1.22.0/src/robot_interface/models → isar-1.22.1/src/robot_interface/telemetry}/__init__.py +0 -0
  147. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/test_robot_interface.py +0 -0
  148. {isar-1.22.0/src/robot_interface → isar-1.22.1/src/robot_interface/utilities}/__init__.py +0 -0
  149. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/utilities/json_service.py +0 -0
  150. {isar-1.22.0 → isar-1.22.1}/src/robot_interface/utilities/uuid_string_factory.py +0 -0
  151. {isar-1.22.0/src/isar/storage → isar-1.22.1/tests}/__init__.py +0 -0
  152. {isar-1.22.0 → isar-1.22.1}/tests/conftest.py +0 -0
  153. {isar-1.22.0/src/isar/state_machine → isar-1.22.1/tests/integration}/__init__.py +0 -0
  154. {isar-1.22.0/src/isar/services/utilities → isar-1.22.1/tests/integration/turtlebot}/__init__.py +0 -0
  155. {isar-1.22.0/src/isar/services/service_connections/stid → isar-1.22.1/tests/integration/turtlebot/config}/__init__.py +0 -0
  156. {isar-1.22.0/src/isar/services/service_connections/mqtt → isar-1.22.1/tests/integration/turtlebot/config/maps}/__init__.py +0 -0
  157. {isar-1.22.0/src/isar → isar-1.22.1/tests/integration/turtlebot}/config/maps/turtleworld.json +0 -0
  158. {isar-1.22.0/src/isar/services/service_connections → isar-1.22.1/tests/integration/turtlebot/config/missions}/__init__.py +0 -0
  159. {isar-1.22.0 → isar-1.22.1}/tests/integration/turtlebot/config/missions/default.json +0 -0
  160. {isar-1.22.0/src/isar/services/readers → isar-1.22.1/tests/isar}/__init__.py +0 -0
  161. {isar-1.22.0/src/isar/services/auth → isar-1.22.1/tests/isar/apis}/__init__.py +0 -0
  162. {isar-1.22.0/src/isar/services → isar-1.22.1/tests/isar/apis/scheduler}/__init__.py +0 -0
  163. {isar-1.22.0 → isar-1.22.1}/tests/isar/apis/scheduler/test_scheduler_router.py +0 -0
  164. {isar-1.22.0/src/isar/models/mission_metadata → isar-1.22.1/tests/isar/apis/security}/__init__.py +0 -0
  165. {isar-1.22.0 → isar-1.22.1}/tests/isar/apis/security/test_authentication.py +0 -0
  166. {isar-1.22.0/src/isar/models/communication → isar-1.22.1/tests/isar/mission}/__init__.py +0 -0
  167. {isar-1.22.0 → isar-1.22.1}/tests/isar/mission/test_mission.py +0 -0
  168. {isar-1.22.0/src → isar-1.22.1/tests}/isar/models/__init__.py +0 -0
  169. {isar-1.22.0/src/isar/mission_planner → isar-1.22.1/tests/isar/models/communication}/__init__.py +0 -0
  170. {isar-1.22.0 → isar-1.22.1}/tests/isar/models/communication/test_queues.py +0 -0
  171. {isar-1.22.0 → isar-1.22.1}/tests/isar/models/example_mission_definition.json +0 -0
  172. {isar-1.22.0 → isar-1.22.1}/tests/isar/models/test_start_mission_definition.py +0 -0
  173. {isar-1.22.0/src/isar/config/predefined_poses → isar-1.22.1/tests/isar/services}/__init__.py +0 -0
  174. {isar-1.22.0/src/isar/config/predefined_missions → isar-1.22.1/tests/isar/services/readers}/__init__.py +0 -0
  175. {isar-1.22.0 → isar-1.22.1}/tests/isar/services/readers/test_base_reader.py +0 -0
  176. {isar-1.22.0 → isar-1.22.1}/tests/isar/services/readers/test_mission_reader.py +0 -0
  177. {isar-1.22.0/src/isar/config/predefined_mission_definition → isar-1.22.1/tests/isar/services/service_connections}/__init__.py +0 -0
  178. {isar-1.22.0/src/isar/config/keyvault → isar-1.22.1/tests/isar/services/service_connections/echo}/__init__.py +0 -0
  179. {isar-1.22.0 → isar-1.22.1}/tests/isar/services/service_connections/test_base_request_handler.py +0 -0
  180. {isar-1.22.0/src/isar/config → isar-1.22.1/tests/isar/services/utilities}/__init__.py +0 -0
  181. {isar-1.22.0 → isar-1.22.1}/tests/isar/services/utilities/test_queue_utilities.py +0 -0
  182. {isar-1.22.0 → isar-1.22.1}/tests/isar/services/utilities/test_scheduling_utilities.py +0 -0
  183. {isar-1.22.0/src/isar/apis/security → isar-1.22.1/tests/isar/state_machine}/__init__.py +0 -0
  184. {isar-1.22.0/src/isar/apis/schedule → isar-1.22.1/tests/isar/state_machine/states}/__init__.py +0 -0
  185. {isar-1.22.0 → isar-1.22.1}/tests/isar/state_machine/test_state_machine.py +0 -0
  186. {isar-1.22.0 → isar-1.22.1}/tests/isar/storage/test_blob_storage.py +0 -0
  187. {isar-1.22.0 → isar-1.22.1}/tests/isar/storage/test_uploader.py +0 -0
  188. {isar-1.22.0/src/isar/apis → isar-1.22.1/tests/mocks}/__init__.py +0 -0
  189. {isar-1.22.0 → isar-1.22.1}/tests/mocks/blob_storage.py +0 -0
  190. {isar-1.22.0 → isar-1.22.1}/tests/mocks/mission_definition.py +0 -0
  191. {isar-1.22.0 → isar-1.22.1}/tests/mocks/mqtt_client.py +0 -0
  192. {isar-1.22.0 → isar-1.22.1}/tests/mocks/pose.py +0 -0
  193. {isar-1.22.0 → isar-1.22.1}/tests/mocks/request.py +0 -0
  194. {isar-1.22.0 → isar-1.22.1}/tests/mocks/robot_interface.py +0 -0
  195. {isar-1.22.0 → isar-1.22.1}/tests/mocks/status.py +0 -0
  196. {isar-1.22.0 → isar-1.22.1}/tests/mocks/step.py +0 -0
  197. {isar-1.22.0 → isar-1.22.1}/tests/mocks/task.py +0 -0
  198. {isar-1.22.0 → isar-1.22.1}/tests/mocks/token.py +0 -0
  199. {isar-1.22.0 → isar-1.22.1}/tests/test_data/test_json_file.json +0 -0
  200. {isar-1.22.0 → isar-1.22.1}/tests/test_data/test_map_config/test_map_config.json +0 -0
  201. {isar-1.22.0 → isar-1.22.1}/tests/test_data/test_mission_not_working.json +0 -0
  202. {isar-1.22.0 → isar-1.22.1}/tests/test_data/test_mission_working.json +0 -0
  203. {isar-1.22.0 → isar-1.22.1}/tests/test_data/test_mission_working_no_tasks.json +0 -0
  204. {isar-1.22.0 → isar-1.22.1}/tests/test_data/test_thermal_image_mission.json +0 -0
  205. {isar-1.22.0 → isar-1.22.1}/tests/test_modules.py +0 -0
@@ -14,7 +14,7 @@ jobs:
14
14
  strategy:
15
15
  fail-fast: false
16
16
  matrix:
17
- python-version: ["3.11", "3.12"]
17
+ python-version: ["3.9", "3.10", "3.11", "3.12"]
18
18
 
19
19
  steps:
20
20
  - uses: actions/checkout@v4
@@ -24,11 +24,20 @@ jobs:
24
24
  with:
25
25
  python-version: ${{ matrix.python-version }}
26
26
 
27
- - name: Install dependencies
27
+ - name: Upgrade pip
28
28
  run: |
29
29
  python -m pip install --upgrade pip
30
+
31
+ - name: Install dependencies with the compiled requirements (for Python 3.12)
32
+ if: ${{matrix.python-version == '3.12'}}
33
+ run: |
30
34
  pip install -r requirements.txt -e .[dev]
31
35
 
36
+ - name: Install dependencies based on the pyproject.toml file (for Python 3.9-3.11)
37
+ if: ${{matrix.python-version != '3.12'}}
38
+ run: |
39
+ pip install -e .[dev]
40
+
32
41
  - name: Test with pytest
33
42
  run: |
34
43
  pytest
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: isar
3
- Version: 1.22.0
3
+ Version: 1.22.1
4
4
  Summary: Integration and Supervisory control of Autonomous Robots
5
5
  Author-email: Equinor ASA <fg_robots_dev@equinor.com>
6
6
  License: Eclipse Public License version 2.0
@@ -91,12 +91,14 @@ Classifier: Intended Audience :: Science/Research
91
91
  Classifier: License :: OSI Approved :: Eclipse Public License 2.0 (EPL-2.0)
92
92
  Classifier: Natural Language :: English
93
93
  Classifier: Programming Language :: Python :: 3
94
+ Classifier: Programming Language :: Python :: 3.9
95
+ Classifier: Programming Language :: Python :: 3.10
94
96
  Classifier: Programming Language :: Python :: 3.11
95
97
  Classifier: Programming Language :: Python :: 3.12
96
98
  Classifier: Topic :: Scientific/Engineering
97
99
  Classifier: Topic :: Scientific/Engineering :: Physics
98
100
  Classifier: Topic :: Software Development :: Libraries
99
- Requires-Python: >=3.11
101
+ Requires-Python: >=3.9
100
102
  Description-Content-Type: text/markdown
101
103
  License-File: LICENSE
102
104
  Requires-Dist: alitra>=1.1.3
@@ -7,7 +7,7 @@ name = "isar"
7
7
  authors = [{ name = "Equinor ASA", email = "fg_robots_dev@equinor.com" }]
8
8
  description = "Integration and Supervisory control of Autonomous Robots"
9
9
  readme = "README.md"
10
- requires-python = ">=3.11"
10
+ requires-python = ">=3.9"
11
11
  license = { file = "LICENSE" }
12
12
  classifiers = [
13
13
  "Intended Audience :: Developers",
@@ -15,6 +15,8 @@ classifiers = [
15
15
  "License :: OSI Approved :: Eclipse Public License 2.0 (EPL-2.0)",
16
16
  "Natural Language :: English",
17
17
  "Programming Language :: Python :: 3",
18
+ "Programming Language :: Python :: 3.9",
19
+ "Programming Language :: Python :: 3.10",
18
20
  "Programming Language :: Python :: 3.11",
19
21
  "Programming Language :: Python :: 3.12",
20
22
  "Topic :: Scientific/Engineering",
@@ -12,40 +12,38 @@ anyio==4.4.0
12
12
  # via
13
13
  # httpx
14
14
  # starlette
15
- # watchfiles
16
15
  azure-core==1.30.2
17
16
  # via
18
17
  # azure-identity
19
18
  # azure-keyvault-secrets
20
19
  # azure-storage-blob
21
20
  # opencensus-ext-azure
22
- azure-identity==1.16.1
21
+ azure-identity==1.17.1
23
22
  # via
24
23
  # isar (pyproject.toml)
25
24
  # opencensus-ext-azure
26
25
  azure-keyvault-secrets==4.8.0
27
26
  # via isar (pyproject.toml)
28
- azure-storage-blob==12.20.0
27
+ azure-storage-blob==12.22.0
29
28
  # via isar (pyproject.toml)
30
29
  backoff==2.2.1
31
30
  # via isar (pyproject.toml)
32
- cachetools==5.3.3
31
+ cachetools==5.5.0
33
32
  # via google-auth
34
- certifi==2024.6.2
33
+ certifi==2024.8.30
35
34
  # via
36
35
  # httpcore
37
36
  # httpx
38
37
  # requests
39
- cffi==1.16.0
38
+ cffi==1.17.1
40
39
  # via cryptography
41
40
  charset-normalizer==3.3.2
42
41
  # via requests
43
42
  click==8.1.7
44
43
  # via
45
44
  # isar (pyproject.toml)
46
- # typer
47
45
  # uvicorn
48
- cryptography==42.0.8
46
+ cryptography==43.0.1
49
47
  # via
50
48
  # azure-identity
51
49
  # azure-storage-blob
@@ -56,23 +54,17 @@ dacite==1.8.1
56
54
  # via
57
55
  # alitra
58
56
  # isar (pyproject.toml)
59
- dnspython==2.6.1
60
- # via email-validator
61
- email-validator==2.1.2
62
- # via fastapi
63
- fastapi==0.111.0
57
+ fastapi==0.114.1
64
58
  # via
65
59
  # fastapi-azure-auth
66
60
  # isar (pyproject.toml)
67
- fastapi-azure-auth==4.4.0
61
+ fastapi-azure-auth==5.0.1
68
62
  # via isar (pyproject.toml)
69
- fastapi-cli==0.0.4
70
- # via fastapi
71
- google-api-core==2.19.0
63
+ google-api-core==2.19.2
72
64
  # via opencensus
73
- google-auth==2.30.0
65
+ google-auth==2.34.0
74
66
  # via google-api-core
75
- googleapis-common-protos==1.63.1
67
+ googleapis-common-protos==1.65.0
76
68
  # via google-api-core
77
69
  h11==0.14.0
78
70
  # via
@@ -80,39 +72,26 @@ h11==0.14.0
80
72
  # uvicorn
81
73
  httpcore==1.0.5
82
74
  # via httpx
83
- httptools==0.6.1
84
- # via uvicorn
85
- httpx==0.27.0
86
- # via
87
- # fastapi
88
- # fastapi-azure-auth
89
- idna==3.7
75
+ httpx==0.27.2
76
+ # via fastapi-azure-auth
77
+ idna==3.8
90
78
  # via
91
79
  # anyio
92
- # email-validator
93
80
  # httpx
94
81
  # requests
95
- injector==0.21.0
82
+ injector==0.22.0
96
83
  # via isar (pyproject.toml)
97
84
  isodate==0.6.1
98
85
  # via
99
86
  # azure-keyvault-secrets
100
87
  # azure-storage-blob
101
- jinja2==3.1.4
102
- # via fastapi
103
- markdown-it-py==3.0.0
104
- # via rich
105
- markupsafe==2.1.5
106
- # via jinja2
107
- mdurl==0.1.2
108
- # via markdown-it-py
109
- msal==1.28.1
88
+ msal==1.31.0
110
89
  # via
111
90
  # azure-identity
112
91
  # msal-extensions
113
- msal-extensions==1.1.0
92
+ msal-extensions==1.2.0
114
93
  # via azure-identity
115
- numpy==2.0.0
94
+ numpy==2.1.1
116
95
  # via
117
96
  # alitra
118
97
  # isar (pyproject.toml)
@@ -130,43 +109,37 @@ opencensus-ext-logging==0.1.1
130
109
  # via isar (pyproject.toml)
131
110
  opencensus-ext-requests==0.8.0
132
111
  # via isar (pyproject.toml)
133
- orjson==3.10.5
134
- # via fastapi
135
- packaging==24.1
136
- # via msal-extensions
137
112
  paho-mqtt==2.1.0
138
113
  # via isar (pyproject.toml)
139
- portalocker==2.8.2
114
+ portalocker==2.10.1
140
115
  # via msal-extensions
141
- proto-plus==1.23.0
116
+ proto-plus==1.24.0
142
117
  # via google-api-core
143
- protobuf==4.25.3
118
+ protobuf==5.28.1
144
119
  # via
145
120
  # google-api-core
146
121
  # googleapis-common-protos
147
122
  # proto-plus
148
- psutil==5.9.8
123
+ psutil==6.0.0
149
124
  # via opencensus-ext-azure
150
- pyasn1==0.6.0
125
+ pyasn1==0.6.1
151
126
  # via
152
127
  # pyasn1-modules
153
128
  # rsa
154
- pyasn1-modules==0.4.0
129
+ pyasn1-modules==0.4.1
155
130
  # via google-auth
156
131
  pycparser==2.22
157
132
  # via cffi
158
- pydantic==2.7.4
133
+ pydantic==2.9.1
159
134
  # via
160
135
  # fastapi
161
136
  # isar (pyproject.toml)
162
137
  # pydantic-settings
163
- pydantic-core==2.18.4
138
+ pydantic-core==2.23.3
164
139
  # via pydantic
165
- pydantic-settings==2.3.3
140
+ pydantic-settings==2.5.2
166
141
  # via isar (pyproject.toml)
167
- pygments==2.18.0
168
- # via rich
169
- pyjwt[crypto]==2.8.0
142
+ pyjwt[crypto]==2.9.0
170
143
  # via
171
144
  # fastapi-azure-auth
172
145
  # isar (pyproject.toml)
@@ -175,13 +148,8 @@ python-dotenv==1.0.1
175
148
  # via
176
149
  # isar (pyproject.toml)
177
150
  # pydantic-settings
178
- # uvicorn
179
- python-multipart==0.0.9
180
- # via fastapi
181
- pyyaml==6.0.1
182
- # via
183
- # isar (pyproject.toml)
184
- # uvicorn
151
+ pyyaml==6.0.2
152
+ # via isar (pyproject.toml)
185
153
  requests==2.32.3
186
154
  # via
187
155
  # azure-core
@@ -193,14 +161,10 @@ requests==2.32.3
193
161
  # requests-toolbelt
194
162
  requests-toolbelt==1.0.0
195
163
  # via isar (pyproject.toml)
196
- rich==13.7.1
197
- # via typer
198
164
  rsa==4.9
199
165
  # via google-auth
200
- scipy==1.13.1
166
+ scipy==1.14.1
201
167
  # via alitra
202
- shellingham==1.5.4
203
- # via typer
204
168
  six==1.16.0
205
169
  # via
206
170
  # azure-core
@@ -211,34 +175,22 @@ sniffio==1.3.1
211
175
  # via
212
176
  # anyio
213
177
  # httpx
214
- starlette==0.37.2
178
+ starlette==0.38.5
215
179
  # via fastapi
216
- transitions==0.9.1
180
+ transitions==0.9.2
217
181
  # via isar (pyproject.toml)
218
- typer==0.12.3
219
- # via fastapi-cli
220
182
  typing-extensions==4.12.2
221
183
  # via
222
184
  # azure-core
185
+ # azure-identity
223
186
  # azure-keyvault-secrets
224
187
  # azure-storage-blob
225
188
  # fastapi
226
189
  # pydantic
227
190
  # pydantic-core
228
- # typer
229
- ujson==5.10.0
230
- # via fastapi
231
- urllib3==2.2.1
191
+ urllib3==2.2.2
232
192
  # via requests
233
- uvicorn[standard]==0.30.1
234
- # via
235
- # fastapi
236
- # isar (pyproject.toml)
237
- uvloop==0.19.0
238
- # via uvicorn
239
- watchfiles==0.22.0
240
- # via uvicorn
241
- websockets==12.0
242
- # via uvicorn
193
+ uvicorn==0.30.6
194
+ # via isar (pyproject.toml)
243
195
  wrapt==1.16.0
244
196
  # via opencensus-ext-requests
@@ -2,7 +2,7 @@ import time
2
2
  from enum import Enum
3
3
  from typing import Any, Dict, List, Optional, Union
4
4
 
5
- from alitra import Position, Pose, Orientation, Frame
5
+ from alitra import Frame, Orientation, Pose, Position
6
6
  from pydantic import BaseModel, Field
7
7
 
8
8
  from isar.apis.models.models import InputPose, InputPosition
@@ -62,6 +62,8 @@ class StartMissionDefinition(BaseModel):
62
62
  id: Optional[str] = None
63
63
  name: Optional[str] = None
64
64
  start_pose: Optional[InputPose] = None
65
+ dock: Optional[bool] = None
66
+ undock: Optional[bool] = None
65
67
 
66
68
 
67
69
  def to_isar_mission(mission_definition: StartMissionDefinition) -> Mission:
@@ -85,6 +87,9 @@ def to_isar_mission(mission_definition: StartMissionDefinition) -> Mission:
85
87
 
86
88
  isar_mission: Mission = Mission(tasks=isar_tasks)
87
89
 
90
+ isar_mission.dock = mission_definition.dock
91
+ isar_mission.undock = mission_definition.undock
92
+
88
93
  if mission_definition.name:
89
94
  isar_mission.name = mission_definition.name
90
95
  else:
@@ -127,20 +132,21 @@ def check_for_duplicate_ids(items: Union[List[Task], List[STEPS]]):
127
132
 
128
133
  def generate_steps(task) -> List[STEPS]:
129
134
  steps: List[STEPS] = []
130
- try:
131
- match task.type:
132
- case TaskType.Inspection:
133
- steps.extend(generate_steps_for_inspection_task(task=task))
134
- case TaskType.DriveTo:
135
- steps.append(generate_steps_for_drive_to_task(task=task))
136
- case TaskType.Localization:
137
- steps.append(generate_steps_for_localization_task(task=task))
138
- case TaskType.ReturnToHome:
139
- steps.append(generate_steps_for_return_to_home_task(task=task))
140
- case TaskType.Dock:
141
- steps.append(generate_steps_for_dock_task())
142
- except ValueError as e:
143
- raise MissionPlannerError(f"Failed to create task: {str(e)}")
135
+
136
+ if task.type == TaskType.Inspection:
137
+ steps.extend(generate_steps_for_inspection_task(task=task))
138
+ elif task.type == TaskType.DriveTo:
139
+ steps.append(generate_steps_for_drive_to_task(task=task))
140
+ elif task.type == TaskType.Localization:
141
+ steps.append(generate_steps_for_localization_task(task=task))
142
+ elif task.type == TaskType.ReturnToHome:
143
+ steps.append(generate_steps_for_return_to_home_task(task=task))
144
+ elif task.type == TaskType.Dock:
145
+ steps.append(generate_steps_for_dock_task())
146
+ else:
147
+ raise MissionPlannerError(
148
+ f"Failed to create task: '{task.type}' is not a valid"
149
+ )
144
150
 
145
151
  return steps
146
152
 
@@ -8,7 +8,7 @@ from pydantic_settings import BaseSettings, SettingsConfigDict
8
8
 
9
9
  from isar.config import predefined_missions
10
10
  from robot_interface.models.robots.robot_model import RobotModel
11
- from robot_interface.telemetry.payloads import VideoStream
11
+ from robot_interface.telemetry.payloads import VideoStream, DocumentInfo
12
12
 
13
13
 
14
14
  class Settings(BaseSettings):
@@ -190,6 +190,9 @@ class Settings(BaseSettings):
190
190
  # Serial number of the robot ISAR is connected to
191
191
  SERIAL_NUMBER: str = Field(default="0001")
192
192
 
193
+ # Info about robot documentation
194
+ DOCUMENTATION: List[DocumentInfo] = Field(default=[])
195
+
193
196
  # Endpoints to reach video streams for the robot
194
197
  VIDEO_STREAMS: List[VideoStream] = Field(
195
198
  default=[
@@ -1,6 +1,6 @@
1
1
  import json
2
2
  import time
3
- from datetime import UTC, datetime
3
+ from datetime import datetime, timezone
4
4
  from queue import Queue
5
5
 
6
6
  from isar.config.settings import settings
@@ -18,7 +18,7 @@ class RobotHeartbeatPublisher:
18
18
  payload: RobotHeartbeatPayload = RobotHeartbeatPayload(
19
19
  isar_id=settings.ISAR_ID,
20
20
  robot_name=settings.ROBOT_NAME,
21
- timestamp=datetime.now(UTC),
21
+ timestamp=datetime.now(timezone.utc),
22
22
  )
23
23
 
24
24
  self.mqtt_publisher.publish(
@@ -1,6 +1,6 @@
1
1
  import json
2
2
  import time
3
- from datetime import UTC, datetime
3
+ from datetime import datetime, timezone
4
4
  from queue import Queue
5
5
 
6
6
  from isar.config.settings import robot_settings, settings
@@ -21,11 +21,12 @@ class RobotInfoPublisher:
21
21
  robot_model=robot_settings.ROBOT_MODEL, # type: ignore
22
22
  robot_serial_number=settings.SERIAL_NUMBER,
23
23
  robot_asset=settings.PLANT_SHORT_NAME,
24
+ documentation=settings.DOCUMENTATION,
24
25
  video_streams=settings.VIDEO_STREAMS,
25
26
  host=settings.API_HOST_VIEWED_EXTERNALLY,
26
27
  port=settings.API_PORT,
27
28
  capabilities=robot_settings.CAPABILITIES,
28
- timestamp=datetime.now(UTC),
29
+ timestamp=datetime.now(timezone.utc),
29
30
  )
30
31
 
31
32
  self.mqtt_publisher.publish(
@@ -2,7 +2,7 @@ import json
2
2
  import logging
3
3
  import queue
4
4
  from collections import deque
5
- from datetime import UTC, datetime
5
+ from datetime import datetime, timezone
6
6
  from typing import Deque, List, Optional
7
7
 
8
8
  from alitra import Pose
@@ -292,7 +292,7 @@ class StateMachine(object):
292
292
  self.queues.resume_mission.output.put(resume_mission_response)
293
293
 
294
294
  self.current_task.reset_task()
295
- self.update_current_step()
295
+ self.iterate_current_step()
296
296
 
297
297
  self.robot.resume()
298
298
 
@@ -337,12 +337,14 @@ class StateMachine(object):
337
337
  else:
338
338
  self.current_task.status = TaskStatus.InProgress
339
339
  self.publish_task_status(task=self.current_task)
340
- self.update_current_step()
340
+ self.iterate_current_step()
341
341
 
342
342
  def _step_finished(self) -> None:
343
343
  self.publish_step_status(step=self.current_step)
344
- self.update_current_task()
345
- self.update_current_step()
344
+ self.current_task.update_task_status()
345
+ self.publish_task_status(task=self.current_task)
346
+ self.iterate_current_task()
347
+ self.iterate_current_step()
346
348
 
347
349
  def _full_mission_finished(self) -> None:
348
350
  self.current_task = None
@@ -379,8 +381,10 @@ class StateMachine(object):
379
381
  if self.stepwise_mission:
380
382
  self.current_step.status = StepStatus.Failed
381
383
  self.publish_step_status(step=self.current_step)
382
- self.update_current_task()
383
- self.update_current_step()
384
+ self.current_task.update_task_status()
385
+ self.publish_task_status(task=self.current_task)
386
+ self.iterate_current_task()
387
+ self.iterate_current_step()
384
388
 
385
389
  def _mission_stopped(self) -> None:
386
390
  self.current_mission.status = MissionStatus.Cancelled
@@ -427,10 +431,8 @@ class StateMachine(object):
427
431
  """
428
432
  self.to_idle()
429
433
 
430
- def update_current_task(self):
434
+ def iterate_current_task(self):
431
435
  if self.current_task.is_finished():
432
- self.current_task.update_task_status()
433
- self.publish_task_status(task=self.current_task)
434
436
  try:
435
437
  self.current_task = self.task_selector.next_task()
436
438
  self.current_task.status = TaskStatus.InProgress
@@ -439,7 +441,7 @@ class StateMachine(object):
439
441
  # Indicates that all tasks are finished
440
442
  self.current_task = None
441
443
 
442
- def update_current_step(self):
444
+ def iterate_current_step(self):
443
445
  if self.current_task != None:
444
446
  self.current_step = self.current_task.next_step()
445
447
 
@@ -524,7 +526,7 @@ class StateMachine(object):
524
526
  "error_description": (
525
527
  error_message.error_description if error_message else None
526
528
  ),
527
- "timestamp": datetime.now(UTC),
529
+ "timestamp": datetime.now(timezone.utc),
528
530
  },
529
531
  cls=EnhancedJSONEncoder,
530
532
  )
@@ -557,7 +559,7 @@ class StateMachine(object):
557
559
  "error_description": (
558
560
  error_message.error_description if error_message else None
559
561
  ),
560
- "timestamp": datetime.now(UTC),
562
+ "timestamp": datetime.now(timezone.utc),
561
563
  },
562
564
  cls=EnhancedJSONEncoder,
563
565
  )
@@ -592,7 +594,7 @@ class StateMachine(object):
592
594
  "error_description": (
593
595
  error_message.error_description if error_message else None
594
596
  ),
595
- "timestamp": datetime.now(UTC),
597
+ "timestamp": datetime.now(timezone.utc),
596
598
  },
597
599
  cls=EnhancedJSONEncoder,
598
600
  )
@@ -612,7 +614,7 @@ class StateMachine(object):
612
614
  "isar_id": settings.ISAR_ID,
613
615
  "robot_name": settings.ROBOT_NAME,
614
616
  "status": self._current_status(),
615
- "timestamp": datetime.now(UTC),
617
+ "timestamp": datetime.now(timezone.utc),
616
618
  },
617
619
  cls=EnhancedJSONEncoder,
618
620
  )