update: added 'Options' class
This commit is contained in:
@@ -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" },
|
||||
|
||||
@@ -5,6 +5,7 @@ from common.jsonrpc2.server import (
|
||||
Error,
|
||||
History,
|
||||
ConnectionContext,
|
||||
Options,
|
||||
define,
|
||||
remove,
|
||||
run
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user