isar 1.27.2__py3-none-any.whl → 1.28.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.

@@ -39,9 +39,8 @@ class TaskType(str, Enum):
39
39
  class StartMissionInspectionDefinition(BaseModel):
40
40
  type: InspectionTypes = Field(default=InspectionTypes.image)
41
41
  inspection_target: InputPosition
42
- analysis_type: Optional[str] = None
42
+ inspection_description: Optional[str] = None
43
43
  duration: Optional[float] = None
44
- metadata: Optional[dict] = None
45
44
 
46
45
 
47
46
  class StartMissionTaskDefinition(BaseModel):
@@ -107,8 +106,8 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
107
106
  id=task_definition.id if task_definition.id else uuid4_string(),
108
107
  robot_pose=task_definition.pose.to_alitra_pose(),
109
108
  tag_id=task_definition.tag,
109
+ inspection_description=task_definition.inspection.inspection_description,
110
110
  target=task_definition.inspection.inspection_target.to_alitra_position(),
111
- metadata=task_definition.inspection.metadata,
112
111
  zoom=task_definition.zoom,
113
112
  )
114
113
  elif inspection_definition.type == InspectionTypes.video:
@@ -116,9 +115,9 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
116
115
  id=task_definition.id if task_definition.id else uuid4_string(),
117
116
  robot_pose=task_definition.pose.to_alitra_pose(),
118
117
  tag_id=task_definition.tag,
118
+ inspection_description=task_definition.inspection.inspection_description,
119
119
  target=task_definition.inspection.inspection_target.to_alitra_position(),
120
120
  duration=inspection_definition.duration,
121
- metadata=task_definition.inspection.metadata,
122
121
  zoom=task_definition.zoom,
123
122
  )
124
123
  elif inspection_definition.type == InspectionTypes.thermal_image:
@@ -126,8 +125,8 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
126
125
  id=task_definition.id if task_definition.id else uuid4_string(),
127
126
  robot_pose=task_definition.pose.to_alitra_pose(),
128
127
  tag_id=task_definition.tag,
128
+ inspection_description=task_definition.inspection.inspection_description,
129
129
  target=task_definition.inspection.inspection_target.to_alitra_position(),
130
- metadata=task_definition.inspection.metadata,
131
130
  zoom=task_definition.zoom,
132
131
  )
133
132
  elif inspection_definition.type == InspectionTypes.thermal_video:
@@ -135,9 +134,9 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
135
134
  id=task_definition.id if task_definition.id else uuid4_string(),
136
135
  robot_pose=task_definition.pose.to_alitra_pose(),
137
136
  tag_id=task_definition.tag,
137
+ inspection_description=task_definition.inspection.inspection_description,
138
138
  target=task_definition.inspection.inspection_target.to_alitra_position(),
139
139
  duration=inspection_definition.duration,
140
- metadata=task_definition.inspection.metadata,
141
140
  zoom=task_definition.zoom,
142
141
  )
143
142
  elif inspection_definition.type == InspectionTypes.audio:
@@ -145,16 +144,16 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
145
144
  id=task_definition.id if task_definition.id else uuid4_string(),
146
145
  robot_pose=task_definition.pose.to_alitra_pose(),
147
146
  tag_id=task_definition.tag,
147
+ inspection_description=task_definition.inspection.inspection_description,
148
148
  target=task_definition.inspection.inspection_target.to_alitra_position(),
149
149
  duration=inspection_definition.duration,
150
- metadata=task_definition.inspection.metadata,
151
150
  )
152
151
  elif inspection_definition.type == InspectionTypes.gas_measurement:
153
152
  return TakeGasMeasurement(
154
153
  id=task_definition.id if task_definition.id else uuid4_string(),
155
154
  robot_pose=task_definition.pose.to_alitra_pose(),
156
155
  tag_id=task_definition.tag,
157
- metadata=task_definition.inspection.metadata,
156
+ inspection_description=task_definition.inspection.inspection_description,
158
157
  )
159
158
  else:
160
159
  raise ValueError(
@@ -1,5 +1,6 @@
1
1
  import logging
2
2
  from http import HTTPStatus
3
+ from threading import Lock
3
4
 
4
5
  from dependency_injector.wiring import inject
5
6
  from fastapi import Body, HTTPException, Path
@@ -29,6 +30,7 @@ class SchedulingController:
29
30
  ):
30
31
  self.scheduling_utilities: SchedulingUtilities = scheduling_utilities
31
32
  self.logger = logging.getLogger("api")
33
+ self.start_mission_lock: Lock = Lock()
32
34
 
33
35
  def start_mission_by_id(
34
36
  self,
@@ -67,46 +69,76 @@ class SchedulingController:
67
69
  self.logger.info("Received request to start new mission")
68
70
 
69
71
  if not mission_definition:
70
- error_message: str = (
72
+ error_message_no_mission_definition: str = (
71
73
  "Unprocessable entity - 'mission_definition' empty or invalid"
72
74
  )
73
- self.logger.error(error_message)
75
+ self.logger.error(error_message_no_mission_definition)
74
76
  raise HTTPException(
75
- status_code=HTTPStatus.UNPROCESSABLE_ENTITY, detail=error_message
77
+ status_code=HTTPStatus.UNPROCESSABLE_ENTITY,
78
+ detail=error_message_no_mission_definition,
76
79
  )
77
80
 
78
- state: States = self.scheduling_utilities.get_state()
79
- self.scheduling_utilities.verify_state_machine_ready_to_receive_mission(state)
81
+ if not self.start_mission_lock.acquire(blocking=False):
82
+ error_message_another_mission_starting: str = (
83
+ "Conflict - Another mission is currently being started"
84
+ )
85
+ self.logger.warning(error_message_another_mission_starting)
86
+ raise HTTPException(
87
+ status_code=HTTPStatus.CONFLICT,
88
+ detail=error_message_another_mission_starting,
89
+ )
80
90
 
81
91
  try:
82
- mission: Mission = to_isar_mission(
83
- start_mission_definition=mission_definition
92
+ state: States = self.scheduling_utilities.get_state()
93
+ self.scheduling_utilities.verify_state_machine_ready_to_receive_mission(
94
+ state
84
95
  )
85
- except MissionPlannerError as e:
86
- error_message = f"Bad Request - Cannot create ISAR mission: {e}"
87
- self.logger.warning(error_message)
88
- raise HTTPException(
89
- status_code=HTTPStatus.BAD_REQUEST,
90
- detail=error_message,
96
+
97
+ try:
98
+ mission: Mission = to_isar_mission(
99
+ start_mission_definition=mission_definition
100
+ )
101
+ except MissionPlannerError as e:
102
+ error_message = f"Bad Request - Cannot create ISAR mission: {e}"
103
+ self.logger.warning(error_message)
104
+ raise HTTPException(
105
+ status_code=HTTPStatus.BAD_REQUEST,
106
+ detail=error_message,
107
+ )
108
+
109
+ self.scheduling_utilities.verify_robot_capable_of_mission(
110
+ mission=mission, robot_capabilities=robot_settings.CAPABILITIES
91
111
  )
92
112
 
93
- self.scheduling_utilities.verify_robot_capable_of_mission(
94
- mission=mission, robot_capabilities=robot_settings.CAPABILITIES
95
- )
113
+ self.logger.info("Starting mission: %s", mission.id)
114
+ self.scheduling_utilities.start_mission(mission=mission)
115
+ return self._api_response(mission)
96
116
 
97
- self.logger.info("Starting mission: %s", mission.id)
98
- self.scheduling_utilities.start_mission(mission=mission)
99
- return self._api_response(mission)
117
+ finally:
118
+ self.start_mission_lock.release()
100
119
 
101
120
  def return_home(self) -> None:
102
121
  self.logger.info("Received request to return home")
103
122
 
104
- state: States = self.scheduling_utilities.get_state()
105
- self.scheduling_utilities.verify_state_machine_ready_to_receive_return_home_mission(
106
- state
107
- )
123
+ if not self.start_mission_lock.acquire(blocking=False):
124
+ error_message_another_mission_starting: str = (
125
+ "Conflict - Another mission is currently being started"
126
+ )
127
+ self.logger.warning(error_message_another_mission_starting)
128
+ raise HTTPException(
129
+ status_code=HTTPStatus.CONFLICT,
130
+ detail=error_message_another_mission_starting,
131
+ )
132
+
133
+ try:
134
+ state: States = self.scheduling_utilities.get_state()
135
+ self.scheduling_utilities.verify_state_machine_ready_to_receive_return_home_mission(
136
+ state
137
+ )
108
138
 
109
- self.scheduling_utilities.return_home()
139
+ self.scheduling_utilities.return_home()
140
+ finally:
141
+ self.start_mission_lock.release()
110
142
 
111
143
  def pause_mission(self) -> ControlMissionResponse:
112
144
  self.logger.info("Received request to pause current mission")
@@ -28,7 +28,6 @@
28
28
  "z": 0.6145,
29
29
  "frame_name": "robot"
30
30
  },
31
- "analysis_types": "CarSeal, Rust",
32
31
  "metadata": {
33
32
  "zoom": "2x"
34
33
  }
@@ -41,7 +40,6 @@
41
40
  "z": 0.6145,
42
41
  "frame_name": "robot"
43
42
  },
44
- "analysis_types": "GasDetection",
45
43
  "duration": 10
46
44
  }
47
45
  ]
@@ -28,7 +28,6 @@
28
28
  "z": 0,
29
29
  "frame_name": "robot"
30
30
  },
31
- "analysis_types": "CarSeal, Rust",
32
31
  "metadata": {
33
32
  "zoom": "2x"
34
33
  }
@@ -41,8 +40,6 @@
41
40
  "z": 0,
42
41
  "frame_name": "robot"
43
42
  },
44
- "analysis_types": "GasDetection"
45
- ,
46
43
  "duration": 10
47
44
  }
48
45
  ]
@@ -72,8 +69,7 @@
72
69
  "y": 0,
73
70
  "z": 0,
74
71
  "frame_name": "robot"
75
- },
76
- "analysis_types": "ColdSpot,HotSpot"
72
+ }
77
73
  },
78
74
  {
79
75
  "type": "Video",
@@ -28,8 +28,6 @@
28
28
  "z": 0,
29
29
  "frame": "robot"
30
30
  },
31
- "analysis_types": "CarSeal, Rust"
32
- ,
33
31
  "metadata": {
34
32
  "zoom": "2x"
35
33
  }
@@ -41,8 +39,7 @@
41
39
  "y": 4.9,
42
40
  "z": 0,
43
41
  "frame": "robot"
44
- },
45
- "analysis_types": "GasDetection"
42
+ }
46
43
  }
47
44
  ]
48
45
  },
@@ -72,9 +69,7 @@
72
69
  "y": 5.2,
73
70
  "z": 0,
74
71
  "frame": "robot"
75
- },
76
- "analysis_types": "ColdSpot, HotSpot"
77
-
72
+ }
78
73
  }
79
74
  ]
80
75
  },
@@ -104,8 +99,7 @@
104
99
  "y": 5.2,
105
100
  "z": 0,
106
101
  "frame": "robot"
107
- },
108
- "analysis_types": "ColdSpot, HotSpot"
102
+ }
109
103
  },
110
104
  {
111
105
  "type": "ThermalImage",
@@ -114,8 +108,7 @@
114
108
  "y": 1.9,
115
109
  "z": 0,
116
110
  "frame": "robot"
117
- },
118
- "analysis_types": "ColdSpot, HotSpot"
111
+ }
119
112
  }
120
113
  ]
121
114
  }
isar/robot/robot.py CHANGED
@@ -33,7 +33,7 @@ class Robot(object):
33
33
  self.start_mission_thread: Optional[RobotStartMissionThread] = None
34
34
  self.robot_status_thread: Optional[RobotStatusThread] = None
35
35
  self.robot_task_status_thread: Optional[RobotTaskStatusThread] = None
36
- self.stop_mission_thread_thread: Optional[RobotStopMissionThread] = None
36
+ self.stop_mission_thread: Optional[RobotStopMissionThread] = None
37
37
  self.signal_thread_quitting: Event = Event()
38
38
 
39
39
  def stop(self) -> None:
@@ -42,19 +42,16 @@ class Robot(object):
42
42
  self.robot_status_thread.join()
43
43
  if (
44
44
  self.robot_task_status_thread is not None
45
- and self.robot_status_thread.is_alive()
45
+ and self.robot_task_status_thread.is_alive()
46
46
  ):
47
47
  self.robot_task_status_thread.join()
48
48
  if (
49
49
  self.start_mission_thread is not None
50
- and self.robot_status_thread.is_alive()
50
+ and self.start_mission_thread.is_alive()
51
51
  ):
52
52
  self.start_mission_thread.join()
53
- if (
54
- self.stop_mission_thread_thread is not None
55
- and self.stop_mission_thread_thread.is_alive()
56
- ):
57
- self.stop_mission_thread_thread.join()
53
+ if self.stop_mission_thread is not None and self.stop_mission_thread.is_alive():
54
+ self.stop_mission_thread.join()
58
55
  self.robot_status_thread = None
59
56
  self.robot_task_status_thread = None
60
57
  self.start_mission_thread = None
@@ -92,7 +89,15 @@ class Robot(object):
92
89
  def _check_and_handle_stop_mission(self, event: Queue) -> None:
93
90
  if check_for_event(event):
94
91
  if (
95
- self.stop_mission_thread_thread is not None
92
+ self.stop_mission_thread is not None
93
+ and self.stop_mission_thread.is_alive()
94
+ ):
95
+ self.logger.warning(
96
+ "Received stop mission event while trying to stop a mission. Aborting stop attempt."
97
+ )
98
+ return
99
+ if (
100
+ self.start_mission_thread is not None
96
101
  and self.start_mission_thread.is_alive()
97
102
  ):
98
103
  error_description = "Received stop mission event while trying to start a mission. Aborting stop attempt."
@@ -104,10 +109,10 @@ class Robot(object):
104
109
  self.robot_service_events.mission_failed_to_stop, error_message
105
110
  )
106
111
  return
107
- self.stop_mission_thread_thread = RobotStopMissionThread(
112
+ self.stop_mission_thread = RobotStopMissionThread(
108
113
  self.robot_service_events, self.robot, self.signal_thread_quitting
109
114
  )
110
- self.stop_mission_thread_thread.start()
115
+ self.stop_mission_thread.start()
111
116
 
112
117
  def run(self) -> None:
113
118
  self.robot_status_thread = RobotStatusThread(
@@ -61,6 +61,10 @@ class RobotStartMissionThread(Thread):
61
61
  error_description=error_description,
62
62
  ),
63
63
  )
64
+ break
65
+
66
+ continue
67
+
64
68
  started_mission = True
65
69
  except RobotInfeasibleMissionException as e:
66
70
  trigger_event(
@@ -69,4 +73,6 @@ class RobotStartMissionThread(Thread):
69
73
  error_reason=e.error_reason, error_description=e.error_description
70
74
  ),
71
75
  )
72
- trigger_event_without_data(self.robot_service_events.mission_started)
76
+
77
+ if started_mission:
78
+ trigger_event_without_data(self.robot_service_events.mission_started)
@@ -125,13 +125,11 @@ class SlimmStorage(StorageInterface):
125
125
  "ImageMetadata.CameraOrientation2": str(array_of_orientation[1]),
126
126
  "ImageMetadata.CameraOrientation3": str(array_of_orientation[2]),
127
127
  "ImageMetadata.CameraOrientation4": str(array_of_orientation[3]),
128
- "ImageMetadata.AnalysisMethods": (
129
- inspection.metadata.additional["analysis_type"]
130
- if inspection.metadata.additional
131
- and inspection.metadata.additional["analysis_type"]
128
+ "ImageMetadata.Description": (
129
+ inspection.metadata.inspection_description
130
+ if inspection.metadata.inspection_description
132
131
  else "N/A"
133
132
  ),
134
- "ImageMetadata.Description": str(inspection.metadata.additional),
135
133
  "ImageMetadata.FunctionalLocation": (
136
134
  inspection.metadata.tag_id # noqa: E501
137
135
  if inspection.metadata.tag_id
@@ -175,13 +173,11 @@ class SlimmStorage(StorageInterface):
175
173
  "VideoMetadata.CameraOrientation2": str(array_of_orientation[1]),
176
174
  "VideoMetadata.CameraOrientation3": str(array_of_orientation[2]),
177
175
  "VideoMetadata.CameraOrientation4": str(array_of_orientation[3]),
178
- "VideoMetadata.AnalysisMethods": (
179
- inspection.metadata.additional["analysis_type"]
180
- if inspection.metadata.additional
181
- and inspection.metadata.additional["analysis_type"]
176
+ "VideoMetadata.Description": (
177
+ inspection.metadata.inspection_description
178
+ if inspection.metadata.inspection_description
182
179
  else "N/A"
183
180
  ),
184
- "VideoMetadata.Description": str(inspection.metadata.additional),
185
181
  "VideoMetadata.FunctionalLocation": (
186
182
  inspection.metadata.tag_id # noqa: E501
187
183
  if inspection.metadata.tag_id
isar/storage/uploader.py CHANGED
@@ -163,8 +163,10 @@ class Uploader:
163
163
  inspection_id=inspection.id,
164
164
  inspection_path=inspection_path,
165
165
  installation_code=settings.PLANT_SHORT_NAME,
166
- analysis_to_be_run=inspection.metadata.analysis_type,
167
- timestamp=datetime.now(timezone.utc),
166
+ tag_id=inspection.metadata.tag_id,
167
+ inspection_type=type(inspection).__name__,
168
+ inspection_description=inspection.metadata.inspection_description,
169
+ timestamp=inspection.metadata.start_time,
168
170
  )
169
171
  self.mqtt_publisher.publish(
170
172
  topic=settings.TOPIC_ISAR_INSPECTION_RESULT,
isar/storage/utilities.py CHANGED
@@ -1,5 +1,4 @@
1
1
  import json
2
- import time
3
2
  from datetime import datetime, timezone
4
3
  from pathlib import Path
5
4
  from typing import Tuple
@@ -41,11 +40,7 @@ def construct_metadata_file(
41
40
  "plant_name": settings.PLANT_NAME,
42
41
  "isar_id": settings.ISAR_ID,
43
42
  "robot_name": settings.ROBOT_NAME,
44
- "analysis_type": (
45
- inspection.metadata.additional["analysis_type"]
46
- if inspection.metadata.additional
47
- else "N/A"
48
- ),
43
+ "inspection_description": inspection.metadata.inspection_description,
49
44
  },
50
45
  "data": [
51
46
  {
@@ -71,12 +66,16 @@ def construct_metadata_file(
71
66
 
72
67
 
73
68
  def get_filename(inspection: Inspection) -> str:
74
- inspection_type: str = type(inspection).__name__
69
+ utc_time: str = datetime.now(timezone.utc).strftime("%Y%m%d-%H%M%S")
75
70
  tag: str = inspection.metadata.tag_id if inspection.metadata.tag_id else "no-tag"
76
- epoch_time: int = int(time.time())
77
- return f"{tag}__{inspection_type}__{epoch_time}"
71
+ inspection_type: str = type(inspection).__name__
72
+ inspection_description: str = inspection.metadata.inspection_description.replace(
73
+ " ", "-"
74
+ )
75
+ return f"{tag}__{inspection_type}__{inspection_description}__{utc_time}"
78
76
 
79
77
 
80
78
  def get_foldername(mission: Mission) -> str:
79
+ utc_date: str = datetime.now(timezone.utc).strftime("%Y-%m-%d")
81
80
  mission_name: str = mission.name.replace(" ", "-")
82
- return f"{datetime.now(timezone.utc).date()}__{settings.PLANT_SHORT_NAME}__{mission_name}__{mission.id}"
81
+ return f"{utc_date}__{settings.PLANT_SHORT_NAME}__{mission_name}__{mission.id}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: isar
3
- Version: 1.27.2
3
+ Version: 1.28.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
@@ -5,10 +5,10 @@ isar/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  isar/apis/api.py,sha256=1-RmRH7NReCpOo_NSwP5hS2lDQm6_Dx2ZWe2460GhJY,13770
6
6
  isar/apis/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  isar/apis/models/models.py,sha256=HzLaWhjAv0uJRBWipIgYg_F75eaQ5jl9Pi4UnYbDJ-M,1749
8
- isar/apis/models/start_mission_definition.py,sha256=rGnMOSStAgGCEYG9jyQiVd0yxXZPwmf3Z4SOZJOyt-k,6011
8
+ isar/apis/models/start_mission_definition.py,sha256=5Ri4rW0iu8_PffMYaNCj-epVIKyg7TMttkos8UaUCLc,6152
9
9
  isar/apis/robot_control/robot_controller.py,sha256=7EVukShJDhYez12wYeGWZXH-BrfQ4Wu2so0-fSWN2Zo,1277
10
10
  isar/apis/schedule/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- isar/apis/schedule/scheduling_controller.py,sha256=6QNn3dMu--UCvUfiPEqt9pD6rjjj9_8Mt5E6ECv6kcU,8351
11
+ isar/apis/schedule/scheduling_controller.py,sha256=ggoWjYKxgMwJ5trs8gsU8SGj6CQlmb7Ee1SjRg7hSTw,9671
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
@@ -29,9 +29,9 @@ isar/config/maps/klab_compressor.json,sha256=1Vrk5u_l4WXjrTtG4YfXlrCPbOoRs4TtYHO
29
29
  isar/config/maps/klab_turtlebot.json,sha256=HcB79XFEdY0Wm96EssIFO4TMyAWzc2KENoqN7TbTT0k,823
30
30
  isar/config/maps/turtleworld.json,sha256=EKLMpSK9Gu2lAN-E9l41XOaO3f9Su5n_I97mA6z7sWY,764
31
31
  isar/config/predefined_mission_definition/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- isar/config/predefined_mission_definition/default_exr.json,sha256=L3-kqjfgXoULDUgGsD3Zci7m3wdbwAuSrn4yaH4aPIA,1667
33
- isar/config/predefined_mission_definition/default_mission.json,sha256=nEk1ql17RAs2I5Ws2wA-0GJ6oqJco-Q0Q0vhf4k6ajc,2926
34
- isar/config/predefined_mission_definition/default_turtlebot.json,sha256=Ka379MLu8qiGIa6Fu-8p8A4OgHVccLkKYSX0RthUOeI,4060
32
+ isar/config/predefined_mission_definition/default_exr.json,sha256=diSi4KMnGQY01ZumYUBZDvrekgl4bgiTk-9YPXVeBCY,1550
33
+ isar/config/predefined_mission_definition/default_mission.json,sha256=NAspX-kTaHh9VygJGrytJGNjebEIPbiTnWHhj7qt9rk,2722
34
+ isar/config/predefined_mission_definition/default_turtlebot.json,sha256=20ee7q1EIx7bIIojMucSwdBafuCG5sewbMQn9gJuPEo,3704
35
35
  isar/config/predefined_missions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  isar/config/predefined_missions/default.json,sha256=EDMfPQi2D_517jlfeU2BBFySkbvhYG7uEK6cbiK7DRM,1464
37
37
  isar/config/predefined_missions/default_turtlebot.json,sha256=8Vk1_0P0BBsG0vwh4vwIYINiiWioErHZ0Ppjq3ctaPM,2143
@@ -50,8 +50,8 @@ isar/models/communication/queues/queue_timeout_error.py,sha256=rF8TlNF7RHS_ueTZ5
50
50
  isar/models/communication/queues/queue_utils.py,sha256=wg6bIR3NS35Ek9hnGR5eN8z6i0jd5tOwM-8l30h3uiA,868
51
51
  isar/models/communication/queues/status_queue.py,sha256=on8kvlNsG6MJjEVsyqtBswIpmOdOggQiKr7F5x0T3jw,514
52
52
  isar/models/mission_metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
- isar/robot/robot.py,sha256=ubHX8AM54Iz5CdINfSRkhs7V8VGSIeuH1pZboUfeLMw,5244
54
- isar/robot/robot_start_mission.py,sha256=0S5mzOENLtRvW75THr_PTlSDycI3NVMOptJuL9TV0v8,2766
53
+ isar/robot/robot.py,sha256=h-Z_1xCACekHvaj-vPJAhdzixSlcW4zMpe9__ui0zv8,5490
54
+ isar/robot/robot_start_mission.py,sha256=QcNtGwM8ukf6iL3830AwAnBszmVDSgYe2J_xaFYLP0g,2860
55
55
  isar/robot/robot_status.py,sha256=j5fGq5FzpEscmqUL6i8jRWCZEJ56b2g_DUpAgWpE1YI,1935
56
56
  isar/robot/robot_stop_mission.py,sha256=jUyfemvbyigxrlIp9aKPn-PvarhagJEgajQPS_LgJ7g,2442
57
57
  isar/robot/robot_task_status.py,sha256=71SYPnoqaFbTe1bELLTvAUigAJ-McpomC2sjYQNQs_A,3290
@@ -99,11 +99,11 @@ isar/state_machine/transitions/functions/utils.py,sha256=Wa72Ocq4QT1E6qkpEJZQ3h5
99
99
  isar/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
100
  isar/storage/blob_storage.py,sha256=Qci6bO508nlTHKPuPtVU5QcvGA4T7mv8cFrKWRcfw4g,3226
101
101
  isar/storage/local_storage.py,sha256=Bnmoi5gyN8r-oRh0aHrOdGqaH3JqRScFKMRXYojW5kY,1855
102
- isar/storage/slimm_storage.py,sha256=DJVvTce4cb8m0_b_r6yog41UuxO_9VKb1hYCZUTEhR0,9050
102
+ isar/storage/slimm_storage.py,sha256=4YsQ1RBztfx6n3pEblwb5G3ndoQN_IZm7bujRktpTx4,8748
103
103
  isar/storage/storage_interface.py,sha256=DYDry4I7aZpDHJhsBF6s8zrgokFAc7fdKJKfA8AvL7o,828
104
- isar/storage/uploader.py,sha256=M7FEr0iLsrSil8SqP7vmB3hswIOA2HTrnakj6aOQbvg,6749
105
- isar/storage/utilities.py,sha256=fitsdQ1ox5gr9fk9VuSk_iTBiEAIS8NZAnHabUZORh0,3173
106
- isar-1.27.2.dist-info/licenses/LICENSE,sha256=3fc2-ebLwHWwzfQbulGNRdcNob3SBQeCfEVUDYxsuqw,14058
104
+ isar/storage/uploader.py,sha256=XoNnDS7_ILRZMGnQCBpRERmgSbFYPfgKRYk1tNHSFxQ,6868
105
+ isar/storage/utilities.py,sha256=LL9XOUUYPHUQndM7pGrV-_utUQuraK-_8DDseOpVnWQ,3266
106
+ isar-1.28.1.dist-info/licenses/LICENSE,sha256=3fc2-ebLwHWwzfQbulGNRdcNob3SBQeCfEVUDYxsuqw,14058
107
107
  robot_interface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
108
  robot_interface/robot_interface.py,sha256=Bkk-joyIzRHxv8iZt7FLPFnlE8chlJad9vgjwc-fDkw,8786
109
109
  robot_interface/test_robot_interface.py,sha256=FV1urn7SbsMyWBIcTKjsBwAG4IsXeZ6pLHE0mA9EGGs,692
@@ -112,23 +112,23 @@ robot_interface/models/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
112
112
  robot_interface/models/exceptions/robot_exceptions.py,sha256=VrsWPf4g0qN5sJRKhc3ER_Wt5drK0MZRuECU-csIlDA,10026
113
113
  robot_interface/models/initialize/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
114
  robot_interface/models/inspection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
- robot_interface/models/inspection/inspection.py,sha256=Q8vyiTMV2Ws1B4N10kQ3C1AZkck0Mh5pwOyWux7OQms,2318
115
+ robot_interface/models/inspection/inspection.py,sha256=AKyca_j2TMQSF-LEjU1_obZTpFS03e8xSH9qWqVVmg4,2254
116
116
  robot_interface/models/mission/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
117
  robot_interface/models/mission/mission.py,sha256=MQ9p5cuclLXexaZu9bkDh5-aN99eunvYC0vP-Z_kUwI,960
118
118
  robot_interface/models/mission/status.py,sha256=UOCARLfLxLFXJEjfIH7aXYXO7xajOKBJsxz-Wd6gZQ4,740
119
- robot_interface/models/mission/task.py,sha256=Vbyp8JzyoLA2Q90TyEAGWUg6BrV0OBhEm0ut0iBwwXc,4859
119
+ robot_interface/models/mission/task.py,sha256=tEvgq15lcRA0AHHtQGNe-GWc_e-V5BlDsA4IYJ1djN0,4864
120
120
  robot_interface/models/robots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
121
  robot_interface/models/robots/battery_state.py,sha256=ktOtJ8ltdK0k_i7BoqYfhc5dbOzIG6Oo-uWC67fCWio,98
122
122
  robot_interface/models/robots/media.py,sha256=8A-CuuubfngzPprs6zWB9hSaqe3jzgsE8rcCzRX2Uto,227
123
123
  robot_interface/models/robots/robot_model.py,sha256=-0jNKWPcEgtF_2klb1It3u0SCoAR0hSW9nce58Zq0Co,417
124
124
  robot_interface/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
125
  robot_interface/telemetry/mqtt_client.py,sha256=ueXdtIFNCwciTj4spvdJj9emd-IOmUuJjpsXQSSWZPY,2987
126
- robot_interface/telemetry/payloads.py,sha256=m55aFrIczI-PDwQXvsFA6M7YNCTy83w7Ff-HIaZNbwI,2329
126
+ robot_interface/telemetry/payloads.py,sha256=75hR-FYwmcbQVqorLzaStOrx_6DI3_CTxFpNIe2xFUc,2394
127
127
  robot_interface/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
128
  robot_interface/utilities/json_service.py,sha256=qkzVkb60Gi_pto-b5n1vNzCrQze2yqgIJqSLNLYj1Fg,1034
129
129
  robot_interface/utilities/uuid_string_factory.py,sha256=_NQIbBQ56w0qqO0MUDP6aPpHbxW7ATRhK8HnQiBSLkc,76
130
- isar-1.27.2.dist-info/METADATA,sha256=TgKO_J8HQ-cWqYrry3YO78zJSOFZE6XY2I6HcdrIbZI,30709
131
- isar-1.27.2.dist-info/WHEEL,sha256=ooBFpIzZCPdw3uqIQsOo4qqbA4ZRPxHnOH7peeONza0,91
132
- isar-1.27.2.dist-info/entry_points.txt,sha256=TFam7uNNw7J0iiDYzsH2gfG0u1eV1wh3JTw_HkhgKLk,49
133
- isar-1.27.2.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
134
- isar-1.27.2.dist-info/RECORD,,
130
+ isar-1.28.1.dist-info/METADATA,sha256=58wexBpmUFqvZoAuimv4sOx97-V_PWO4UCCpO3kWkPQ,30709
131
+ isar-1.28.1.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
132
+ isar-1.28.1.dist-info/entry_points.txt,sha256=TFam7uNNw7J0iiDYzsH2gfG0u1eV1wh3JTw_HkhgKLk,49
133
+ isar-1.28.1.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
134
+ isar-1.28.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.0.1)
2
+ Generator: setuptools (80.7.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -12,9 +12,8 @@ class InspectionMetadata(ABC):
12
12
  start_time: datetime
13
13
  pose: Pose
14
14
  file_type: str
15
- analysis_type: Optional[str] = field(default=None, init=False)
16
15
  tag_id: Optional[str] = field(default=None, init=False)
17
- additional: Optional[dict] = field(default_factory=dict, init=False)
16
+ inspection_description: Optional[str] = field(default=None, init=False)
18
17
 
19
18
 
20
19
  @dataclass
@@ -61,7 +61,7 @@ class InspectionTask(Task):
61
61
 
62
62
  inspection_id: str = Field(default_factory=uuid4_string, frozen=True)
63
63
  robot_pose: Pose = Field(default=None, init=True)
64
- metadata: Optional[dict] = Field(default_factory=dict)
64
+ inspection_description: Optional[str] = Field(default=None)
65
65
  zoom: Optional[ZoomDescription] = Field(default=None)
66
66
 
67
67
  @staticmethod
@@ -111,5 +111,7 @@ class InspectionResultPayload:
111
111
  inspection_id: str
112
112
  inspection_path: Union[str, dict]
113
113
  installation_code: str
114
- analysis_to_be_run: Optional[str]
114
+ tag_id: Optional[str]
115
+ inspection_type: Optional[str]
116
+ inspection_description: Optional[str]
115
117
  timestamp: datetime