From 5801539bb04ea6ec1ad99ddb0ef22f9e3605873c Mon Sep 17 00:00:00 2001 From: RunasSudo Date: Mon, 21 Apr 2025 18:14:15 +1000 Subject: [PATCH] Quality of life improvements Add helper functions to directly read/write bytes --- csla_binary/binary_reader.py | 12 +++++++++++- csla_binary/binary_writer.py | 10 ++++++++++ csla_binary/serialization_info.py | 16 ++++++++-------- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/csla_binary/binary_reader.py b/csla_binary/binary_reader.py index d4ab5bb..482eca7 100644 --- a/csla_binary/binary_reader.py +++ b/csla_binary/binary_reader.py @@ -16,6 +16,7 @@ import io import struct +from typing import List from .known_types import CslaKnownTypes from .serialization_info import ChildData, FieldData, SerializationInfo @@ -23,11 +24,20 @@ from .serialization_info import ChildData, FieldData, SerializationInfo class CslaBinaryReader: """Reads binary-serialised CSLA data into SerializationInfo objects""" + @classmethod + def read_from_bytes(cls, data: bytes) -> List[SerializationInfo]: + stream = io.BytesIO(data) + reader = cls(stream) + return reader.read() + + # -------------- + # Implementation + def __init__(self, stream: io.BufferedIOBase): self.stream = stream self.keywords_dictionary = {} - def read(self): + def read(self) -> List[SerializationInfo]: # CslaBinaryReader.Read total_count = self.read_int32() diff --git a/csla_binary/binary_writer.py b/csla_binary/binary_writer.py index 7c0b516..bcdea79 100644 --- a/csla_binary/binary_writer.py +++ b/csla_binary/binary_writer.py @@ -24,6 +24,16 @@ from .serialization_info import SerializationInfo class CslaBinaryWriter: """Writes SerializationInfo objects into binary-serialised CSLA data""" + @classmethod + def write_to_bytes(cls, serialisation_infos: List[SerializationInfo]) -> bytes: + stream = io.BytesIO() + writer = cls(stream) + writer.write(serialisation_infos) + return stream.getvalue() + + # -------------- + # Implementation + def __init__(self, stream: io.BufferedIOBase): self.stream = stream self.keywords_dictionary = [] diff --git a/csla_binary/serialization_info.py b/csla_binary/serialization_info.py index dd29706..2057182 100644 --- a/csla_binary/serialization_info.py +++ b/csla_binary/serialization_info.py @@ -20,23 +20,23 @@ from typing import Any, List @dataclass class ChildData: # SerializationInfo.ChildData - name: str - is_dirty: bool - reference_id: int + name: str = '' + is_dirty: bool = False + reference_id: int = -1 @dataclass class FieldData: # SerializationInfo.FieldData - name: str - enum_type_name: str - is_dirty: bool - value: Any + name: str = '' + enum_type_name: str = None + is_dirty: bool = False + value: Any = None @dataclass class SerializationInfo: """Format-agnostic representation of serialised CSLA object""" - reference_id: int = 0 + reference_id: int = -1 type_name: str = '' children: List[ChildData] = field(default_factory=list) values: List[FieldData] = field(default_factory=list)