diff --git a/specklepy/api/operations.py b/specklepy/api/operations.py index 8851d8a..c00bdf7 100644 --- a/specklepy/api/operations.py +++ b/specklepy/api/operations.py @@ -40,13 +40,8 @@ def send( serializer = BaseObjectSerializer(write_transports=transports) - for t in transports: - t.begin_write() obj_hash, _ = serializer.write_json(base=base) - for t in transports: - t.end_write() - return obj_hash diff --git a/specklepy/serialization/base_object_serializer.py b/specklepy/serialization/base_object_serializer.py index 5dc6194..650d8fa 100644 --- a/specklepy/serialization/base_object_serializer.py +++ b/specklepy/serialization/base_object_serializer.py @@ -11,6 +11,9 @@ from specklepy.logging.exceptions import ( SpeckleWarning, ) from specklepy.transports.abstract_transport import AbstractTransport + +# import for serialization +import specklepy.objects.geometry import specklepy.objects.other PRIMITIVES = (int, float, str, bool) @@ -50,7 +53,17 @@ class BaseObjectSerializer: def write_json(self, base: Base): self.__reset_writer() self.detach_lineage = [True] + + if self.write_transports: + for wt in self.write_transports: + wt.begin_write() + hash, obj = self.traverse_base(base) + + if self.write_transports: + print(">>> END WRITE") + for wt in self.write_transports: + wt.end_write() return hash, ujson.dumps(obj) def traverse_base(self, base: Base) -> Tuple[str, Dict]: @@ -70,10 +83,6 @@ class BaseObjectSerializer: object_builder.update(speckle_type=base.speckle_type) obj, props = base, base.get_serializable_attributes() - if self.write_transports: - for wt in self.write_transports: - wt.begin_write() - while props: prop = props.pop(0) value = getattr(obj, prop, None) @@ -176,11 +185,6 @@ class BaseObjectSerializer: del self.lineage[-1] - - if self.write_transports: - for wt in self.write_transports: - wt.end_write() - return hash, object_builder def traverse_value(self, obj: Any, detach: bool = False) -> Any: