isar 1.30.5__py3-none-any.whl → 1.31.1__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 (62) hide show
  1. isar/apis/api.py +7 -51
  2. isar/apis/models/models.py +1 -0
  3. isar/apis/models/start_mission_definition.py +4 -0
  4. isar/apis/robot_control/robot_controller.py +0 -2
  5. isar/apis/schedule/scheduling_controller.py +12 -4
  6. isar/config/log.py +8 -29
  7. isar/config/open_telemetry.py +62 -0
  8. isar/config/settings.py +12 -0
  9. isar/eventhandlers/eventhandler.py +93 -0
  10. isar/mission_planner/local_planner.py +0 -3
  11. isar/models/events.py +118 -0
  12. isar/modules.py +1 -1
  13. isar/robot/robot.py +16 -21
  14. isar/robot/robot_start_mission.py +8 -14
  15. isar/robot/robot_status.py +2 -3
  16. isar/robot/robot_stop_mission.py +3 -9
  17. isar/robot/robot_task_status.py +3 -7
  18. isar/script.py +4 -1
  19. isar/services/utilities/robot_utilities.py +0 -3
  20. isar/services/utilities/scheduling_utilities.py +45 -35
  21. isar/state_machine/state_machine.py +79 -11
  22. isar/state_machine/states/await_next_mission.py +46 -11
  23. isar/state_machine/states/blocked_protective_stop.py +24 -15
  24. isar/state_machine/states/home.py +40 -9
  25. isar/state_machine/states/monitor.py +83 -14
  26. isar/state_machine/states/offline.py +25 -13
  27. isar/state_machine/states/paused.py +24 -38
  28. isar/state_machine/states/returning_home.py +75 -14
  29. isar/state_machine/states/robot_standing_still.py +41 -11
  30. isar/state_machine/states/stopping.py +52 -67
  31. isar/state_machine/states/unknown_status.py +37 -64
  32. isar/state_machine/transitions/functions/pause.py +39 -10
  33. isar/state_machine/transitions/functions/resume.py +44 -15
  34. isar/state_machine/transitions/functions/robot_status.py +4 -5
  35. isar/state_machine/transitions/functions/stop.py +3 -12
  36. isar/state_machine/transitions/mission.py +12 -2
  37. isar/state_machine/transitions/return_home.py +1 -1
  38. isar/state_machine/utils/common_event_handlers.py +166 -0
  39. isar/storage/blob_storage.py +0 -2
  40. isar/storage/uploader.py +1 -4
  41. {isar-1.30.5.dist-info → isar-1.31.1.dist-info}/METADATA +7 -4
  42. {isar-1.30.5.dist-info → isar-1.31.1.dist-info}/RECORD +48 -58
  43. robot_interface/models/mission/task.py +0 -3
  44. robot_interface/robot_interface.py +1 -4
  45. isar/models/communication/__init__.py +0 -0
  46. isar/models/communication/message.py +0 -8
  47. isar/models/communication/queues/__init__.py +0 -0
  48. isar/models/communication/queues/events.py +0 -58
  49. isar/models/communication/queues/queue_io.py +0 -12
  50. isar/models/communication/queues/queue_timeout_error.py +0 -2
  51. isar/models/communication/queues/queue_utils.py +0 -38
  52. isar/models/communication/queues/status_queue.py +0 -22
  53. isar/models/mission_metadata/__init__.py +0 -0
  54. isar/services/service_connections/stid/__init__.py +0 -0
  55. isar/services/utilities/queue_utilities.py +0 -39
  56. isar/state_machine/generic_states/idle.py +0 -133
  57. isar/state_machine/generic_states/ongoing_mission.py +0 -294
  58. isar/state_machine/generic_states/robot_unavailable.py +0 -61
  59. {isar-1.30.5.dist-info → isar-1.31.1.dist-info}/WHEEL +0 -0
  60. {isar-1.30.5.dist-info → isar-1.31.1.dist-info}/entry_points.txt +0 -0
  61. {isar-1.30.5.dist-info → isar-1.31.1.dist-info}/licenses/LICENSE +0 -0
  62. {isar-1.30.5.dist-info → isar-1.31.1.dist-info}/top_level.txt +0 -0
@@ -1,21 +1,22 @@
1
1
  isar/__init__.py,sha256=cH8p8bVveu3FUL6kBhldcSlLaoHgD82Kd0-SwSNfGXw,87
2
- isar/modules.py,sha256=QBB1pge1i17HVMLA5n-qd9K3APCrX9bFF2vlfjheOhU,4778
3
- isar/script.py,sha256=0oUUfytKDOsWrPv4iWemTWl5L3Ug66mQsbvqGqQrVWk,6050
2
+ isar/modules.py,sha256=1QdULg-9gV5Ds4pMV4IQTlImSgsVwqs-g15ifllF2kg,4757
3
+ isar/script.py,sha256=8wDcpsbOdFzSkkOOUBFxz9OJYzBiqnTDqr-175tiyL4,6211
4
4
  isar/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- isar/apis/api.py,sha256=2hggLxcdsHqTYDAfVUMwMIBgpuB-0ba2HWMscHkRGzA,15072
5
+ isar/apis/api.py,sha256=B0fVZPKtnvrxzk48xoazGPYsJVjjBH4IL6glDJ3PGWI,13328
6
6
  isar/apis/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- isar/apis/models/models.py,sha256=NWXTe5SheVj3QXklWZ1FMliZVHdS4Rjfuin5O4N9MTM,1789
8
- isar/apis/models/start_mission_definition.py,sha256=S87i_vrgXTY1nTMTiXMJAnx_q5uVxuiRNcrQrAYWKeo,6152
9
- isar/apis/robot_control/robot_controller.py,sha256=7EVukShJDhYez12wYeGWZXH-BrfQ4Wu2so0-fSWN2Zo,1277
7
+ isar/apis/models/models.py,sha256=GMOss2C8lBeRFV7E37mLwSOM6RhiyLQLcLBRzm_51d4,1835
8
+ isar/apis/models/start_mission_definition.py,sha256=m9M5dZCmvRM1b4N8xYGquCSplSr4GDk376s2QoVL8F4,6231
9
+ isar/apis/robot_control/robot_controller.py,sha256=0EHjMqOBdfJlMrCItGPz5X-4X2kc-2XlNnUU2LOcLfc,1219
10
10
  isar/apis/schedule/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- isar/apis/schedule/scheduling_controller.py,sha256=ggoWjYKxgMwJ5trs8gsU8SGj6CQlmb7Ee1SjRg7hSTw,9671
11
+ isar/apis/schedule/scheduling_controller.py,sha256=yQM2HMgelBnbkzPR_tLHOY2EbThUcSO5jMA6Xtp5FQA,9915
12
12
  isar/apis/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  isar/apis/security/authentication.py,sha256=Se2puhe2TUBmfio2RLma52-VSLRhqvWgu0Cd1bhdwMo,2000
14
14
  isar/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  isar/config/configuration_error.py,sha256=rO6WOhafX6xvVib8WxV-eY483Z0PpN-9PxGsq5ATfKc,46
16
- isar/config/log.py,sha256=SzEWbzXU1DpN7YONIRT8k0zBOGm_qVkXlJuuZtb8STc,2300
16
+ isar/config/log.py,sha256=_zeHrsI4XqoHc1Um50PLHFjlwGiClM_M5CzcXoqwZuY,1380
17
17
  isar/config/logging.conf,sha256=mYO1xf27gAopEMHhGzY7-mwyfN16rwRLkPNMvy3zn2g,1127
18
- isar/config/settings.py,sha256=dn9fEKX7GpzD9Y7q0TjQxW9Xf0iY-pCl3NV7bkxH1E8,12487
18
+ isar/config/open_telemetry.py,sha256=965IlPi7urVTL0Yy4uYu4e1P2Ne6HC_RXizM2vCX9kY,2371
19
+ isar/config/settings.py,sha256=-fBxs0TUGmoCX4nF1Rwg0YMZ-WQ6qsqFZpWHxqwOrlk,13029
19
20
  isar/config/certs/ca-cert.pem,sha256=qoNljfad_qcMxhXJIUMLd7nT-Qwf_d4dYSdoOFEOE8I,2179
20
21
  isar/config/keyvault/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
22
  isar/config/keyvault/keyvault_error.py,sha256=zvPCsZLjboxsxthYkxpRERCTFxYV8R5WmACewAUQLwk,41
@@ -34,26 +35,19 @@ isar/config/predefined_mission_definition/default_turtlebot.json,sha256=20ee7q1E
34
35
  isar/config/predefined_missions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
36
  isar/config/predefined_missions/default.json,sha256=NWo9y5noPmpjlNUxLnZK95Sz7DIEaUR-ISYlw3MP8i0,1251
36
37
  isar/config/predefined_missions/default_turtlebot.json,sha256=8Vk1_0P0BBsG0vwh4vwIYINiiWioErHZ0Ppjq3ctaPM,2143
38
+ isar/eventhandlers/eventhandler.py,sha256=POriVZzl97igY9Ny4_hILKf-PWFSsegxuqkXpOsdMIw,2771
37
39
  isar/mission_planner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- isar/mission_planner/local_planner.py,sha256=6JxAR_V2JB-pVzZ8xajRa1tlKO3d3x-5oe-5NodgkvU,2579
40
+ isar/mission_planner/local_planner.py,sha256=Mkg3vvUBF1jImfQnaFvXLNpKVadR21X4mwDd_wHqJ2w,2520
39
41
  isar/mission_planner/mission_planner_interface.py,sha256=UgpPIM4FbrWOD7fGY3Ul64k3uYb8wo0FwSWGewYoVbc,485
40
42
  isar/mission_planner/sequential_task_selector.py,sha256=66agRPHuJnEa1vArPyty4muTasAZ50XPjjrSaTdY_Cc,643
41
43
  isar/mission_planner/task_selector_interface.py,sha256=pnLeaGPIuyXThcflZ_A7YL2b2xQjFT88hAZidkMomxU,707
42
44
  isar/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
- isar/models/communication/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- isar/models/communication/message.py,sha256=ge2EdUXRnYkiEu5TIAYJFQET_5w-N8MRgc2Y31vetno,155
45
- isar/models/communication/queues/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- isar/models/communication/queues/events.py,sha256=o_oMos8Md6aTv91ymRNY0fNDWwj5QxWcBm6rxHQz5TY,2413
47
- isar/models/communication/queues/queue_io.py,sha256=AnHWUCkZ0tunkxKKeBarq-OUkRM97IaMfA-a1pmf1cQ,394
48
- isar/models/communication/queues/queue_timeout_error.py,sha256=rF8TlNF7RHS_ueTZ5mp7aFkhLY1j0dcwMwH-Ba6lVpE,45
49
- isar/models/communication/queues/queue_utils.py,sha256=wg6bIR3NS35Ek9hnGR5eN8z6i0jd5tOwM-8l30h3uiA,868
50
- isar/models/communication/queues/status_queue.py,sha256=on8kvlNsG6MJjEVsyqtBswIpmOdOggQiKr7F5x0T3jw,514
51
- isar/models/mission_metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
- isar/robot/robot.py,sha256=h-Z_1xCACekHvaj-vPJAhdzixSlcW4zMpe9__ui0zv8,5490
53
- isar/robot/robot_start_mission.py,sha256=vQKsKnrWQuY70jEK-qeeaZYpXxQH4vElorczYZheXTQ,3423
54
- isar/robot/robot_status.py,sha256=FpkTIAA-O5vKuyU7fnWn2YXtbstq5qbk9XSxbn_0MXU,2015
55
- isar/robot/robot_stop_mission.py,sha256=jUyfemvbyigxrlIp9aKPn-PvarhagJEgajQPS_LgJ7g,2442
56
- isar/robot/robot_task_status.py,sha256=71SYPnoqaFbTe1bELLTvAUigAJ-McpomC2sjYQNQs_A,3290
45
+ isar/models/events.py,sha256=9NgvX68Nb8WJyuafD-NYyxxb2Bo9zN15ozNPKURyrxk,3782
46
+ isar/robot/robot.py,sha256=keqsYmfRlyIC4CWkMG0erDt_4uIC0IPvyG2ni4MemyI,5350
47
+ isar/robot/robot_start_mission.py,sha256=RPYH9VtXDFdPqhOpt6kSbT17RHkJQPKkQ6d4784_pFE,3210
48
+ isar/robot/robot_status.py,sha256=NMZZOV1DHOVrJwMsSjKbDSaSiWYnrfAW1cQHtc6heKk,1903
49
+ isar/robot/robot_stop_mission.py,sha256=4GZyhLU0hB6ZK0ArCVhFS9Sf3ZbqFI9DvPNfvD889Ps,2270
50
+ isar/robot/robot_task_status.py,sha256=jefIDfrbly7vWZztWA2zLmK5Yz1NSEytw2YUmprccNA,3161
57
51
  isar/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
52
  isar/services/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
53
  isar/services/auth/azure_credentials.py,sha256=9PlwGe5FrPRbW2dp0go7LMp8_l_FRvL8xOXotXwzRDo,364
@@ -63,50 +57,46 @@ isar/services/service_connections/mqtt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JC
63
57
  isar/services/service_connections/mqtt/mqtt_client.py,sha256=se8uLvjy-cElM-WhmHEPXfEA8u05huOLnkcOCYRpcE4,3551
64
58
  isar/services/service_connections/mqtt/robot_heartbeat_publisher.py,sha256=_bUOG7CfqBlCRvG4vh2XGoMXucBxsJarFIeXIKOH1aw,1019
65
59
  isar/services/service_connections/mqtt/robot_info_publisher.py,sha256=AxokGk51hRPTxxD2r0P9braPJCMrf1InaCxrUBKkF4g,1402
66
- isar/services/service_connections/stid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
60
  isar/services/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
- isar/services/utilities/queue_utilities.py,sha256=Pw3hehSwkXJNeDv-bDVDfs58VOwtt3i5hpiJ2ZpphuQ,1225
69
- isar/services/utilities/robot_utilities.py,sha256=J3miRs0t74HNBoMIzVMceMCibp5DozP9Ai1_i7B3kWI,573
70
- isar/services/utilities/scheduling_utilities.py,sha256=4HoUl0WQc7RE9Vx4wZmpX9czgcF7xJg_Pn2hwtSju10,10702
61
+ isar/services/utilities/robot_utilities.py,sha256=4zCigsLXfqDC8POHchktSq81zr1_pTaRve_LQsVr6Mk,514
62
+ isar/services/utilities/scheduling_utilities.py,sha256=O-V6EBfYcx8HMxa2bf0QBxX7Km5m1hBf9h4P5RGlMfY,10907
71
63
  isar/services/utilities/threaded_request.py,sha256=py4G-_RjnIdHljmKFAcQ6ddqMmp-ZYV39Ece-dqRqjs,1874
72
64
  isar/state_machine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
- isar/state_machine/state_machine.py,sha256=yRNjzheKZ9PqNQ1G-ZHb8VmYEXTR9XqaJQn_3191Rcw,13157
65
+ isar/state_machine/state_machine.py,sha256=RDpUngEf1BAVXDRC52FkUVMSIVhmfTEgQw_kDC06WPE,15663
74
66
  isar/state_machine/states_enum.py,sha256=Z3dO6k6JmQAZ1lzcR58oVCxoCky_-ZS9MaL3RSaNbZ4,434
75
- isar/state_machine/generic_states/idle.py,sha256=T_LSadQ8Eu9egYPgL43WKDYv27MwFu-dqIxDazVE_KU,4359
76
- isar/state_machine/generic_states/ongoing_mission.py,sha256=P3jikXYcpYgvkuwjGGi9krjnUVEVqUwvM_RHeQbN9wc,10814
77
- isar/state_machine/generic_states/robot_unavailable.py,sha256=pHmed1uRPwCWAR4uBJmdnxi9WX8veTbGG9ephmROhm0,1851
78
67
  isar/state_machine/states/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
- isar/state_machine/states/await_next_mission.py,sha256=U0oGi-O05S-ZvdhpQRuirrY3ZBbblURo5U95PsscMlQ,573
80
- isar/state_machine/states/blocked_protective_stop.py,sha256=KDux2lm5kwEEarnDt9FG4MFrWbYUzs1_DX5hu2ILIlI,675
81
- isar/state_machine/states/home.py,sha256=2v7BFQn4QZ0npOrXpWLWCoHD5IpSyAJr-vQCS3MQWJs,514
82
- isar/state_machine/states/monitor.py,sha256=1PMirQaaQa_V-DEmbv-4dqlrB5q_XTg1Q1Gt--F1Bgw,655
83
- isar/state_machine/states/offline.py,sha256=vZnBMVDnehZ-0gPsHNVRpZtb8OBBFkeEnq2olo_Ep6M,609
84
- isar/state_machine/states/paused.py,sha256=IgnWBM6WXj3wjFZMARAPWIpzWGyUSW35DVBvNHuiNP8,1460
85
- isar/state_machine/states/returning_home.py,sha256=BBQo3PoNP-THlvJa5gQr0fNBhInh_Ox1L2OeH8evUq8,638
86
- isar/state_machine/states/robot_standing_still.py,sha256=RbOZSiQz72tWAJID5ksgzcb4lND6OniiG35IE1wMUHk,579
87
- isar/state_machine/states/stopping.py,sha256=yJE7KT1aGo_qd1VTETfg1rTrlM-hKKQYKQp7xu4py_Y,2854
88
- isar/state_machine/states/unknown_status.py,sha256=tOwfHW_4bKKkUTpKD7qc5gIwGT_fTXaCNxXcogGw-wo,2416
89
- isar/state_machine/transitions/mission.py,sha256=_aaHLUXeomHa_m-9pStBQrWmKupsJqb-jC4BDQDBI6o,5490
90
- isar/state_machine/transitions/return_home.py,sha256=LeOMnckUUQYzBYRidD2ge6M0KdxGDTgo-ioXR7_9r8A,2714
68
+ isar/state_machine/states/await_next_mission.py,sha256=RDWqGFdQ6PX7AtSjlrR-fH6s441mKooOpkceTO7pvkc,1873
69
+ isar/state_machine/states/blocked_protective_stop.py,sha256=GEOvxnHXjpCsrh3aa8Idtn1zMYv5HLQzj9qQAq8HvaU,1180
70
+ isar/state_machine/states/home.py,sha256=NUVmSmwG5_N7ZDLfbS0eWMnDVpVXmADrZXjh-s_klks,1862
71
+ isar/state_machine/states/monitor.py,sha256=QEV_lc-lHoFAOK2e6HD4FdzpN607LbqZx2Y9-LknrLA,3666
72
+ isar/state_machine/states/offline.py,sha256=5wdNzC1wG0cWrpuT_r_mk8UNFHA4QSyg8ejXUTAg4Io,1137
73
+ isar/state_machine/states/paused.py,sha256=tegYTUioSIKP2TUiMqBLNp9owyLwcuEM3a_LyKZSwQM,1087
74
+ isar/state_machine/states/returning_home.py,sha256=bO8i61xzQAvT0upgK1Fi_OzyRfsRaZlfK3A_2-tThpo,3420
75
+ isar/state_machine/states/robot_standing_still.py,sha256=ee2ORQD0IfUMMBz7bpuUMyA_sMYtdiy17h48KrZJxRc,1897
76
+ isar/state_machine/states/stopping.py,sha256=fMXXvcXtzML-Q5A-uRD_gXePy51fnt9jhOTVFN-3qqA,2420
77
+ isar/state_machine/states/unknown_status.py,sha256=m9XoGGgdjhjX-LRW31mwiU8r7LREB0yOSv2DFZtZH7Y,1789
78
+ isar/state_machine/transitions/mission.py,sha256=Lsiee_hSn5wd7KWpmvIdaG-49f6HGdkCdiXAo5L0ciE,5803
79
+ isar/state_machine/transitions/return_home.py,sha256=6aBpKpozT48RJ__w13gv-r7dSz-fEOCzkAuKq5Hwm6k,2728
91
80
  isar/state_machine/transitions/robot_status.py,sha256=c1ceyWRGCtx-KTDtxHXRD7oPbt8TQ2ej24A0wyim8vc,2720
92
81
  isar/state_machine/transitions/functions/fail_mission.py,sha256=_6HqBMALDinFZ4yh5GMpeqqgV5tw5i8OVMj5UDdqesg,495
93
82
  isar/state_machine/transitions/functions/finish_mission.py,sha256=TRQrk7HdllmAkwsp25HRZAFAk46Y1hLx3jmkIAKrHDI,1442
94
- isar/state_machine/transitions/functions/pause.py,sha256=aoDkq2nV6wBY0YQX3KbjvBR1ojP2o_SCRT_gfz0BulI,889
95
- isar/state_machine/transitions/functions/resume.py,sha256=9KQjH_6YBGyxFhb7G5dgDe3WH0xHawhEIw6yTVEm9os,998
83
+ isar/state_machine/transitions/functions/pause.py,sha256=oaIFd4aZnbeaHb-EGQE9ozJctskqXKsRKkNc68M8sp0,1975
84
+ isar/state_machine/transitions/functions/resume.py,sha256=HgAEn4jQOPkVPWWZCAh7dqnIerdF8nGcgFcZ1KsCNSQ,2104
96
85
  isar/state_machine/transitions/functions/return_home.py,sha256=UlniwYvpz74hxqgN0TyVv3LCmiMsqsosKEtEGLqkNj0,1139
97
- isar/state_machine/transitions/functions/robot_status.py,sha256=xhKZ5u_X8uDvnhvGnAIABuKaPXeVqFjkgj4H2Om-j_A,1013
86
+ isar/state_machine/transitions/functions/robot_status.py,sha256=P1Cu8xVysbiKRKL4E8mSyoL2-72HfxrLvvOcdnBOlvw,889
98
87
  isar/state_machine/transitions/functions/start_mission.py,sha256=ricRfhLH1_lNpqWxneMZcm7ps2YfY6sQGHkiT0Glf6M,2564
99
- isar/state_machine/transitions/functions/stop.py,sha256=JK4hjGc3QtgSzvCWeOr1YG61SH1QOhmVNjw_jOnahQg,3123
88
+ isar/state_machine/transitions/functions/stop.py,sha256=5tPYE4WB98iammX81wEdrAUvX0huJ2PBooVaY_7i6GY,2902
100
89
  isar/state_machine/transitions/functions/utils.py,sha256=Wa72Ocq4QT1E6qkpEJZQ3h5o33pGvx7Tlkt2JZ2Grbk,314
90
+ isar/state_machine/utils/common_event_handlers.py,sha256=Grv34hVwDjzi9BizqRLMJAKtRpucuklXGR3hoC_0kkQ,5773
101
91
  isar/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
- isar/storage/blob_storage.py,sha256=Qci6bO508nlTHKPuPtVU5QcvGA4T7mv8cFrKWRcfw4g,3226
92
+ isar/storage/blob_storage.py,sha256=D67y3Z939iXoRxs8npOuKOhgs2o6dYz2ivTm5IXXhJE,3168
103
93
  isar/storage/local_storage.py,sha256=Bnmoi5gyN8r-oRh0aHrOdGqaH3JqRScFKMRXYojW5kY,1855
104
94
  isar/storage/storage_interface.py,sha256=DYDry4I7aZpDHJhsBF6s8zrgokFAc7fdKJKfA8AvL7o,828
105
- isar/storage/uploader.py,sha256=HAC3ssuPQCQ1xH4aTQfHIaq-ZoEzKwONWmsAOpNXOzw,9523
95
+ isar/storage/uploader.py,sha256=uD1DzvJ2yYtNAwQGa7UD7kNOxZfKxJ1cCdi7sfOVZ10,9443
106
96
  isar/storage/utilities.py,sha256=oLH0Rp7UtrQQdilfITnmXO1Z0ExdeDhBImYHid55vBA,3449
107
- isar-1.30.5.dist-info/licenses/LICENSE,sha256=3fc2-ebLwHWwzfQbulGNRdcNob3SBQeCfEVUDYxsuqw,14058
97
+ isar-1.31.1.dist-info/licenses/LICENSE,sha256=3fc2-ebLwHWwzfQbulGNRdcNob3SBQeCfEVUDYxsuqw,14058
108
98
  robot_interface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
- robot_interface/robot_interface.py,sha256=Miout0IRX7QniUNu_upyNzkB8KDUWin7GGCqIeMh83E,8195
99
+ robot_interface/robot_interface.py,sha256=-jCAKkZ2eiyzUyHVQmOzw4hMgLWR7pE8MHj-WZo85ZY,7978
110
100
  robot_interface/test_robot_interface.py,sha256=FV1urn7SbsMyWBIcTKjsBwAG4IsXeZ6pLHE0mA9EGGs,692
111
101
  robot_interface/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
102
  robot_interface/models/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -117,7 +107,7 @@ robot_interface/models/inspection/inspection.py,sha256=2T8czQcNt9J1M96tKGQA6P3s5
117
107
  robot_interface/models/mission/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
108
  robot_interface/models/mission/mission.py,sha256=MQ9p5cuclLXexaZu9bkDh5-aN99eunvYC0vP-Z_kUwI,960
119
109
  robot_interface/models/mission/status.py,sha256=UOCARLfLxLFXJEjfIH7aXYXO7xajOKBJsxz-Wd6gZQ4,740
120
- robot_interface/models/mission/task.py,sha256=7g4Xu-2yn3A7JVqrqg-XHHIX1uwYuIrRB00GrOchjio,4820
110
+ robot_interface/models/mission/task.py,sha256=YzaqJ_KIIm-3S2Y2-BG4Pdkc8sjFMzMx5jj8FtXSmFg,4744
121
111
  robot_interface/models/robots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
112
  robot_interface/models/robots/battery_state.py,sha256=ktOtJ8ltdK0k_i7BoqYfhc5dbOzIG6Oo-uWC67fCWio,98
123
113
  robot_interface/models/robots/media.py,sha256=8A-CuuubfngzPprs6zWB9hSaqe3jzgsE8rcCzRX2Uto,227
@@ -128,8 +118,8 @@ robot_interface/telemetry/payloads.py,sha256=PpvmV7XeGgfhc_aRUYFOdwBTwV2x8TwTBIN
128
118
  robot_interface/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
119
  robot_interface/utilities/json_service.py,sha256=qkzVkb60Gi_pto-b5n1vNzCrQze2yqgIJqSLNLYj1Fg,1034
130
120
  robot_interface/utilities/uuid_string_factory.py,sha256=_NQIbBQ56w0qqO0MUDP6aPpHbxW7ATRhK8HnQiBSLkc,76
131
- isar-1.30.5.dist-info/METADATA,sha256=y-vfw6eUN7tOlQjfzG_dD2App6B4A5u2zeSRCC8yGM0,31063
132
- isar-1.30.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
133
- isar-1.30.5.dist-info/entry_points.txt,sha256=TFam7uNNw7J0iiDYzsH2gfG0u1eV1wh3JTw_HkhgKLk,49
134
- isar-1.30.5.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
135
- isar-1.30.5.dist-info/RECORD,,
121
+ isar-1.31.1.dist-info/METADATA,sha256=bilh123vt-dD-IraRBTR4yhxI1YJim_NydR9zPveUYA,31217
122
+ isar-1.31.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
123
+ isar-1.31.1.dist-info/entry_points.txt,sha256=TFam7uNNw7J0iiDYzsH2gfG0u1eV1wh3JTw_HkhgKLk,49
124
+ isar-1.31.1.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
125
+ isar-1.31.1.dist-info/RECORD,,
@@ -50,9 +50,6 @@ class Task(BaseModel):
50
50
  return True
51
51
  return False
52
52
 
53
- def update_task_status(self) -> TaskStatus:
54
- return self.status
55
-
56
53
 
57
54
  class InspectionTask(Task):
58
55
  """
@@ -221,10 +221,7 @@ class RobotInterface(metaclass=ABCMeta):
221
221
  @abstractmethod
222
222
  def robot_status(self) -> RobotStatus:
223
223
  """
224
- Method which returns an enum indicating if the robot package is able to reach
225
- the interface which is used to communicate with the robot. This is further used
226
- by ISAR to indicate whether the ISAR instance is fully functional and may be
227
- used by other systems.
224
+ Method which returns an enum indicating the status of the robot.
228
225
 
229
226
  Returns
230
227
  -------
File without changes
@@ -1,8 +0,0 @@
1
- from dataclasses import dataclass
2
-
3
- from robot_interface.models.mission.mission import Mission
4
-
5
-
6
- @dataclass
7
- class StartMissionMessage:
8
- mission: Mission
File without changes
@@ -1,58 +0,0 @@
1
- from queue import Queue
2
-
3
- from transitions import State
4
-
5
- from isar.config.settings import settings
6
- from isar.models.communication.queues.queue_io import QueueIO
7
- from isar.models.communication.queues.status_queue import StatusQueue
8
- from robot_interface.models.exceptions.robot_exceptions import ErrorMessage
9
- from robot_interface.models.mission.mission import Mission
10
- from robot_interface.models.mission.status import RobotStatus, TaskStatus
11
- from robot_interface.models.mission.task import TASKS
12
-
13
-
14
- class Events:
15
- def __init__(self) -> None:
16
- self.api_requests: APIRequests = APIRequests()
17
- self.state_machine_events: StateMachineEvents = StateMachineEvents()
18
- self.robot_service_events: RobotServiceEvents = RobotServiceEvents()
19
-
20
- self.upload_queue: Queue = Queue(maxsize=10)
21
-
22
- if settings.MQTT_ENABLED:
23
- self.mqtt_queue: Queue = Queue()
24
-
25
-
26
- class APIRequests:
27
- def __init__(self) -> None:
28
- self.start_mission: QueueIO = QueueIO(input_size=1, output_size=1)
29
- self.stop_mission: QueueIO = QueueIO(input_size=1, output_size=1)
30
- self.pause_mission: QueueIO = QueueIO(input_size=1, output_size=1)
31
- self.resume_mission: QueueIO = QueueIO(input_size=1, output_size=1)
32
- self.return_home: QueueIO = QueueIO(input_size=1, output_size=1)
33
-
34
-
35
- class StateMachineEvents:
36
- def __init__(self) -> None:
37
- self.start_mission: Queue[Mission] = Queue(maxsize=1)
38
- self.stop_mission: Queue[bool] = Queue(maxsize=1)
39
- self.pause_mission: Queue[bool] = Queue(maxsize=1)
40
- self.task_status_request: Queue[str] = Queue(maxsize=1)
41
-
42
-
43
- class RobotServiceEvents:
44
- def __init__(self) -> None:
45
- self.task_status_updated: Queue[TaskStatus] = Queue(maxsize=1)
46
- self.task_status_failed: Queue[ErrorMessage] = Queue(maxsize=1)
47
- self.mission_started: Queue[bool] = Queue(maxsize=1)
48
- self.mission_failed: Queue[ErrorMessage] = Queue(maxsize=1)
49
- self.robot_status_changed: Queue[bool] = Queue(maxsize=1)
50
- self.mission_failed_to_stop: Queue[ErrorMessage] = Queue(maxsize=1)
51
- self.mission_successfully_stopped: Queue[bool] = Queue(maxsize=1)
52
-
53
-
54
- class SharedState:
55
- def __init__(self) -> None:
56
- self.state: StatusQueue[State] = StatusQueue()
57
- self.robot_status: StatusQueue[RobotStatus] = StatusQueue()
58
- self.state_machine_current_task: StatusQueue[TASKS] = StatusQueue()
@@ -1,12 +0,0 @@
1
- from queue import Queue
2
-
3
-
4
- class QueueIO:
5
- """
6
- Creates input and output queue. The queues are defined such that the input is from
7
- api to state machine while the output is from state machine to api.
8
- """
9
-
10
- def __init__(self, input_size: int = 0, output_size: int = 0):
11
- self.input: Queue = Queue(maxsize=input_size)
12
- self.output: Queue = Queue(maxsize=output_size)
@@ -1,2 +0,0 @@
1
- class QueueTimeoutError(Exception):
2
- pass
@@ -1,38 +0,0 @@
1
- from queue import Empty, Queue
2
- from typing import Optional, TypeVar
3
-
4
- from isar.models.communication.queues.status_queue import StatusQueue
5
-
6
- T = TypeVar("T")
7
-
8
-
9
- def trigger_event_without_data(queue: Queue[bool]) -> None:
10
- queue.put(True)
11
-
12
-
13
- def trigger_event(queue: Queue[T], data: T) -> None:
14
- queue.put(data)
15
-
16
-
17
- def check_shared_state(queue: StatusQueue[T]) -> Optional[T]:
18
- try:
19
- return queue.check()
20
- except Empty:
21
- return None
22
-
23
-
24
- def update_shared_state(queue: StatusQueue[T], data: T) -> None:
25
- queue.update(data)
26
-
27
-
28
- def check_for_event(queue: Queue[T]) -> Optional[T]:
29
- try:
30
- return queue.get(block=False)
31
- except Empty:
32
- return None
33
-
34
-
35
- def check_for_event_without_consumption(queue: Queue[T]) -> bool:
36
- return (
37
- queue.qsize() != 0
38
- ) # Queue size is not reliable, but should be sufficient for this case
@@ -1,22 +0,0 @@
1
- from collections import deque
2
- from queue import Empty, Queue
3
- from typing import TypeVar
4
-
5
- T = TypeVar("T")
6
-
7
-
8
- class StatusQueue(Queue[T]):
9
- def __init__(self) -> None:
10
- super().__init__()
11
-
12
- def check(self) -> T:
13
- if not self._qsize():
14
- raise Empty
15
- with self.mutex:
16
- queueList = list(self.queue)
17
- return queueList.pop()
18
-
19
- def update(self, item: T):
20
- with self.mutex:
21
- self.queue: deque[T] = deque()
22
- self.queue.append(item)
File without changes
File without changes
@@ -1,39 +0,0 @@
1
- import logging
2
- from queue import Empty, Queue
3
- from typing import Any
4
-
5
- from isar.models.communication.queues.queue_timeout_error import QueueTimeoutError
6
-
7
- logger = logging.getLogger("api")
8
-
9
-
10
- class QueueUtilities:
11
- """
12
- Contains utility functions for handling queue communication between threads.
13
- """
14
-
15
- @staticmethod
16
- def check_queue(queue: Queue, queue_timeout: int = None) -> Any:
17
- """
18
- Checks if there is a message on a queue. If a timeout is specified the function
19
- will raise a QueueTimeoutError if there is no message within the timeout. If
20
- there is no timeout specified this function will block.
21
- :param queue: The queue to be checked for a message
22
- :param queue_timeout: Timeout in seconds
23
- :return: Message found on queue
24
- :raises QueueTimeoutError
25
- """
26
- try:
27
- message: Any = queue.get(timeout=queue_timeout)
28
- except Empty:
29
- logger.error("Queue timed out")
30
- raise QueueTimeoutError
31
- return message
32
-
33
- @staticmethod
34
- def clear_queue(queue: Queue) -> None:
35
- while True:
36
- try:
37
- queue.get(block=False)
38
- except Empty:
39
- break
@@ -1,133 +0,0 @@
1
- import logging
2
- import time
3
- from enum import Enum
4
- from queue import Queue
5
- from typing import TYPE_CHECKING, Optional
6
-
7
- from isar.config.settings import settings
8
- from isar.models.communication.message import StartMissionMessage
9
- from isar.models.communication.queues.queue_io import QueueIO
10
- from isar.models.communication.queues.queue_utils import (
11
- check_for_event,
12
- check_shared_state,
13
- )
14
- from isar.models.communication.queues.status_queue import StatusQueue
15
- from robot_interface.models.mission.status import RobotStatus
16
-
17
- if TYPE_CHECKING:
18
- from isar.state_machine.state_machine import StateMachine
19
-
20
-
21
- class IdleStates(str, Enum):
22
- AwaitNextMission = "awaitNextMission"
23
- Home = "home"
24
- RobotStandingStill = "robotStandingStill"
25
-
26
-
27
- if TYPE_CHECKING:
28
- from isar.state_machine.state_machine import StateMachine
29
-
30
-
31
- class Idle:
32
- def __init__(
33
- self,
34
- state_machine: "StateMachine",
35
- state: IdleStates,
36
- ) -> None:
37
- self.state_machine: "StateMachine" = state_machine
38
- self.logger = logging.getLogger("state_machine")
39
- self.events = state_machine.events
40
- self.shared_state = self.state_machine.shared_state
41
- self.signal_state_machine_to_stop = state_machine.signal_state_machine_to_stop
42
- self.state: IdleStates = state
43
-
44
- # Only used for await_next_mission state
45
- self.entered_time: float = time.time()
46
- self.return_home_delay: float = settings.RETURN_HOME_DELAY
47
-
48
- def start(self) -> None:
49
- self.state_machine.update_state()
50
- self.entered_time = time.time()
51
- self._run()
52
-
53
- def stop(self) -> None:
54
- return
55
-
56
- def _check_and_handle_start_mission_event(
57
- self, event: Queue[StartMissionMessage]
58
- ) -> bool:
59
- start_mission: Optional[StartMissionMessage] = check_for_event(event)
60
- if start_mission:
61
- self.state_machine.start_mission(mission=start_mission.mission)
62
- self.state_machine.request_mission_start() # type: ignore
63
- return True
64
- return False
65
-
66
- def _check_and_handle_return_home_event(self, event: QueueIO) -> bool:
67
- if check_for_event(event.input):
68
- event.output.put(True)
69
- self.state_machine.request_return_home() # type: ignore
70
- return True
71
- return False
72
-
73
- def _check_and_handle_robot_status_event(
74
- self, event: StatusQueue[RobotStatus]
75
- ) -> bool:
76
- robot_status: RobotStatus = check_shared_state(event)
77
-
78
- expected_robot_status = (
79
- RobotStatus.Home if self.state == IdleStates.Home else RobotStatus.Available
80
- )
81
-
82
- if robot_status != expected_robot_status:
83
- self.state_machine.robot_status_changed() # type: ignore
84
- return True
85
-
86
- return False
87
-
88
- def _check_and_handle_stop_mission_event(self, event: Queue) -> bool:
89
- if check_for_event(event):
90
- self.state_machine.stop() # type: ignore
91
- return True
92
- return False
93
-
94
- def _should_return_home(self) -> bool:
95
- time_since_entered = time.time() - self.entered_time
96
- return time_since_entered > self.return_home_delay
97
-
98
- def _run(self) -> None:
99
- while True:
100
- if self.signal_state_machine_to_stop.is_set():
101
- self.logger.info(
102
- "Stopping state machine from %s state", self.state.name
103
- )
104
- break
105
-
106
- if self._check_and_handle_stop_mission_event(
107
- self.events.api_requests.stop_mission.input
108
- ):
109
- break
110
-
111
- if self._check_and_handle_start_mission_event(
112
- self.events.api_requests.start_mission.input
113
- ):
114
- break
115
-
116
- if self._check_and_handle_return_home_event(
117
- self.events.api_requests.return_home
118
- ):
119
- break
120
-
121
- if (
122
- self.state != IdleStates.AwaitNextMission
123
- and self._check_and_handle_robot_status_event(
124
- self.shared_state.robot_status
125
- )
126
- ):
127
- break
128
-
129
- if self.state == IdleStates.AwaitNextMission and self._should_return_home():
130
- self.state_machine.request_return_home() # type: ignore
131
- break
132
-
133
- time.sleep(self.state_machine.sleep_time)