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