adapter.json, adapter.xml: Falsy Extension and Qualifier values omitted
Los mantenedores suelen responder en 1 día
@LivingLikeKrillin ya está trabajando en esto.
Desde el 30/10/2026.
- #683 de @LivingLikeKrillin — abierto
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 85/100
Línea de trabajo
Lee sdk/basyx/aas/adapter/json/json_serialization.py y sdk/basyx/aas/adapter/xml/xml_serialization.py, centrándote en _qualifier_to_json, _extension_to_json, qualifier_to_xml y extension_to_xml. Cambia el guard if obj.value: por if obj.value is not None: en cada uno, mirroring Property serialization. Añade tests de ida y vuelta para 0, Decimal("0") y False en ambos adaptadores; done significa que los valores falsy sobreviven a serialize-deserialize.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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"), andFalseare preserved in the serialized output. - Actual: The
valueis omitted from the serialized JSON/XML. During a round trip (serialize and then deserialize), the value becomesNone, 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_jsonand_extension_to_jsonguard the value usingif obj.value:.
In sdk/basyx/aas/adapter/xml/xml_serialization.py:
qualifier_to_xmlandextension_to_xmlguard the value usingif 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.
- Lenguaje dominante
- Python
- Estrellas
- 107
- Forks
- 61
- Merge medio
- 1 h 9 min
- PR fusionados (30 d)
- 2
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de eclipse-basyx/basyx-python-sdk
-
server: XML responses contain `cursor="None"` on the last pagePosiblemente ocupada @qiaobochi040726-source la tomó hace 13 días. Abiertobug good-first-issue server
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
eclipse-basyx/basyx-python-sdk#673 ·
Los mantenedores suelen responder en 1 día
-
adapter.aasx: Failsafe writer adds duplicate parts for conflicting filesPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertobug good-first-issue sdk
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
eclipse-basyx/basyx-python-sdk#671 ·
Los mantenedores suelen responder en 1 día
-
enhancement good-first-issue server
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
eclipse-basyx/basyx-python-sdk#670 ·
Los mantenedores suelen responder en 1 día
-
adapter.aasx: Missing supplementary file aborts reading with failsafePosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertobug good-first-issue sdk
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
eclipse-basyx/basyx-python-sdk#665 ·
Los mantenedores suelen responder en 1 día
-
bug server
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
eclipse-basyx/basyx-python-sdk#663 ·
Los mantenedores suelen responder en 1 día
Todos los issues de eclipse-basyx/basyx-python-sdk
Issues similares
-
community enhancement good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
Hochfrequenz/sapgui.mcp#1039 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
didi/helixharness#18 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
API /search : typer la réponseAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
dataforgoodfr/democracy-watch#46 · 1 reacción ·