diff --git a/src/electrum_aionostr/event.py b/src/electrum_aionostr/event.py index 099e42c..aad8f8e 100644 --- a/src/electrum_aionostr/event.py +++ b/src/electrum_aionostr/event.py @@ -9,15 +9,14 @@ from hashlib import sha256 from typing import Optional -import electrum_ecc as ecc from electrum_ecc import ECPrivkey, ECPubkey try: - import rapidjson + import orjson - loads = rapidjson.loads - dumps = functools.partial(rapidjson.dumps, ensure_ascii=False) + loads = orjson.loads + dumps = lambda obj: orjson.dumps(obj).decode() # orjson.dumps returns bytes except ImportError: import json diff --git a/src/electrum_aionostr/relay.py b/src/electrum_aionostr/relay.py index 9bff0fa..135065a 100644 --- a/src/electrum_aionostr/relay.py +++ b/src/electrum_aionostr/relay.py @@ -1,8 +1,7 @@ import asyncio import secrets import logging -import json -from collections import defaultdict, namedtuple +from collections import namedtuple from typing import Optional, Iterable, Dict, List, Set, Any, TYPE_CHECKING, AsyncGenerator from dataclasses import dataclass import time @@ -13,6 +12,15 @@ from .event import Event from .util import normalize_url +try: + import orjson + loads = orjson.loads + dumps = lambda obj: orjson.dumps(obj).decode() # orjson.dumps returns bytes +except ImportError: + import json + loads = json.loads + dumps = json.dumps + if TYPE_CHECKING: from logging import Logger from ssl import SSLContext @@ -126,7 +134,7 @@ async def _receive_messages(self): if len(message) > 64000: self.log.debug(f"got too long message from {self.url=}: {len(message)=}") continue # not storing or handling msg > this limit - message = json.loads(message) + message = loads(message) self.log.debug(message) # FIXME spammy (or at least log which relay it's coming from) if message[0] == 'EVENT': @@ -167,10 +175,10 @@ async def _receive_messages(self): async def send(self, message): try: - await self.ws.send_str(json.dumps(message)) + await self.ws.send_str(dumps(message)) except client_exceptions.ClientConnectionError: await self.reconnect() - await self.ws.send_str(json.dumps(message)) + await self.ws.send_str(dumps(message)) async def add_event(self, event, check_response=False): if isinstance(event, Event):