isar 1.10.14__py3-none-any.whl → 1.12.0__py3-none-any.whl

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 (47) hide show
  1. isar/apis/api.py +54 -4
  2. isar/apis/models/start_mission_definition.py +44 -35
  3. isar/apis/security/authentication.py +4 -5
  4. isar/config/keyvault/keyvault_service.py +38 -21
  5. isar/config/log.py +42 -13
  6. isar/config/predefined_mission_definition/__init__.py +0 -0
  7. isar/config/predefined_mission_definition/default_mission.json +98 -0
  8. isar/config/predefined_mission_definition/default_turtlebot.json +136 -0
  9. isar/config/predefined_missions/default.json +84 -84
  10. isar/config/settings.env +5 -0
  11. isar/config/settings.py +51 -10
  12. isar/mission_planner/echo_planner.py +1 -1
  13. isar/models/communication/queues/queues.py +1 -1
  14. isar/models/mission/status.py +5 -5
  15. isar/models/mission_metadata/mission_metadata.py +2 -0
  16. isar/modules.py +3 -2
  17. isar/services/service_connections/mqtt/mqtt_client.py +0 -18
  18. isar/services/service_connections/mqtt/robot_info_publisher.py +33 -0
  19. isar/services/service_connections/mqtt/robot_status_publisher.py +66 -0
  20. isar/services/service_connections/request_handler.py +1 -1
  21. isar/services/utilities/scheduling_utilities.py +5 -5
  22. isar/services/utilities/threaded_request.py +3 -3
  23. isar/state_machine/state_machine.py +13 -5
  24. isar/state_machine/states/idle.py +6 -6
  25. isar/state_machine/states/initialize.py +9 -8
  26. isar/state_machine/states/initiate_step.py +16 -16
  27. isar/state_machine/states/monitor.py +17 -11
  28. isar/state_machine/states/paused.py +6 -6
  29. isar/state_machine/states/stop_step.py +10 -10
  30. isar/state_machine/states_enum.py +0 -1
  31. isar/storage/local_storage.py +2 -2
  32. isar/storage/slimm_storage.py +107 -41
  33. isar/storage/uploader.py +4 -5
  34. isar/storage/utilities.py +1 -23
  35. {isar-1.10.14.dist-info → isar-1.12.0.dist-info}/LICENSE +0 -0
  36. {isar-1.10.14.dist-info → isar-1.12.0.dist-info}/METADATA +4 -1
  37. {isar-1.10.14.dist-info → isar-1.12.0.dist-info}/RECORD +47 -40
  38. {isar-1.10.14.dist-info → isar-1.12.0.dist-info}/WHEEL +0 -0
  39. {isar-1.10.14.dist-info → isar-1.12.0.dist-info}/top_level.txt +0 -0
  40. robot_interface/models/inspection/inspection.py +3 -22
  41. robot_interface/models/mission/status.py +6 -1
  42. robot_interface/models/mission/step.py +5 -32
  43. robot_interface/models/robots/__init__.py +0 -0
  44. robot_interface/models/robots/robot_model.py +13 -0
  45. robot_interface/robot_interface.py +17 -0
  46. robot_interface/telemetry/payloads.py +34 -0
  47. robot_interface/utilities/json_service.py +3 -0
isar/storage/utilities.py CHANGED
@@ -14,12 +14,10 @@ from robot_interface.utilities.json_service import EnhancedJSONEncoder
14
14
  def construct_local_paths(
15
15
  inspection: Inspection, metadata: MissionMetadata
16
16
  ) -> Tuple[Path, Path]:
17
- inspection_type: str = get_inspection_type(inspection=inspection)
18
-
19
17
  folder: Path = Path(str(metadata.mission_id))
20
18
  filename: str = get_filename(
21
19
  mission_id=metadata.mission_id,
22
- inspection_type=inspection_type,
20
+ inspection_type=type(inspection).__name__,
23
21
  inspection_id=inspection.id,
24
22
  )
25
23
 
@@ -77,23 +75,3 @@ def get_filename(
77
75
  inspection_id: UUID,
78
76
  ) -> str:
79
77
  return f"{mission_id}_{inspection_type}_{inspection_id}"
80
-
81
-
82
- def get_inspection_type(inspection: Inspection) -> str:
83
- if isinstance(inspection, Image):
84
- return "image"
85
- elif isinstance(inspection, ThermalImage):
86
- return "thermal"
87
- elif isinstance(inspection, Video):
88
- return "video"
89
- elif isinstance(inspection, ThermalVideo):
90
- return "thermal_video"
91
- else:
92
- logging.getLogger("uploader").warning(
93
- f"Failed to upload inspection with ID: {inspection.id}\n "
94
- f"This was due to an inspection type ({type(inspection)}) "
95
- f"which is not supported by the uploader"
96
- )
97
- raise StorageException(
98
- f"Inspection type not supported by the uploader. Got {type(inspection)}"
99
- )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: isar
3
- Version: 1.10.14
3
+ Version: 1.12.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
@@ -25,6 +25,9 @@ Requires-Dist: dacite
25
25
  Requires-Dist: fastapi-azure-auth
26
26
  Requires-Dist: fastapi
27
27
  Requires-Dist: injector
28
+ Requires-Dist: opencensus-ext-logging
29
+ Requires-Dist: opencensus-ext-requests
30
+ Requires-Dist: opencensus-ext-azure
28
31
  Requires-Dist: numpy
29
32
  Requires-Dist: paho-mqtt
30
33
  Requires-Dist: pydantic
@@ -1,24 +1,24 @@
1
1
  isar/__init__.py,sha256=oXTcQpZYQ7jkRIem-Nq3hw9DrveoIV3-8k697XN16rA,190
2
- isar/modules.py,sha256=Xxq32P6oyxm3Vvo7AWnpPOHwxE2tCR62E7A0rJqso4g,6998
2
+ isar/modules.py,sha256=eA4n9_CZ29H7Bt7L3G8ttDLH42WX98dJVtIPHgOeVEI,7041
3
3
  isar/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- isar/apis/api.py,sha256=VWszDH3crXQBWi9UmgxOEk37yJa2j1R3LDneOl_hQF4,9106
4
+ isar/apis/api.py,sha256=rLoqA8YXGpZCsQMm3FGXgt9Yfk6_B5Ka6Hsjq02v-D4,11288
5
5
  isar/apis/models/__init__.py,sha256=NI1BYyN__Ogr00Qqe0XJ-9gEVPva2brXo2RJsbrS4tM,52
6
6
  isar/apis/models/models.py,sha256=5LiQWnrlHswRlwbTnIp_RpOfbZ6lFSic7E8XWaoIodk,2212
7
- isar/apis/models/start_mission_definition.py,sha256=cSJ9lSGtuEK6QpAimh6tHOZisFG3MYIi_pqXJXLEGLc,3177
7
+ isar/apis/models/start_mission_definition.py,sha256=o_jObQ2Gbr_2uRJ3Lz6CNgPUfUW1y94XBZvBItBGo40,3325
8
8
  isar/apis/schedule/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  isar/apis/schedule/scheduling_controller.py,sha256=PjfHBKw70rpAe1tRkhQn6kVpL2-nC8SLkDn3MGT32dA,8451
10
10
  isar/apis/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- isar/apis/security/authentication.py,sha256=etbh74dDY0X_CI2kqQXUT6i_FoBtH5OQjs2Rp9SCews,2088
11
+ isar/apis/security/authentication.py,sha256=sn3MgFJEevkBIOHl1nFfFzwZOzdL0jNA4RvHryQ2n8Q,2088
12
12
  isar/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  isar/config/configuration_error.py,sha256=rO6WOhafX6xvVib8WxV-eY483Z0PpN-9PxGsq5ATfKc,46
14
- isar/config/log.py,sha256=QkPXCEIfmBJqGw2qTc1WkRLYhy8kQDBrZNDEm3uy39U,918
14
+ isar/config/log.py,sha256=gXbzb4KvxVOD2dVkkTWttQ8w271lEkRd174CeRJ6H8M,2225
15
15
  isar/config/logging.conf,sha256=mYO1xf27gAopEMHhGzY7-mwyfN16rwRLkPNMvy3zn2g,1127
16
- isar/config/settings.env,sha256=UHzCZ1AyvZZdCcIIwQ4LYqJ3kQlt4b5W-NyLSaEByOY,428
17
- isar/config/settings.py,sha256=xcIvLE9qIvlbDvv0-8RGT6frysxPvL44Ypwgud5-LSU,10181
16
+ isar/config/settings.env,sha256=aG2CAnXzxsZJhxhgx8pCa11clFtkIsXiTxc2FgXZwuw,553
17
+ isar/config/settings.py,sha256=qlpeOqBptgqqzI-hD8beCdTrAvGANjg5cKtRpxKUkcY,12050
18
18
  isar/config/certs/ca-cert.pem,sha256=6XnTSkRxSb9slwXSCWxL4tjeNBprgDzPpEhBraL9RDU,2163
19
19
  isar/config/keyvault/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
20
  isar/config/keyvault/keyvault_error.py,sha256=zvPCsZLjboxsxthYkxpRERCTFxYV8R5WmACewAUQLwk,41
21
- isar/config/keyvault/keyvault_service.py,sha256=xFKNNiv40ZCIDn5LcgBmXnj5hw0udvOL2d0Wl1wi3Kw,2591
21
+ isar/config/keyvault/keyvault_service.py,sha256=7M6VdIElAQ_yo0d-VX4i9cqgoH_JIexoRmqS5YGIb2Y,3141
22
22
  isar/config/maps/JSP1_intermediate_deck.json,sha256=fdotzN6MVotyLbqpIjRSrbBYM84vogLkdS585NjBnL8,826
23
23
  isar/config/maps/JSP1_weather_deck.json,sha256=_dG3cSBI8q4_uHqHMOO5kSYqMXn85JL3_9PaH4uk1yQ,832
24
24
  isar/config/maps/default_map.json,sha256=3CdGMr0Qn3PrL4TfUK8I5a-hotMrS_n5DKfaEORJPT4,776
@@ -26,13 +26,16 @@ isar/config/maps/klab_b.json,sha256=qXgWVUYPaTdVuomf6lQL-uRbV3Tsa6CftnzcbT3dY78,
26
26
  isar/config/maps/klab_compressor.json,sha256=1Vrk5u_l4WXjrTtG4YfXlrCPbOoRs4TtYHOm0430u2A,803
27
27
  isar/config/maps/klab_turtlebot.json,sha256=HcB79XFEdY0Wm96EssIFO4TMyAWzc2KENoqN7TbTT0k,823
28
28
  isar/config/maps/turtleworld.json,sha256=EKLMpSK9Gu2lAN-E9l41XOaO3f9Su5n_I97mA6z7sWY,764
29
+ isar/config/predefined_mission_definition/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ isar/config/predefined_mission_definition/default_mission.json,sha256=i-sjgVRDcXKh2Lx-tauxBI3xLxLAuut_73wmLuYNgNc,3130
31
+ isar/config/predefined_mission_definition/default_turtlebot.json,sha256=tiXgBbE1XOT6G6UR07WChEVvj-Y9oB1qn8VBc8q3ang,4410
29
32
  isar/config/predefined_missions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- isar/config/predefined_missions/default.json,sha256=faNUHXx4g_c8uvyMe7HIsmeFVgnShA_UKbFldROKlQw,1807
33
+ isar/config/predefined_missions/default.json,sha256=mRjW4kREfo-KL1LoYU_MN400tYOR8jaLZQvGE5uiqe0,2757
31
34
  isar/config/predefined_missions/default_turtlebot.json,sha256=3w-w2EXPd3AnJ7W1bjid0QrIZ6o_-QAy4beimHr2ivc,3350
32
35
  isar/config/predefined_poses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
36
  isar/config/predefined_poses/predefined_poses.py,sha256=fhq8JF00feDLFKNBlyWeFoLfvfs5dVb__C7CmiVbwmQ,25779
34
37
  isar/mission_planner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- isar/mission_planner/echo_planner.py,sha256=28doIA9kgvauWAspSxnbzZgFvlvc1fzgiLgutsYBw90,5680
38
+ isar/mission_planner/echo_planner.py,sha256=xavICAZJYfnZqwAB_bTtRge_QMwrZ8H-JZPw1pZ1sSY,5674
36
39
  isar/mission_planner/local_planner.py,sha256=QGJ3PNea6z0A0XsDfF8qm9O1H8n6xWYWeQLuB9l4_74,3067
37
40
  isar/mission_planner/mission_planner_interface.py,sha256=5zmwtLAmtnfaQLsvx9o0Qy1YqWBZ2NVnUCV_XkTg1cE,466
38
41
  isar/mission_planner/sequential_task_selector.py,sha256=DkEVDmmmQ-bCswN21tJlmxocj6IURhsYWNZ73dmc_Hk,624
@@ -43,48 +46,50 @@ isar/models/communication/message.py,sha256=RC0nQ4YrefveRyibb8QRFLEhPilJ6lvuP7px
43
46
  isar/models/communication/queues/__init__.py,sha256=JqwWbdBQnBeIEhSTjBOkl-O3bYBVBSmjPcWUdscsobw,146
44
47
  isar/models/communication/queues/queue_io.py,sha256=AnHWUCkZ0tunkxKKeBarq-OUkRM97IaMfA-a1pmf1cQ,394
45
48
  isar/models/communication/queues/queue_timeout_error.py,sha256=rF8TlNF7RHS_ueTZ5mp7aFkhLY1j0dcwMwH-Ba6lVpE,45
46
- isar/models/communication/queues/queues.py,sha256=o2xvippgco3C2DzQDhnlwiR0wb9w0QmRuCHJF3Foi18,795
49
+ isar/models/communication/queues/queues.py,sha256=FzoqlT4AQ4Q5Jufh6yRPV2uq5iUZd1odrpjBl77yU5o,803
47
50
  isar/models/communication/queues/status_queue.py,sha256=K_i01uzCu1eciDt9QlDXLBINJnuRLqm6fzrM-PY6qD0,467
48
51
  isar/models/mission/__init__.py,sha256=OQMLlRLJl5QIPrCtUi3trGtoy_2vSqeL_aaI_JJPQ7M,81
49
52
  isar/models/mission/mission.py,sha256=k4pJuUFwxB5JfUiPYgkskUJmd7ROOnzkdZ_p0mUc-uo,4533
50
- isar/models/mission/status.py,sha256=UTa8_0OtiZTmQ6sj7pNKZJ2bAnNgQgW1RTovrjdlVZ0,556
53
+ isar/models/mission/status.py,sha256=-vwRX6O_bljR0q7LET8qVY195XTKpniNSiOQ--1STu4,583
51
54
  isar/models/mission_metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
- isar/models/mission_metadata/mission_metadata.py,sha256=GFVleJ221ywaaNVwQV2L84WSuKip63flf6V-2zWRBI0,801
55
+ isar/models/mission_metadata/mission_metadata.py,sha256=gsGl68i6lBodJuCn8jvAY33NDQ4ovFgU5wiWqKYCiPY,898
53
56
  isar/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
57
  isar/services/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
58
  isar/services/auth/azure_credentials.py,sha256=9PlwGe5FrPRbW2dp0go7LMp8_l_FRvL8xOXotXwzRDo,364
56
59
  isar/services/readers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
60
  isar/services/readers/base_reader.py,sha256=_fNd5fb5dFeMtOvfWzIAGO-KIgl3zT19iEuzSjeZNPc,987
58
61
  isar/services/service_connections/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
- isar/services/service_connections/request_handler.py,sha256=L3kmbnL1d5CHWOtrZHxhJYzitNjeE__3hL378rvhrLk,4249
62
+ isar/services/service_connections/request_handler.py,sha256=0LxC0lu_HXeEf_xmJWjfEsh14oAUI97cpG1IWtBlcs4,4278
60
63
  isar/services/service_connections/mqtt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
- isar/services/service_connections/mqtt/mqtt_client.py,sha256=nHKmU8wLAKKpQYsRfZvWApiI5hs0F-U9Bpk5cZ-yXZs,4071
64
+ isar/services/service_connections/mqtt/mqtt_client.py,sha256=g5RJ85_dsZlHgj6saG2w0sTSetvGFWI4PW4zsb0j9DE,3516
65
+ isar/services/service_connections/mqtt/robot_info_publisher.py,sha256=7g4N1557ZrxnD3dXXbsI6XLvctTLiRmJOvPlEBr2PGk,1226
66
+ isar/services/service_connections/mqtt/robot_status_publisher.py,sha256=-9aeOtKcgc2BZoJYhtiAD6IAGZ12ihZJwPVj3gohE24,2514
62
67
  isar/services/service_connections/stid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
68
  isar/services/service_connections/stid/stid_service.py,sha256=v1D-sHa2pvYl6A4KcY9NPd2w7vf9Y5AdntFE_p8Hk44,1616
64
69
  isar/services/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
70
  isar/services/utilities/queue_utilities.py,sha256=Pw3hehSwkXJNeDv-bDVDfs58VOwtt3i5hpiJ2ZpphuQ,1225
66
- isar/services/utilities/scheduling_utilities.py,sha256=vBkGKjGu1F9wbVSM_OXcPggILdDp8V32d2AsppVXzuA,8371
67
- isar/services/utilities/threaded_request.py,sha256=nyEuNF1FG89L1zUGt4E579lfuS8fJfGQb8mcx6EFXqU,1862
71
+ isar/services/utilities/scheduling_utilities.py,sha256=6EQ5G9KpBPf2dM6owH3NmxATzZe6I2oUuC7lxs3dKyM,8371
72
+ isar/services/utilities/threaded_request.py,sha256=py4G-_RjnIdHljmKFAcQ6ddqMmp-ZYV39Ece-dqRqjs,1874
68
73
  isar/state_machine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
- isar/state_machine/state_machine.py,sha256=SjwHz7gyYYs2AqVqIwraZGNIhCZXJgGjpVbVOIotYBw,19050
70
- isar/state_machine/states_enum.py,sha256=y6uSodsR7w5E3-vKEGvovgbxwW9aLJV6hthmLwxoV-Q,273
74
+ isar/state_machine/state_machine.py,sha256=SSVPxn0OrfKTL3oOzB6RJcULZWVRot_h2UL6js94UOQ,19379
75
+ isar/state_machine/states_enum.py,sha256=HVg2xjZTbiqdesr0rhwl1nlj97GzgI3YQNAr3O7rcMk,272
71
76
  isar/state_machine/states/__init__.py,sha256=7JdcGIUexNK-7nkm4vkVhgWJqjZ5VDcbc0FkmZr5jfo,207
72
- isar/state_machine/states/idle.py,sha256=azN_UJxicwTjNsSnxqHTrqMeneREYdUoEXR1XcIHlJw,1181
73
- isar/state_machine/states/initialize.py,sha256=sPJHIwXERK2G4WtCfiJCatyyprHzsAQ3uw-v6oqMZYY,1895
74
- isar/state_machine/states/initiate_step.py,sha256=-OD0pME5sBG6z6I2gb7y3sshqrw6RIXAdqWNjePNSeY,3847
75
- isar/state_machine/states/monitor.py,sha256=-fWQ2JhWNMPSVogSWFRRDmRCkkfRWbBdi7XxczTgK2E,4412
77
+ isar/state_machine/states/idle.py,sha256=_0MtK8Wb305agTg4J9t2x-eUq3cnXg3KSP6J6HOM3ps,1229
78
+ isar/state_machine/states/initialize.py,sha256=KfLc-LeyhwaW-d4-xyarIafBh9PBkBtz7j1aPqS0x8A,2019
79
+ isar/state_machine/states/initiate_step.py,sha256=7ePwB43d2xOXOrVhWk8NRswkZY-67ril4-Pa3I074Kw,3943
80
+ isar/state_machine/states/monitor.py,sha256=fv_xXZR6R9dQzeOAcewIHEeoSRNdF2fgoO8Fm4rMsdQ,4765
76
81
  isar/state_machine/states/off.py,sha256=jjqN_oJMpBtWuY7hP-c9f0w3p2CYCfe-NpmYHHPnmyI,544
77
- isar/state_machine/states/paused.py,sha256=NO0BpcV1eInOnvr1uoIAyp3WqdxHEaMgaM4ePztNKCU,948
78
- isar/state_machine/states/stop_step.py,sha256=2_q9-3cdqPkh0_Zcjlfi3nrY_lyCjQ9MB4tX4eJVbpI,2582
82
+ isar/state_machine/states/paused.py,sha256=xVZM9WMt90FTiP5forSlA3eJ5Vt9LzZYCFDQDPIocKA,1004
83
+ isar/state_machine/states/stop_step.py,sha256=nU49HfGHFBSadLCoFn7MYecyR1OytHvDS4e0-k-os00,2730
79
84
  isar/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
85
  isar/storage/blob_storage.py,sha256=LbOIK1J_rQAq_xbe5wdFSWYmmvUDRmTgEWpVzXkmzDc,2899
81
- isar/storage/local_storage.py,sha256=zPTejx-MvduF7OR5pGXYzyyg6dOszM0kqq_IUs7m_-s,1827
82
- isar/storage/slimm_storage.py,sha256=AyYZBGhZEFHpujV-u7h_KaM-7ms9dGO-2dcSFYcPrlo,5399
86
+ isar/storage/local_storage.py,sha256=6hgGYI3l-VrHAnNHp8_UT7ANrknHQuAzCNfeic1eVX0,1843
87
+ isar/storage/slimm_storage.py,sha256=eOOyeJTitxyACD9WlURsTEym30dnYA7eAR2gplb6JSs,8670
83
88
  isar/storage/storage_interface.py,sha256=GsfTjSW-dJrp4N9WlxopsN7ElMfLnvP5FCJSFfT09vM,741
84
- isar/storage/uploader.py,sha256=rUmVb1QM3oyPI0Hzzhj2IhJfvauqpqslFcra24sk2V0,4696
85
- isar/storage/utilities.py,sha256=UyfFQhJaTIsD77rSelZqXV8jdvgM2jcW6_qizGbghaw,3611
89
+ isar/storage/uploader.py,sha256=NNvXYq9RIHf-w8XNdocgNamgzMNrOCfFwAOENi11klE,4719
90
+ isar/storage/utilities.py,sha256=k7DmNfB7Een3LQF117UNigkLkdU0VZBBFA-k9CtsxFE,2827
86
91
  robot_interface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
- robot_interface/robot_interface.py,sha256=ADvF-nXZYMOtQakeKMgFyQ4Kk0EW0SYAXkD5--pXOGU,3532
92
+ robot_interface/robot_interface.py,sha256=ovOcfzGF3HLNpaI4lm5rOrC4GuqnwvIaJT0_ceRQSVU,4143
88
93
  robot_interface/test_robot_interface.py,sha256=FV1urn7SbsMyWBIcTKjsBwAG4IsXeZ6pLHE0mA9EGGs,692
89
94
  robot_interface/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
95
  robot_interface/models/exceptions/__init__.py,sha256=0crcMGDVCkJG_2s8tQOqc6rMk2ITSncBgAy9UQTuKig,156
@@ -92,17 +97,19 @@ robot_interface/models/exceptions/robot_exceptions.py,sha256=EN-3oIEptqMUpyMscoT
92
97
  robot_interface/models/initialize/__init__.py,sha256=rz5neEDr59GDbzzI_FF0DId-C-I-50l113P-h-C_QBY,48
93
98
  robot_interface/models/initialize/initialize_params.py,sha256=UcsBm8aFgxIojgYMadaa6yOhvYXxTkCuCbjGuZexfuI,171
94
99
  robot_interface/models/inspection/__init__.py,sha256=tMn-ka5JxcIDm-So-gUuS5Xod4uwiCMJkcnxsLaRv3k,256
95
- robot_interface/models/inspection/inspection.py,sha256=UdGZIDxvnLpOxHIrT18RNod6IOTnVCky73i4kPggJOg,1869
100
+ robot_interface/models/inspection/inspection.py,sha256=oQ--NRTctg7NKa3FtSj537doHkbljhZ3u6WSaJEMs8s,1410
96
101
  robot_interface/models/mission/__init__.py,sha256=A-o1zkVBCS4wmAUTg6jYW-Md67nKY8nBFFDfIjCG1WE,201
97
- robot_interface/models/mission/status.py,sha256=Jrx3KK_7aPmK8OH5k3AaLTv1U9Bd9Yf8R5byk9xpQSs,221
98
- robot_interface/models/mission/step.py,sha256=zIV5wriZ3vCvHjHlDs3zOlXPQQbAB0HWVOdUj9SckwA,4391
102
+ robot_interface/models/mission/status.py,sha256=0-HVdMmxDIqDRdtlxe9Z-1KIcZu5baixnrMP6fgYZ-Y,332
103
+ robot_interface/models/mission/step.py,sha256=ZzR8DM1TCvobyq47kdIZx3SB3ez9DpVVbMDL_xtuH4k,3952
104
+ robot_interface/models/robots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
+ robot_interface/models/robots/robot_model.py,sha256=pZQsqhn9hh6XE3EjMZhWMzYqg5oJ4CJ4CXeOASKvEf8,452
99
106
  robot_interface/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
107
  robot_interface/telemetry/mqtt_client.py,sha256=zDDbnPiBCWNnTJQWBG03Y_HutOs_ag5WY1HZplghBi4,2227
101
- robot_interface/telemetry/payloads.py,sha256=ANYQOPxKsf2iNq2Pb5DR8GK4EPDxrF-SBE-0Wu9JD78,298
108
+ robot_interface/telemetry/payloads.py,sha256=1Y_RPue9plHmgVA6GZ4wRHXfTGghYGaQndMMdtrmFJg,960
102
109
  robot_interface/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
- robot_interface/utilities/json_service.py,sha256=_TAP_dOD7gEGdQ3nnUQw5Py-YNZ7EKAuM1Rhc3mUu5k,937
104
- isar-1.10.14.dist-info/LICENSE,sha256=3fc2-ebLwHWwzfQbulGNRdcNob3SBQeCfEVUDYxsuqw,14058
105
- isar-1.10.14.dist-info/METADATA,sha256=btUeeF5PxuCF3Yxgry9Lyh7pztV7qWrjQkaA9nwoQ98,14578
106
- isar-1.10.14.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
107
- isar-1.10.14.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
108
- isar-1.10.14.dist-info/RECORD,,
110
+ robot_interface/utilities/json_service.py,sha256=nU2Q_3P9Fq9hs6F_wtUjWtHfl_g1Siy-yDhXXSKwHwg,1018
111
+ isar-1.12.0.dist-info/LICENSE,sha256=3fc2-ebLwHWwzfQbulGNRdcNob3SBQeCfEVUDYxsuqw,14058
112
+ isar-1.12.0.dist-info/METADATA,sha256=Ot81RoweIL0xjx6Edeg8VewWnF9JW76d_we5DH5a_tg,14690
113
+ isar-1.12.0.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
114
+ isar-1.12.0.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
115
+ isar-1.12.0.dist-info/RECORD,,
File without changes
@@ -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 Optional, Type
4
+ from typing import List, Optional, Type
5
5
  from uuid import UUID, uuid4
6
6
 
7
7
  from alitra import Pose
@@ -18,8 +18,9 @@ class InspectionMetadata(ABC):
18
18
  start_time: datetime
19
19
  time_indexed_pose: TimeIndexedPose
20
20
  file_type: str
21
+ analysis: Optional[List] = field(default_factory=list, init=False)
21
22
  tag_id: Optional[str] = field(default=None, init=False)
22
- additional: Optional[dict] = field(default=None, init=False)
23
+ additional: Optional[dict] = field(default_factory=dict, init=False)
23
24
 
24
25
 
25
26
  @dataclass
@@ -48,42 +49,22 @@ class Inspection:
48
49
  metadata: InspectionMetadata
49
50
  data: Optional[bytes] = field(default=None, init=False)
50
51
 
51
- @staticmethod
52
- def get_metadata_type() -> Type[InspectionMetadata]:
53
- return InspectionMetadata
54
-
55
52
 
56
53
  @dataclass
57
54
  class Image(Inspection):
58
55
  metadata: ImageMetadata
59
56
 
60
- @staticmethod
61
- def get_metadata_type() -> Type[InspectionMetadata]:
62
- return ImageMetadata
63
-
64
57
 
65
58
  @dataclass
66
59
  class ThermalImage(Inspection):
67
60
  metadata: ThermalImageMetadata
68
61
 
69
- @staticmethod
70
- def get_metadata_type() -> Type[InspectionMetadata]:
71
- return ThermalImageMetadata
72
-
73
62
 
74
63
  @dataclass
75
64
  class Video(Inspection):
76
65
  metadata: VideoMetadata
77
66
 
78
- @staticmethod
79
- def get_metadata_type() -> Type[InspectionMetadata]:
80
- return VideoMetadata
81
-
82
67
 
83
68
  @dataclass
84
69
  class ThermalVideo(Inspection):
85
70
  metadata: ThermalVideoMetadata
86
-
87
- @staticmethod
88
- def get_metadata_type() -> Type[InspectionMetadata]:
89
- return ThermalVideoMetadata
@@ -2,9 +2,14 @@ from enum import Enum
2
2
 
3
3
 
4
4
  class StepStatus(str, Enum):
5
-
6
5
  NotStarted: str = "not_started"
7
6
  Successful: str = "successful"
8
7
  InProgress: str = "in_progress"
9
8
  Failed: str = "failed"
10
9
  Cancelled: str = "cancelled"
10
+
11
+
12
+ class RobotStatus(Enum):
13
+ Available: str = "available"
14
+ Busy: str = "busy"
15
+ Offline: str = "offline"
@@ -1,17 +1,10 @@
1
- from abc import abstractmethod
2
1
  from dataclasses import dataclass, field
3
- from typing import Any, List, Literal, Optional, Type, Union
2
+ from typing import Any, List, Literal, Optional, Union
4
3
  from uuid import UUID, uuid4
5
4
 
6
5
  from alitra import Pose, Position
7
6
 
8
- from robot_interface.models.inspection.inspection import (
9
- Image,
10
- Inspection,
11
- ThermalImage,
12
- ThermalVideo,
13
- Video,
14
- )
7
+ from robot_interface.models.inspection.inspection import Inspection
15
8
  from robot_interface.models.mission.status import StepStatus
16
9
 
17
10
 
@@ -24,7 +17,7 @@ class Step:
24
17
  id: UUID = field(default_factory=uuid4, init=False)
25
18
  status: StepStatus = field(default=StepStatus.NotStarted, init=False)
26
19
 
27
- def __str__(self):
20
+ def __str__(self) -> str:
28
21
  def add_indent(text: str) -> str:
29
22
  return "".join(" " + line for line in text.splitlines(True))
30
23
 
@@ -64,12 +57,8 @@ class InspectionStep(Step):
64
57
  inspections: List[Inspection] = field(default_factory=list, init=False)
65
58
  tag_id: Optional[str] = field(default=None, init=False)
66
59
  type = "inspection_type"
67
-
68
- @staticmethod
69
- def get_inspection_type() -> Type[Inspection]:
70
- return Inspection
71
-
72
- pass
60
+ analysis: Optional[List] = field(default_factory=list, init=False)
61
+ metadata: Optional[dict] = field(default_factory=dict, init=False)
73
62
 
74
63
 
75
64
  @dataclass
@@ -119,10 +108,6 @@ class TakeImage(InspectionStep):
119
108
  target: Position
120
109
  type: Literal["take_image"] = "take_image"
121
110
 
122
- @staticmethod
123
- def get_inspection_type() -> Type[Inspection]:
124
- return Image
125
-
126
111
 
127
112
  @dataclass
128
113
  class TakeThermalImage(InspectionStep):
@@ -133,10 +118,6 @@ class TakeThermalImage(InspectionStep):
133
118
  target: Position
134
119
  type: Literal["take_thermal_image"] = "take_thermal_image"
135
120
 
136
- @staticmethod
137
- def get_inspection_type() -> Type[Inspection]:
138
- return ThermalImage
139
-
140
121
 
141
122
  @dataclass
142
123
  class TakeVideo(InspectionStep):
@@ -150,10 +131,6 @@ class TakeVideo(InspectionStep):
150
131
  duration: float
151
132
  type: Literal["take_video"] = "take_video"
152
133
 
153
- @staticmethod
154
- def get_inspection_type() -> Type[Inspection]:
155
- return Video
156
-
157
134
 
158
135
  @dataclass
159
136
  class TakeThermalVideo(InspectionStep):
@@ -167,10 +144,6 @@ class TakeThermalVideo(InspectionStep):
167
144
  duration: float
168
145
  type: Literal["take_thermal_video"] = "take_thermal_video"
169
146
 
170
- @staticmethod
171
- def get_inspection_type() -> Type[Inspection]:
172
- return ThermalVideo
173
-
174
147
 
175
148
  STEPS = Union[
176
149
  DriveToPose,
File without changes
@@ -0,0 +1,13 @@
1
+ from enum import Enum
2
+
3
+
4
+ # Did you write your own isar-robot package and would like to have it included here?
5
+ # Open a pull request to the ISAR repository!
6
+ class RobotModel(Enum):
7
+ TaurobInspector: str = "TaurobInspector"
8
+ TaurobOperator: str = "TaurobOperator"
9
+ ExR2: str = "ExR2"
10
+ Robot: str = "Robot" # This corresponds to the mock in isar_robot
11
+ Turtlebot: str = "Turtlebot"
12
+ AnymalX: str = "AnymalX"
13
+ AnymalD: str = "AnymalD"
@@ -6,6 +6,7 @@ from typing import List, Sequence
6
6
  from robot_interface.models.initialize import InitializeParams
7
7
  from robot_interface.models.inspection.inspection import Inspection
8
8
  from robot_interface.models.mission import InspectionStep, Step, StepStatus
9
+ from robot_interface.models.mission.status import RobotStatus
9
10
 
10
11
 
11
12
  class RobotInterface(metaclass=ABCMeta):
@@ -136,3 +137,19 @@ class RobotInterface(metaclass=ABCMeta):
136
137
 
137
138
  """
138
139
  raise NotImplementedError
140
+
141
+ @abstractmethod
142
+ def robot_status(self) -> RobotStatus:
143
+ """
144
+ Method which returns an enum indicating if the robot package is able to reach
145
+ the interface which is used to communicate with the robot. This is further used
146
+ by ISAR to indicate whether the ISAR instance is fully functional and may be
147
+ used by other systems.
148
+
149
+ Returns
150
+ -------
151
+ RobotStatus
152
+ Enum indicating if the robot may be reached by the isar-robot package.
153
+
154
+ """
155
+ raise NotImplementedError
@@ -1,7 +1,12 @@
1
1
  from dataclasses import dataclass
2
2
  from datetime import datetime
3
+ from typing import List, Union
4
+ from uuid import UUID
3
5
 
4
6
  from alitra import Pose
7
+ from transitions import State
8
+
9
+ from robot_interface.models.mission.status import RobotStatus
5
10
 
6
11
 
7
12
  @dataclass
@@ -16,3 +21,32 @@ class TelemetryBatteryPayload:
16
21
  battery_level: float
17
22
  robot_id: str
18
23
  timestamp: datetime
24
+
25
+
26
+ @dataclass
27
+ class VideoStream:
28
+ name: str
29
+ url: str
30
+ type: str
31
+
32
+
33
+ @dataclass
34
+ class RobotStatusPayload:
35
+ robot_name: str
36
+ robot_status: RobotStatus
37
+ current_isar_state: State
38
+ current_mission_id: Union[UUID, int, str, None]
39
+ current_task_id: UUID
40
+ current_step_id: UUID
41
+ timestamp: datetime
42
+
43
+
44
+ @dataclass
45
+ class RobotInfoPayload:
46
+ robot_name: str
47
+ robot_model: str
48
+ robot_serial_number: str
49
+ video_streams: List[VideoStream]
50
+ host: str
51
+ port: int
52
+ timestamp: datetime
@@ -1,6 +1,7 @@
1
1
  import json
2
2
  from dataclasses import asdict, is_dataclass
3
3
  from datetime import date, datetime
4
+ from enum import Enum
4
5
  from typing import Iterator
5
6
  from uuid import UUID
6
7
 
@@ -26,6 +27,8 @@ class EnhancedJSONEncoder(json.JSONEncoder):
26
27
  return o.isoformat()
27
28
  if isinstance(o, date):
28
29
  return o.isoformat()
30
+ if isinstance(o, Enum):
31
+ return o.value
29
32
  if isinstance(o, bytes):
30
33
  return "<<non-serializable: bytes>>"
31
34
  if isinstance(o, Iterator):