adapter.json, adapter.xml: Falsy Extension and Qualifier values omitted

Đang mở Phù hợp với người mới
#682 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@LivingLikeKrillin đang làm issue này rồi.

Từ ngày 30/10/2026.

  • #683 của @LivingLikeKrillin — đang mở

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
85/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
backend

Hướng nghiên cứu

Đọc sdk/basyx/aas/adapter/json/json_serialization.py và sdk/basyx/aas/adapter/xml/xml_serialization.py, tập trung vào _qualifier_to_json, _extension_to_json, qualifier_to_xml và extension_to_xml. Đổi guard if obj.value: thành if obj.value is not None: trong mỗi file, mirroring Property serialization. Thêm các test round-trip cho 0, Decimal("0") và False trong cả hai adapter; done nghĩa là các giá trị falsy sống sót qua serialize-deserialize.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Description

In both adapter.json and adapter.xml, when an Extension or Qualifier has a value that evaluates to falsy in Python—such as integer 0, Decimal("0"), or False—the serializers omit the value field or attribute entirely. Non-falsy values (such as 1) are serialized as expected.

This was discovered while validating AAS JSON environments generated by an external tool, where an Extension with an xs:decimal value of "0" lost its value after being re-serialized by BaSyx.

This behavior was observed in basyx-python-sdk 2.1.0 (from PyPI) and verified on the current develop branch.

Expected vs. Actual Behaviour
  • Expected: Falsy values such as 0, Decimal("0"), and False are preserved in the serialized output.
  • Actual: The value is omitted from the serialized JSON/XML. During a round trip (serialize and then deserialize), the value becomes None, resulting in data loss. The deserializers already parse "0" correctly if the value is present.
Technical Details & Root Cause

In sdk/basyx/aas/adapter/json/json_serialization.py:

  • _qualifier_to_json and _extension_to_json guard the value using if obj.value:.

In sdk/basyx/aas/adapter/xml/xml_serialization.py:

  • qualifier_to_xml and extension_to_xml guard the value using if obj.value:.

Because 0, Decimal("0"), and False evaluate to False in Python boolean evaluation, the value is not written. For comparison, Property serialization already uses if obj.value is not None:.

Reproduction
import io, json
from basyx.aas import model
from basyx.aas.adapter import json as aas_json

sm = model.Submodel(
    "https://example.org/sm",
    extension=[model.Extension("e", value_type=model.datatypes.Int, value=0)],
    qualifier=[model.Qualifier("q", value_type=model.datatypes.Int, value=0)],
)
buf = io.StringIO()
aas_json.write_aas_json_file(buf, model.DictIdentifiableStore([sm]))
print(json.loads(buf.getvalue())["submodels"][0]["extensions"])
# [{'valueType': 'xs:int', 'name': 'e'}]  -- no "value"

The qualifier output also lacks the "value" field. The XML adapter exhibits the same behavior.

Suggested Fix

Update _qualifier_to_json, _extension_to_json, qualifier_to_xml, and extension_to_xml to check if obj.value is not None:, matching the implementation in Property.

A pull request containing this fix alongside round-trip tests for 0, Decimal("0"), and False in both adapters will be submitted and reference this issue.

Ngôn ngữ chính
Python
Star
107
Fork
61
Merge trung bình
1 giờ 9 phút
Pull request đã merge (30 ngày)
2

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của eclipse-basyx/basyx-python-sdk

Tất cả issue của eclipse-basyx/basyx-python-sdk

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.