From 50582191edaa56c76ad1f2099589959e3d8f5954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Chirico=20Indreb=C3=B8?= Date: Thu, 22 Jan 2026 15:34:31 +0100 Subject: [PATCH 1/2] Remove tiny uuid util file --- src/isar/apis/models/start_mission_definition.py | 16 ++++++++-------- src/robot_interface/models/mission/mission.py | 5 +++-- src/robot_interface/models/mission/task.py | 6 +++--- .../utilities/uuid_string_factory.py | 5 ----- .../isar/apis/scheduler/test_scheduler_router.py | 1 + 5 files changed, 15 insertions(+), 18 deletions(-) delete mode 100644 src/robot_interface/utilities/uuid_string_factory.py diff --git a/src/isar/apis/models/start_mission_definition.py b/src/isar/apis/models/start_mission_definition.py index 4058b59ad..467fdef2f 100644 --- a/src/isar/apis/models/start_mission_definition.py +++ b/src/isar/apis/models/start_mission_definition.py @@ -18,7 +18,7 @@ TakeVideo, ZoomDescription, ) -from robot_interface.utilities.uuid_string_factory import uuid4_string +from uuid import uuid4 class InspectionTypes(str, Enum): @@ -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, @@ -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, @@ -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, @@ -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, @@ -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, @@ -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, @@ -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, diff --git a/src/robot_interface/models/mission/mission.py b/src/robot_interface/models/mission/mission.py index 5aeb8785e..117fef457 100644 --- a/src/robot_interface/models/mission/mission.py +++ b/src/robot_interface/models/mission/mission.py @@ -6,11 +6,12 @@ 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 + +from uuid import uuid4 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) diff --git a/src/robot_interface/models/mission/task.py b/src/robot_interface/models/mission/task.py index bbc84e8a8..7d98c4d57 100644 --- a/src/robot_interface/models/mission/task.py +++ b/src/robot_interface/models/mission/task.py @@ -15,7 +15,7 @@ Video, ) from robot_interface.models.mission.status import TaskStatus -from robot_interface.utilities.uuid_string_factory import uuid4_string +from uuid import uuid4 class TaskTypes(str, Enum): @@ -37,7 +37,7 @@ 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): @@ -45,7 +45,7 @@ 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) diff --git a/src/robot_interface/utilities/uuid_string_factory.py b/src/robot_interface/utilities/uuid_string_factory.py deleted file mode 100644 index 2243e616f..000000000 --- a/src/robot_interface/utilities/uuid_string_factory.py +++ /dev/null @@ -1,5 +0,0 @@ -from uuid import uuid4 - - -def uuid4_string() -> str: - return str(uuid4()) diff --git a/tests/isar/apis/scheduler/test_scheduler_router.py b/tests/isar/apis/scheduler/test_scheduler_router.py index 7289dedb2..2ea4411f6 100644 --- a/tests/isar/apis/scheduler/test_scheduler_router.py +++ b/tests/isar/apis/scheduler/test_scheduler_router.py @@ -15,6 +15,7 @@ from isar.state_machine.states_enum import States from tests.test_mocks.mission_definition import DummyMissionDefinition + dummy_mission = DummyMissionDefinition.default_mission dummy_mission_stopped = DummyMissionDefinition.stopped_mission From a23c309ccb620b18786300455d6a68eb9cd6c1cb Mon Sep 17 00:00:00 2001 From: andchiind Date: Thu, 22 Jan 2026 16:00:21 +0100 Subject: [PATCH 2/2] Remove custom JSON encoder --- src/isar/apis/api.py | 4 +- .../apis/models/start_mission_definition.py | 2 +- .../mqtt/robot_heartbeat_publisher.py | 4 +- .../mqtt/robot_info_publisher.py | 4 +- src/isar/services/utilities/mqtt_utilities.py | 8 +- src/isar/state_machine/state_machine.py | 6 +- src/isar/storage/uploader.py | 6 +- src/isar/storage/utilities.py | 3 +- src/robot_interface/models/mission/mission.py | 3 +- src/robot_interface/models/mission/task.py | 2 +- src/robot_interface/telemetry/mqtt_client.py | 4 +- src/robot_interface/telemetry/payloads.py | 83 ++++++++----------- src/robot_interface/utilities/__init__.py | 0 src/robot_interface/utilities/json_service.py | 42 ---------- .../apis/scheduler/test_scheduler_router.py | 1 - 15 files changed, 49 insertions(+), 123 deletions(-) delete mode 100644 src/robot_interface/utilities/__init__.py delete mode 100644 src/robot_interface/utilities/json_service.py diff --git a/src/isar/apis/api.py b/src/isar/apis/api.py index ce9558b9e..5e1c49852 100644 --- a/src/isar/apis/api.py +++ b/src/isar/apis/api.py @@ -1,4 +1,3 @@ -import json import logging import time from datetime import datetime, timezone @@ -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: @@ -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, ) diff --git a/src/isar/apis/models/start_mission_definition.py b/src/isar/apis/models/start_mission_definition.py index 467fdef2f..920896132 100644 --- a/src/isar/apis/models/start_mission_definition.py +++ b/src/isar/apis/models/start_mission_definition.py @@ -1,6 +1,7 @@ import time from enum import Enum from typing import List, Optional +from uuid import uuid4 from pydantic import BaseModel, Field @@ -18,7 +19,6 @@ TakeVideo, ZoomDescription, ) -from uuid import uuid4 class InspectionTypes(str, Enum): diff --git a/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py b/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py index 440f0ccfb..08be86625 100644 --- a/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py +++ b/src/isar/services/service_connections/mqtt/robot_heartbeat_publisher.py @@ -1,4 +1,3 @@ -import json import time from datetime import datetime, timezone from queue import Queue @@ -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: @@ -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), ) diff --git a/src/isar/services/service_connections/mqtt/robot_info_publisher.py b/src/isar/services/service_connections/mqtt/robot_info_publisher.py index 6c8bef657..70a9c2b3c 100644 --- a/src/isar/services/service_connections/mqtt/robot_info_publisher.py +++ b/src/isar/services/service_connections/mqtt/robot_info_publisher.py @@ -1,4 +1,3 @@ -import json import time from datetime import datetime, timezone from queue import Queue @@ -6,7 +5,6 @@ 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: @@ -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) diff --git a/src/isar/services/utilities/mqtt_utilities.py b/src/isar/services/utilities/mqtt_utilities.py index d55737c65..f5dec5679 100644 --- a/src/isar/services/utilities/mqtt_utilities.py +++ b/src/isar/services/utilities/mqtt_utilities.py @@ -1,4 +1,3 @@ -import json from datetime import datetime, timezone from typing import Optional @@ -14,7 +13,6 @@ MissionPayload, TaskPayload, ) -from robot_interface.utilities.json_service import EnhancedJSONEncoder def publish_task_status( @@ -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), @@ -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), @@ -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, ) diff --git a/src/isar/state_machine/state_machine.py b/src/isar/state_machine/state_machine.py index e4abad5db..71b8fccb4 100644 --- a/src/isar/state_machine/state_machine.py +++ b/src/isar/state_machine/state_machine.py @@ -1,4 +1,3 @@ -import json import logging from collections import deque from datetime import datetime, timezone @@ -26,7 +25,6 @@ InterventionNeededPayload, MissionAbortedPayload, ) -from robot_interface.utilities.json_service import EnhancedJSONEncoder class StateMachine(object): @@ -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, ) @@ -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, ) diff --git a/src/isar/storage/uploader.py b/src/isar/storage/uploader.py index 4ea7ee75b..d3af75a98 100644 --- a/src/isar/storage/uploader.py +++ b/src/isar/storage/uploader.py @@ -1,4 +1,3 @@ -import json import logging from dataclasses import dataclass from datetime import datetime, timedelta, timezone @@ -26,7 +25,6 @@ InspectionResultPayload, InspectionValuePayload, ) -from robot_interface.utilities.json_service import EnhancedJSONEncoder def has_empty_blob_storage_path(storage_paths: StoragePaths) -> bool: @@ -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, ) @@ -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, ) diff --git a/src/isar/storage/utilities.py b/src/isar/storage/utilities.py index 7584d07d0..94f46110c 100644 --- a/src/isar/storage/utilities.py +++ b/src/isar/storage/utilities.py @@ -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]: @@ -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: diff --git a/src/robot_interface/models/mission/mission.py b/src/robot_interface/models/mission/mission.py index 117fef457..c12bf8860 100644 --- a/src/robot_interface/models/mission/mission.py +++ b/src/robot_interface/models/mission/mission.py @@ -1,4 +1,5 @@ from typing import List, Optional +from uuid import uuid4 from alitra import Pose from pydantic import BaseModel, Field @@ -7,8 +8,6 @@ from robot_interface.models.mission.status import MissionStatus from robot_interface.models.mission.task import TASKS, TaskTypes -from uuid import uuid4 - class Mission(BaseModel): id: str = Field(default_factory=lambda: str(uuid4()), frozen=True) diff --git a/src/robot_interface/models/mission/task.py b/src/robot_interface/models/mission/task.py index 7d98c4d57..39ebd1742 100644 --- a/src/robot_interface/models/mission/task.py +++ b/src/robot_interface/models/mission/task.py @@ -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 @@ -15,7 +16,6 @@ Video, ) from robot_interface.models.mission.status import TaskStatus -from uuid import uuid4 class TaskTypes(str, Enum): diff --git a/src/robot_interface/telemetry/mqtt_client.py b/src/robot_interface/telemetry/mqtt_client.py index f3530bd91..c524657e6 100644 --- a/src/robot_interface/telemetry/mqtt_client.py +++ b/src/robot_interface/telemetry/mqtt_client.py @@ -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: @@ -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 diff --git a/src/robot_interface/telemetry/payloads.py b/src/robot_interface/telemetry/payloads.py index 6c0397781..8da0140e9 100644 --- a/src/robot_interface/telemetry/payloads.py +++ b/src/robot_interface/telemetry/payloads.py @@ -3,6 +3,7 @@ from typing import List, Optional from alitra import Pose +from pydantic import BaseModel from isar.models.status import IsarStatus from isar.storage.storage_interface import BlobStoragePath @@ -12,37 +13,31 @@ from robot_interface.models.robots.battery_state import BatteryState -@dataclass -class TelemetryPayload: +class TelemetryPayload(BaseModel): isar_id: str robot_name: str timestamp: datetime -@dataclass -class CloudHealthPayload: +class CloudHealthPayload(BaseModel): isar_id: str robot_name: str timestamp: datetime -@dataclass -class TelemetryPosePayload(TelemetryPayload): +class TelemetryPosePayload(TelemetryPayload, BaseModel): pose: Pose -@dataclass -class TelemetryBatteryPayload(TelemetryPayload): +class TelemetryBatteryPayload(TelemetryPayload, BaseModel): battery_level: float battery_state: Optional[BatteryState] = None -@dataclass -class TelemetryObstacleStatusPayload(TelemetryPayload): +class TelemetryObstacleStatusPayload(TelemetryPayload, BaseModel): obstacle_status: bool -@dataclass class TelemetryPressurePayload(TelemetryPayload): pressure_level: float @@ -53,16 +48,14 @@ class DocumentInfo: url: str -@dataclass -class IsarStatusPayload: +class IsarStatusPayload(BaseModel): isar_id: str robot_name: str status: IsarStatus timestamp: datetime -@dataclass -class RobotInfoPayload: +class RobotInfoPayload(BaseModel): isar_id: str robot_name: str robot_model: str @@ -75,70 +68,64 @@ class RobotInfoPayload: timestamp: datetime -@dataclass -class RobotHeartbeatPayload: +class RobotHeartbeatPayload(BaseModel): isar_id: str robot_name: str timestamp: datetime -@dataclass -class MissionPayload: +class MissionPayload(BaseModel): isar_id: str robot_name: str - mission_id: Optional[str] - status: Optional[MissionStatus] - error_reason: Optional[ErrorReason] - error_description: Optional[str] + mission_id: Optional[str] = None + status: Optional[MissionStatus] = None + error_reason: Optional[ErrorReason] = None + error_description: Optional[str] = None timestamp: datetime -@dataclass -class MissionAbortedPayload: +class MissionAbortedPayload(BaseModel): isar_id: str robot_name: str - mission_id: Optional[str] + mission_id: Optional[str] = None can_be_continued: bool timestamp: datetime - reason: Optional[str] + reason: Optional[str] = None -@dataclass -class TaskPayload: +class TaskPayload(BaseModel): isar_id: str robot_name: str - mission_id: Optional[str] - task_id: Optional[str] - status: Optional[TaskStatus] - task_type: Optional[TaskTypes] - error_reason: Optional[ErrorReason] - error_description: Optional[str] + mission_id: Optional[str] = None + task_id: Optional[str] = None + status: Optional[TaskStatus] = None + task_type: Optional[TaskTypes] = None + error_reason: Optional[ErrorReason] = None + error_description: Optional[str] = None timestamp: datetime -@dataclass -class InspectionResultPayload: +class InspectionResultPayload(BaseModel): isar_id: str robot_name: str inspection_id: str blob_storage_data_path: BlobStoragePath blob_storage_metadata_path: BlobStoragePath installation_code: str - tag_id: Optional[str] - inspection_type: Optional[str] - inspection_description: Optional[str] + tag_id: Optional[str] = None + inspection_type: Optional[str] = None + inspection_description: Optional[str] = None timestamp: datetime -@dataclass -class InspectionValuePayload: +class InspectionValuePayload(BaseModel): isar_id: str robot_name: str inspection_id: str installation_code: str - tag_id: Optional[str] - inspection_type: Optional[str] - inspection_description: Optional[str] + tag_id: Optional[str] = None + inspection_type: Optional[str] = None + inspection_description: Optional[str] = None value: float unit: str x: float @@ -147,14 +134,12 @@ class InspectionValuePayload: timestamp: datetime -@dataclass -class StartUpMessagePayload: +class StartUpMessagePayload(BaseModel): isar_id: str timestamp: datetime -@dataclass -class InterventionNeededPayload: +class InterventionNeededPayload(BaseModel): isar_id: str robot_name: str reason: str diff --git a/src/robot_interface/utilities/__init__.py b/src/robot_interface/utilities/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/robot_interface/utilities/json_service.py b/src/robot_interface/utilities/json_service.py deleted file mode 100644 index 8a35aec87..000000000 --- a/src/robot_interface/utilities/json_service.py +++ /dev/null @@ -1,42 +0,0 @@ -import json -from dataclasses import asdict, is_dataclass -from datetime import date, datetime -from enum import Enum -from typing import Any, Iterator -from uuid import UUID - -import numpy as np -from alitra import Orientation -from pydantic import BaseModel - - -class EnhancedJSONEncoder(json.JSONEncoder): - """ - Custom JSONEncoder with the ability to encode dataclasses. - """ - - def default(self, o: Any) -> Any: - if isinstance(o, BaseModel): - dump = getattr(o, "model_dump", None) - if callable(dump): - return dump() - return o.__dict__ - if is_dataclass(o): - return asdict(o) # type: ignore - if isinstance(o, UUID): - return str(o) - if isinstance(o, Orientation): - return o.__dict__ - if isinstance(o, np.ndarray): - return o.tolist() - if isinstance(o, datetime): - return o.isoformat() - if isinstance(o, date): - return o.isoformat() - if isinstance(o, Enum): - return o.value - if isinstance(o, bytes): - return "<>" - if isinstance(o, Iterator): - return "<>" - return super().default(o) diff --git a/tests/isar/apis/scheduler/test_scheduler_router.py b/tests/isar/apis/scheduler/test_scheduler_router.py index 2ea4411f6..7289dedb2 100644 --- a/tests/isar/apis/scheduler/test_scheduler_router.py +++ b/tests/isar/apis/scheduler/test_scheduler_router.py @@ -15,7 +15,6 @@ from isar.state_machine.states_enum import States from tests.test_mocks.mission_definition import DummyMissionDefinition - dummy_mission = DummyMissionDefinition.default_mission dummy_mission_stopped = DummyMissionDefinition.stopped_mission