diff options
| -rw-r--r-- | pyproject.toml | 2 | ||||
| -rw-r--r-- | src/infini/doc.py | 7 | ||||
| -rw-r--r-- | src/infini/loader.py | 15 | ||||
| -rw-r--r-- | src/infini/register.py | 4 |
4 files changed, 18 insertions, 10 deletions
diff --git a/pyproject.toml b/pyproject.toml index 1e0bf2cd..61e43381 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "infini" -version = "2.1.6" +version = "2.1.7" description = "Infini 内容输入输出流框架" authors = [ { name = "苏向夜", email = "fu050409@163.com" }, diff --git a/src/infini/doc.py b/src/infini/doc.py index 9913309b..0b67e54c 100644 --- a/src/infini/doc.py +++ b/src/infini/doc.py @@ -25,6 +25,13 @@ class Doc: self.global_variables = {} self.interceptors = {} + def update(self, __object: "Doc") -> None: + self.pre_interceptors.update(__object.pre_interceptors) + self.handlers.update(__object.handlers) + self.events.update(__object.events) + self.global_variables.update(__object.global_variables) + self.interceptors.update(__object.interceptors) + def dumps(self) -> str: return json.dumps( { diff --git a/src/infini/loader.py b/src/infini/loader.py index 4c1d38fe..20d392c9 100644 --- a/src/infini/loader.py +++ b/src/infini/loader.py @@ -1,5 +1,6 @@ from importlib.util import spec_from_file_location from infini.core import Core +from infini.doc import Doc from infini.generator import BaseGenerator, Generator, TextGenerator from infini.handler import Handler from infini.injector import Injector @@ -98,6 +99,7 @@ class Loader: global_variables: Dict[str, Union[str, Callable]] interceptors: List[RouterType] generators: Dict[str, BaseGenerator] + doc: Doc _core: Core @@ -108,6 +110,7 @@ class Loader: self.global_variables = {} self.interceptors = [] self.generators = {} + self.doc = Doc() self.prepare() def __enter__(self) -> "Loader": @@ -119,7 +122,7 @@ class Loader: if exc_type is not None: raise exc_type(exc_value) - def _find_register_variables(self, module: ModuleType) -> List[Register]: + def find_register_variables(self, module: ModuleType) -> List[Register]: module_variables = inspect.getmembers(module) register_variables = [ var for _, var in module_variables if isinstance(var, Register) @@ -134,17 +137,18 @@ class Loader: self.prepare() module = importlib.import_module(name) - vars(module)["__infini__"] = {"core": self._core, "loader": self} + self.load_from_module(module) + return module - registers = self._find_register_variables(module) + def load_from_module(self, module: ModuleType) -> None: + vars(module)["__infini__"] = {"core": self._core, "loader": self} + registers = self.find_register_variables(module) self.load_from_registers(registers) if not registers: logger.warning( f"Infini 装载器未能在规则包 [bold green]{module.__name__}[/bold green] 中找到注册器." ) - return module - def load_from_registers(self, registers: Sequence[Register]): for register in registers: self.load_from_register(register) @@ -157,6 +161,7 @@ class Loader: self.events.update(register.events) self.global_variables.update(register.global_variables) self.interceptors = self._update_list(self.interceptors, register.interceptors) + self.doc.update(register.doc) def _update_list(self, old_list: List[RouterType], new_list: List[RouterType]): list = old_list.copy() diff --git a/src/infini/register.py b/src/infini/register.py index f2e2e6a2..9134983c 100644 --- a/src/infini/register.py +++ b/src/infini/register.py @@ -109,9 +109,7 @@ class Register: """注册一个文本事件""" self.events[name] = text self.doc.events[name] = { - "usage": None, "description": description, - "epilog": None, "var_doc": var_doc or {}, } @@ -128,7 +126,6 @@ class Register: self.doc.global_variables[name] = { "usage": usage, "description": description, - "epilog": None, } def dynamic_variable( @@ -149,7 +146,6 @@ class Register: self.doc.global_variables[name or func.__name__] = { "usage": usage, "description": description, - "epilog": None, } return wrapper |
