From 64c118ec0fc321b6f69542e5cb7ab133bf742cae Mon Sep 17 00:00:00 2001 From: Olivier Desenfans Date: Tue, 27 Dec 2022 23:24:07 +0100 Subject: [PATCH] Fix: allow user content to contain datetimes Problem: using datetime objects in message contents (ex: in POST messages) fails because the JSON serializer used in aleph-client does not support datetimes by default. Solution: add a JSON serializer function for datetimes. --- src/aleph_client/asynchronous.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/aleph_client/asynchronous.py b/src/aleph_client/asynchronous.py index 6e86147f..caf46035 100644 --- a/src/aleph_client/asynchronous.py +++ b/src/aleph_client/asynchronous.py @@ -45,10 +45,17 @@ import aiohttp from aiohttp import ClientSession - +import datetime as dt from aleph_message.models.program import ProgramContent, Encoding # type: ignore +def json_default_serializer(obj: Any) -> str: + if isinstance(obj, dt.datetime): + return obj.isoformat() + + raise TypeError(f"No serializer defined for type {type(obj)}") + + @lru_cache() def _get_fallback_session(thread_id: Optional[int]) -> ClientSession: if settings.API_UNIX_SOCKET: @@ -439,7 +446,9 @@ async def submit( "time": time.time(), } - item_content: str = json.dumps(content, separators=(",", ":")) + item_content: str = json.dumps( + content, separators=(",", ":"), default=json_default_serializer + ) if inline and (len(item_content) < 50000): message["item_content"] = item_content