1 Commits

Author SHA1 Message Date
dependabot[bot]
a5edd436ec ci(deps): bump actions/download-artifact from 7 to 8
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 7 to 8.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v7...v8)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 06:16:18 +00:00
5 changed files with 7 additions and 43 deletions

View File

@@ -217,7 +217,7 @@ jobs:
steps:
- name: Retrieve release distributions
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
name: release-dists
path: dist/
@@ -240,7 +240,7 @@ jobs:
steps:
- name: Retrieve release distributions
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
name: release-dists
path: dist/
@@ -260,7 +260,7 @@ jobs:
steps:
- name: Retrieve release distributions
uses: actions/download-artifact@v7
uses: actions/download-artifact@v8
with:
name: release-dists
path: dist/

View File

@@ -5,7 +5,7 @@ A multi-format message conversion system supporting seamless conversion
between ROS2, Pydantic, Dataclass, JSON, Dict, YAML and JSON Schema.
"""
__version__ = "0.1.8"
__version__ = "0.1.7"
__license__ = "Apache-2.0"
from msgcenterpy.core.envelope import MessageEnvelope, create_envelope

View File

@@ -277,16 +277,9 @@ class TypeInfo:
# Special handling for object types
if self.is_object and self.object_fields:
properties = {}
required_fields = []
for field_name, field_info in self.object_fields.items():
properties[field_name] = field_info.to_json_schema_property(include_constraints)
if field_info.has_constraint(ConstraintType.REQUIRED):
required_fields.append(field_name)
property_schema["properties"] = properties
if required_fields:
property_schema["required"] = required_fields
if self.field_name and self.field_name != Consts.ELEMENT_TYPE_INFO_SYMBOL:
property_schema["title"] = self.field_name
# Add description
if self.original_type:

View File

@@ -217,9 +217,10 @@ class ROS2MessageInstance(MessageInstance[Any]):
# 基础类型的约束将在 field_accessor 中自动添加
pass
elif isinstance(definition_type, NamespacedType):
# 对象类型,标记为对象并提取字段信息
type_info.is_object = True
type_info.add_constraint(ConstraintType.TYPE_KEEP, True)
self._extract_namespaced_type_fields(type_info, definition_type)
# 这里可以进一步扩展来提取对象字段信息
# 提取元素类型信息
if get_element_type:
if not isinstance(definition_type, AbstractNestedType):
@@ -235,33 +236,3 @@ class ROS2MessageInstance(MessageInstance[Any]):
original_type=definition_type.value_type,
)
self._extract_from_rosidl_definition(type_info.element_type_info)
def _extract_namespaced_type_fields(self, type_info: TypeInfo, namespaced_type: "NamespacedType") -> None:
"""从 NamespacedType嵌套 ROS2 消息)中提取所有字段信息,填充 object_fields
递归处理嵌套的消息类型,确保多层嵌套的结构也能正确提取。
Args:
type_info: 要填充 object_fields 的 TypeInfo 对象
namespaced_type: rosidl NamespacedType 定义
"""
msg_cls = import_message_from_namespaced_type(namespaced_type)
msg_instance = msg_cls()
# noinspection PyProtectedMember
slots = msg_instance._fields_and_field_types
slot_types = msg_instance.SLOT_TYPES
for field_name, slot_type in zip(slots, slot_types):
std_type = TypeConverter.rosidl_definition_to_standard(slot_type)
python_type = TypeConverter.standard_to_python_type(std_type)
field_type_info = TypeInfo(
field_name=field_name,
field_path=f"{type_info.field_path}.{field_name}",
standard_type=std_type,
python_type=python_type,
original_type=slot_type,
)
self._extract_from_rosidl_definition(field_type_info)
field_type_info.add_constraint(ConstraintType.REQUIRED, True)
type_info.object_fields[field_name] = field_type_info

View File

@@ -128,7 +128,7 @@ skips = ["B101", "B601"]
# ── Version management ────────────────────────────────────────
[tool.bumpversion]
current_version = "0.1.8"
current_version = "0.1.7"
commit = true
tag = true
push = true