fix: added 'add' function in jsonrpc2 service provider
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user