mirror of
https://github.com/ZGCA-Forge/MsgCenterPy.git
synced 2026-03-24 10:59:21 +00:00
Compare commits
1 Commits
182c5187a0
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9a8b60cc56 |
4
.github/workflows/ci.yml
vendored
4
.github/workflows/ci.yml
vendored
@@ -122,7 +122,7 @@ jobs:
|
||||
args: --detailed-output --output-format json
|
||||
|
||||
- name: Upload security reports
|
||||
uses: actions/upload-artifact@v6
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: security-reports
|
||||
path: |
|
||||
@@ -155,7 +155,7 @@ jobs:
|
||||
run: twine check dist/*
|
||||
|
||||
- name: Upload build artifacts
|
||||
uses: actions/upload-artifact@v6
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: dist
|
||||
path: dist/
|
||||
|
||||
4
.github/workflows/publish.yml
vendored
4
.github/workflows/publish.yml
vendored
@@ -135,7 +135,7 @@ jobs:
|
||||
args: --detailed-output --output-format json
|
||||
|
||||
- name: Upload security reports
|
||||
uses: actions/upload-artifact@v6
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: security-reports
|
||||
path: |
|
||||
@@ -197,7 +197,7 @@ jobs:
|
||||
twine check dist/*
|
||||
|
||||
- name: Upload distributions
|
||||
uses: actions/upload-artifact@v6
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: release-dists
|
||||
path: dist/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user