From 5b0b802f311f0999412482a1722e87afe306892d Mon Sep 17 00:00:00 2001 From: Timothy Pogue Date: Fri, 2 Sep 2022 00:05:36 -0600 Subject: [PATCH] hybrid json ws serializer --- freqtrade/rpc/api_server/ws/channel.py | 5 +++-- freqtrade/rpc/api_server/ws/serializer.py | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/freqtrade/rpc/api_server/ws/channel.py b/freqtrade/rpc/api_server/ws/channel.py index b47fe7550..8891d3296 100644 --- a/freqtrade/rpc/api_server/ws/channel.py +++ b/freqtrade/rpc/api_server/ws/channel.py @@ -3,7 +3,8 @@ from threading import RLock from typing import List, Type from freqtrade.rpc.api_server.ws.proxy import WebSocketProxy -from freqtrade.rpc.api_server.ws.serializer import RapidJSONWebSocketSerializer, WebSocketSerializer +from freqtrade.rpc.api_server.ws.serializer import (HybridJSONWebSocketSerializer, + WebSocketSerializer) from freqtrade.rpc.api_server.ws.types import WebSocketType @@ -18,7 +19,7 @@ class WebSocketChannel: def __init__( self, websocket: WebSocketType, - serializer_cls: Type[WebSocketSerializer] = RapidJSONWebSocketSerializer + serializer_cls: Type[WebSocketSerializer] = HybridJSONWebSocketSerializer ): # The WebSocket object self._websocket = WebSocketProxy(websocket) diff --git a/freqtrade/rpc/api_server/ws/serializer.py b/freqtrade/rpc/api_server/ws/serializer.py index c11ca9a99..109708cc9 100644 --- a/freqtrade/rpc/api_server/ws/serializer.py +++ b/freqtrade/rpc/api_server/ws/serializer.py @@ -3,6 +3,7 @@ import logging from abc import ABC, abstractmethod import msgpack +import orjson import rapidjson from pandas import DataFrame @@ -55,6 +56,14 @@ class RapidJSONWebSocketSerializer(WebSocketSerializer): return rapidjson.loads(data, object_hook=_json_object_hook) +class HybridJSONWebSocketSerializer(WebSocketSerializer): + def _serialize(self, data): + return orjson.dumps(data, default=_json_default) + + def _deserialize(self, data): + return rapidjson.loads(data, object_hook=_json_object_hook) + + class MsgPackWebSocketSerializer(WebSocketSerializer): def _serialize(self, data): return msgpack.packb(data, use_bin_type=True)