update: added 'Options' class

This commit is contained in:
2026-04-16 16:43:10 +08:00
parent f2d056f638
commit 3545355317
3 changed files with 14 additions and 12 deletions

View File

@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "common" name = "common"
description = "Reusable code stubs" description = "Reusable code stubs"
version = "0.1.6" version = "0.1.7"
requires-python = ">=3.13" requires-python = ">=3.13"
authors = [ authors = [
{ name="BreakerBear", email="breakerbear@autistic.men" }, { name="BreakerBear", email="breakerbear@autistic.men" },

View File

@@ -5,6 +5,7 @@ from common.jsonrpc2.server import (
Error, Error,
History, History,
ConnectionContext, ConnectionContext,
Options,
define, define,
remove, remove,
run run

View File

@@ -80,7 +80,7 @@ class History(logging.Handler):
self.records = [] self.records = []
def emit(self, record): def emit(self, record):
self.records.append(record) self.records.append(vars(record))
def truncate(self) -> list: def truncate(self) -> list:
copy = self.records.copy() copy = self.records.copy()
@@ -105,6 +105,12 @@ class ConnectionContext:
if connection.closed is not None: if connection.closed is not None:
raise cls.Error() 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): async def handler(request: ws.WebSocketRequest):
global connection global connection
logger = logging.getLogger('jsonrpc2') 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 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))) 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 import _thread as t
global server global server
listeners = await trio.open_tcp_listeners(port, host=listen) listeners = await trio.open_tcp_listeners(port=options.port, host=options.listen)
server = ws.WebSocketServer(handler, listeners, max_message_size=125_000_000) server = ws.WebSocketServer(handler, listeners, max_message_size=options.max_message_size)
await server.run() await server.run()
t.interrupt_main() t.interrupt_main()
@@ -152,11 +158,6 @@ def define(method: str, handler: Callable[..., Any]):
def remove(method: str) -> Callable[..., Any]: def remove(method: str) -> Callable[..., Any]:
return handlers.pop(method) return handlers.pop(method)
def run(logger: logging.Logger): def run(options: Options):
history = History() thread = Thread(target=lambda: trio.run(backend), daemon=True, args=(options,))
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)
thread.start() thread.start()