Allow alternative type stores

This commit is contained in:
Marko Durkovic
2022-04-11 12:47:01 +02:00
parent e88241074e
commit dd357fa3e4
8 changed files with 121 additions and 83 deletions
+3 -2
View File
@@ -14,6 +14,7 @@ from numpy.typing import NDArray
from rosbags.serde.messages import SerdeError, get_msgdef
from rosbags.serde.typing import Msgdef
from rosbags.serde.utils import SIZEMAP, Valtype
from rosbags.typesys import types
if TYPE_CHECKING:
from typing import Any, Tuple
@@ -187,7 +188,7 @@ def deserialize(rawdata: bytes, typename: str) -> Msgdef:
"""
_, little_endian = unpack_from('BB', rawdata, 0)
msgdef = get_msgdef(typename)
msgdef = get_msgdef(typename, types)
obj, _ = deserialize_message(
rawdata[4:],
BASETYPEMAP_LE if little_endian else BASETYPEMAP_BE,
@@ -428,7 +429,7 @@ def serialize(
Serialized bytes.
"""
msgdef = get_msgdef(typename)
msgdef = get_msgdef(typename, types)
size = 4 + get_size(message, msgdef)
rawdata = memoryview(bytearray(size))
+11 -11
View File
@@ -12,7 +12,7 @@ import pytest
from rosbags.serde import SerdeError, cdr_to_ros1, deserialize_cdr, ros1_to_cdr, serialize_cdr
from rosbags.serde.messages import get_msgdef
from rosbags.typesys import get_types_from_msg, register_types
from rosbags.typesys import get_types_from_msg, register_types, types
from rosbags.typesys.types import builtin_interfaces__msg__Time as Time
from rosbags.typesys.types import geometry_msgs__msg__Polygon as Polygon
from rosbags.typesys.types import sensor_msgs__msg__MagneticField as MagneticField
@@ -316,14 +316,14 @@ def test_custom_type() -> None:
register_types(dict(get_types_from_msg(DYNAMIC_S_64, 'test_msgs/msg/dynamic_s_64')))
register_types(dict(get_types_from_msg(CUSTOM, cname)))
static_64_64 = get_msgdef('test_msgs/msg/static_64_64').cls
static_64_16 = get_msgdef('test_msgs/msg/static_64_16').cls
static_16_64 = get_msgdef('test_msgs/msg/static_16_64').cls
dynamic_64_64 = get_msgdef('test_msgs/msg/dynamic_64_64').cls
dynamic_64_b_64 = get_msgdef('test_msgs/msg/dynamic_64_b_64').cls
dynamic_64_s = get_msgdef('test_msgs/msg/dynamic_64_s').cls
dynamic_s_64 = get_msgdef('test_msgs/msg/dynamic_s_64').cls
custom = get_msgdef('test_msgs/msg/custom').cls
static_64_64 = get_msgdef('test_msgs/msg/static_64_64', types).cls
static_64_16 = get_msgdef('test_msgs/msg/static_64_16', types).cls
static_16_64 = get_msgdef('test_msgs/msg/static_16_64', types).cls
dynamic_64_64 = get_msgdef('test_msgs/msg/dynamic_64_64', types).cls
dynamic_64_b_64 = get_msgdef('test_msgs/msg/dynamic_64_b_64', types).cls
dynamic_64_s = get_msgdef('test_msgs/msg/dynamic_64_s', types).cls
dynamic_s_64 = get_msgdef('test_msgs/msg/dynamic_s_64', types).cls
custom = get_msgdef('test_msgs/msg/custom', types).cls
msg = custom(
'str',
@@ -439,7 +439,7 @@ def test_padding_empty_sequence() -> None:
"""Test empty sequences do not add item padding."""
register_types(dict(get_types_from_msg(SU64_B, 'test_msgs/msg/su64_b')))
su64_b = get_msgdef('test_msgs/msg/su64_b').cls
su64_b = get_msgdef('test_msgs/msg/su64_b', types).cls
msg = su64_b(numpy.array([], dtype=numpy.uint64), True)
cdr = serialize_cdr(msg, msg.__msgtype__)
@@ -458,7 +458,7 @@ def test_align_after_empty_sequence() -> None:
"""Test alignment after empty sequences."""
register_types(dict(get_types_from_msg(SU64_U64, 'test_msgs/msg/su64_u64')))
su64_b = get_msgdef('test_msgs/msg/su64_u64').cls
su64_b = get_msgdef('test_msgs/msg/su64_u64', types).cls
msg = su64_b(numpy.array([], dtype=numpy.uint64), 42)
cdr = serialize_cdr(msg, msg.__msgtype__)