diff --git a/src/specklepy/serialization/base_object_serializer.py b/src/specklepy/serialization/base_object_serializer.py index acf11d7..3129ee6 100644 --- a/src/specklepy/serialization/base_object_serializer.py +++ b/src/specklepy/serialization/base_object_serializer.py @@ -72,7 +72,7 @@ class BaseObjectSerializer: return obj_id, ujson.dumps(obj) - def traverse_base(self, base: Base) -> Tuple[str, Dict]: + def traverse_base(self, base: Base) -> Tuple[str, Dict[str, Any]]: """Decomposes the given base object and builds a serializable dictionary Arguments: @@ -213,6 +213,8 @@ class BaseObjectSerializer: Returns: Any -- a serializable version of the given object """ + if obj is None: + return None if isinstance(obj, PRIMITIVES): return obj diff --git a/tests/test_traverse_value.py b/tests/test_traverse_value.py new file mode 100644 index 0000000..0068204 --- /dev/null +++ b/tests/test_traverse_value.py @@ -0,0 +1,25 @@ +from typing import List + +from specklepy.objects.base import Base +from specklepy.serialization.base_object_serializer import BaseObjectSerializer + + +class TestBase(Base): + foo: List[str] + bar: int + + +def test_traverse_value(): + base = TestBase(bar=1) + base.foo = [None] + serializer = BaseObjectSerializer() + object_id, object_dict = serializer.traverse_base(base) + assert object_dict == { + "id": object_id, + "speckle_type": "TestBase", + "applicationId": None, + "foo": [None], + "units": None, + "bar": 1, + "totalChildrenCount": 0, + }