Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions src/isar/apis/api.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import json
import logging
import time
from datetime import datetime, timezone
Expand All @@ -20,7 +19,6 @@
from isar.config.settings import settings
from robot_interface.telemetry.mqtt_client import MqttClientInterface
from robot_interface.telemetry.payloads import StartUpMessagePayload
from robot_interface.utilities.json_service import EnhancedJSONEncoder


class API:
Expand Down Expand Up @@ -374,7 +372,7 @@ def _publish_startup_message(self) -> None:

self.mqtt_publisher.publish(
topic=settings.TOPIC_ISAR_STARTUP,
payload=json.dumps(payload, cls=EnhancedJSONEncoder),
payload=payload.model_dump_json(),
qos=1,
retain=True,
)
16 changes: 8 additions & 8 deletions src/isar/apis/models/start_mission_definition.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import time
from enum import Enum
from typing import List, Optional
from uuid import uuid4

from pydantic import BaseModel, Field

Expand All @@ -18,7 +19,6 @@
TakeVideo,
ZoomDescription,
)
from robot_interface.utilities.uuid_string_factory import uuid4_string


class InspectionTypes(str, Enum):
Expand Down Expand Up @@ -88,7 +88,7 @@ def to_isar_mission(
if start_mission_definition.start_pose:
start_pose = start_mission_definition.start_pose.to_alitra_pose()

id = start_mission_definition.id if start_mission_definition.id else uuid4_string()
id = start_mission_definition.id if start_mission_definition.id else str(uuid4())

return Mission(
id=id,
Expand All @@ -114,7 +114,7 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:

if inspection_definition.type == InspectionTypes.image:
return TakeImage(
id=task_definition.id if task_definition.id else uuid4_string(),
id=task_definition.id if task_definition.id else str(uuid4()),
robot_pose=task_definition.pose.to_alitra_pose(),
tag_id=task_definition.tag,
inspection_description=task_definition.inspection.inspection_description,
Expand All @@ -123,7 +123,7 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
)
elif inspection_definition.type == InspectionTypes.video:
return TakeVideo(
id=task_definition.id if task_definition.id else uuid4_string(),
id=task_definition.id if task_definition.id else str(uuid4()),
robot_pose=task_definition.pose.to_alitra_pose(),
tag_id=task_definition.tag,
inspection_description=task_definition.inspection.inspection_description,
Expand All @@ -133,7 +133,7 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
)
elif inspection_definition.type == InspectionTypes.thermal_image:
return TakeThermalImage(
id=task_definition.id if task_definition.id else uuid4_string(),
id=task_definition.id if task_definition.id else str(uuid4()),
robot_pose=task_definition.pose.to_alitra_pose(),
tag_id=task_definition.tag,
inspection_description=task_definition.inspection.inspection_description,
Expand All @@ -142,7 +142,7 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
)
elif inspection_definition.type == InspectionTypes.thermal_video:
return TakeThermalVideo(
id=task_definition.id if task_definition.id else uuid4_string(),
id=task_definition.id if task_definition.id else str(uuid4()),
robot_pose=task_definition.pose.to_alitra_pose(),
tag_id=task_definition.tag,
inspection_description=task_definition.inspection.inspection_description,
Expand All @@ -152,7 +152,7 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
)
elif inspection_definition.type == InspectionTypes.audio:
return RecordAudio(
id=task_definition.id if task_definition.id else uuid4_string(),
id=task_definition.id if task_definition.id else str(uuid4()),
robot_pose=task_definition.pose.to_alitra_pose(),
tag_id=task_definition.tag,
inspection_description=task_definition.inspection.inspection_description,
Expand All @@ -161,7 +161,7 @@ def to_inspection_task(task_definition: StartMissionTaskDefinition) -> TASKS:
)
elif inspection_definition.type == InspectionTypes.co2_measurement:
return TakeCO2Measurement(
id=task_definition.id if task_definition.id else uuid4_string(),
id=task_definition.id if task_definition.id else str(uuid4()),
robot_pose=task_definition.pose.to_alitra_pose(),
tag_id=task_definition.tag,
inspection_description=task_definition.inspection.inspection_description,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import json
import time
from datetime import datetime, timezone
from queue import Queue
Expand All @@ -7,7 +6,6 @@
from isar.services.service_connections.mqtt.mqtt_client import props_expiry
from robot_interface.telemetry.mqtt_client import MqttPublisher
from robot_interface.telemetry.payloads import RobotHeartbeatPayload
from robot_interface.utilities.json_service import EnhancedJSONEncoder


class RobotHeartbeatPublisher:
Expand All @@ -24,7 +22,7 @@ def run(self) -> None:

self.mqtt_publisher.publish(
topic=settings.TOPIC_ISAR_ROBOT_HEARTBEAT,
payload=json.dumps(payload, cls=EnhancedJSONEncoder),
payload=payload.model_dump_json(),
retain=True,
properties=props_expiry(settings.MQTT_ROBOT_HEARTBEAT_EXPIRY),
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import json
import time
from datetime import datetime, timezone
from queue import Queue

from isar.config.settings import robot_settings, settings
from robot_interface.telemetry.mqtt_client import MqttPublisher
from robot_interface.telemetry.payloads import RobotInfoPayload
from robot_interface.utilities.json_service import EnhancedJSONEncoder


class RobotInfoPublisher:
Expand All @@ -30,7 +28,7 @@ def run(self) -> None:

self.mqtt_publisher.publish(
topic=settings.TOPIC_ISAR_ROBOT_INFO,
payload=json.dumps(payload, cls=EnhancedJSONEncoder),
payload=payload.model_dump_json(),
)

time.sleep(settings.ROBOT_INFO_PUBLISH_INTERVAL)
8 changes: 3 additions & 5 deletions src/isar/services/utilities/mqtt_utilities.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import json
from datetime import datetime, timezone
from typing import Optional

Expand All @@ -14,7 +13,6 @@
MissionPayload,
TaskPayload,
)
from robot_interface.utilities.json_service import EnhancedJSONEncoder


def publish_task_status(
Expand All @@ -41,7 +39,7 @@ def publish_task_status(

mqtt_publisher.publish(
topic=settings.TOPIC_ISAR_TASK + f"/{task.id}",
payload=json.dumps(payload, cls=EnhancedJSONEncoder),
payload=payload.model_dump_json(),
qos=1,
retain=True,
properties=props_expiry(settings.MQTT_MISSION_AND_TASK_EXPIRY),
Expand Down Expand Up @@ -69,7 +67,7 @@ def publish_mission_status(

mqtt_publisher.publish(
topic=settings.TOPIC_ISAR_MISSION + f"/{mission_id}",
payload=json.dumps(payload, cls=EnhancedJSONEncoder),
payload=payload.model_dump_json(),
qos=1,
retain=True,
properties=props_expiry(settings.MQTT_MISSION_AND_TASK_EXPIRY),
Expand All @@ -88,7 +86,7 @@ def publish_isar_status(

mqtt_publisher.publish(
topic=settings.TOPIC_ISAR_STATUS,
payload=json.dumps(payload, cls=EnhancedJSONEncoder),
payload=payload.model_dump_json(),
qos=1,
retain=True,
)
6 changes: 2 additions & 4 deletions src/isar/state_machine/state_machine.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import json
import logging
from collections import deque
from datetime import datetime, timezone
Expand Down Expand Up @@ -26,7 +25,6 @@
InterventionNeededPayload,
MissionAbortedPayload,
)
from robot_interface.utilities.json_service import EnhancedJSONEncoder


class StateMachine(object):
Expand Down Expand Up @@ -157,7 +155,7 @@ def publish_mission_aborted(

self.mqtt_publisher.publish(
topic=settings.TOPIC_ISAR_MISSION_ABORTED,
payload=json.dumps(payload, cls=EnhancedJSONEncoder),
payload=payload.model_dump_json(),
qos=1,
retain=True,
)
Expand All @@ -176,7 +174,7 @@ def publish_intervention_needed(self, error_message: str) -> None:

self.mqtt_publisher.publish(
topic=settings.TOPIC_ISAR_INTERVENTION_NEEDED,
payload=json.dumps(payload, cls=EnhancedJSONEncoder),
payload=payload.model_dump_json(),
qos=1,
retain=True,
)
Expand Down
6 changes: 2 additions & 4 deletions src/isar/storage/uploader.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import json
import logging
from dataclasses import dataclass
from datetime import datetime, timedelta, timezone
Expand Down Expand Up @@ -26,7 +25,6 @@
InspectionResultPayload,
InspectionValuePayload,
)
from robot_interface.utilities.json_service import EnhancedJSONEncoder


def has_empty_blob_storage_path(storage_paths: StoragePaths) -> bool:
Expand Down Expand Up @@ -249,7 +247,7 @@ def _publish_inspection_value(self, inspection: InspectionValue) -> None:
)
self.mqtt_publisher.publish(
topic=settings.TOPIC_ISAR_INSPECTION_VALUE,
payload=json.dumps(payload, cls=EnhancedJSONEncoder),
payload=payload.model_dump_json(),
qos=1,
retain=True,
)
Expand Down Expand Up @@ -279,7 +277,7 @@ def _publish_inspection_result(
)
self.mqtt_publisher.publish(
topic=settings.TOPIC_ISAR_INSPECTION_RESULT,
payload=json.dumps(payload, cls=EnhancedJSONEncoder),
payload=payload.model_dump_json(),
qos=1,
retain=True,
)
3 changes: 1 addition & 2 deletions src/isar/storage/utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from isar.config.settings import settings
from robot_interface.models.inspection.inspection import Inspection
from robot_interface.models.mission.mission import Mission
from robot_interface.utilities.json_service import EnhancedJSONEncoder


def construct_paths(inspection: Inspection, mission: Mission) -> Tuple[Path, Path]:
Expand Down Expand Up @@ -65,7 +64,7 @@ def construct_metadata_file(
],
}

return json.dumps(data, cls=EnhancedJSONEncoder, indent=4).encode()
return json.dumps(data, indent=4).encode()


def get_filename(inspection: Inspection) -> str:
Expand Down
4 changes: 2 additions & 2 deletions src/robot_interface/models/mission/mission.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
from typing import List, Optional
from uuid import uuid4

from alitra import Pose
from pydantic import BaseModel, Field

from robot_interface.models.exceptions.robot_exceptions import ErrorMessage
from robot_interface.models.mission.status import MissionStatus
from robot_interface.models.mission.task import TASKS, TaskTypes
from robot_interface.utilities.uuid_string_factory import uuid4_string


class Mission(BaseModel):
id: str = Field(default_factory=uuid4_string, frozen=True)
id: str = Field(default_factory=lambda: str(uuid4()), frozen=True)
tasks: List[TASKS] = Field(default_factory=list, frozen=True)
name: str = Field(frozen=True)
start_pose: Optional[Pose] = Field(default=None, frozen=True)
Expand Down
6 changes: 3 additions & 3 deletions src/robot_interface/models/mission/task.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from enum import Enum
from typing import Literal, Optional, Type, Union
from uuid import uuid4

from alitra import Pose, Position
from pydantic import BaseModel, Field
Expand All @@ -15,7 +16,6 @@
Video,
)
from robot_interface.models.mission.status import TaskStatus
from robot_interface.utilities.uuid_string_factory import uuid4_string


class TaskTypes(str, Enum):
Expand All @@ -37,15 +37,15 @@ class Task(BaseModel):
status: TaskStatus = Field(default=TaskStatus.NotStarted)
error_message: Optional[ErrorMessage] = Field(default=None)
tag_id: Optional[str] = Field(default=None)
id: str = Field(default_factory=uuid4_string, frozen=True)
id: str = Field(default_factory=lambda: str(uuid4()), frozen=True)


class InspectionTask(Task):
"""
Base class for all inspection tasks which produce results to be uploaded.
"""

inspection_id: str = Field(default_factory=uuid4_string, frozen=True)
inspection_id: str = Field(default_factory=lambda: str(uuid4()), frozen=True)
robot_pose: Pose = Field(default=None, init=True)
inspection_description: Optional[str] = Field(default=None)
zoom: Optional[ZoomDescription] = Field(default=None)
Expand Down
4 changes: 1 addition & 3 deletions src/robot_interface/telemetry/mqtt_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
RobotTelemetryPoseException,
)
from robot_interface.telemetry.payloads import CloudHealthPayload
from robot_interface.utilities.json_service import EnhancedJSONEncoder


def props_expiry(seconds: int) -> Properties:
Expand Down Expand Up @@ -110,8 +109,7 @@ def run(self, isar_id: str, robot_name: str) -> None:
continue
except RobotTelemetryException:
payload = json.dumps(
CloudHealthPayload(isar_id, robot_name, datetime.now(timezone.utc)),
cls=EnhancedJSONEncoder,
CloudHealthPayload(isar_id, robot_name, datetime.now(timezone.utc))
)
topic = self.cloud_health_topic

Expand Down
Loading
Loading