diff --git a/basyx/aas/adapter/json/json_deserialization.py b/basyx/aas/adapter/json/json_deserialization.py index c43fa5524..295c4a7b5 100644 --- a/basyx/aas/adapter/json/json_deserialization.py +++ b/basyx/aas/adapter/json/json_deserialization.py @@ -386,8 +386,7 @@ def _construct_lang_string_set(cls, lst: List[Dict[str, object]]) -> Optional[mo return model.LangStringSet(ret) @classmethod - def _construct_value_list(cls, dct: Dict[str, object], value_format: Optional[model.DataTypeDefXsd] = None) \ - -> model.ValueList: + def _construct_value_list(cls, dct: Dict[str, object], value_format: model.DataTypeDefXsd) -> model.ValueList: ret: model.ValueList = set() for element in _get_ts(dct, 'valueReferencePairs', list): try: @@ -402,10 +401,9 @@ def _construct_value_list(cls, dct: Dict[str, object], value_format: Optional[mo return ret @classmethod - def _construct_value_reference_pair(cls, dct: Dict[str, object], - value_format: Optional[model.DataTypeDefXsd] = None, + def _construct_value_reference_pair(cls, dct: Dict[str, object], value_format: model.DataTypeDefXsd, object_class=model.ValueReferencePair) -> model.ValueReferencePair: - return object_class(value=model.datatypes.from_xsd(_get_ts(dct, 'value', str), value_format), # type: ignore + return object_class(value=model.datatypes.from_xsd(_get_ts(dct, 'value', str), value_format), value_id=cls._construct_reference(_get_ts(dct, 'valueId', dict)), value_type=value_format) @@ -507,12 +505,10 @@ def _construct_data_specification_iec61360(cls, dct: Dict[str, object], ret.source_of_definition = _get_ts(dct, 'sourceOfDefinition', str) if 'symbol' in dct: ret.symbol = _get_ts(dct, 'symbol', str) - value_format: Optional[model.DataTypeDefXsd] = None if 'valueFormat' in dct: - value_format = model.datatypes.XSD_TYPE_CLASSES[_get_ts(dct, 'valueFormat', str)] - ret.value_format = value_format + ret.value_format = model.datatypes.XSD_TYPE_CLASSES[_get_ts(dct, 'valueFormat', str)] if 'valueList' in dct: - ret.value_list = cls._construct_value_list(_get_ts(dct, 'valueList', dict), value_format=value_format) + ret.value_list = cls._construct_value_list(_get_ts(dct, 'valueList', dict), value_format=ret.value_format) if 'value' in dct: ret.value = model.datatypes.from_xsd(_get_ts(dct, 'value', str), ret.value_format) if 'valueId' in dct: diff --git a/basyx/aas/adapter/json/json_serialization.py b/basyx/aas/adapter/json/json_serialization.py index 8146e224c..61f2ced55 100644 --- a/basyx/aas/adapter/json/json_serialization.py +++ b/basyx/aas/adapter/json/json_serialization.py @@ -261,8 +261,6 @@ def _value_reference_pair_to_json(cls, obj: model.ValueReferencePair) -> Dict[st :return: dict with the serialized attributes of this object """ data = cls._abstract_classes_to_json(obj) - if obj.value_type: - data['valueType'] = model.datatypes.XSD_TYPE_NAMES[obj.value_type] data.update({'value': model.datatypes.xsd_repr(obj.value), 'valueId': obj.value_id}) return data @@ -353,8 +351,7 @@ def _data_specification_iec61360_to_json( data_spec['sourceOfDefinition'] = obj.source_of_definition if obj.symbol is not None: data_spec['symbol'] = obj.symbol - if obj.value_format is not None: - data_spec['valueFormat'] = model.datatypes.XSD_TYPE_NAMES[obj.value_format] + data_spec['valueFormat'] = model.datatypes.XSD_TYPE_NAMES[obj.value_format] if obj.value_list is not None: data_spec['valueList'] = cls._value_list_to_json(obj.value_list) if obj.value is not None: diff --git a/basyx/aas/adapter/xml/xml_deserialization.py b/basyx/aas/adapter/xml/xml_deserialization.py index 2209fe48a..f91678b90 100644 --- a/basyx/aas/adapter/xml/xml_deserialization.py +++ b/basyx/aas/adapter/xml/xml_deserialization.py @@ -1029,18 +1029,18 @@ def construct_submodel(cls, element: etree.Element, object_class=model.Submodel, return submodel @classmethod - def construct_value_reference_pair(cls, element: etree.Element, value_format: Optional[model.DataTypeDefXsd] = None, + def construct_value_reference_pair(cls, element: etree.Element, value_format: model.DataTypeDefXsd, object_class=model.ValueReferencePair, **_kwargs: Any) \ -> model.ValueReferencePair: return object_class( - model.datatypes.from_xsd(_child_text_mandatory(element, NS_AAS + "value"), value_format), # type: ignore + model.datatypes.from_xsd(_child_text_mandatory(element, NS_AAS + "value"), value_format), _child_construct_mandatory(element, NS_AAS + "valueId", cls.construct_reference), value_format ) @classmethod - def construct_value_list(cls, element: etree.Element, value_format: Optional[model.DataTypeDefXsd] = None, - **_kwargs: Any) -> model.ValueList: + def construct_value_list(cls, element: etree.Element, value_format: model.DataTypeDefXsd, **_kwargs: Any) \ + -> model.ValueList: """ This function doesn't support the object_class parameter, because ValueList is just a generic type alias. """ @@ -1167,7 +1167,7 @@ def construct_data_specification_iec61360(cls, element: etree.Element, object_cl if value_format is not None: ds_iec.value_format = value_format value_list = _failsafe_construct(element.find(NS_AAS + "valueList"), cls.construct_value_list, cls.failsafe, - value_format=value_format) + value_format=ds_iec.value_format) if value_list is not None: ds_iec.value_list = value_list value = _get_text_or_none(element.find(NS_AAS + "value")) diff --git a/basyx/aas/adapter/xml/xml_serialization.py b/basyx/aas/adapter/xml/xml_serialization.py index 21f5ff347..6b0a0c6cb 100644 --- a/basyx/aas/adapter/xml/xml_serialization.py +++ b/basyx/aas/adapter/xml/xml_serialization.py @@ -433,9 +433,8 @@ def data_specification_iec61360_to_xml(obj: model.DataSpecificationIEC61360, text=_generic.IEC61360_DATA_TYPES[obj.data_type])) if obj.definition is not None: et_data_specification_iec61360.append(lang_string_set_to_xml(obj.definition, NS_AAS + "definition")) - if obj.value_format is not None: - et_data_specification_iec61360.append(_generate_element(NS_AAS + "valueFormat", - text=model.datatypes.XSD_TYPE_NAMES[obj.value_format])) + et_data_specification_iec61360.append(_generate_element(NS_AAS + "valueFormat", + text=model.datatypes.XSD_TYPE_NAMES[obj.value_format])) # this can be either None or an empty set, both of which are equivalent to the bool false # thus we don't check 'is not None' for this property if obj.value_list: