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.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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user