add: 'prelude' function
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
/build
|
||||||
/dist
|
/dist
|
||||||
/venv
|
/venv
|
||||||
*.egg-info
|
*.egg-info
|
||||||
@@ -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.5"
|
version = "0.1.6"
|
||||||
requires-python = ">=3.13"
|
requires-python = ">=3.13"
|
||||||
authors = [
|
authors = [
|
||||||
{ name="BreakerBear", email="breakerbear@autistic.men" },
|
{ name="BreakerBear", email="breakerbear@autistic.men" },
|
||||||
@@ -22,6 +22,5 @@ Issues = "https://git.autistic.men/Utilities/common/issues"
|
|||||||
[tool.setuptools]
|
[tool.setuptools]
|
||||||
include-package-data = true
|
include-package-data = true
|
||||||
|
|
||||||
[tool.setuptools.packages.find]
|
[tools.setuptools.package-data]
|
||||||
namespaces = true
|
"common.jsonrpc2" = ["*.js"]
|
||||||
where = ["src"]
|
|
||||||
|
|||||||
@@ -7,10 +7,13 @@ from common.jsonrpc2.server import (
|
|||||||
ConnectionContext,
|
ConnectionContext,
|
||||||
define,
|
define,
|
||||||
remove,
|
remove,
|
||||||
url,
|
|
||||||
run
|
run
|
||||||
)
|
)
|
||||||
|
|
||||||
def script():
|
def prelude() -> str:
|
||||||
with open(__file__.replace('__init__.py', 'client.js'), 'r') as file:
|
with open(__file__.replace('__init__.py', 'client.js'), 'r') as file:
|
||||||
return file.read()
|
from common.jsonrpc2.server import server
|
||||||
|
assert server is not None
|
||||||
|
endpoint = server.listeners[0]
|
||||||
|
url = f'ws://{endpoint.address}:{endpoint.port}'
|
||||||
|
return file.read() % url
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
const CONNECTION = new WebSocket("%s");
|
||||||
|
const QUEUE = new Array();
|
||||||
|
|
||||||
|
CONNECTION.addEventListener('message', (e) => {
|
||||||
|
let message = JSON.parse(e.data);
|
||||||
|
let index = QUEUE.findIndex(item => item.id === message.id);
|
||||||
|
|
||||||
|
if (index === -1) throw Error('Invalid message ID: ' + message.id);
|
||||||
|
let promise = QUEUE.splice(index, 1)[0];
|
||||||
|
|
||||||
|
if (message.error) promise.reject(message.error);
|
||||||
|
else promise.resolve(message.result);
|
||||||
|
});
|
||||||
|
|
||||||
|
async function notify(method, ...args) {
|
||||||
|
let request = { method };
|
||||||
|
if (args.length > 0) request.params = args;
|
||||||
|
let data = JSON.stringify(request);
|
||||||
|
CONNECTION.send(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function invoke(method, ...args) {
|
||||||
|
let id = Math.floor(Math.random() * 1000000000);
|
||||||
|
let request = { method, id };
|
||||||
|
if (args.length > 0) request.params = args;
|
||||||
|
|
||||||
|
let data = JSON.stringify(request);
|
||||||
|
CONNECTION.send(data);
|
||||||
|
|
||||||
|
let reject = null;
|
||||||
|
let resolve = null;
|
||||||
|
let promise = new Promise((a, b) => { resolve = a; reject = b; });
|
||||||
|
let item = { resolve, reject, id };
|
||||||
|
QUEUE.push(item);
|
||||||
|
|
||||||
|
let result = await promise;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
window.notify = notify;
|
||||||
|
window.invoke = invoke;
|
||||||
|
main(...arguments); // entrypoint to user-defined (async) main stub of the script
|
||||||
@@ -152,11 +152,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 url():
|
|
||||||
if server is None: return None
|
|
||||||
endpoint = server.listeners[0]
|
|
||||||
return f'ws://{endpoint.address}:{endpoint.port}'
|
|
||||||
|
|
||||||
def run(logger: logging.Logger):
|
def run(logger: logging.Logger):
|
||||||
history = History()
|
history = History()
|
||||||
fmt = logger.handlers[0].formatter
|
fmt = logger.handlers[0].formatter
|
||||||
|
|||||||
Reference in New Issue
Block a user