fix: added 'add' function in jsonrpc2 service provider

This commit is contained in:
2026-07-10 17:22:36 +08:00
parent a48a850db0
commit 59c770ba3e
2 changed files with 16 additions and 5 deletions
+10 -4
View File
@@ -21,18 +21,24 @@ class ActionFlow:
self.actions: list[type[Action]] = [] self.actions: list[type[Action]] = []
self.on: list[bool] = [] self.on: list[bool] = []
def __iter__(self):
for key in self.indices.keys():
yield (key, self[key])
def __getitem__(self, key): def __getitem__(self, key):
index = self.indices[key] index = self.indices[key]
state = self.on[index]
def inner(*args, **kwargs): def inner(*args, **kwargs):
if self.on[index]: raise Unavailable(key)
if self.on[index] is None: raise NotAllowed(key)
self.on[index] = self.actions[index].prepare(*args, **kwargs) self.on[index] = self.actions[index].prepare(*args, **kwargs)
return self.on[index] return self.on[index]
if state: raise Unavailable(key)
if state is None: raise NotAllowed(key)
return inner return inner
def queue(self, action: type[Action]) -> bool:
try: return self[action.__name__]()
except: return False
def react(self, *stage: type[Action]): def react(self, *stage: type[Action]):
for Props in stage: for Props in stage:
self.allow(Props) self.allow(Props)
+6 -1
View File
@@ -3,6 +3,7 @@ import logging
import dataclasses import dataclasses
from enum import Enum from enum import Enum
from http.server import ThreadingHTTPServer, BaseHTTPRequestHandler from http.server import ThreadingHTTPServer, BaseHTTPRequestHandler
from collections.abc import Iterable
from typing import Self, Callable, Any from typing import Self, Callable, Any
from threading import Thread from threading import Thread
@@ -169,7 +170,7 @@ class ServiceProvider:
logger.addHandler(history) logger.addHandler(history)
opts = cls.Options() opts = cls.Options()
self = cls(opts) self = cls(opts)
self.set('history', lambda: history.truncate()) self.set('logs', lambda: history.truncate())
self.set('exit', lambda: (t.interrupt_main(), sys.exit(0))) self.set('exit', lambda: (t.interrupt_main(), sys.exit(0)))
return self return self
@@ -181,6 +182,10 @@ class ServiceProvider:
encoding : str = 'UTF-8' encoding : str = 'UTF-8'
interval : float = 0.2 interval : float = 0.2
def add(self, *handlers: Callable[..., Any], pairs: Iterable[tuple[str, Callable[..., Any]]] = None):
for handler in handlers: self.set(handler.__name__, handler)
for k, v in pairs or tuple(): self.set(k, v)
def set(self, method: str, handler: Callable[..., Any]): def set(self, method: str, handler: Callable[..., Any]):
if method in self.server.handlers: raise KeyError(method) if method in self.server.handlers: raise KeyError(method)
self.server.handlers[method] = handler self.server.handlers[method] = handler