Skip to content

Commit 114f42f

Browse files
adapter: Allow optional contentType in Blob and File
Currently, the JSON and XMOL deserializiers raise an error when parsing Blob or File submodels that do not include a contentType The contentType attribute has a cardinality of 0..1 for both classes and should therefore be optional. The implementation now aligns with this specification and defaults to None if the field is absent in the data.
1 parent 65802ea commit 114f42f

2 files changed

Lines changed: 6 additions & 4 deletions

File tree

sdk/basyx/aas/adapter/json/json_deserialization.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -692,18 +692,20 @@ def _construct_submodel_element_list(cls, dct: Dict[str, object], object_class=m
692692

693693
@classmethod
694694
def _construct_blob(cls, dct: Dict[str, object], object_class=model.Blob) -> model.Blob:
695+
content_type = _get_ts(dct, "contentType", str) if 'contentType' in dct else None
695696
ret = object_class(id_short=None,
696-
content_type=_get_ts(dct, "contentType", str))
697+
content_type=content_type)
697698
cls._amend_abstract_attributes(ret, dct)
698699
if 'value' in dct:
699700
ret.value = base64.b64decode(_get_ts(dct, 'value', str))
700701
return ret
701702

702703
@classmethod
703704
def _construct_file(cls, dct: Dict[str, object], object_class=model.File) -> model.File:
705+
content_type = _get_ts(dct, "contentType", str) if 'contentType' in dct else None
704706
ret = object_class(id_short=None,
705707
value=None,
706-
content_type=_get_ts(dct, "contentType", str))
708+
content_type=content_type)
707709
cls._amend_abstract_attributes(ret, dct)
708710
if 'value' in dct and dct['value'] is not None:
709711
ret.value = _get_ts(dct, 'value', str)

sdk/basyx/aas/adapter/xml/xml_deserialization.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -804,7 +804,7 @@ def construct_basic_event_element(cls, element: etree._Element, object_class=mod
804804
def construct_blob(cls, element: etree._Element, object_class=model.Blob, **_kwargs: Any) -> model.Blob:
805805
blob = object_class(
806806
None,
807-
_child_text_mandatory(element, NS_AAS + "contentType")
807+
_get_text_or_none(element.find(NS_AAS + "contentType"))
808808
)
809809
value = _get_text_or_none(element.find(NS_AAS + "value"))
810810
if value is not None:
@@ -851,7 +851,7 @@ def construct_entity(cls, element: etree._Element, object_class=model.Entity, **
851851
def construct_file(cls, element: etree._Element, object_class=model.File, **_kwargs: Any) -> model.File:
852852
file = object_class(
853853
None,
854-
_child_text_mandatory(element, NS_AAS + "contentType")
854+
_get_text_or_none(element.find(NS_AAS + "contentType"))
855855
)
856856
value = _get_text_or_none(element.find(NS_AAS + "value"))
857857
if value is not None:

0 commit comments

Comments
 (0)