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.on: list[bool] = []
def __iter__(self):
for key in self.indices.keys():
yield (key, self[key])
def __getitem__(self, key):
index = self.indices[key]
state = self.on[index]
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)
return self.on[index]
if state: raise Unavailable(key)
if state is None: raise NotAllowed(key)
return inner
def queue(self, action: type[Action]) -> bool:
try: return self[action.__name__]()
except: return False
def react(self, *stage: type[Action]):
for Props in stage:
self.allow(Props)
+6 -1
View File
@@ -3,6 +3,7 @@ import logging
import dataclasses
from enum import Enum
from http.server import ThreadingHTTPServer, BaseHTTPRequestHandler
from collections.abc import Iterable
from typing import Self, Callable, Any
from threading import Thread
@@ -169,7 +170,7 @@ class ServiceProvider:
logger.addHandler(history)
opts = cls.Options()
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)))
return self
@@ -181,6 +182,10 @@ class ServiceProvider:
encoding : str = 'UTF-8'
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]):
if method in self.server.handlers: raise KeyError(method)
self.server.handlers[method] = handler