From 0b1ca552f8675c5479b792b8c173d0cf3acc4a88 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com>
Date: Wed, 5 Jun 2024 17:41:11 +0200
Subject: [PATCH] MAINT: refactor  parse_value

---
 src/linkahead/common/models.py | 47 +++++++++++++++++-----------------
 1 file changed, 24 insertions(+), 23 deletions(-)

diff --git a/src/linkahead/common/models.py b/src/linkahead/common/models.py
index cf803d84..24332357 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):
-- 
GitLab