From 71e3d7dbf16a5d47abcc306007539f81ab6ae202 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Zar=C4=99bski?= Date: Mon, 3 Jun 2024 15:11:28 +0100 Subject: [PATCH 1/2] Use BytesIO for all serializations --- simvue/serialization.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/simvue/serialization.py b/simvue/serialization.py index c51847e6..2bb6852b 100644 --- a/simvue/serialization.py +++ b/simvue/serialization.py @@ -110,6 +110,10 @@ def _serialize_matplotlib(data: typing.Any) -> typing.Optional[tuple[str, str]]: return None mimetype = "application/vnd.plotly.v1+json" data = plotly.io.to_json(plotly.tools.mpl_to_plotly(data.gcf()), engine="json") + mfile = BytesIO() + mfile.write(data) + mfile.seek(0) + data = mfile.read() return data, mimetype @@ -121,6 +125,10 @@ def _serialize_matplotlib_figure(data: typing.Any) -> typing.Optional[tuple[str, return None mimetype = "application/vnd.plotly.v1+json" data = plotly.io.to_json(plotly.tools.mpl_to_plotly(data), engine="json") + mfile = BytesIO() + mfile.write(data) + mfile.seek(0) + data = mfile.read() return data, mimetype @@ -161,8 +169,11 @@ def _serialize_torch_tensor(data: typing.Any) -> typing.Optional[tuple[str, str] def _serialize_json(data: typing.Any) -> typing.Optional[tuple[str, str]]: mimetype = "application/json" try: - data = json.dumps(data) - except TypeError: + mfile = BytesIO() + mfile.write(json.dumps(data).encode()) + mfile.seek(0) + data = mfile.read() + except (TypeError, json.JSONDecodeError): return None return data, mimetype From 66478b761723f583c529455d269511769d2b2043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Zar=C4=99bski?= Date: Mon, 3 Jun 2024 15:17:49 +0100 Subject: [PATCH 2/2] Add missing encode for plotly serializer --- simvue/serialization.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/simvue/serialization.py b/simvue/serialization.py index 2bb6852b..d8252713 100644 --- a/simvue/serialization.py +++ b/simvue/serialization.py @@ -99,6 +99,10 @@ def _serialize_plotly_figure(data: typing.Any) -> typing.Optional[tuple[str, str return None mimetype = "application/vnd.plotly.v1+json" data = plotly.io.to_json(data, engine="json") + mfile = BytesIO() + mfile.write(data.encode()) + mfile.seek(0) + data = mfile.read() return data, mimetype @@ -111,7 +115,7 @@ def _serialize_matplotlib(data: typing.Any) -> typing.Optional[tuple[str, str]]: mimetype = "application/vnd.plotly.v1+json" data = plotly.io.to_json(plotly.tools.mpl_to_plotly(data.gcf()), engine="json") mfile = BytesIO() - mfile.write(data) + mfile.write(data.encode()) mfile.seek(0) data = mfile.read() return data, mimetype @@ -126,7 +130,7 @@ def _serialize_matplotlib_figure(data: typing.Any) -> typing.Optional[tuple[str, mimetype = "application/vnd.plotly.v1+json" data = plotly.io.to_json(plotly.tools.mpl_to_plotly(data), engine="json") mfile = BytesIO() - mfile.write(data) + mfile.write(data.encode()) mfile.seek(0) data = mfile.read() return data, mimetype