From 3545355317a3d9cf1c37dd1c94a9bfd80af6a39d Mon Sep 17 00:00:00 2001 From: break27 Date: Thu, 16 Apr 2026 16:43:10 +0800 Subject: [PATCH] update: added 'Options' class --- pyproject.toml | 2 +- src/common/jsonrpc2/__init__.py | 1 + src/common/jsonrpc2/server.py | 23 ++++++++++++----------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c332a1b..9f37ff2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta" [project] name = "common" description = "Reusable code stubs" -version = "0.1.6" +version = "0.1.7" requires-python = ">=3.13" authors = [ { name="BreakerBear", email="breakerbear@autistic.men" }, diff --git a/src/common/jsonrpc2/__init__.py b/src/common/jsonrpc2/__init__.py index 8631116..29b3293 100644 --- a/src/common/jsonrpc2/__init__.py +++ b/src/common/jsonrpc2/__init__.py @@ -5,6 +5,7 @@ from common.jsonrpc2.server import ( Error, History, ConnectionContext, + Options, define, remove, run diff --git a/src/common/jsonrpc2/server.py b/src/common/jsonrpc2/server.py index 8d48580..58943ca 100644 --- a/src/common/jsonrpc2/server.py +++ b/src/common/jsonrpc2/server.py @@ -80,7 +80,7 @@ class History(logging.Handler): self.records = [] def emit(self, record): - self.records.append(record) + self.records.append(vars(record)) def truncate(self) -> list: copy = self.records.copy() @@ -105,6 +105,12 @@ class ConnectionContext: if connection.closed is not None: raise cls.Error() +class Options: + def __init__(self): + self.listen = '127.0.0.1' + self.port = 0 + self.max_message_size = 125_000_000 + async def handler(request: ws.WebSocketRequest): global connection logger = logging.getLogger('jsonrpc2') @@ -136,12 +142,12 @@ async def handler(request: ws.WebSocketRequest): if err is not None: logger.error(err.message(), exc_info=exc) if mid is not None: await connection.send_message(str(Response(mid, err or res))) -async def backend(listen='127.0.0.1', port=0): +async def backend(options: Options): import _thread as t global server - listeners = await trio.open_tcp_listeners(port, host=listen) - server = ws.WebSocketServer(handler, listeners, max_message_size=125_000_000) + listeners = await trio.open_tcp_listeners(port=options.port, host=options.listen) + server = ws.WebSocketServer(handler, listeners, max_message_size=options.max_message_size) await server.run() t.interrupt_main() @@ -152,11 +158,6 @@ def define(method: str, handler: Callable[..., Any]): def remove(method: str) -> Callable[..., Any]: return handlers.pop(method) -def run(logger: logging.Logger): - history = History() - fmt = logger.handlers[0].formatter - logger.addHandler(history) - define('sync', lambda: list(map(lambda x: fmt.format(x), history.truncate()))) - - thread = Thread(target=lambda: trio.run(backend), daemon=True) +def run(options: Options): + thread = Thread(target=lambda: trio.run(backend), daemon=True, args=(options,)) thread.start()