mirror of
https://github.com/ZGCA-Forge/MsgCenterPy.git
synced 2026-03-24 05:48:23 +00:00
refactor: simplify _extract_namespaced_type_fields, remove redundant try-except and post-processing
Made-with: Cursor
This commit is contained in:
@@ -1,11 +1,8 @@
|
|||||||
import array
|
import array
|
||||||
import importlib
|
import importlib
|
||||||
import logging
|
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from typing import TYPE_CHECKING, Any, Dict, Optional, Type
|
from typing import TYPE_CHECKING, Any, Dict, Optional, Type
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
from rosidl_parser.definition import NamespacedType # type: ignore
|
from rosidl_parser.definition import NamespacedType # type: ignore
|
||||||
from rosidl_runtime_py import ( # type: ignore
|
from rosidl_runtime_py import ( # type: ignore
|
||||||
import_message_from_namespaced_type,
|
import_message_from_namespaced_type,
|
||||||
@@ -248,29 +245,23 @@ class ROS2MessageInstance(MessageInstance[Any]):
|
|||||||
type_info: 要填充 object_fields 的 TypeInfo 对象
|
type_info: 要填充 object_fields 的 TypeInfo 对象
|
||||||
namespaced_type: rosidl NamespacedType 定义
|
namespaced_type: rosidl NamespacedType 定义
|
||||||
"""
|
"""
|
||||||
from msgcenterpy.core.type_info import TypeInfoPostProcessor
|
msg_cls = import_message_from_namespaced_type(namespaced_type)
|
||||||
|
msg_instance = msg_cls()
|
||||||
|
|
||||||
try:
|
# noinspection PyProtectedMember
|
||||||
msg_cls = import_message_from_namespaced_type(namespaced_type)
|
slots = msg_instance._fields_and_field_types
|
||||||
msg_instance = msg_cls()
|
slot_types = msg_instance.SLOT_TYPES
|
||||||
|
|
||||||
# noinspection PyProtectedMember
|
for field_name, slot_type in zip(slots, slot_types):
|
||||||
slots = msg_instance._fields_and_field_types
|
std_type = TypeConverter.rosidl_definition_to_standard(slot_type)
|
||||||
slot_types = msg_instance.SLOT_TYPES
|
python_type = TypeConverter.standard_to_python_type(std_type)
|
||||||
|
field_type_info = TypeInfo(
|
||||||
for field_name, slot_type in zip(slots, slot_types):
|
field_name=field_name,
|
||||||
std_type = TypeConverter.rosidl_definition_to_standard(slot_type)
|
field_path=f"{type_info.field_path}.{field_name}",
|
||||||
python_type = TypeConverter.standard_to_python_type(std_type)
|
standard_type=std_type,
|
||||||
field_type_info = TypeInfo(
|
python_type=python_type,
|
||||||
field_name=field_name,
|
original_type=slot_type,
|
||||||
field_path=f"{type_info.field_path}.{field_name}",
|
)
|
||||||
standard_type=std_type,
|
self._extract_from_rosidl_definition(field_type_info)
|
||||||
python_type=python_type,
|
field_type_info.add_constraint(ConstraintType.REQUIRED, True)
|
||||||
original_type=slot_type,
|
type_info.object_fields[field_name] = field_type_info
|
||||||
)
|
|
||||||
self._extract_from_rosidl_definition(field_type_info)
|
|
||||||
TypeInfoPostProcessor.post_process_type_info(field_type_info)
|
|
||||||
field_type_info.add_constraint(ConstraintType.REQUIRED, True)
|
|
||||||
type_info.object_fields[field_name] = field_type_info
|
|
||||||
except Exception as e:
|
|
||||||
logger.warning("Failed to extract fields from NamespacedType %s: %s", namespaced_type, e)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user