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]
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" },

View File

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

View File

@@ -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()