diff --git a/src/linkahead/common/models.py b/src/linkahead/common/models.py index cf803d84232c7e85c6b42e88477327ee144fac00..243323572122830c61a789974d79fb176b2d86d9 100644 --- a/src/linkahead/common/models.py +++ b/src/linkahead/common/models.py @@ -1707,37 +1707,38 @@ def _parse_value(datatype, value): ret.append(_parse_value(dt, value)) return ret + else: + raise NotImplementedError("") # This is for a special case, where the xml parser could not differentiate # between single values and lists with one element. As if hasattr(value, "__len__") and len(value) == 1: return _parse_value(datatype, value[0]) - # deal with references - if isinstance(value, Entity): - return value - - if isinstance(value, str) and "@" in value: - # probably this is a versioned reference + if isinstance(value, str): # TODO: this is bad. When no datatype is given and we find a str value, we just assume it is an ID and might convert it to int. This might result in negative ints. + if "@" in value: + # probably this is a versioned reference + return value + else: + # for unversioned references + try: + return int(value) + except ValueError: + # reference via name - return str(value) - else: - # for unversioned references - try: - return int(value) - except ValueError: - # reference via name + return value + except TypeError as te: + # deal with invalid XML: List of values without appropriate datatype + if isinstance(value, list): + raise TypeError( + "Invalid datatype: List valued properties must be announced by " + "the datatype.\n" + f"Datatype: {datatype}\nvalue: {value}") + else: + # Everything else that's not related to wrong list assignments + raise te - return str(value) - except TypeError as te: - # deal with invalid XML: List of values without appropriate datatype - if isinstance(value, list): - raise TypeError( - "Invalid datatype: List valued properties must be announced by " - "the datatype.\n" + f"Datatype: {datatype}\nvalue: {value}") - else: - # Everything else that's not related to wrong list assignments - raise te + # deal with references + return value def _log_request(request, xml_body=None):