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

@@ -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
  }
@@ -6,7 +6,6 @@ from typing import TYPE_CHECKING, Optional
6
6
  from transitions import State
7
7
 
8
8
  from isar.models.communication.queues.queue_utils import check_for_event
9
- from isar.services.utilities.threaded_request import ThreadedRequest
10
9
  from robot_interface.models.exceptions.robot_exceptions import ErrorMessage
11
10
 
12
11
  if TYPE_CHECKING:
@@ -19,7 +18,6 @@ class Stopping(State):
19
18
  self.state_machine: "StateMachine" = state_machine
20
19
  self.logger = logging.getLogger("state_machine")
21
20
  self.events = self.state_machine.events
22
- self.stop_thread: Optional[ThreadedRequest] = None
23
21
  self._count_number_retries: int = 0
24
22
  self.signal_state_machine_to_stop = state_machine.signal_state_machine_to_stop
25
23
  self.stopping_return_home_mission: bool = False
@@ -33,9 +31,6 @@ class Stopping(State):
33
31
  self._run()
34
32
 
35
33
  def stop(self) -> None:
36
- if self.stop_thread:
37
- self.stop_thread.wait_for_thread()
38
- self.stop_thread = None
39
34
  self._count_number_retries = 0
40
35
  self.stopping_return_home_mission = False
41
36
 
@@ -34,7 +34,16 @@ def stop_mission_cleanup(state_machine: "StateMachine") -> bool:
34
34
  state_machine._make_control_mission_response()
35
35
  )
36
36
  state_machine.events.api_requests.stop_mission.output.put(stopped_mission_response)
37
-
38
37
  state_machine.publish_task_status(task=state_machine.current_task)
39
38
  state_machine._finalize()
40
39
  return True
40
+
41
+
42
+ def stop_return_home_mission_cleanup(state_machine: "StateMachine") -> bool:
43
+ if state_machine.current_mission is None:
44
+ state_machine._queue_empty_response()
45
+ state_machine.reset_state_machine()
46
+ return True
47
+
48
+ state_machine._finalize()
49
+ return True
@@ -15,6 +15,7 @@ from isar.state_machine.transitions.functions.start_mission import (
15
15
  )
16
16
  from isar.state_machine.transitions.functions.stop import (
17
17
  stop_mission_cleanup,
18
+ stop_return_home_mission_cleanup,
18
19
  trigger_stop_mission_event,
19
20
  )
20
21
  from isar.state_machine.transitions.functions.utils import def_transition
@@ -59,7 +60,7 @@ def get_mission_transitions(state_machine: "StateMachine") -> List[dict]:
59
60
  "trigger": "return_home_mission_stopped",
60
61
  "source": state_machine.stopping_state,
61
62
  "dest": state_machine.robot_standing_still_state,
62
- "before": def_transition(state_machine, stop_mission_cleanup),
63
+ "before": def_transition(state_machine, stop_return_home_mission_cleanup),
63
64
  },
64
65
  {
65
66
  "trigger": "request_mission_start",
@@ -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.1
3
+ Version: 1.28.0
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
@@ -82,9 +82,9 @@ isar/state_machine/states/offline.py,sha256=aqHv8EH68pfq4yTIxOxxDW7VMkPWcQZX3fNg
82
82
  isar/state_machine/states/paused.py,sha256=NgEl48GjLvnqGfPipYZZ6Yj8vdTb-fFLAK2tUu8i9j8,1461
83
83
  isar/state_machine/states/returning_home.py,sha256=UErxB5xQMtjHtCmg-GLJutli2D6Lc29tbhdNcdxIC2M,6973
84
84
  isar/state_machine/states/robot_standing_still.py,sha256=h2a0CTxXIjE8YKT9_8hkU80q0caq4TYCxHaOYB54cKc,3378
85
- isar/state_machine/states/stopping.py,sha256=fxebBwB5rgRQQ1BPpmqrPBo0PxVvFdlXuQAidOGa4nY,3074
85
+ isar/state_machine/states/stopping.py,sha256=Y44kEw-xB9_63eP6utAMY0RegrIz_1nL5cSI3cfaXEg,2838
86
86
  isar/state_machine/states/unknown_status.py,sha256=tOwfHW_4bKKkUTpKD7qc5gIwGT_fTXaCNxXcogGw-wo,2416
87
- isar/state_machine/transitions/mission.py,sha256=B2d409Q8rJfG4kIY7ZWQWnyxB81xinCUsvm_VWfxMr4,4817
87
+ isar/state_machine/transitions/mission.py,sha256=JJt_v84xFS60cMDIz_MsE6GRLBwpxx2JM5BTIB2O05Q,4867
88
88
  isar/state_machine/transitions/return_home.py,sha256=LeOMnckUUQYzBYRidD2ge6M0KdxGDTgo-ioXR7_9r8A,2714
89
89
  isar/state_machine/transitions/robot_status.py,sha256=c1ceyWRGCtx-KTDtxHXRD7oPbt8TQ2ej24A0wyim8vc,2720
90
90
  isar/state_machine/transitions/functions/fail_mission.py,sha256=_6HqBMALDinFZ4yh5GMpeqqgV5tw5i8OVMj5UDdqesg,495
@@ -94,16 +94,16 @@ isar/state_machine/transitions/functions/resume.py,sha256=9KQjH_6YBGyxFhb7G5dgDe
94
94
  isar/state_machine/transitions/functions/return_home.py,sha256=UlniwYvpz74hxqgN0TyVv3LCmiMsqsosKEtEGLqkNj0,1139
95
95
  isar/state_machine/transitions/functions/robot_status.py,sha256=xhKZ5u_X8uDvnhvGnAIABuKaPXeVqFjkgj4H2Om-j_A,1013
96
96
  isar/state_machine/transitions/functions/start_mission.py,sha256=w8UDiq9pOHu-ei61ng6rWGjfrh6nk_qSokEVdzBHwzY,2516
97
- isar/state_machine/transitions/functions/stop.py,sha256=NzPvr6C1tmDqji5XJf5vw9up_Ow7ApuhjAzDVlJLZPw,1368
97
+ isar/state_machine/transitions/functions/stop.py,sha256=aIj3EPnpgNLdsJwOK1ehhI1TpenQa9JjBxZH0Nm6dLg,1649
98
98
  isar/state_machine/transitions/functions/utils.py,sha256=Wa72Ocq4QT1E6qkpEJZQ3h5o33pGvx7Tlkt2JZ2Grbk,314
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.1.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.0.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.1.dist-info/METADATA,sha256=J0bZTm8PtuwbF7a1PPyftqKwPHUks3sh6tkUh72blJU,30709
131
- isar-1.27.1.dist-info/WHEEL,sha256=ck4Vq1_RXyvS4Jt6SI0Vz6fyVs4GWg7AINwpsaGEgPE,91
132
- isar-1.27.1.dist-info/entry_points.txt,sha256=TFam7uNNw7J0iiDYzsH2gfG0u1eV1wh3JTw_HkhgKLk,49
133
- isar-1.27.1.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
134
- isar-1.27.1.dist-info/RECORD,,
130
+ isar-1.28.0.dist-info/METADATA,sha256=09XJIgb9-ljtOphZvTKF8KEWCELC672HU9_9K1ad6uw,30709
131
+ isar-1.28.0.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
132
+ isar-1.28.0.dist-info/entry_points.txt,sha256=TFam7uNNw7J0iiDYzsH2gfG0u1eV1wh3JTw_HkhgKLk,49
133
+ isar-1.28.0.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
134
+ isar-1.28.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.0.0)
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