ErisPulse 2.2.1.dev0__py3-none-any.whl → 2.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. ErisPulse/Core/Bases/__init__.py +14 -0
  2. ErisPulse/Core/Bases/adapter.py +196 -0
  3. ErisPulse/Core/Bases/module.py +54 -0
  4. ErisPulse/Core/Event/__init__.py +14 -0
  5. ErisPulse/Core/Event/base.py +15 -2
  6. ErisPulse/Core/Event/command.py +21 -2
  7. ErisPulse/Core/Event/message.py +15 -0
  8. ErisPulse/Core/Event/meta.py +15 -0
  9. ErisPulse/Core/Event/notice.py +15 -0
  10. ErisPulse/Core/Event/request.py +16 -1
  11. ErisPulse/Core/__init__.py +38 -19
  12. ErisPulse/Core/{erispulse_config.py → _self_config.py} +27 -2
  13. ErisPulse/Core/adapter.py +374 -377
  14. ErisPulse/Core/config.py +137 -38
  15. ErisPulse/Core/exceptions.py +6 -1
  16. ErisPulse/Core/lifecycle.py +167 -0
  17. ErisPulse/Core/logger.py +97 -49
  18. ErisPulse/Core/module.py +279 -56
  19. ErisPulse/Core/router.py +112 -23
  20. ErisPulse/Core/storage.py +258 -77
  21. ErisPulse/Core/ux.py +635 -0
  22. ErisPulse/__init__.py +722 -244
  23. ErisPulse/__main__.py +1 -1999
  24. ErisPulse/utils/__init__.py +17 -0
  25. ErisPulse/utils/cli.py +1092 -0
  26. ErisPulse/utils/console.py +53 -0
  27. ErisPulse/utils/package_manager.py +845 -0
  28. ErisPulse/utils/reload_handler.py +111 -0
  29. {erispulse-2.2.1.dev0.dist-info → erispulse-2.3.0.dist-info}/METADATA +24 -6
  30. erispulse-2.3.0.dist-info/RECORD +34 -0
  31. {erispulse-2.2.1.dev0.dist-info → erispulse-2.3.0.dist-info}/WHEEL +1 -1
  32. {erispulse-2.2.1.dev0.dist-info → erispulse-2.3.0.dist-info}/licenses/LICENSE +1 -1
  33. ErisPulse/Core/env.py +0 -15
  34. ErisPulse/Core/module_registry.py +0 -227
  35. erispulse-2.2.1.dev0.dist-info/RECORD +0 -26
  36. {erispulse-2.2.1.dev0.dist-info → erispulse-2.3.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,111 @@
1
+ """
2
+ ErisPulse SDK 热重载处理器
3
+
4
+ 实现热重载功能,监控文件变化并重启进程
5
+ """
6
+
7
+ import os
8
+ import subprocess
9
+ import sys
10
+ import time
11
+ from watchdog.events import FileSystemEventHandler
12
+
13
+ from .console import console
14
+
15
+
16
+ class ReloadHandler(FileSystemEventHandler):
17
+ """
18
+ 文件系统事件处理器
19
+
20
+ 实现热重载功能,监控文件变化并重启进程
21
+
22
+ {!--< tips >!--}
23
+ 1. 支持.py文件修改重载
24
+ 2. 支持配置文件修改重载
25
+ {!--< /tips >!--}
26
+ """
27
+
28
+ def __init__(self, script_path: str, reload_mode: bool = False):
29
+ """
30
+ 初始化处理器
31
+
32
+ :param script_path: 要监控的脚本路径
33
+ :param reload_mode: 是否启用重载模式
34
+ """
35
+ super().__init__()
36
+ self.script_path = os.path.abspath(script_path)
37
+ self.process = None
38
+ self.last_reload = time.time()
39
+ self.reload_mode = reload_mode
40
+ self.start_process()
41
+ self.watched_files = set()
42
+
43
+ def start_process(self):
44
+ """启动监控进程"""
45
+ if self.process:
46
+ self._terminate_process()
47
+
48
+ console.print(f"[bold]启动进程: [path]{self.script_path}[/][/]")
49
+ try:
50
+ self.process = subprocess.Popen(
51
+ [sys.executable, self.script_path],
52
+ stdin=sys.stdin,
53
+ stdout=sys.stdout,
54
+ stderr=sys.stderr
55
+ )
56
+ self.last_reload = time.time()
57
+ except Exception as e:
58
+ console.print(f"[error]启动进程失败: {e}[/]")
59
+ raise
60
+
61
+ def _terminate_process(self):
62
+ """
63
+ 终止当前进程
64
+
65
+ :raises subprocess.TimeoutExpired: 进程终止超时时抛出
66
+ """
67
+ try:
68
+ self.process.terminate()
69
+ # 等待最多2秒让进程正常退出
70
+ self.process.wait(timeout=2)
71
+ except subprocess.TimeoutExpired:
72
+ console.print("[warning]进程未正常退出,强制终止...[/]")
73
+ self.process.kill()
74
+ self.process.wait()
75
+ except Exception as e:
76
+ console.print(f"[error]终止进程时出错: {e}[/]")
77
+
78
+ def on_modified(self, event):
79
+ """
80
+ 文件修改事件处理
81
+
82
+ :param event: 文件系统事件
83
+ """
84
+ now = time.time()
85
+ if now - self.last_reload < 1.0: # 防抖
86
+ return
87
+
88
+ if event.src_path.endswith(".py") and self.reload_mode:
89
+ self._handle_reload(event, "文件变动")
90
+ # elif event.src_path.endswith(("config.toml", ".env")):
91
+ # self._handle_reload(event, "配置变动")
92
+
93
+ def _handle_reload(self, event, reason: str):
94
+ """
95
+ 处理热重载逻辑
96
+ :param event: 文件系统事件
97
+ :param reason: 重载原因
98
+ """
99
+ from ErisPulse.Core import logger
100
+
101
+ try:
102
+ from .cli import _cleanup_adapters, _cleanup_modules
103
+ logger.info(f"检测到文件变更 ({reason}),正在关闭适配器和模块...")
104
+ _cleanup_adapters()
105
+ _cleanup_modules()
106
+ except Exception as e:
107
+ logger.warning(f"关闭适配器和模块时出错: {e}")
108
+
109
+ logger.info("正在重启...")
110
+ self._terminate_process()
111
+ self.start_process()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ErisPulse
3
- Version: 2.2.1.dev0
3
+ Version: 2.3.0
4
4
  Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
5
5
  Author-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
6
6
  License: MIT License
@@ -37,7 +37,7 @@ License: MIT License
37
37
 
38
38
  感谢所有为开源社区做出贡献的开发者和作者
39
39
 
40
- 请尊重每一位开源作者的劳动成果,承诺在使用、修改和分发本软件时,将严格遵守相关许可证条款,并保留所有原始版权声明
40
+ 请尊重每一位开源作者的劳动成果,您需要承诺在使用、修改和分发本软件时,严格遵守相关许可证条款,并保留所有原始版权声明
41
41
 
42
42
  开源精神的核心在于分享、协作与尊重。我们希望通过本项目,能够传承这一精神,为开源社区的发展贡献一份力量
43
43
  License-File: LICENSE
@@ -73,6 +73,7 @@ Description-Content-Type: text/markdown
73
73
 
74
74
  [![PyPI](https://img.shields.io/pypi/v/ErisPulse?style=flat-square)](https://pypi.org/project/ErisPulse/)
75
75
  [![Python Versions](https://img.shields.io/pypi/pyversions/ErisPulse?style=flat-square)](https://pypi.org/project/ErisPulse/)
76
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
76
77
  [![Socket Badge](https://socket.dev/api/badge/pypi/package/ErisPulse/latest)](https://socket.dev/pypi/package/ErisPulse)
77
78
 
78
79
  ## 文档资源
@@ -149,7 +150,7 @@ python -c "from ErisPulse import sdk; sdk.init()"
149
150
 
150
151
  ### 5. 运行测试
151
152
 
152
- 我们提供了一个交互式测试脚本,可以帮助您快速验证SDK功能(于开发中):
153
+ 我们提供了一个交互式测试脚本,可以帮助您快速验证SDK功能:
153
154
 
154
155
  ```bash
155
156
  uv run devs/test.py
@@ -162,6 +163,25 @@ uv run devs/test.py
162
163
  - 工具函数测试
163
164
  - 适配器功能测试
164
165
 
166
+ ## 项目结构
167
+
168
+ ```
169
+ ErisPulse/
170
+ ├── src/
171
+ │ └── ErisPulse/ # 核心源代码
172
+ │ ├── Core/ # 核心模块
173
+ │ │ ├── Bases/ # 基础类定义
174
+ │ │ ├── Event/ # 事件系统
175
+ │ │ └── ... # 其他核心组件
176
+ │ └── __init__.py # SDK入口点
177
+ ├── examples/ # 示例代码
178
+ ├── devs/ # 开发工具
179
+ ├── docs/ # 文档
180
+ ├── tests/ # 测试代码
181
+ ├── scripts/ # 脚本文件
182
+ └── config.toml # 默认配置文件
183
+ ```
184
+
165
185
  ## 贡献指南
166
186
 
167
187
  我们欢迎各种形式的贡献,包括但不限于:
@@ -182,6 +202,4 @@ uv run devs/test.py
182
202
 
183
203
  ---
184
204
 
185
- [![](https://starchart.cc/ErisPulse/ErisPulse.svg?variant=adaptive)](https://starchart.cc/ErisPulse/ErisPulse)
186
-
187
-
205
+ [![](https://starchart.cc/ErisPulse/ErisPulse.svg?variant=adaptive)](https://starchart.cc/ErisPulse/ErisPulse)
@@ -0,0 +1,34 @@
1
+ ErisPulse/__init__.py,sha256=JsE60M6bhb5UdME4_XT3RpQp-WPCkyHAudeyWQ9QSVk,50091
2
+ ErisPulse/__main__.py,sha256=x1VV2mbn1B9RVRhG5uumTCrvZCLzJjGWN0wFll-G0H4,471
3
+ ErisPulse/Core/__init__.py,sha256=9RNwUq9Hbe3r6nA8QBvq2pvMJN4QiBfo71N0u_ywiwI,1398
4
+ ErisPulse/Core/_self_config.py,sha256=ReoVy2hYZxG7hPRHXUWRjLClC4nWZ2RG8VWdD-PAM7g,3549
5
+ ErisPulse/Core/adapter.py,sha256=9wpaE9B6LixlGTJ0p341wYe4AE3SVuczToMOWd7UkL4,19707
6
+ ErisPulse/Core/config.py,sha256=cV0R2eUWNECIogYLFbhNu1pYl8HStPG-DNbCe3lkY4E,5873
7
+ ErisPulse/Core/exceptions.py,sha256=tTOOs57SD8aSp4HXomuXtVYgHJCJtfP3AS4JIIq1LPk,3920
8
+ ErisPulse/Core/lifecycle.py,sha256=oPKxg0hBadSgAn9X_weGo6KeCZ9SUV5A_Se-18qWglM,5547
9
+ ErisPulse/Core/logger.py,sha256=nktXT-6cxF50NYsUErMsf8J79brzXg2faaJ4Agt2Gro,12599
10
+ ErisPulse/Core/module.py,sha256=13rI03GwEzVd66hIhZnZNybiA9wj7ITzQILi1-nCjhQ,12944
11
+ ErisPulse/Core/router.py,sha256=rtvUjbRHVeTTgWBBG-yxK91oEjs5Tw3ReryqCI-rMYc,12411
12
+ ErisPulse/Core/storage.py,sha256=WbREN-GTpzPls8Vx3t8F2U_lzmCKEsI4OcecWWmvaSk,25238
13
+ ErisPulse/Core/ux.py,sha256=jWC_v8e0Khe1LAg5ksKCVyEgmO2MJGIfmtOAPTorD90,29589
14
+ ErisPulse/Core/Bases/__init__.py,sha256=hHKsI2zQfBdahnEuHlMgzOX2_ygRDOVN8-VqTIrcxP4,230
15
+ ErisPulse/Core/Bases/adapter.py,sha256=aCupQdc8M5Ds7m5dZMCmtoyC-0Zqh5K_6F3uKle8WXE,6490
16
+ ErisPulse/Core/Bases/module.py,sha256=TtzZQ4x4u09S6yDibsIHa9srlGLFPXCHdn2WxZ3nmdo,1154
17
+ ErisPulse/Core/Event/__init__.py,sha256=pZ3ASQop7qbQd3OybyCp5I2Zln3l-DEoiGKH8Zxmp38,1487
18
+ ErisPulse/Core/Event/base.py,sha256=ygF5aPjQ76VTVei1XrCDFj4QobiGoQqjIAAl5HrJC_Y,4019
19
+ ErisPulse/Core/Event/command.py,sha256=d9lopDO4B0qCxTQmnUJhte7pZ6IImVfKpiovA6pI7yg,17889
20
+ ErisPulse/Core/Event/exceptions.py,sha256=iGcuPaC7F4cZeujcvBdZb9bzQGnHBdb9CcPKoB760Bo,711
21
+ ErisPulse/Core/Event/message.py,sha256=wxg_GJsI1ZvPrV9611xELLxnlk2bcxMJH7EBEkoWwgE,4024
22
+ ErisPulse/Core/Event/meta.py,sha256=0cs0Cg5r58kll3P4lNtnVWAKLQiL6MoXPkbkk6_IEko,3660
23
+ ErisPulse/Core/Event/notice.py,sha256=tU28tc3Ig-FMB2EJUDO2Z9ewfJjzEPh2O2J4lU7GYDk,4557
24
+ ErisPulse/Core/Event/request.py,sha256=rYjFjRJccNRZ6bkY89ig8Q2YntnoytUfg-_PGntJxXg,2956
25
+ ErisPulse/utils/__init__.py,sha256=_4cDUbJyNebH-VXDUTnfdZKv8Y1MPYgsl-fOM0ZFNuw,299
26
+ ErisPulse/utils/cli.py,sha256=-K24UOi3EO65R2tCnVjikVFETzxUtuSApmPZH7iH5gs,40894
27
+ ErisPulse/utils/console.py,sha256=IIo8kVTy0ikEp1H4V6BsokaQp_ISfBFuxlhQcRnk2vs,1145
28
+ ErisPulse/utils/package_manager.py,sha256=uv9Q24Qxa2bbotxLrSvhF-lX6vEmK-4KPCIwPe6ZyGc,32698
29
+ ErisPulse/utils/reload_handler.py,sha256=ToBE9EiXY8ZNNL8jntdsc2Dpy-Wgh73Jd3aBpedKAtg,3369
30
+ erispulse-2.3.0.dist-info/METADATA,sha256=put7b4De03uXV9IT2GjUCG4QsXicFmP6gmiG1ztNsBI,7473
31
+ erispulse-2.3.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
32
+ erispulse-2.3.0.dist-info/entry_points.txt,sha256=Jss71M6nEha0TA-DyVZugPYdcL14s9QpiOeIlgWxzOc,182
33
+ erispulse-2.3.0.dist-info/licenses/LICENSE,sha256=tJjKWuY4OPWNgriiixWLvmFb8Pf8p_-4NMq_zZN3gWg,1858
34
+ erispulse-2.3.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -32,6 +32,6 @@ This ensures consistent behavior and interoperability across all adapter impleme
32
32
 
33
33
  感谢所有为开源社区做出贡献的开发者和作者
34
34
 
35
- 请尊重每一位开源作者的劳动成果,承诺在使用、修改和分发本软件时,将严格遵守相关许可证条款,并保留所有原始版权声明
35
+ 请尊重每一位开源作者的劳动成果,您需要承诺在使用、修改和分发本软件时,严格遵守相关许可证条款,并保留所有原始版权声明
36
36
 
37
37
  开源精神的核心在于分享、协作与尊重。我们希望通过本项目,能够传承这一精神,为开源社区的发展贡献一份力量
ErisPulse/Core/env.py DELETED
@@ -1,15 +0,0 @@
1
- """
2
- ErisPulse 环境模块 (已弃用)
3
-
4
- 此模块已重命名为 storage,为保持向后兼容性而保留。
5
- 建议使用 from ErisPulse.Core import storage 替代 from ErisPulse.Core import env
6
-
7
- {!--< deprecated >!--} 请使用 storage 模块替代
8
- """
9
-
10
- from .storage import storage
11
-
12
- # 向后兼容性
13
- env = storage
14
-
15
- __all__ = ['env']
@@ -1,227 +0,0 @@
1
- """
2
- ErisPulse 模块管理器
3
-
4
- 提供模块的注册、状态管理和依赖关系处理功能。支持模块的启用/禁用、版本控制和依赖解析。
5
-
6
- {!--< tips >!--}
7
- 1. 使用模块前缀区分不同模块的配置
8
- 2. 支持模块状态持久化存储
9
- 3. 自动处理模块间的依赖关系
10
- {!--< /tips >!--}
11
- """
12
-
13
- from typing import Dict, Optional, Any, List, Set, Tuple, Union, Type, FrozenSet
14
-
15
- class ModuleRegistry:
16
- """
17
- ErisPulse 模块注册表
18
-
19
- 管理所有模块的注册信息和启用状态
20
-
21
- {!--< tips >!--}
22
- 1. 模块信息通过 set_module/get_module 管理
23
- 2. 模块状态通过 set_module_status/get_module_status 控制
24
- 3. 支持批量操作模块信息
25
- {!--< /tips >!--}
26
- """
27
-
28
- DEFAULT_MODULE_PREFIX = "erispulse.data.modules.info:"
29
- DEFAULT_STATUS_PREFIX = "erispulse.data.modules.status:"
30
-
31
- def __init__(self):
32
- from .storage import storage
33
- self.storage = storage
34
- self._ensure_prefixes()
35
-
36
- def _ensure_prefixes(self) -> None:
37
- """
38
- {!--< internal-use >!--}
39
- 确保模块前缀配置存在
40
- """
41
- if not self.storage.get("erispulse.system.module_prefix"):
42
- self.storage.set("erispulse.system.module_prefix", self.DEFAULT_MODULE_PREFIX)
43
- if not self.storage.get("erispulse.system.status_prefix"):
44
- self.storage.set("erispulse.system.status_prefix", self.DEFAULT_STATUS_PREFIX)
45
-
46
- @property
47
- def module_prefix(self) -> str:
48
- """
49
- 获取模块数据前缀
50
-
51
- :return: 模块数据前缀字符串
52
- """
53
- return self.storage.get("erispulse.system.module_prefix")
54
-
55
- @property
56
- def status_prefix(self) -> str:
57
- """
58
- 获取模块状态前缀
59
-
60
- :return: 模块状态前缀字符串
61
- """
62
- return self.storage.get("erispulse.system.status_prefix")
63
-
64
- def set_module_status(self, module_name: str, status: bool) -> None:
65
- """
66
- 设置模块启用状态
67
-
68
- :param module_name: [str] 模块名称
69
- :param status: [bool] 启用状态 (True=启用, False=禁用)
70
-
71
- :example:
72
- >>> # 启用模块
73
- >>> module_registry.set_module_status("MyModule", True)
74
- >>> # 禁用模块
75
- >>> module_registry.set_module_status("MyModule", False)
76
- """
77
- from .logger import logger
78
- self.storage.set(f"{self.status_prefix}{module_name}", bool(status))
79
- logger.debug(f"模块 {module_name} 状态已设置为 {status}")
80
-
81
- def get_module_status(self, module_name: str) -> bool:
82
- """
83
- 获取模块启用状态
84
-
85
- :param module_name: [str] 模块名称
86
- :return: [bool] 模块是否启用
87
-
88
- :example:
89
- >>> if module_registry.get_module_status("MyModule"):
90
- >>> print("模块已启用")
91
- """
92
- status = self.storage.get(f"{self.status_prefix}{module_name}", True)
93
- if isinstance(status, str):
94
- return status.lower() not in ('false', '0', 'no', 'off')
95
- return bool(status)
96
-
97
- def set_module(self, module_name: str, module_info: Dict[str, Any]) -> None:
98
- """
99
- 注册或更新模块信息
100
-
101
- :param module_name: [str] 模块名称
102
- :param module_info: [Dict[str, Any]] 模块信息字典
103
- 必须包含 version 和 description 字段
104
-
105
- :example:
106
- >>> module_registry.set_module("MyModule", {
107
- >>> "version": "1.0.0",
108
- >>> "description": "我的模块",
109
- >>> "dependencies": [],
110
- >>> "author": "开发者",
111
- >>> "license": "MIT"
112
- >>> })
113
- """
114
- self.storage.set(f"{self.module_prefix}{module_name}", module_info)
115
-
116
- def get_module(self, module_name: str) -> Optional[Dict[str, Any]]:
117
- """
118
- 获取模块信息
119
-
120
- :param module_name: [str] 模块名称
121
- :return: [Optional[Dict[str, Any]]] 模块信息字典或None
122
-
123
- :example:
124
- >>> module_info = module_registry.get_module("MyModule")
125
- >>> if module_info:
126
- >>> print(f"模块版本: {module_info.get('version')}")
127
- """
128
- return self.storage.get(f"{self.module_prefix}{module_name}")
129
-
130
- def set_all_modules(self, modules_info: Dict[str, Dict[str, Any]]) -> None:
131
- """
132
- 批量设置模块信息
133
-
134
- :param modules_info: [Dict[str, Dict[str, Any]]] 模块信息字典
135
- 格式: {模块名: 模块信息}
136
-
137
- :example:
138
- >>> module_registry.set_all_modules({
139
- >>> "Module1": {"version": "1.0", "status": True},
140
- >>> "Module2": {"version": "2.0", "status": False}
141
- >>> })
142
- """
143
- for module_name, module_info in modules_info.items():
144
- self.set_module(module_name, module_info)
145
-
146
- def get_all_modules(self) -> Dict[str, Dict[str, Any]]:
147
- """
148
- 获取所有已注册模块信息
149
-
150
- :return: [Dict[str, Dict[str, Any]]] 所有模块信息字典
151
-
152
- :example:
153
- >>> all_modules = module_registry.get_all_modules()
154
- >>> for name, info in all_modules.items():
155
- >>> print(f"{name}: {info.get('status')}")
156
- """
157
- modules_info = {}
158
- all_keys = self.storage.get_all_keys()
159
- prefix_len = len(self.module_prefix)
160
-
161
- for key in all_keys:
162
- if key.startswith(self.module_prefix):
163
- module_name = key[prefix_len:]
164
- module_info = self.get_module(module_name)
165
- if module_info:
166
- modules_info[module_name] = module_info
167
- return modules_info
168
-
169
- def update_module(self, module_name: str, module_info: Dict[str, Any]) -> None:
170
- """
171
- 更新模块信息
172
-
173
- :param module_name: 模块名称
174
- :param module_info: 完整的模块信息字典
175
- """
176
- self.set_module(module_name, module_info)
177
-
178
- def remove_module(self, module_name: str) -> bool:
179
- """
180
- 移除模块注册信息
181
-
182
- :param module_name: [str] 模块名称
183
- :return: [bool] 是否成功移除
184
-
185
- :example:
186
- >>> if module_registry.remove_module("OldModule"):
187
- >>> print("模块已移除")
188
- """
189
- module_key = f"{self.module_prefix}{module_name}"
190
- status_key = f"{self.status_prefix}{module_name}"
191
-
192
- if self.storage.get(module_key) is not None:
193
- self.storage.delete(module_key)
194
- self.storage.delete(status_key)
195
- return True
196
- return False
197
-
198
- def update_prefixes(self, module_prefix: Optional[str] = None, status_prefix: Optional[str] = None) -> None:
199
- """
200
- 更新模块存储前缀配置
201
-
202
- :param module_prefix: [Optional[str]] 模块数据前缀 (默认: "erispulse.data.modules.info:")
203
- :param status_prefix: [Optional[str]] 模块状态前缀 (默认: "erispulse.data.modules.status:")
204
-
205
- :example:
206
- >>> # 更新模块前缀
207
- >>> module_registry.update_prefixes(
208
- >>> module_prefix="custom.module.data:",
209
- >>> status_prefix="custom.module.status:"
210
- >>> )
211
- """
212
- if module_prefix:
213
- if not module_prefix.endswith(':'):
214
- module_prefix += ':'
215
- self.storage.set("erispulse.system.module_prefix", module_prefix)
216
-
217
- if status_prefix:
218
- if not status_prefix.endswith(':'):
219
- status_prefix += ':'
220
- self.storage.set("erispulse.system.status_prefix", status_prefix)
221
-
222
-
223
- module_registry = ModuleRegistry()
224
-
225
- __all__ = [
226
- "module_registry",
227
- ]
@@ -1,26 +0,0 @@
1
- ErisPulse/__init__.py,sha256=L-YLh-5qMYydReBiBO9weceeH7PVv2ONBo40o5ekr3Y,27133
2
- ErisPulse/__main__.py,sha256=GUh_30fEkWmE0udDFe1Kkwf41hg2v4WgbRY1RswJ9Uc,76331
3
- ErisPulse/Core/__init__.py,sha256=96QS7gD0QNt27wQkIprye7y_Nja_IH2XUqPstZ4uLsY,589
4
- ErisPulse/Core/adapter.py,sha256=y75u_heNmpYLDjIBtVTfMzTHZFixWtYFv0JVskNI-2w,18300
5
- ErisPulse/Core/config.py,sha256=y0ChfCuw-6jAqs9Ii2tPJg0e4A765qzQLRcK6O8zh4c,2425
6
- ErisPulse/Core/env.py,sha256=IT_6Xks5Ka089O_4SVTvYNIC9Ly1IHX_Esb3SsleRj8,338
7
- ErisPulse/Core/erispulse_config.py,sha256=QDx401hNX9JcSHqCSVK33X6VTubl6HI1znAK3T_J0K0,3034
8
- ErisPulse/Core/exceptions.py,sha256=zuTREGczwGzbYT4Z6dACqHwgNRpiJeLFR8aCxFdOg7k,3667
9
- ErisPulse/Core/logger.py,sha256=g8HgpzK3k-WpnuiU_UQKWdw4s7BLLHOS23uDFrO_7W8,11285
10
- ErisPulse/Core/module.py,sha256=wCIFC3qHukeu7DSj8TuNMw8s_gzTwk7_coM4oflmieA,4680
11
- ErisPulse/Core/module_registry.py,sha256=BeOQwh3Pwv2fceBLJEObF6Ek65td0VOFzv3L0aEudXY,7740
12
- ErisPulse/Core/router.py,sha256=s2EBh2qpt3UXYhB06Ppc1XTFuZ3u0ZfXENJxwkgPoq8,8542
13
- ErisPulse/Core/storage.py,sha256=oRum4eVaTc3yxcaafggoIvrk41LPbvApSCxkGM3YmzU,17904
14
- ErisPulse/Core/Event/__init__.py,sha256=ixL1jaF0qXt0LbHckRWPH7Xu159qeeXQcsp4ZOs8J6Y,1120
15
- ErisPulse/Core/Event/base.py,sha256=sZ5Vpp3EVRrtSi_yA3rn61s_4VOWSCUMdRBFeXzg1pc,3614
16
- ErisPulse/Core/Event/command.py,sha256=fcLGOTjs_06KPyzkH4Eprvqzm_XToLUdbEO6NbJ_cFg,17453
17
- ErisPulse/Core/Event/exceptions.py,sha256=iGcuPaC7F4cZeujcvBdZb9bzQGnHBdb9CcPKoB760Bo,711
18
- ErisPulse/Core/Event/message.py,sha256=tB51ACG_2RzJtVm-4gl2zpss5flQjVIUnabWFlrO1Fk,3677
19
- ErisPulse/Core/Event/meta.py,sha256=Bb5JZgF44bN8I-FsqMAEG5w35YU0vuAN4U91TXgfTtY,3300
20
- ErisPulse/Core/Event/notice.py,sha256=aHmkICmrTaWk5GWAB004gRMu9SY61lSXcUdxCLcuYhc,4222
21
- ErisPulse/Core/Event/request.py,sha256=eZk4AQsbhkK3z-7nO83bvW97e6FqDMSYMAAxeacALU4,2616
22
- erispulse-2.2.1.dev0.dist-info/METADATA,sha256=l3rkS2DX-q4GPNk5mvHFdAwt8qcO4MhkIt6nBvYF1hQ,6650
23
- erispulse-2.2.1.dev0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
24
- erispulse-2.2.1.dev0.dist-info/entry_points.txt,sha256=Jss71M6nEha0TA-DyVZugPYdcL14s9QpiOeIlgWxzOc,182
25
- erispulse-2.2.1.dev0.dist-info/licenses/LICENSE,sha256=b2XwzcfWuv_36Op3xGdjcuPHgfCz62yT3bXYjfStpxY,1852
26
- erispulse-2.2.1.dev0.dist-info/RECORD,,