Skip to content

Commit

Permalink
adapter: adjust for DataSpecificationIEC61360.value_format defaulti…
Browse files Browse the repository at this point in the history
…ng to `String`

2373167 and
9da564c changed the default
`value_format` and `value_type` of `DataSpecificationIEC61360` and
`ValueReferencePair` to `String`.
This commit adjusts the JSON/XML adapters accordingly.
  • Loading branch information
jkhsjdhjs committed Apr 7, 2023
1 parent 9da564c commit f3b3b4f
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 21 deletions.
14 changes: 5 additions & 9 deletions basyx/aas/adapter/json/json_deserialization.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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)

Expand Down Expand Up @@ -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:
Expand Down
5 changes: 1 addition & 4 deletions basyx/aas/adapter/json/json_serialization.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand Down
10 changes: 5 additions & 5 deletions basyx/aas/adapter/xml/xml_deserialization.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
"""
Expand Down Expand Up @@ -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"))
Expand Down
5 changes: 2 additions & 3 deletions basyx/aas/adapter/xml/xml_serialization.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down

0 comments on commit f3b3b4f

Please sign in to comment.