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

Aperta Adatta ai principianti
#682 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@LivingLikeKrillin ci sta già lavorando.

Dal 30/10/2026.

  • #683 di @LivingLikeKrillin — aperta

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
85/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
backend

Direzione di ricerca

Leggi sdk/basyx/aas/adapter/json/json_serialization.py e sdk/basyx/aas/adapter/xml/xml_serialization.py, concentrandoti su _qualifier_to_json, _extension_to_json, qualifier_to_xml ed extension_to_xml. Cambia la guard if obj.value: in if obj.value is not None: in ciascuno, mirroring Property serialization. Aggiungi test di round-trip per 0, Decimal("0") e False in entrambi gli adapter; done significa che i valori falsy sopravvivono a serialize-deserialize.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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.

Lingua principale
Python
Stelle
107
Fork
61
Merge medio
1h 9m
PR unite (30g)
2

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di eclipse-basyx/basyx-python-sdk

Tutte le issue di eclipse-basyx/basyx-python-sdk

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.