From b5a4151a919cabd83529d4bd6296e9b215469d2f Mon Sep 17 00:00:00 2001 From: Erik Boasson Date: Mon, 18 Mar 2024 16:59:32 +0100 Subject: [PATCH] Include base type in the set of dependent types Without including the base type in the dependent types, the initial call to construct a DDS topic succeeds at the C API level, but then constructing a C-based deserialiser for extracting the key fields within the Python binding fails because the base type is (potentially) still undefined in the type library in Cyclone. This results in a "bad parameter" exception. Signed-off-by: Erik Boasson --- cyclonedds/idl/_xt_builder.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cyclonedds/idl/_xt_builder.py b/cyclonedds/idl/_xt_builder.py index 8072d6f..022dc5e 100644 --- a/cyclonedds/idl/_xt_builder.py +++ b/cyclonedds/idl/_xt_builder.py @@ -406,6 +406,20 @@ def gather_types(cls, _type): graph[my_node_name].add(scan_node_name) + if isclass(_ctype) and issubclass(_ctype, IdlStruct): + # get_extended_type_hints will not inspect the base type, which is a struct + base_type = _ctype.__base__ + if base_type is None or base_type == IdlStruct: + pass + else: + print("base type!") + scan_node_name = base_type.__idl_typename__.replace('.', '::') + if scan_node_name not in graph: + graph[scan_node_name] = set() + graph_types[scan_node_name] = base_type + + graph[my_node_name].add(scan_node_name) + for name, fieldtype in get_extended_type_hints(_ctype).items(): m, deep = cls._deep_gather_type(fieldtype) plain = cls._impl_xt_is_plain(fieldtype)