diff --git a/examples/scripts/animate_glb.py b/examples/scripts/animate_glb.py index 7554c2b0..1724e6ed 100644 --- a/examples/scripts/animate_glb.py +++ b/examples/scripts/animate_glb.py @@ -36,7 +36,7 @@ def main(): ] keyframe_times = [0, 1, 3, 4, 6] # Example keyframe times - tri_anim = Animation("TestAnimation", keyframe_times, translation_keyframes, rotational_keyframes) + tri_anim = Animation("TestAnimation", keyframe_times, translation_keyframes, rotational_keyframes) a.animation_store.add(tri_anim) # Set your initial camera position diff --git a/src/ada/comms/fb_deserializer.py b/src/ada/comms/fb_deserializer.py index ea0e6a98..85c21e9e 100644 --- a/src/ada/comms/fb_deserializer.py +++ b/src/ada/comms/fb_deserializer.py @@ -1,6 +1,22 @@ +from ada.comms.fb_model_gen import ( + CameraParamsDC, + CommandTypeDC, + ErrorDC, + FileObjectDC, + FilePurposeDC, + FileTypeDC, + MeshInfoDC, + MessageDC, + ParameterDC, + ProcedureDC, + ProcedureStoreDC, + SceneOperationDC, + SceneOperationsDC, + TargetTypeDC, + WebClientDC, +) from ada.comms.wsock import Message -from ada.comms.fb_model_gen import WebClientDC, FileObjectDC, MeshInfoDC, CameraParamsDC, SceneOperationDC, ProcedureStoreDC, ProcedureDC, ParameterDC, ErrorDC, MessageDC,CommandTypeDC, TargetTypeDC, SceneOperationsDC, FilePurposeDC, FileTypeDC def deserialize_webclient(fb_obj) -> WebClientDC | None: if fb_obj is None: @@ -8,9 +24,9 @@ def deserialize_webclient(fb_obj) -> WebClientDC | None: return WebClientDC( instance_id=fb_obj.InstanceId(), - name=fb_obj.Name().decode('utf-8') if fb_obj.Name() is not None else None, - address=fb_obj.Address().decode('utf-8') if fb_obj.Address() is not None else None, - port=fb_obj.Port() + name=fb_obj.Name().decode("utf-8") if fb_obj.Name() is not None else None, + address=fb_obj.Address().decode("utf-8") if fb_obj.Address() is not None else None, + port=fb_obj.Port(), ) @@ -19,11 +35,11 @@ def deserialize_fileobject(fb_obj) -> FileObjectDC | None: return None return FileObjectDC( - name=fb_obj.Name().decode('utf-8') if fb_obj.Name() is not None else None, + name=fb_obj.Name().decode("utf-8") if fb_obj.Name() is not None else None, file_type=FileTypeDC(fb_obj.FileType()), purpose=FilePurposeDC(fb_obj.Purpose()), - filepath=fb_obj.Filepath().decode('utf-8') if fb_obj.Filepath() is not None else None, - filedata=bytes(fb_obj.FiledataAsNumpy()) if fb_obj.FiledataLength() > 0 else None + filepath=fb_obj.Filepath().decode("utf-8") if fb_obj.Filepath() is not None else None, + filedata=bytes(fb_obj.FiledataAsNumpy()) if fb_obj.FiledataLength() > 0 else None, ) @@ -32,9 +48,9 @@ def deserialize_meshinfo(fb_obj) -> MeshInfoDC | None: return None return MeshInfoDC( - object_name=fb_obj.ObjectName().decode('utf-8') if fb_obj.ObjectName() is not None else None, + object_name=fb_obj.ObjectName().decode("utf-8") if fb_obj.ObjectName() is not None else None, face_index=fb_obj.FaceIndex(), - json_data=fb_obj.JsonData().decode('utf-8') if fb_obj.JsonData() is not None else None + json_data=fb_obj.JsonData().decode("utf-8") if fb_obj.JsonData() is not None else None, ) @@ -46,10 +62,10 @@ def deserialize_cameraparams(fb_obj) -> CameraParamsDC | None: position=[fb_obj.Position(i) for i in range(fb_obj.PositionLength())] if fb_obj.PositionLength() > 0 else None, look_at=[fb_obj.LookAt(i) for i in range(fb_obj.LookAtLength())] if fb_obj.LookAtLength() > 0 else None, up=[fb_obj.Up(i) for i in range(fb_obj.UpLength())] if fb_obj.UpLength() > 0 else None, - fov=deserialize_float(fb_obj.Fov()), - near=deserialize_float(fb_obj.Near()), - far=deserialize_float(fb_obj.Far()), - force_camera=fb_obj.ForceCamera() + fov=fb_obj.Fov(), + near=fb_obj.Near(), + far=fb_obj.Far(), + force_camera=fb_obj.ForceCamera(), ) @@ -58,8 +74,7 @@ def deserialize_sceneoperation(fb_obj) -> SceneOperationDC | None: return None return SceneOperationDC( - operation=SceneOperationsDC(fb_obj.Operation()), - camera_params=deserialize_cameraparams(fb_obj.CameraParams()) + operation=SceneOperationsDC(fb_obj.Operation()), camera_params=deserialize_cameraparams(fb_obj.CameraParams()) ) @@ -68,7 +83,11 @@ def deserialize_procedurestore(fb_obj) -> ProcedureStoreDC | None: return None return ProcedureStoreDC( - procedures=[deserialize_procedure(fb_obj.Procedures(i)) for i in range(fb_obj.ProceduresLength())] if fb_obj.ProceduresLength() > 0 else None + procedures=( + [deserialize_procedure(fb_obj.Procedures(i)) for i in range(fb_obj.ProceduresLength())] + if fb_obj.ProceduresLength() > 0 + else None + ) ) @@ -77,14 +96,22 @@ def deserialize_procedure(fb_obj) -> ProcedureDC | None: return None return ProcedureDC( - id=fb_obj.Id().decode('utf-8') if fb_obj.Id() is not None else None, - name=fb_obj.Name().decode('utf-8') if fb_obj.Name() is not None else None, - description=fb_obj.Description().decode('utf-8') if fb_obj.Description() is not None else None, - script_file_location=fb_obj.ScriptFileLocation().decode('utf-8') if fb_obj.ScriptFileLocation() is not None else None, - parameters=[deserialize_parameter(fb_obj.Parameters(i)) for i in range(fb_obj.ParametersLength())] if fb_obj.ParametersLength() > 0 else None, - input_ifc_filepath=fb_obj.InputIfcFilepath().decode('utf-8') if fb_obj.InputIfcFilepath() is not None else None, - output_ifc_filepath=fb_obj.OutputIfcFilepath().decode('utf-8') if fb_obj.OutputIfcFilepath() is not None else None, - error=fb_obj.Error().decode('utf-8') if fb_obj.Error() is not None else None + id=fb_obj.Id().decode("utf-8") if fb_obj.Id() is not None else None, + name=fb_obj.Name().decode("utf-8") if fb_obj.Name() is not None else None, + description=fb_obj.Description().decode("utf-8") if fb_obj.Description() is not None else None, + script_file_location=( + fb_obj.ScriptFileLocation().decode("utf-8") if fb_obj.ScriptFileLocation() is not None else None + ), + parameters=( + [deserialize_parameter(fb_obj.Parameters(i)) for i in range(fb_obj.ParametersLength())] + if fb_obj.ParametersLength() > 0 + else None + ), + input_ifc_filepath=fb_obj.InputIfcFilepath().decode("utf-8") if fb_obj.InputIfcFilepath() is not None else None, + output_ifc_filepath=( + fb_obj.OutputIfcFilepath().decode("utf-8") if fb_obj.OutputIfcFilepath() is not None else None + ), + error=fb_obj.Error().decode("utf-8") if fb_obj.Error() is not None else None, ) @@ -93,9 +120,9 @@ def deserialize_parameter(fb_obj) -> ParameterDC | None: return None return ParameterDC( - name=fb_obj.Name().decode('utf-8') if fb_obj.Name() is not None else None, - type=fb_obj.Type().decode('utf-8') if fb_obj.Type() is not None else None, - value=fb_obj.Value().decode('utf-8') if fb_obj.Value() is not None else None + name=fb_obj.Name().decode("utf-8") if fb_obj.Name() is not None else None, + type=fb_obj.Type().decode("utf-8") if fb_obj.Type() is not None else None, + value=fb_obj.Value().decode("utf-8") if fb_obj.Value() is not None else None, ) @@ -104,8 +131,7 @@ def deserialize_error(fb_obj) -> ErrorDC | None: return None return ErrorDC( - code=fb_obj.Code(), - message=fb_obj.Message().decode('utf-8') if fb_obj.Message() is not None else None + code=fb_obj.Code(), message=fb_obj.Message().decode("utf-8") if fb_obj.Message() is not None else None ) @@ -122,8 +148,12 @@ def deserialize_message(fb_obj) -> MessageDC | None: client_type=TargetTypeDC(fb_obj.ClientType()), scene_operation=deserialize_sceneoperation(fb_obj.SceneOperation()), target_id=fb_obj.TargetId(), - web_clients=[deserialize_webclient(fb_obj.WebClients(i)) for i in range(fb_obj.WebClientsLength())] if fb_obj.WebClientsLength() > 0 else None, - procedure_store=deserialize_procedurestore(fb_obj.ProcedureStore()) + web_clients=( + [deserialize_webclient(fb_obj.WebClients(i)) for i in range(fb_obj.WebClientsLength())] + if fb_obj.WebClientsLength() > 0 + else None + ), + procedure_store=deserialize_procedurestore(fb_obj.ProcedureStore()), ) diff --git a/src/ada/comms/fb_model_gen.py b/src/ada/comms/fb_model_gen.py index 3dd09388..0bfd7cf0 100644 --- a/src/ada/comms/fb_model_gen.py +++ b/src/ada/comms/fb_model_gen.py @@ -1,9 +1,9 @@ from __future__ import annotations -from enum import Enum -from dataclasses import dataclass -from typing import Optional, List -import pathlib +import pathlib +from dataclasses import dataclass +from enum import Enum +from typing import List, Optional class CommandTypeDC(Enum): @@ -19,26 +19,31 @@ class CommandTypeDC(Enum): ERROR = 9 SERVER_REPLY = 10 + class TargetTypeDC(Enum): WEB = 0 LOCAL = 1 SERVER = 2 + class SceneOperationsDC(Enum): ADD = 0 REMOVE = 1 REPLACE = 2 + class FilePurposeDC(Enum): DESIGN = 0 ANALYSIS = 1 FABRICATE = 2 + class FileTypeDC(Enum): IFC = 0 GLB = 1 SQLITE = 2 + @dataclass class WebClientDC: instance_id: int = None @@ -46,6 +51,7 @@ class WebClientDC: address: str = "" port: int = None + @dataclass class FileObjectDC: name: str = "" @@ -54,12 +60,14 @@ class FileObjectDC: filepath: pathlib.Path | str = "" filedata: bytes = None + @dataclass class MeshInfoDC: object_name: str = "" face_index: int = None json_data: str = "" + @dataclass class CameraParamsDC: position: List[float] = None @@ -70,15 +78,18 @@ class CameraParamsDC: far: float = None force_camera: bool = None + @dataclass class SceneOperationDC: operation: Optional[SceneOperationsDC] = None camera_params: Optional[CameraParamsDC] = None + @dataclass class ProcedureStoreDC: procedures: Optional[List[ProcedureDC]] = None + @dataclass class ProcedureDC: id: str = "" @@ -90,17 +101,20 @@ class ProcedureDC: output_ifc_filepath: pathlib.Path | str = "" error: str = "" + @dataclass class ParameterDC: name: str = "" type: str = "" value: str = "" + @dataclass class ErrorDC: code: int = None message: str = "" + @dataclass class MessageDC: instance_id: int = None diff --git a/src/ada/comms/fb_serializer.py b/src/ada/comms/fb_serializer.py index 4233f8ce..abec3b33 100644 --- a/src/ada/comms/fb_serializer.py +++ b/src/ada/comms/fb_serializer.py @@ -1,9 +1,31 @@ -import flatbuffers from typing import Optional -from ada.comms.wsock import WebClient, FileObject, MeshInfo, CameraParams, SceneOperation, ProcedureStore, Procedure, Parameter, Error, Message +import flatbuffers +from ada.comms.fb_model_gen import ( + CameraParamsDC, + ErrorDC, + FileObjectDC, + MeshInfoDC, + MessageDC, + ParameterDC, + ProcedureDC, + ProcedureStoreDC, + SceneOperationDC, + WebClientDC, +) +from ada.comms.wsock import ( + CameraParams, + Error, + FileObject, + MeshInfo, + Message, + Parameter, + Procedure, + ProcedureStore, + SceneOperation, + WebClient, +) -from ada.comms.fb_model_gen import WebClientDC, FileObjectDC, MeshInfoDC, CameraParamsDC, SceneOperationDC, ProcedureStoreDC, ProcedureDC, ParameterDC, ErrorDC, MessageDC def serialize_webclient(builder: flatbuffers.Builder, obj: Optional[WebClientDC]) -> Optional[int]: if obj is None: @@ -203,7 +225,7 @@ def serialize_error(builder: flatbuffers.Builder, obj: Optional[ErrorDC]) -> Opt return Error.End(builder) -def serialize_message(message: MessageDC, builder: flatbuffers.Builder=None) -> bytes: +def serialize_message(message: MessageDC, builder: flatbuffers.Builder = None) -> bytes: if builder is None: builder = flatbuffers.Builder(1024) file_object_obj = None diff --git a/src/ada/comms/wsock/CameraParams.py b/src/ada/comms/wsock/CameraParams.py index 1c8932c5..a92ff461 100644 --- a/src/ada/comms/wsock/CameraParams.py +++ b/src/ada/comms/wsock/CameraParams.py @@ -4,10 +4,12 @@ import flatbuffers from flatbuffers.compat import import_numpy + np = import_numpy() + class CameraParams(object): - __slots__ = ['_tab'] + __slots__ = ["_tab"] @classmethod def GetRootAs(cls, buf, offset=0): @@ -20,6 +22,7 @@ def GetRootAs(cls, buf, offset=0): def GetRootAsCameraParams(cls, buf, offset=0): """This method is deprecated. Please switch to GetRootAs.""" return cls.GetRootAs(buf, offset) + # CameraParams def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) @@ -29,7 +32,9 @@ def Position(self, j): o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) if o != 0: a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return self._tab.Get( + flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4) + ) return 0 # CameraParams @@ -56,7 +61,9 @@ def LookAt(self, j): o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) if o != 0: a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return self._tab.Get( + flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4) + ) return 0 # CameraParams @@ -83,7 +90,9 @@ def Up(self, j): o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) if o != 0: a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return self._tab.Get( + flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4) + ) return 0 # CameraParams @@ -133,74 +142,98 @@ def ForceCamera(self): return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) return False + def CameraParamsStart(builder): builder.StartObject(7) + def Start(builder): CameraParamsStart(builder) + def CameraParamsAddPosition(builder, position): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(position), 0) + def AddPosition(builder, position): CameraParamsAddPosition(builder, position) + def CameraParamsStartPositionVector(builder, numElems): return builder.StartVector(4, numElems, 4) + def StartPositionVector(builder, numElems): return CameraParamsStartPositionVector(builder, numElems) + def CameraParamsAddLookAt(builder, lookAt): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(lookAt), 0) + def AddLookAt(builder, lookAt): CameraParamsAddLookAt(builder, lookAt) + def CameraParamsStartLookAtVector(builder, numElems): return builder.StartVector(4, numElems, 4) + def StartLookAtVector(builder, numElems): return CameraParamsStartLookAtVector(builder, numElems) + def CameraParamsAddUp(builder, up): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(up), 0) + def AddUp(builder, up): CameraParamsAddUp(builder, up) + def CameraParamsStartUpVector(builder, numElems): return builder.StartVector(4, numElems, 4) + def StartUpVector(builder, numElems): return CameraParamsStartUpVector(builder, numElems) + def CameraParamsAddFov(builder, fov): builder.PrependFloat32Slot(3, fov, 60.0) + def AddFov(builder, fov): CameraParamsAddFov(builder, fov) + def CameraParamsAddNear(builder, near): builder.PrependFloat32Slot(4, near, 0.1) + def AddNear(builder, near): CameraParamsAddNear(builder, near) + def CameraParamsAddFar(builder, far): builder.PrependFloat32Slot(5, far, 1000.0) + def AddFar(builder, far): CameraParamsAddFar(builder, far) + def CameraParamsAddForceCamera(builder, forceCamera): builder.PrependBoolSlot(6, forceCamera, 0) + def AddForceCamera(builder, forceCamera): CameraParamsAddForceCamera(builder, forceCamera) + def CameraParamsEnd(builder): return builder.EndObject() + def End(builder): return CameraParamsEnd(builder) diff --git a/src/ada/comms/wsock/CommandType.py b/src/ada/comms/wsock/CommandType.py index f3ce019f..a6b592d8 100644 --- a/src/ada/comms/wsock/CommandType.py +++ b/src/ada/comms/wsock/CommandType.py @@ -2,6 +2,7 @@ # namespace: wsock + class CommandType(object): PING = 0 PONG = 1 diff --git a/src/ada/comms/wsock/Error.py b/src/ada/comms/wsock/Error.py index aa776d01..7650463f 100644 --- a/src/ada/comms/wsock/Error.py +++ b/src/ada/comms/wsock/Error.py @@ -4,10 +4,12 @@ import flatbuffers from flatbuffers.compat import import_numpy + np = import_numpy() + class Error(object): - __slots__ = ['_tab'] + __slots__ = ["_tab"] @classmethod def GetRootAs(cls, buf, offset=0): @@ -20,6 +22,7 @@ def GetRootAs(cls, buf, offset=0): def GetRootAsError(cls, buf, offset=0): """This method is deprecated. Please switch to GetRootAs.""" return cls.GetRootAs(buf, offset) + # Error def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) @@ -38,26 +41,34 @@ def Message(self): return self._tab.String(o + self._tab.Pos) return None + def ErrorStart(builder): builder.StartObject(2) + def Start(builder): ErrorStart(builder) + def ErrorAddCode(builder, code): builder.PrependInt32Slot(0, code, 0) + def AddCode(builder, code): ErrorAddCode(builder, code) + def ErrorAddMessage(builder, message): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(message), 0) + def AddMessage(builder, message): ErrorAddMessage(builder, message) + def ErrorEnd(builder): return builder.EndObject() + def End(builder): return ErrorEnd(builder) diff --git a/src/ada/comms/wsock/FileObject.py b/src/ada/comms/wsock/FileObject.py index b28bd12f..fb54bfcb 100644 --- a/src/ada/comms/wsock/FileObject.py +++ b/src/ada/comms/wsock/FileObject.py @@ -4,10 +4,12 @@ import flatbuffers from flatbuffers.compat import import_numpy + np = import_numpy() + class FileObject(object): - __slots__ = ['_tab'] + __slots__ = ["_tab"] @classmethod def GetRootAs(cls, buf, offset=0): @@ -20,6 +22,7 @@ def GetRootAs(cls, buf, offset=0): def GetRootAsFileObject(cls, buf, offset=0): """This method is deprecated. Please switch to GetRootAs.""" return cls.GetRootAs(buf, offset) + # FileObject def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) @@ -57,7 +60,9 @@ def Filedata(self, j): o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) if o != 0: a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return self._tab.Get( + flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1) + ) return 0 # FileObject @@ -79,50 +84,66 @@ def FiledataIsNone(self): o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) return o == 0 + def FileObjectStart(builder): builder.StartObject(5) + def Start(builder): FileObjectStart(builder) + def FileObjectAddName(builder, name): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) + def AddName(builder, name): FileObjectAddName(builder, name) + def FileObjectAddFileType(builder, fileType): builder.PrependInt8Slot(1, fileType, 0) + def AddFileType(builder, fileType): FileObjectAddFileType(builder, fileType) + def FileObjectAddPurpose(builder, purpose): builder.PrependInt8Slot(2, purpose, 0) + def AddPurpose(builder, purpose): FileObjectAddPurpose(builder, purpose) + def FileObjectAddFilepath(builder, filepath): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(filepath), 0) + def AddFilepath(builder, filepath): FileObjectAddFilepath(builder, filepath) + def FileObjectAddFiledata(builder, filedata): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(filedata), 0) + def AddFiledata(builder, filedata): FileObjectAddFiledata(builder, filedata) + def FileObjectStartFiledataVector(builder, numElems): return builder.StartVector(1, numElems, 1) + def StartFiledataVector(builder, numElems): return FileObjectStartFiledataVector(builder, numElems) + def FileObjectEnd(builder): return builder.EndObject() + def End(builder): return FileObjectEnd(builder) diff --git a/src/ada/comms/wsock/FilePurpose.py b/src/ada/comms/wsock/FilePurpose.py index 531dfe94..2f236426 100644 --- a/src/ada/comms/wsock/FilePurpose.py +++ b/src/ada/comms/wsock/FilePurpose.py @@ -2,6 +2,7 @@ # namespace: wsock + class FilePurpose(object): DESIGN = 0 ANALYSIS = 1 diff --git a/src/ada/comms/wsock/FileType.py b/src/ada/comms/wsock/FileType.py index c2ae703f..3e09c82b 100644 --- a/src/ada/comms/wsock/FileType.py +++ b/src/ada/comms/wsock/FileType.py @@ -2,6 +2,7 @@ # namespace: wsock + class FileType(object): IFC = 0 GLB = 1 diff --git a/src/ada/comms/wsock/MeshInfo.py b/src/ada/comms/wsock/MeshInfo.py index b8e8151a..b15051ba 100644 --- a/src/ada/comms/wsock/MeshInfo.py +++ b/src/ada/comms/wsock/MeshInfo.py @@ -4,10 +4,12 @@ import flatbuffers from flatbuffers.compat import import_numpy + np = import_numpy() + class MeshInfo(object): - __slots__ = ['_tab'] + __slots__ = ["_tab"] @classmethod def GetRootAs(cls, buf, offset=0): @@ -20,6 +22,7 @@ def GetRootAs(cls, buf, offset=0): def GetRootAsMeshInfo(cls, buf, offset=0): """This method is deprecated. Please switch to GetRootAs.""" return cls.GetRootAs(buf, offset) + # MeshInfo def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) @@ -45,32 +48,42 @@ def JsonData(self): return self._tab.String(o + self._tab.Pos) return None + def MeshInfoStart(builder): builder.StartObject(3) + def Start(builder): MeshInfoStart(builder) + def MeshInfoAddObjectName(builder, objectName): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(objectName), 0) + def AddObjectName(builder, objectName): MeshInfoAddObjectName(builder, objectName) + def MeshInfoAddFaceIndex(builder, faceIndex): builder.PrependInt32Slot(1, faceIndex, 0) + def AddFaceIndex(builder, faceIndex): MeshInfoAddFaceIndex(builder, faceIndex) + def MeshInfoAddJsonData(builder, jsonData): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(jsonData), 0) + def AddJsonData(builder, jsonData): MeshInfoAddJsonData(builder, jsonData) + def MeshInfoEnd(builder): return builder.EndObject() + def End(builder): return MeshInfoEnd(builder) diff --git a/src/ada/comms/wsock/Message.py b/src/ada/comms/wsock/Message.py index a6c98b42..f0e781c7 100644 --- a/src/ada/comms/wsock/Message.py +++ b/src/ada/comms/wsock/Message.py @@ -4,10 +4,12 @@ import flatbuffers from flatbuffers.compat import import_numpy + np = import_numpy() + class Message(object): - __slots__ = ['_tab'] + __slots__ = ["_tab"] @classmethod def GetRootAs(cls, buf, offset=0): @@ -20,6 +22,7 @@ def GetRootAs(cls, buf, offset=0): def GetRootAsMessage(cls, buf, offset=0): """This method is deprecated. Please switch to GetRootAs.""" return cls.GetRootAs(buf, offset) + # Message def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) @@ -44,6 +47,7 @@ def FileObject(self): if o != 0: x = self._tab.Indirect(o + self._tab.Pos) from ada.comms.wsock.FileObject import FileObject + obj = FileObject() obj.Init(self._tab.Bytes, x) return obj @@ -55,6 +59,7 @@ def MeshInfo(self): if o != 0: x = self._tab.Indirect(o + self._tab.Pos) from ada.comms.wsock.MeshInfo import MeshInfo + obj = MeshInfo() obj.Init(self._tab.Bytes, x) return obj @@ -80,6 +85,7 @@ def SceneOperation(self): if o != 0: x = self._tab.Indirect(o + self._tab.Pos) from ada.comms.wsock.SceneOperation import SceneOperation + obj = SceneOperation() obj.Init(self._tab.Bytes, x) return obj @@ -100,6 +106,7 @@ def WebClients(self, j): x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 x = self._tab.Indirect(x) from ada.comms.wsock.WebClient import WebClient + obj = WebClient() obj.Init(self._tab.Bytes, x) return obj @@ -123,85 +130,112 @@ def ProcedureStore(self): if o != 0: x = self._tab.Indirect(o + self._tab.Pos) from ada.comms.wsock.ProcedureStore import ProcedureStore + obj = ProcedureStore() obj.Init(self._tab.Bytes, x) return obj return None + def MessageStart(builder): builder.StartObject(10) + def Start(builder): MessageStart(builder) + def MessageAddInstanceId(builder, instanceId): builder.PrependInt32Slot(0, instanceId, 0) + def AddInstanceId(builder, instanceId): MessageAddInstanceId(builder, instanceId) + def MessageAddCommandType(builder, commandType): builder.PrependInt8Slot(1, commandType, 0) + def AddCommandType(builder, commandType): MessageAddCommandType(builder, commandType) + def MessageAddFileObject(builder, fileObject): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(fileObject), 0) + def AddFileObject(builder, fileObject): MessageAddFileObject(builder, fileObject) + def MessageAddMeshInfo(builder, meshInfo): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(meshInfo), 0) + def AddMeshInfo(builder, meshInfo): MessageAddMeshInfo(builder, meshInfo) + def MessageAddTargetGroup(builder, targetGroup): builder.PrependInt8Slot(4, targetGroup, 0) + def AddTargetGroup(builder, targetGroup): MessageAddTargetGroup(builder, targetGroup) + def MessageAddClientType(builder, clientType): builder.PrependInt8Slot(5, clientType, 0) + def AddClientType(builder, clientType): MessageAddClientType(builder, clientType) + def MessageAddSceneOperation(builder, sceneOperation): builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(sceneOperation), 0) + def AddSceneOperation(builder, sceneOperation): MessageAddSceneOperation(builder, sceneOperation) + def MessageAddTargetId(builder, targetId): builder.PrependInt32Slot(7, targetId, 0) + def AddTargetId(builder, targetId): MessageAddTargetId(builder, targetId) + def MessageAddWebClients(builder, webClients): builder.PrependUOffsetTRelativeSlot(8, flatbuffers.number_types.UOffsetTFlags.py_type(webClients), 0) + def AddWebClients(builder, webClients): MessageAddWebClients(builder, webClients) + def MessageStartWebClientsVector(builder, numElems): return builder.StartVector(4, numElems, 4) + def StartWebClientsVector(builder, numElems): return MessageStartWebClientsVector(builder, numElems) + def MessageAddProcedureStore(builder, procedureStore): builder.PrependUOffsetTRelativeSlot(9, flatbuffers.number_types.UOffsetTFlags.py_type(procedureStore), 0) + def AddProcedureStore(builder, procedureStore): MessageAddProcedureStore(builder, procedureStore) + def MessageEnd(builder): return builder.EndObject() + def End(builder): return MessageEnd(builder) diff --git a/src/ada/comms/wsock/Parameter.py b/src/ada/comms/wsock/Parameter.py index 8a10042a..579a1fd6 100644 --- a/src/ada/comms/wsock/Parameter.py +++ b/src/ada/comms/wsock/Parameter.py @@ -4,10 +4,12 @@ import flatbuffers from flatbuffers.compat import import_numpy + np = import_numpy() + class Parameter(object): - __slots__ = ['_tab'] + __slots__ = ["_tab"] @classmethod def GetRootAs(cls, buf, offset=0): @@ -20,6 +22,7 @@ def GetRootAs(cls, buf, offset=0): def GetRootAsParameter(cls, buf, offset=0): """This method is deprecated. Please switch to GetRootAs.""" return cls.GetRootAs(buf, offset) + # Parameter def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) @@ -45,32 +48,42 @@ def Value(self): return self._tab.String(o + self._tab.Pos) return None + def ParameterStart(builder): builder.StartObject(3) + def Start(builder): ParameterStart(builder) + def ParameterAddName(builder, name): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) + def AddName(builder, name): ParameterAddName(builder, name) + def ParameterAddType(builder, type): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(type), 0) + def AddType(builder, type): ParameterAddType(builder, type) + def ParameterAddValue(builder, value): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(value), 0) + def AddValue(builder, value): ParameterAddValue(builder, value) + def ParameterEnd(builder): return builder.EndObject() + def End(builder): return ParameterEnd(builder) diff --git a/src/ada/comms/wsock/Procedure.py b/src/ada/comms/wsock/Procedure.py index fd9bbf50..15821eb4 100644 --- a/src/ada/comms/wsock/Procedure.py +++ b/src/ada/comms/wsock/Procedure.py @@ -4,10 +4,12 @@ import flatbuffers from flatbuffers.compat import import_numpy + np = import_numpy() + class Procedure(object): - __slots__ = ['_tab'] + __slots__ = ["_tab"] @classmethod def GetRootAs(cls, buf, offset=0): @@ -20,6 +22,7 @@ def GetRootAs(cls, buf, offset=0): def GetRootAsProcedure(cls, buf, offset=0): """This method is deprecated. Please switch to GetRootAs.""" return cls.GetRootAs(buf, offset) + # Procedure def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) @@ -60,6 +63,7 @@ def Parameters(self, j): x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 x = self._tab.Indirect(x) from ada.comms.wsock.Parameter import Parameter + obj = Parameter() obj.Init(self._tab.Bytes, x) return obj @@ -98,68 +102,90 @@ def Error(self): return self._tab.String(o + self._tab.Pos) return None + def ProcedureStart(builder): builder.StartObject(8) + def Start(builder): ProcedureStart(builder) + def ProcedureAddId(builder, id): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(id), 0) + def AddId(builder, id): ProcedureAddId(builder, id) + def ProcedureAddName(builder, name): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) + def AddName(builder, name): ProcedureAddName(builder, name) + def ProcedureAddDescription(builder, description): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(description), 0) + def AddDescription(builder, description): ProcedureAddDescription(builder, description) + def ProcedureAddScriptFileLocation(builder, scriptFileLocation): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(scriptFileLocation), 0) + def AddScriptFileLocation(builder, scriptFileLocation): ProcedureAddScriptFileLocation(builder, scriptFileLocation) + def ProcedureAddParameters(builder, parameters): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(parameters), 0) + def AddParameters(builder, parameters): ProcedureAddParameters(builder, parameters) + def ProcedureStartParametersVector(builder, numElems): return builder.StartVector(4, numElems, 4) + def StartParametersVector(builder, numElems): return ProcedureStartParametersVector(builder, numElems) + def ProcedureAddInputIfcFilepath(builder, inputIfcFilepath): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(inputIfcFilepath), 0) + def AddInputIfcFilepath(builder, inputIfcFilepath): ProcedureAddInputIfcFilepath(builder, inputIfcFilepath) + def ProcedureAddOutputIfcFilepath(builder, outputIfcFilepath): builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(outputIfcFilepath), 0) + def AddOutputIfcFilepath(builder, outputIfcFilepath): ProcedureAddOutputIfcFilepath(builder, outputIfcFilepath) + def ProcedureAddError(builder, error): builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(error), 0) + def AddError(builder, error): ProcedureAddError(builder, error) + def ProcedureEnd(builder): return builder.EndObject() + def End(builder): return ProcedureEnd(builder) diff --git a/src/ada/comms/wsock/ProcedureStore.py b/src/ada/comms/wsock/ProcedureStore.py index 056a4f5a..c423624c 100644 --- a/src/ada/comms/wsock/ProcedureStore.py +++ b/src/ada/comms/wsock/ProcedureStore.py @@ -4,10 +4,12 @@ import flatbuffers from flatbuffers.compat import import_numpy + np = import_numpy() + class ProcedureStore(object): - __slots__ = ['_tab'] + __slots__ = ["_tab"] @classmethod def GetRootAs(cls, buf, offset=0): @@ -20,6 +22,7 @@ def GetRootAs(cls, buf, offset=0): def GetRootAsProcedureStore(cls, buf, offset=0): """This method is deprecated. Please switch to GetRootAs.""" return cls.GetRootAs(buf, offset) + # ProcedureStore def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) @@ -32,6 +35,7 @@ def Procedures(self, j): x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 x = self._tab.Indirect(x) from ada.comms.wsock.Procedure import Procedure + obj = Procedure() obj.Init(self._tab.Bytes, x) return obj @@ -49,26 +53,34 @@ def ProceduresIsNone(self): o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) return o == 0 + def ProcedureStoreStart(builder): builder.StartObject(1) + def Start(builder): ProcedureStoreStart(builder) + def ProcedureStoreAddProcedures(builder, procedures): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(procedures), 0) + def AddProcedures(builder, procedures): ProcedureStoreAddProcedures(builder, procedures) + def ProcedureStoreStartProceduresVector(builder, numElems): return builder.StartVector(4, numElems, 4) + def StartProceduresVector(builder, numElems): return ProcedureStoreStartProceduresVector(builder, numElems) + def ProcedureStoreEnd(builder): return builder.EndObject() + def End(builder): return ProcedureStoreEnd(builder) diff --git a/src/ada/comms/wsock/SceneOperation.py b/src/ada/comms/wsock/SceneOperation.py index b56ca766..09391409 100644 --- a/src/ada/comms/wsock/SceneOperation.py +++ b/src/ada/comms/wsock/SceneOperation.py @@ -4,10 +4,12 @@ import flatbuffers from flatbuffers.compat import import_numpy + np = import_numpy() + class SceneOperation(object): - __slots__ = ['_tab'] + __slots__ = ["_tab"] @classmethod def GetRootAs(cls, buf, offset=0): @@ -20,6 +22,7 @@ def GetRootAs(cls, buf, offset=0): def GetRootAsSceneOperation(cls, buf, offset=0): """This method is deprecated. Please switch to GetRootAs.""" return cls.GetRootAs(buf, offset) + # SceneOperation def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) @@ -37,31 +40,40 @@ def CameraParams(self): if o != 0: x = self._tab.Indirect(o + self._tab.Pos) from ada.comms.wsock.CameraParams import CameraParams + obj = CameraParams() obj.Init(self._tab.Bytes, x) return obj return None + def SceneOperationStart(builder): builder.StartObject(2) + def Start(builder): SceneOperationStart(builder) + def SceneOperationAddOperation(builder, operation): builder.PrependInt8Slot(0, operation, 0) + def AddOperation(builder, operation): SceneOperationAddOperation(builder, operation) + def SceneOperationAddCameraParams(builder, cameraParams): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(cameraParams), 0) + def AddCameraParams(builder, cameraParams): SceneOperationAddCameraParams(builder, cameraParams) + def SceneOperationEnd(builder): return builder.EndObject() + def End(builder): return SceneOperationEnd(builder) diff --git a/src/ada/comms/wsock/SceneOperations.py b/src/ada/comms/wsock/SceneOperations.py index 91369f0d..b07fc932 100644 --- a/src/ada/comms/wsock/SceneOperations.py +++ b/src/ada/comms/wsock/SceneOperations.py @@ -2,6 +2,7 @@ # namespace: wsock + class SceneOperations(object): ADD = 0 REMOVE = 1 diff --git a/src/ada/comms/wsock/TargetType.py b/src/ada/comms/wsock/TargetType.py index 2141d9e7..73e6ac6b 100644 --- a/src/ada/comms/wsock/TargetType.py +++ b/src/ada/comms/wsock/TargetType.py @@ -2,6 +2,7 @@ # namespace: wsock + class TargetType(object): WEB = 0 LOCAL = 1 diff --git a/src/ada/comms/wsock/WebClient.py b/src/ada/comms/wsock/WebClient.py index a3ccffd4..517a9e88 100644 --- a/src/ada/comms/wsock/WebClient.py +++ b/src/ada/comms/wsock/WebClient.py @@ -4,10 +4,12 @@ import flatbuffers from flatbuffers.compat import import_numpy + np = import_numpy() + class WebClient(object): - __slots__ = ['_tab'] + __slots__ = ["_tab"] @classmethod def GetRootAs(cls, buf, offset=0): @@ -20,6 +22,7 @@ def GetRootAs(cls, buf, offset=0): def GetRootAsWebClient(cls, buf, offset=0): """This method is deprecated. Please switch to GetRootAs.""" return cls.GetRootAs(buf, offset) + # WebClient def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) @@ -52,38 +55,50 @@ def Port(self): return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) return 0 + def WebClientStart(builder): builder.StartObject(4) + def Start(builder): WebClientStart(builder) + def WebClientAddInstanceId(builder, instanceId): builder.PrependInt32Slot(0, instanceId, 0) + def AddInstanceId(builder, instanceId): WebClientAddInstanceId(builder, instanceId) + def WebClientAddName(builder, name): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) + def AddName(builder, name): WebClientAddName(builder, name) + def WebClientAddAddress(builder, address): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(address), 0) + def AddAddress(builder, address): WebClientAddAddress(builder, address) + def WebClientAddPort(builder, port): builder.PrependInt32Slot(3, port, 0) + def AddPort(builder, port): WebClientAddPort(builder, port) + def WebClientEnd(builder): return builder.EndObject() + def End(builder): return WebClientEnd(builder) diff --git a/src/ada/comms/wsock_client_sync.py b/src/ada/comms/wsock_client_sync.py index c959593a..e07d344e 100644 --- a/src/ada/comms/wsock_client_sync.py +++ b/src/ada/comms/wsock_client_sync.py @@ -68,8 +68,8 @@ def update_scene( ): """Updates the scene with the given GLTF data.""" buffer = self._scene_update_prep( - name, scene, purpose, scene_op, gltf_buffer_postprocessor, gltf_tree_postprocessor, target_id=target_id - ) + name, scene, purpose, scene_op, gltf_buffer_postprocessor, gltf_tree_postprocessor, target_id=target_id + ) self.websocket.send(buffer) def update_file_server(self, file_object: FileObjectDC): diff --git a/src/ada/fem/results/common.py b/src/ada/fem/results/common.py index e728561a..b1b40d4a 100644 --- a/src/ada/fem/results/common.py +++ b/src/ada/fem/results/common.py @@ -12,12 +12,12 @@ from ada.core.guid import create_guid from ada.fem.formats.general import FEATypes from ada.fem.shapes.definitions import LineShapes, MassTypes, ShellShapes, SolidShapes +from ada.visit.deprecated.websocket_server import send_to_viewer from ada.visit.gltf.graph import GraphNode, GraphStore from ada.visit.gltf.meshes import GroupReference, MergedMesh, MeshType from ada.visit.renderer_manager import RenderParams from ...comms.fb_model_gen import FilePurposeDC -from ada.visit.deprecated.websocket_server import send_to_viewer from .field_data import ElementFieldData, NodalFieldData, NodalFieldType if TYPE_CHECKING: @@ -410,7 +410,11 @@ def show( params_override: RenderParams = None, ping_timeout=1, ): - from ada.visit.renderer_manager import RendererManager, RenderParams, FEARenderParams + from ada.visit.renderer_manager import ( + FEARenderParams, + RendererManager, + RenderParams, + ) if renderer == "pygfx": scene = self.to_trimesh(step, field, warp_field, warp_step, warp_scale, cfunc) @@ -425,7 +429,7 @@ def show( server_exe=server_exe, server_args=server_args, run_ws_in_thread=run_ws_in_thread, - ping_timeout=ping_timeout + ping_timeout=ping_timeout, ) fea_params = FEARenderParams( @@ -442,7 +446,7 @@ def show( stream_from_ifc_store=False, add_ifc_backend=False, purpose=purpose, - fea_params=fea_params + fea_params=fea_params, ) # Set up the renderer and WebSocket server diff --git a/src/ada/visit/renderer_manager.py b/src/ada/visit/renderer_manager.py index 382488b8..4abc5221 100644 --- a/src/ada/visit/renderer_manager.py +++ b/src/ada/visit/renderer_manager.py @@ -7,7 +7,13 @@ import numpy as np import trimesh -from ada.comms.fb_model_gen import FilePurposeDC, SceneOperationDC, SceneOperationsDC, FileObjectDC, FileTypeDC +from ada.comms.fb_model_gen import ( + FileObjectDC, + FilePurposeDC, + FileTypeDC, + SceneOperationDC, + SceneOperationsDC, +) if TYPE_CHECKING: from IPython.display import HTML @@ -49,6 +55,7 @@ def __post_init__(self): if self.scene_operation is None: self.scene_operation = SceneOperationDC(operation=SceneOperationsDC.REPLACE) + def scene_from_fem_results(self: FEAResult, params: RenderParams): from trimesh.path.entities import Line @@ -144,14 +151,14 @@ def scene_from_part_or_assembly(part_or_assembly: Part | Assembly, params: Rende class RendererManager: def __init__( - self, - renderer: Literal["react", "pygfx"], - host: str = "localhost", - port: int = 8765, - server_exe: pathlib.Path = None, - server_args: list[str] = None, - run_ws_in_thread: bool = False, - ping_timeout=1, + self, + renderer: Literal["react", "pygfx"], + host: str = "localhost", + port: int = 8765, + server_exe: pathlib.Path = None, + server_args: list[str] = None, + run_ws_in_thread: bool = False, + ping_timeout=1, ): self.renderer = renderer self.host = host @@ -160,7 +167,7 @@ def __init__( self.server_args = server_args self.run_ws_in_thread = run_ws_in_thread self._is_in_notebook = None - self.ping_timeout=ping_timeout + self.ping_timeout = ping_timeout def start_server(self): """Set up the WebSocket server and renderer.""" @@ -264,7 +271,10 @@ def render(self, obj: BackendGeom | Part | Assembly | FEAResult, params: RenderP ifc_file = backend_file_dir / f"{obj.name}.ifc" obj.to_ifc(ifc_file) - wc.update_file_server(FileObjectDC(name=obj.name, file_type=FileTypeDC.IFC, purpose=FilePurposeDC.DESIGN, filepath=ifc_file)) - + wc.update_file_server( + FileObjectDC( + name=obj.name, file_type=FileTypeDC.IFC, purpose=FilePurposeDC.DESIGN, filepath=ifc_file + ) + ) return renderer_instance diff --git a/src/ada/visit/rendering/renderer_widget.py b/src/ada/visit/rendering/renderer_widget.py index 0431928c..a644b77b 100644 --- a/src/ada/visit/rendering/renderer_widget.py +++ b/src/ada/visit/rendering/renderer_widget.py @@ -6,18 +6,16 @@ class WebSocketRenderer(widgets.DOMWidget): def __init__(self, html_content: str, height: int = 500, unique_id: int = None, ws_port=None): super().__init__() - html_inject_str = '' + html_inject_str = "" if unique_id is not None: self.unique_id = unique_id html_inject_str += f'\n' if ws_port is not None: self.ws_port = ws_port - html_inject_str += f'' + html_inject_str += f"" # Inject the unique ID into the HTML content - self.html_content = html_content.replace( - "", html_inject_str - ) + self.html_content = html_content.replace("", html_inject_str) # Escape and embed the HTML in the srcdoc of the iframe srcdoc = html.escape(self.html_content) diff --git a/src/flatbuffers/deserializer_gen.py b/src/flatbuffers/deserializer_gen.py index d4cabffd..5a15a4ff 100644 --- a/src/flatbuffers/deserializer_gen.py +++ b/src/flatbuffers/deserializer_gen.py @@ -14,7 +14,7 @@ def generate_deserialize_function(schema: FlatBufferSchema, table: TableDefiniti for field in table.fields: if field.field_type == "string": deserialize_code += f" {field.name}=fb_obj.{make_camel_case(field.name)}().decode('utf-8') if fb_obj.{make_camel_case(field.name)}() is not None else None,\n" - elif field.field_type in ["int", "byte", "ubyte", "bool"]: + elif field.field_type in ["int", "byte", "ubyte", "bool", "float"]: deserialize_code += f" {field.name}=fb_obj.{make_camel_case(field.name)}(),\n" elif field.field_type.startswith("["): field_type_value = field.field_type[1:-1] diff --git a/tests/full/frontend/conftest.py b/tests/full/frontend/conftest.py index a0ffe64e..5e8978df 100644 --- a/tests/full/frontend/conftest.py +++ b/tests/full/frontend/conftest.py @@ -9,7 +9,7 @@ import pytest import pytest_asyncio -from ada.comms.fb_model_gen import MessageDC, CommandTypeDC, TargetTypeDC +from ada.comms.fb_model_gen import CommandTypeDC, MessageDC, TargetTypeDC from ada.comms.fb_serializer import serialize_message from ada.comms.wsock_client_async import WebSocketClientAsync from ada.comms.wsock_server import WebSocketAsyncServer, handle_partial_message