isar 1.33.7__py3-none-any.whl → 1.33.8__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.
- isar/models/events.py +4 -0
- isar/models/status.py +16 -0
- isar/services/utilities/scheduling_utilities.py +87 -1
- isar/state_machine/state_machine.py +20 -16
- isar/storage/uploader.py +3 -0
- {isar-1.33.7.dist-info → isar-1.33.8.dist-info}/METADATA +1 -1
- {isar-1.33.7.dist-info → isar-1.33.8.dist-info}/RECORD +13 -12
- robot_interface/models/mission/status.py +0 -6
- robot_interface/telemetry/payloads.py +4 -3
- {isar-1.33.7.dist-info → isar-1.33.8.dist-info}/WHEEL +0 -0
- {isar-1.33.7.dist-info → isar-1.33.8.dist-info}/entry_points.txt +0 -0
- {isar-1.33.7.dist-info → isar-1.33.8.dist-info}/licenses/LICENSE +0 -0
- {isar-1.33.7.dist-info → isar-1.33.8.dist-info}/top_level.txt +0 -0
isar/models/events.py
CHANGED
|
@@ -42,6 +42,8 @@ class Event(Queue[T]):
|
|
|
42
42
|
if timeout is not None:
|
|
43
43
|
raise EventTimeoutError
|
|
44
44
|
return None
|
|
45
|
+
except ValueError:
|
|
46
|
+
raise EventConflictError
|
|
45
47
|
|
|
46
48
|
def clear_event(self) -> None:
|
|
47
49
|
while True:
|
|
@@ -49,6 +51,8 @@ class Event(Queue[T]):
|
|
|
49
51
|
self.get(block=False)
|
|
50
52
|
except Empty:
|
|
51
53
|
break
|
|
54
|
+
except ValueError:
|
|
55
|
+
break
|
|
52
56
|
|
|
53
57
|
def has_event(self) -> bool:
|
|
54
58
|
return (
|
isar/models/status.py
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class IsarStatus(Enum):
|
|
5
|
+
Available = "available"
|
|
6
|
+
ReturnHomePaused = "returnhomepaused"
|
|
7
|
+
Paused = "paused"
|
|
8
|
+
Busy = "busy"
|
|
9
|
+
Home = "home"
|
|
10
|
+
Offline = "offline"
|
|
11
|
+
BlockedProtectiveStop = "blockedprotectivestop"
|
|
12
|
+
ReturningHome = "returninghome"
|
|
13
|
+
InterventionNeeded = "interventionneeded"
|
|
14
|
+
Recharging = "recharging"
|
|
15
|
+
Lockdown = "lockdown"
|
|
16
|
+
GoingToLockdown = "goingtolockdown"
|
|
@@ -94,6 +94,12 @@ class SchedulingUtilities:
|
|
|
94
94
|
status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
|
|
95
95
|
detail="Could not plan mission",
|
|
96
96
|
)
|
|
97
|
+
except Exception as e:
|
|
98
|
+
self.logger.error(e)
|
|
99
|
+
raise HTTPException(
|
|
100
|
+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
|
|
101
|
+
detail="Could not return mission",
|
|
102
|
+
)
|
|
97
103
|
|
|
98
104
|
def verify_robot_capable_of_mission(
|
|
99
105
|
self, mission: Mission, robot_capabilities: List[str]
|
|
@@ -171,6 +177,10 @@ class SchedulingUtilities:
|
|
|
171
177
|
------
|
|
172
178
|
HTTTPException 408 Request timeout
|
|
173
179
|
If there is a timeout while communicating with the state machine
|
|
180
|
+
HTTPException 409 Conflict
|
|
181
|
+
If the state machine is not ready to receive a mission
|
|
182
|
+
HTTPException 500 Internal Server Error
|
|
183
|
+
If there is an unexpected error while sending the mission to the state machine
|
|
174
184
|
"""
|
|
175
185
|
try:
|
|
176
186
|
mission_start_response = self._send_command(
|
|
@@ -195,6 +205,14 @@ class SchedulingUtilities:
|
|
|
195
205
|
)
|
|
196
206
|
self.logger.warning(error_message)
|
|
197
207
|
raise HTTPException(status_code=HTTPStatus.CONFLICT, detail=error_message)
|
|
208
|
+
except Exception as e:
|
|
209
|
+
error_message = (
|
|
210
|
+
f"Unexpected error while sending mission to state machine: {e}"
|
|
211
|
+
)
|
|
212
|
+
self.logger.error(error_message)
|
|
213
|
+
raise HTTPException(
|
|
214
|
+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=error_message
|
|
215
|
+
)
|
|
198
216
|
self.logger.info("OK - Mission started in ISAR")
|
|
199
217
|
|
|
200
218
|
def return_home(
|
|
@@ -206,6 +224,10 @@ class SchedulingUtilities:
|
|
|
206
224
|
------
|
|
207
225
|
HTTTPException 408 Request timeout
|
|
208
226
|
If there is a timeout while communicating with the state machine
|
|
227
|
+
HTTPException 409 Conflict
|
|
228
|
+
If the state machine is not ready to receive a return home mission
|
|
229
|
+
HTTPException 500 Internal Server Error
|
|
230
|
+
If there is an unexpected error while sending the return home command
|
|
209
231
|
"""
|
|
210
232
|
try:
|
|
211
233
|
self._send_command(
|
|
@@ -220,6 +242,12 @@ class SchedulingUtilities:
|
|
|
220
242
|
error_message = "State machine has entered a state which cannot start a return home mission"
|
|
221
243
|
self.logger.warning(error_message)
|
|
222
244
|
raise HTTPException(status_code=HTTPStatus.CONFLICT, detail=error_message)
|
|
245
|
+
except Exception as e:
|
|
246
|
+
error_message = f"Unexpected error while sending return home command: {e}"
|
|
247
|
+
self.logger.error(error_message)
|
|
248
|
+
raise HTTPException(
|
|
249
|
+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=error_message
|
|
250
|
+
)
|
|
223
251
|
self.logger.info("OK - Return home mission started in ISAR")
|
|
224
252
|
|
|
225
253
|
def pause_mission(self) -> ControlMissionResponse:
|
|
@@ -229,6 +257,8 @@ class SchedulingUtilities:
|
|
|
229
257
|
------
|
|
230
258
|
HTTTPException 408 Request timeout
|
|
231
259
|
If there is a timeout while communicating with the state machine
|
|
260
|
+
HTTPException 409 Conflict
|
|
261
|
+
If the state machine is not in a state which can pause a mission
|
|
232
262
|
"""
|
|
233
263
|
try:
|
|
234
264
|
response = self._send_command(True, self.api_events.pause_mission)
|
|
@@ -244,6 +274,12 @@ class SchedulingUtilities:
|
|
|
244
274
|
)
|
|
245
275
|
self.logger.warning(error_message)
|
|
246
276
|
raise HTTPException(status_code=HTTPStatus.CONFLICT, detail=error_message)
|
|
277
|
+
except Exception as e:
|
|
278
|
+
error_message = f"Unexpected error while pausing mission: {e}"
|
|
279
|
+
self.logger.error(error_message)
|
|
280
|
+
raise HTTPException(
|
|
281
|
+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=error_message
|
|
282
|
+
)
|
|
247
283
|
|
|
248
284
|
def resume_mission(self) -> ControlMissionResponse:
|
|
249
285
|
"""Resume mission
|
|
@@ -252,6 +288,10 @@ class SchedulingUtilities:
|
|
|
252
288
|
------
|
|
253
289
|
HTTTPException 408 Request timeout
|
|
254
290
|
If there is a timeout while communicating with the state machine
|
|
291
|
+
HTTPException 409 Conflict
|
|
292
|
+
If the state machine is not in a state which can resume a mission
|
|
293
|
+
HTTPException 500 Internal Server Error
|
|
294
|
+
If there is an unexpected error while resuming the mission
|
|
255
295
|
"""
|
|
256
296
|
try:
|
|
257
297
|
response = self._send_command(True, self.api_events.resume_mission)
|
|
@@ -267,6 +307,12 @@ class SchedulingUtilities:
|
|
|
267
307
|
raise HTTPException(
|
|
268
308
|
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=error_message
|
|
269
309
|
)
|
|
310
|
+
except Exception as e:
|
|
311
|
+
error_message = f"Unexpected error while resuming mission: {e}"
|
|
312
|
+
self.logger.error(error_message)
|
|
313
|
+
raise HTTPException(
|
|
314
|
+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=error_message
|
|
315
|
+
)
|
|
270
316
|
|
|
271
317
|
def stop_mission(self, mission_id: str = "") -> ControlMissionResponse:
|
|
272
318
|
"""Stop mission
|
|
@@ -279,6 +325,10 @@ class SchedulingUtilities:
|
|
|
279
325
|
The request was understood, but attempting to stop the mission failed
|
|
280
326
|
HTTPException 408 Request timeout
|
|
281
327
|
If there is a timeout while communicating with the state machine
|
|
328
|
+
HTTPException 409 Conflict
|
|
329
|
+
If the state machine is not in a state which can stop a mission
|
|
330
|
+
HTTPException 500 Internal Server Error
|
|
331
|
+
If there is an unexpected error while stopping the mission
|
|
282
332
|
"""
|
|
283
333
|
try:
|
|
284
334
|
stop_mission_response: ControlMissionResponse = self._send_command(
|
|
@@ -293,7 +343,7 @@ class SchedulingUtilities:
|
|
|
293
343
|
)
|
|
294
344
|
|
|
295
345
|
if stop_mission_response.mission_status != MissionStatus.Cancelled.value:
|
|
296
|
-
error_message = "Failed to stop mission"
|
|
346
|
+
error_message = f"Failed to stop mission, mission status is {stop_mission_response.mission_status}"
|
|
297
347
|
self.logger.error(error_message)
|
|
298
348
|
raise HTTPException(
|
|
299
349
|
status_code=HTTPStatus.CONFLICT, detail=error_message
|
|
@@ -308,6 +358,14 @@ class SchedulingUtilities:
|
|
|
308
358
|
)
|
|
309
359
|
self.logger.warning(error_message)
|
|
310
360
|
raise HTTPException(status_code=HTTPStatus.CONFLICT, detail=error_message)
|
|
361
|
+
except HTTPException as e:
|
|
362
|
+
raise e
|
|
363
|
+
except Exception as e:
|
|
364
|
+
error_message = f"Unexpected error while stopping mission: {e}"
|
|
365
|
+
self.logger.error(error_message)
|
|
366
|
+
raise HTTPException(
|
|
367
|
+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=error_message
|
|
368
|
+
)
|
|
311
369
|
self.logger.info("OK - Mission successfully stopped")
|
|
312
370
|
return stop_mission_response
|
|
313
371
|
|
|
@@ -316,6 +374,10 @@ class SchedulingUtilities:
|
|
|
316
374
|
|
|
317
375
|
Raises
|
|
318
376
|
------
|
|
377
|
+
HTTPException 409 Conflict
|
|
378
|
+
If the state machine is not in intervention needed state
|
|
379
|
+
HTTPException 408 Request timeout
|
|
380
|
+
If there is a timeout while communicating with the state machine
|
|
319
381
|
HTTPException 500 Internal Server Error
|
|
320
382
|
If the intervention needed state could not be released
|
|
321
383
|
"""
|
|
@@ -332,12 +394,22 @@ class SchedulingUtilities:
|
|
|
332
394
|
error_message = "Cannot release intervention needed as it is not in intervention needed state"
|
|
333
395
|
self.logger.warning(error_message)
|
|
334
396
|
raise HTTPException(status_code=HTTPStatus.CONFLICT, detail=error_message)
|
|
397
|
+
except Exception as e:
|
|
398
|
+
error_message = (
|
|
399
|
+
f"Unexpected error while releasing intervention needed state: {e}"
|
|
400
|
+
)
|
|
401
|
+
self.logger.error(error_message)
|
|
402
|
+
raise HTTPException(
|
|
403
|
+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=error_message
|
|
404
|
+
)
|
|
335
405
|
|
|
336
406
|
def lock_down_robot(self) -> None:
|
|
337
407
|
"""Lock down robot
|
|
338
408
|
|
|
339
409
|
Raises
|
|
340
410
|
------
|
|
411
|
+
HTTPException 409 Conflict
|
|
412
|
+
If the state machine is not in a state which can be locked down
|
|
341
413
|
HTTPException 500 Internal Server Error
|
|
342
414
|
If the robot could not be locked down
|
|
343
415
|
"""
|
|
@@ -352,12 +424,20 @@ class SchedulingUtilities:
|
|
|
352
424
|
error_message = "Cannot send robot to lockdown as it is already in lockdown"
|
|
353
425
|
self.logger.warning(error_message)
|
|
354
426
|
raise HTTPException(status_code=HTTPStatus.CONFLICT, detail=error_message)
|
|
427
|
+
except Exception as e:
|
|
428
|
+
error_message = f"Unexpected error while locking down robot: {e}"
|
|
429
|
+
self.logger.error(error_message)
|
|
430
|
+
raise HTTPException(
|
|
431
|
+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=error_message
|
|
432
|
+
)
|
|
355
433
|
|
|
356
434
|
def release_robot_lockdown(self) -> None:
|
|
357
435
|
"""Release robot from lockdown
|
|
358
436
|
|
|
359
437
|
Raises
|
|
360
438
|
------
|
|
439
|
+
HTTPException 409 Conflict
|
|
440
|
+
If the state machine is not in lockdown
|
|
361
441
|
HTTPException 500 Internal Server Error
|
|
362
442
|
If the robot could not be released from lockdown
|
|
363
443
|
"""
|
|
@@ -376,6 +456,12 @@ class SchedulingUtilities:
|
|
|
376
456
|
)
|
|
377
457
|
self.logger.warning(error_message)
|
|
378
458
|
raise HTTPException(status_code=HTTPStatus.CONFLICT, detail=error_message)
|
|
459
|
+
except Exception as e:
|
|
460
|
+
error_message = f"Unexpected error while releasing robot from lockdown: {e}"
|
|
461
|
+
self.logger.error(error_message)
|
|
462
|
+
raise HTTPException(
|
|
463
|
+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=error_message
|
|
464
|
+
)
|
|
379
465
|
|
|
380
466
|
def _send_command(self, input: T1, api_event: APIEvent[T1, T2]) -> T2:
|
|
381
467
|
if api_event.request.has_event():
|
|
@@ -15,6 +15,7 @@ from isar.mission_planner.task_selector_interface import (
|
|
|
15
15
|
TaskSelectorStop,
|
|
16
16
|
)
|
|
17
17
|
from isar.models.events import Events, SharedState
|
|
18
|
+
from isar.models.status import IsarStatus
|
|
18
19
|
from isar.services.service_connections.mqtt.mqtt_client import props_expiry
|
|
19
20
|
from isar.state_machine.states.await_next_mission import AwaitNextMission
|
|
20
21
|
from isar.state_machine.states.blocked_protective_stop import BlockedProtectiveStop
|
|
@@ -45,15 +46,15 @@ from robot_interface.models.exceptions.robot_exceptions import (
|
|
|
45
46
|
)
|
|
46
47
|
from robot_interface.models.inspection.inspection import Inspection
|
|
47
48
|
from robot_interface.models.mission.mission import Mission
|
|
48
|
-
from robot_interface.models.mission.status import
|
|
49
|
+
from robot_interface.models.mission.status import TaskStatus
|
|
49
50
|
from robot_interface.models.mission.task import TASKS, InspectionTask, Task
|
|
50
51
|
from robot_interface.robot_interface import RobotInterface
|
|
51
52
|
from robot_interface.telemetry.mqtt_client import MqttClientInterface
|
|
52
53
|
from robot_interface.telemetry.payloads import (
|
|
53
54
|
InterventionNeededPayload,
|
|
55
|
+
IsarStatusPayload,
|
|
54
56
|
MissionAbortedPayload,
|
|
55
57
|
MissionPayload,
|
|
56
|
-
RobotStatusPayload,
|
|
57
58
|
TaskPayload,
|
|
58
59
|
)
|
|
59
60
|
from robot_interface.utilities.json_service import EnhancedJSONEncoder
|
|
@@ -213,6 +214,9 @@ class StateMachine(object):
|
|
|
213
214
|
self.send_task_status()
|
|
214
215
|
|
|
215
216
|
def battery_level_is_above_mission_start_threshold(self):
|
|
217
|
+
if not self.shared_state.robot_battery_level.check():
|
|
218
|
+
self.logger.warning("Battery level is None")
|
|
219
|
+
return False
|
|
216
220
|
return (
|
|
217
221
|
not self.shared_state.robot_battery_level.check()
|
|
218
222
|
< settings.ROBOT_MISSION_BATTERY_START_THRESHOLD
|
|
@@ -367,7 +371,7 @@ class StateMachine(object):
|
|
|
367
371
|
if not self.mqtt_publisher:
|
|
368
372
|
return
|
|
369
373
|
|
|
370
|
-
payload:
|
|
374
|
+
payload: IsarStatusPayload = IsarStatusPayload(
|
|
371
375
|
isar_id=settings.ISAR_ID,
|
|
372
376
|
robot_name=settings.ROBOT_NAME,
|
|
373
377
|
status=self._current_status(),
|
|
@@ -381,31 +385,31 @@ class StateMachine(object):
|
|
|
381
385
|
retain=True,
|
|
382
386
|
)
|
|
383
387
|
|
|
384
|
-
def _current_status(self) ->
|
|
388
|
+
def _current_status(self) -> IsarStatus:
|
|
385
389
|
if self.current_state == States.AwaitNextMission:
|
|
386
|
-
return
|
|
390
|
+
return IsarStatus.Available
|
|
387
391
|
elif self.current_state == States.ReturnHomePaused:
|
|
388
|
-
return
|
|
392
|
+
return IsarStatus.ReturnHomePaused
|
|
389
393
|
elif self.current_state == States.Paused:
|
|
390
|
-
return
|
|
394
|
+
return IsarStatus.Paused
|
|
391
395
|
elif self.current_state == States.Home:
|
|
392
|
-
return
|
|
396
|
+
return IsarStatus.Home
|
|
393
397
|
elif self.current_state == States.ReturningHome:
|
|
394
|
-
return
|
|
398
|
+
return IsarStatus.ReturningHome
|
|
395
399
|
elif self.current_state == States.Offline:
|
|
396
|
-
return
|
|
400
|
+
return IsarStatus.Offline
|
|
397
401
|
elif self.current_state == States.BlockedProtectiveStop:
|
|
398
|
-
return
|
|
402
|
+
return IsarStatus.BlockedProtectiveStop
|
|
399
403
|
elif self.current_state == States.InterventionNeeded:
|
|
400
|
-
return
|
|
404
|
+
return IsarStatus.InterventionNeeded
|
|
401
405
|
elif self.current_state == States.Recharging:
|
|
402
|
-
return
|
|
406
|
+
return IsarStatus.Recharging
|
|
403
407
|
elif self.current_state == States.Lockdown:
|
|
404
|
-
return
|
|
408
|
+
return IsarStatus.Lockdown
|
|
405
409
|
elif self.current_state == States.GoingToLockdown:
|
|
406
|
-
return
|
|
410
|
+
return IsarStatus.GoingToLockdown
|
|
407
411
|
else:
|
|
408
|
-
return
|
|
412
|
+
return IsarStatus.Busy
|
|
409
413
|
|
|
410
414
|
def _log_state_transition(self, next_state) -> None:
|
|
411
415
|
"""Logs all state transitions that are not self-transitions."""
|
isar/storage/uploader.py
CHANGED
|
@@ -146,6 +146,9 @@ class Uploader:
|
|
|
146
146
|
)
|
|
147
147
|
except Empty:
|
|
148
148
|
continue
|
|
149
|
+
except Exception as e:
|
|
150
|
+
self.logger.error(f"Unexpected error in uploader thread: {e}")
|
|
151
|
+
continue
|
|
149
152
|
|
|
150
153
|
def _upload(self, item: BlobItem) -> StoragePaths:
|
|
151
154
|
inspection_paths: StoragePaths
|
|
@@ -42,7 +42,8 @@ isar/mission_planner/mission_planner_interface.py,sha256=UgpPIM4FbrWOD7fGY3Ul64k
|
|
|
42
42
|
isar/mission_planner/sequential_task_selector.py,sha256=66agRPHuJnEa1vArPyty4muTasAZ50XPjjrSaTdY_Cc,643
|
|
43
43
|
isar/mission_planner/task_selector_interface.py,sha256=pnLeaGPIuyXThcflZ_A7YL2b2xQjFT88hAZidkMomxU,707
|
|
44
44
|
isar/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
|
-
isar/models/events.py,sha256=
|
|
45
|
+
isar/models/events.py,sha256=t3INc7FuoZMzQq65kkJOEVltrQ2Wf4uXXQw8XgcYVrk,5792
|
|
46
|
+
isar/models/status.py,sha256=RCsf0p6FEsOFr4FGA6wekRdJIPrCOHMYuteXs2Mwwhk,430
|
|
46
47
|
isar/robot/robot.py,sha256=sn-JfJE6lC6Auo13fdS556Uwq_xZE6VSrR4DhNcgOno,7560
|
|
47
48
|
isar/robot/robot_battery.py,sha256=goLdgmn61QCgE2Ja3YuiwE_sqJzIhCkS3u90sz1kdug,2089
|
|
48
49
|
isar/robot/robot_pause_mission.py,sha256=BFTLVFOnCeuLlyz1Lu12_6EgYBhk8frsviCs-kGq7AA,2277
|
|
@@ -61,10 +62,10 @@ isar/services/service_connections/mqtt/robot_heartbeat_publisher.py,sha256=SKPvY
|
|
|
61
62
|
isar/services/service_connections/mqtt/robot_info_publisher.py,sha256=AxokGk51hRPTxxD2r0P9braPJCMrf1InaCxrUBKkF4g,1402
|
|
62
63
|
isar/services/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
63
64
|
isar/services/utilities/robot_utilities.py,sha256=4zCigsLXfqDC8POHchktSq81zr1_pTaRve_LQsVr6Mk,514
|
|
64
|
-
isar/services/utilities/scheduling_utilities.py,sha256=
|
|
65
|
+
isar/services/utilities/scheduling_utilities.py,sha256=DOI4K2IRDWiYjAXL891VTDLXWoJnw3Z9FYQF4uKVooM,19782
|
|
65
66
|
isar/services/utilities/threaded_request.py,sha256=py4G-_RjnIdHljmKFAcQ6ddqMmp-ZYV39Ece-dqRqjs,1874
|
|
66
67
|
isar/state_machine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
67
|
-
isar/state_machine/state_machine.py,sha256=
|
|
68
|
+
isar/state_machine/state_machine.py,sha256=lF25XC6vpNO8Mj3DWnmfPBKjS1atl7GdtGbBs2TkaUs,19887
|
|
68
69
|
isar/state_machine/states_enum.py,sha256=EzqLHsNbR7KBMIY5Fa_CDaHm9v6g8UFzq9DJs4x0OU8,746
|
|
69
70
|
isar/state_machine/states/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
71
|
isar/state_machine/states/await_next_mission.py,sha256=3_KrK7nWu1Dm-VA3Rt1gwVsUbn9WuB7MoqLCfobGJSM,2749
|
|
@@ -102,9 +103,9 @@ isar/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
102
103
|
isar/storage/blob_storage.py,sha256=d44z3XpZDUbiKwN8Av2gytTJxnefMXrp5VhiGm4PWxU,3703
|
|
103
104
|
isar/storage/local_storage.py,sha256=Rn-iiiz9DI7PzIhevOMshPIaqzJaqBXeVJMQRhVSl2M,2191
|
|
104
105
|
isar/storage/storage_interface.py,sha256=x-imVeQTdL6dCaTaPTHpXwCR6N4e27WxK_Vpumg0x-Y,1230
|
|
105
|
-
isar/storage/uploader.py,sha256=
|
|
106
|
+
isar/storage/uploader.py,sha256=0BBrxyZGGRkNxGeZeoREucegs4yKUow2523oLEie07o,10841
|
|
106
107
|
isar/storage/utilities.py,sha256=oLH0Rp7UtrQQdilfITnmXO1Z0ExdeDhBImYHid55vBA,3449
|
|
107
|
-
isar-1.33.
|
|
108
|
+
isar-1.33.8.dist-info/licenses/LICENSE,sha256=3fc2-ebLwHWwzfQbulGNRdcNob3SBQeCfEVUDYxsuqw,14058
|
|
108
109
|
robot_interface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
109
110
|
robot_interface/robot_interface.py,sha256=A6t19lcNU_6AfkYKY5DaF0sheym_SZEAawbfaj36Kjk,8997
|
|
110
111
|
robot_interface/test_robot_interface.py,sha256=FV1urn7SbsMyWBIcTKjsBwAG4IsXeZ6pLHE0mA9EGGs,692
|
|
@@ -116,7 +117,7 @@ robot_interface/models/inspection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
|
|
|
116
117
|
robot_interface/models/inspection/inspection.py,sha256=cjAvekL8r82s7bgukWeXpYylHvJG_oRSCJNISPVCvZg,2238
|
|
117
118
|
robot_interface/models/mission/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
118
119
|
robot_interface/models/mission/mission.py,sha256=MQ9p5cuclLXexaZu9bkDh5-aN99eunvYC0vP-Z_kUwI,960
|
|
119
|
-
robot_interface/models/mission/status.py,sha256=
|
|
120
|
+
robot_interface/models/mission/status.py,sha256=3KHA02Jer-HSOwFmUhRkE6cr81H1zPgbwB3p4IjchEY,702
|
|
120
121
|
robot_interface/models/mission/task.py,sha256=YzaqJ_KIIm-3S2Y2-BG4Pdkc8sjFMzMx5jj8FtXSmFg,4744
|
|
121
122
|
robot_interface/models/robots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
122
123
|
robot_interface/models/robots/battery_state.py,sha256=ktOtJ8ltdK0k_i7BoqYfhc5dbOzIG6Oo-uWC67fCWio,98
|
|
@@ -124,12 +125,12 @@ robot_interface/models/robots/media.py,sha256=8A-CuuubfngzPprs6zWB9hSaqe3jzgsE8r
|
|
|
124
125
|
robot_interface/models/robots/robot_model.py,sha256=-0jNKWPcEgtF_2klb1It3u0SCoAR0hSW9nce58Zq0Co,417
|
|
125
126
|
robot_interface/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
127
|
robot_interface/telemetry/mqtt_client.py,sha256=0P1S9mWdJcByGoSOwwn2NPQr9I-OX4b1VPbrIYOU-Zo,4334
|
|
127
|
-
robot_interface/telemetry/payloads.py,sha256=
|
|
128
|
+
robot_interface/telemetry/payloads.py,sha256=A0SWiG609k6o6-Y3vhDWE6an2-_m7D_ND85ohfW4qWs,3236
|
|
128
129
|
robot_interface/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
129
130
|
robot_interface/utilities/json_service.py,sha256=9N1zijW7K4d3WFR2autpaS8U9o1ibymiOX-6stTKCyk,1243
|
|
130
131
|
robot_interface/utilities/uuid_string_factory.py,sha256=_NQIbBQ56w0qqO0MUDP6aPpHbxW7ATRhK8HnQiBSLkc,76
|
|
131
|
-
isar-1.33.
|
|
132
|
-
isar-1.33.
|
|
133
|
-
isar-1.33.
|
|
134
|
-
isar-1.33.
|
|
135
|
-
isar-1.33.
|
|
132
|
+
isar-1.33.8.dist-info/METADATA,sha256=0a9aP_euTxYn_zJaBBvt1LXK8w92gQU2GOLmDr0PJ-Y,31190
|
|
133
|
+
isar-1.33.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
134
|
+
isar-1.33.8.dist-info/entry_points.txt,sha256=TFam7uNNw7J0iiDYzsH2gfG0u1eV1wh3JTw_HkhgKLk,49
|
|
135
|
+
isar-1.33.8.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
|
|
136
|
+
isar-1.33.8.dist-info/RECORD,,
|
|
@@ -23,14 +23,8 @@ class TaskStatus(str, Enum):
|
|
|
23
23
|
|
|
24
24
|
class RobotStatus(Enum):
|
|
25
25
|
Available = "available"
|
|
26
|
-
ReturnHomePaused = "returnhomepaused"
|
|
27
26
|
Paused = "paused"
|
|
28
27
|
Busy = "busy"
|
|
29
28
|
Home = "home"
|
|
30
29
|
Offline = "offline"
|
|
31
30
|
BlockedProtectiveStop = "blockedprotectivestop"
|
|
32
|
-
ReturningHome = "returninghome"
|
|
33
|
-
InterventionNeeded = "interventionneeded"
|
|
34
|
-
Recharging = "recharging"
|
|
35
|
-
Lockdown = "lockdown"
|
|
36
|
-
GoingToLockdown = "goingtolockdown"
|
|
@@ -4,9 +4,10 @@ from typing import List, Optional
|
|
|
4
4
|
|
|
5
5
|
from alitra import Pose
|
|
6
6
|
|
|
7
|
+
from isar.models.status import IsarStatus
|
|
7
8
|
from isar.storage.storage_interface import BlobStoragePath
|
|
8
9
|
from robot_interface.models.exceptions.robot_exceptions import ErrorReason
|
|
9
|
-
from robot_interface.models.mission.status import MissionStatus,
|
|
10
|
+
from robot_interface.models.mission.status import MissionStatus, TaskStatus
|
|
10
11
|
from robot_interface.models.mission.task import TaskTypes
|
|
11
12
|
from robot_interface.models.robots.battery_state import BatteryState
|
|
12
13
|
|
|
@@ -53,10 +54,10 @@ class DocumentInfo:
|
|
|
53
54
|
|
|
54
55
|
|
|
55
56
|
@dataclass
|
|
56
|
-
class
|
|
57
|
+
class IsarStatusPayload:
|
|
57
58
|
isar_id: str
|
|
58
59
|
robot_name: str
|
|
59
|
-
status:
|
|
60
|
+
status: IsarStatus
|
|
60
61
|
timestamp: datetime
|
|
61
62
|
|
|
62
63
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|