ErisPulse 2.2.1__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.
- ErisPulse/Core/Bases/__init__.py +14 -0
- ErisPulse/Core/Bases/adapter.py +196 -0
- ErisPulse/Core/Bases/module.py +54 -0
- ErisPulse/Core/Event/__init__.py +14 -0
- ErisPulse/Core/Event/base.py +15 -2
- ErisPulse/Core/Event/command.py +21 -2
- ErisPulse/Core/Event/message.py +15 -0
- ErisPulse/Core/Event/meta.py +15 -0
- ErisPulse/Core/Event/notice.py +15 -0
- ErisPulse/Core/Event/request.py +16 -1
- ErisPulse/Core/__init__.py +38 -19
- ErisPulse/Core/{erispulse_config.py → _self_config.py} +27 -2
- ErisPulse/Core/adapter.py +374 -377
- ErisPulse/Core/config.py +137 -38
- ErisPulse/Core/exceptions.py +6 -1
- ErisPulse/Core/lifecycle.py +167 -0
- ErisPulse/Core/logger.py +97 -49
- ErisPulse/Core/module.py +279 -56
- ErisPulse/Core/router.py +112 -23
- ErisPulse/Core/storage.py +258 -77
- ErisPulse/Core/ux.py +635 -0
- ErisPulse/__init__.py +722 -244
- ErisPulse/__main__.py +1 -1999
- ErisPulse/utils/__init__.py +17 -0
- ErisPulse/utils/cli.py +1092 -0
- ErisPulse/utils/console.py +53 -0
- ErisPulse/utils/package_manager.py +845 -0
- ErisPulse/utils/reload_handler.py +111 -0
- {erispulse-2.2.1.dist-info → erispulse-2.3.0.dist-info}/METADATA +24 -5
- erispulse-2.3.0.dist-info/RECORD +34 -0
- {erispulse-2.2.1.dist-info → erispulse-2.3.0.dist-info}/WHEEL +1 -1
- {erispulse-2.2.1.dist-info → erispulse-2.3.0.dist-info}/licenses/LICENSE +1 -1
- ErisPulse/Core/env.py +0 -15
- ErisPulse/Core/module_registry.py +0 -227
- erispulse-2.2.1.dist-info/RECORD +0 -26
- {erispulse-2.2.1.dist-info → erispulse-2.3.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ErisPulse 适配器基础模块
|
|
3
|
+
|
|
4
|
+
提供适配器和消息发送DSL的基类实现
|
|
5
|
+
|
|
6
|
+
{!--< tips >!--}
|
|
7
|
+
1. 用于实现与不同平台的交互接口
|
|
8
|
+
2. 提供统一的消息发送DSL风格接口
|
|
9
|
+
{!--< /tips >!--}
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import asyncio
|
|
13
|
+
from typing import (
|
|
14
|
+
Any, Optional,
|
|
15
|
+
Union, Awaitable
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
class SendDSL:
|
|
19
|
+
"""
|
|
20
|
+
消息发送DSL基类
|
|
21
|
+
|
|
22
|
+
用于实现 Send.To(...).Func(...) 风格的链式调用接口
|
|
23
|
+
|
|
24
|
+
{!--< tips >!--}
|
|
25
|
+
1. 子类应实现具体的消息发送方法(如Text, Image等)
|
|
26
|
+
2. 通过__getattr__实现动态方法调用
|
|
27
|
+
{!--< /tips >!--}
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(self, adapter: 'BaseAdapter', target_type: Optional[str] = None, target_id: Optional[str] = None, account_id: Optional[str] = None):
|
|
31
|
+
"""
|
|
32
|
+
初始化DSL发送器
|
|
33
|
+
|
|
34
|
+
:param adapter: 所属适配器实例
|
|
35
|
+
:param target_type: 目标类型(可选)
|
|
36
|
+
:param target_id: 目标ID(可选)
|
|
37
|
+
:param _account_id: 发送账号(可选)
|
|
38
|
+
"""
|
|
39
|
+
self._adapter = adapter
|
|
40
|
+
self._target_type = target_type
|
|
41
|
+
self._target_id = target_id
|
|
42
|
+
self._target_to = target_id
|
|
43
|
+
self._account_id = account_id
|
|
44
|
+
|
|
45
|
+
def To(self, target_type: str = None, target_id: Union[str, int] = None) -> 'SendDSL':
|
|
46
|
+
"""
|
|
47
|
+
设置消息目标
|
|
48
|
+
|
|
49
|
+
:param target_type: 目标类型(可选)
|
|
50
|
+
:param target_id: 目标ID(可选)
|
|
51
|
+
:return: SendDSL实例
|
|
52
|
+
|
|
53
|
+
:example:
|
|
54
|
+
>>> adapter.Send.To("user", "123").Text("Hello")
|
|
55
|
+
>>> adapter.Send.To("123").Text("Hello") # 简化形式
|
|
56
|
+
"""
|
|
57
|
+
if target_id is None and target_type is not None:
|
|
58
|
+
target_id = target_type
|
|
59
|
+
target_type = None
|
|
60
|
+
|
|
61
|
+
return self.__class__(self._adapter, target_type, target_id, self._account_id)
|
|
62
|
+
|
|
63
|
+
def Using(self, account_id: Union[str, int]) -> 'SendDSL':
|
|
64
|
+
"""
|
|
65
|
+
设置发送账号
|
|
66
|
+
|
|
67
|
+
:param _account_id: 发送账号
|
|
68
|
+
:return: SendDSL实例
|
|
69
|
+
|
|
70
|
+
:example:
|
|
71
|
+
>>> adapter.Send.Using("bot1").To("123").Text("Hello")
|
|
72
|
+
>>> adapter.Send.To("123").Using("bot1").Text("Hello") # 支持乱序
|
|
73
|
+
"""
|
|
74
|
+
return self.__class__(self._adapter, self._target_type, self._target_id, account_id)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class BaseAdapter:
|
|
78
|
+
"""
|
|
79
|
+
适配器基类
|
|
80
|
+
|
|
81
|
+
提供与外部平台交互的标准接口,子类必须实现必要方法
|
|
82
|
+
|
|
83
|
+
{!--< tips >!--}
|
|
84
|
+
1. 必须实现call_api, start和shutdown方法
|
|
85
|
+
2. 可以自定义Send类实现平台特定的消息发送逻辑
|
|
86
|
+
3. 通过on装饰器注册事件处理器
|
|
87
|
+
4. 支持OneBot12协议的事件处理
|
|
88
|
+
{!--< /tips >!--}
|
|
89
|
+
"""
|
|
90
|
+
|
|
91
|
+
class Send(SendDSL):
|
|
92
|
+
"""
|
|
93
|
+
消息发送DSL实现
|
|
94
|
+
|
|
95
|
+
{!--< tips >!--}
|
|
96
|
+
1. 子类可以重写Text方法提供平台特定实现
|
|
97
|
+
2. 可以添加新的消息类型(如Image, Voice等)
|
|
98
|
+
{!--< /tips >!--}
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
def Example(self, text: str) -> Awaitable[Any]:
|
|
102
|
+
"""
|
|
103
|
+
示例消息发送方法
|
|
104
|
+
|
|
105
|
+
:param text: 文本内容
|
|
106
|
+
:return: 异步任务
|
|
107
|
+
:example:
|
|
108
|
+
>>> await adapter.Send.To("123").Example("Hello")
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
text = {
|
|
112
|
+
"status": "ok",
|
|
113
|
+
"retcode": 0,
|
|
114
|
+
"data": {
|
|
115
|
+
"message_id": "1234567890",
|
|
116
|
+
"time": 1755801512
|
|
117
|
+
},
|
|
118
|
+
"message_id": "1234567890",
|
|
119
|
+
"message": "",
|
|
120
|
+
"echo": None,
|
|
121
|
+
"example_raw": {
|
|
122
|
+
"result": "success",
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async def _send_example():
|
|
126
|
+
from .. import logger
|
|
127
|
+
logger.info(f"发送示例消息: {text}")
|
|
128
|
+
return text
|
|
129
|
+
return asyncio.create_task(_send_example())
|
|
130
|
+
|
|
131
|
+
def __init__(self):
|
|
132
|
+
self.Send = self.__class__.Send(self)
|
|
133
|
+
|
|
134
|
+
async def call_api(self, endpoint: str, **params: Any) -> Any:
|
|
135
|
+
"""
|
|
136
|
+
调用平台API的抽象方法
|
|
137
|
+
|
|
138
|
+
:param endpoint: API端点
|
|
139
|
+
:param params: API参数
|
|
140
|
+
:return: API调用结果
|
|
141
|
+
:raises NotImplementedError: 必须由子类实现
|
|
142
|
+
"""
|
|
143
|
+
raise NotImplementedError("适配器必须实现call_api方法")
|
|
144
|
+
|
|
145
|
+
async def start(self) -> None:
|
|
146
|
+
"""
|
|
147
|
+
启动适配器的抽象方法
|
|
148
|
+
|
|
149
|
+
:raises NotImplementedError: 必须由子类实现
|
|
150
|
+
"""
|
|
151
|
+
raise NotImplementedError("适配器必须实现start方法")
|
|
152
|
+
|
|
153
|
+
async def shutdown(self) -> None:
|
|
154
|
+
"""
|
|
155
|
+
关闭适配器的抽象方法
|
|
156
|
+
|
|
157
|
+
:raises NotImplementedError: 必须由子类实现
|
|
158
|
+
"""
|
|
159
|
+
raise NotImplementedError("适配器必须实现shutdown方法")
|
|
160
|
+
|
|
161
|
+
async def emit(self) -> None:
|
|
162
|
+
from .. import logger
|
|
163
|
+
logger.error("适配器调用了一个被弃用的原生方法emit,请检查适配器的实现,如果你是开发者请查看ErisPulse的文档进行更新。如果你是普通用户请查看本适配器是否有更新")
|
|
164
|
+
|
|
165
|
+
def send(self, target_type: str, target_id: str, message: Any, **kwargs: Any) -> asyncio.Task:
|
|
166
|
+
"""
|
|
167
|
+
发送消息的便捷方法,返回一个 asyncio Task
|
|
168
|
+
|
|
169
|
+
:param target_type: 目标类型
|
|
170
|
+
:param target_id: 目标ID
|
|
171
|
+
:param message: 消息内容
|
|
172
|
+
:param kwargs: 其他参数
|
|
173
|
+
- method: 发送方法名(默认为"Text")
|
|
174
|
+
:return: asyncio.Task 对象,用户可以自主决定是否等待
|
|
175
|
+
|
|
176
|
+
:raises AttributeError: 当发送方法不存在时抛出
|
|
177
|
+
|
|
178
|
+
:example:
|
|
179
|
+
>>> task = adapter.send("user", "123", "Hello")
|
|
180
|
+
>>> # 用户可以选择等待: result = await task
|
|
181
|
+
>>> # 或者不等待让其在后台执行
|
|
182
|
+
>>> await adapter.send("group", "456", "Hello", method="Markdown") # 直接等待
|
|
183
|
+
"""
|
|
184
|
+
async def _send_wrapper():
|
|
185
|
+
method_name = kwargs.pop("method", "Text")
|
|
186
|
+
method = getattr(self.Send.To(target_type, target_id), method_name, None)
|
|
187
|
+
if not method:
|
|
188
|
+
raise AttributeError(f"未找到 {method_name} 方法,请确保已在 Send 类中定义")
|
|
189
|
+
return await method(message, **kwargs)
|
|
190
|
+
|
|
191
|
+
return asyncio.create_task(_send_wrapper())
|
|
192
|
+
|
|
193
|
+
__all__ = [
|
|
194
|
+
"BaseAdapter",
|
|
195
|
+
"SendDSL",
|
|
196
|
+
]
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ErisPulse 模块基础模块
|
|
3
|
+
|
|
4
|
+
提供模块基类定义和标准接口
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
class BaseModule:
|
|
8
|
+
"""
|
|
9
|
+
模块基类
|
|
10
|
+
|
|
11
|
+
提供模块加载和卸载的标准接口
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
@staticmethod
|
|
15
|
+
def should_eager_load() -> bool:
|
|
16
|
+
"""
|
|
17
|
+
模块是否应该在启动时加载
|
|
18
|
+
默认为False(即懒加载)
|
|
19
|
+
|
|
20
|
+
:return: 是否应该在启动时加载
|
|
21
|
+
"""
|
|
22
|
+
return False
|
|
23
|
+
|
|
24
|
+
async def on_load(self, event: dict) -> bool:
|
|
25
|
+
"""
|
|
26
|
+
当模块被加载时调用
|
|
27
|
+
|
|
28
|
+
:param event: 事件内容
|
|
29
|
+
:return: 处理结果
|
|
30
|
+
|
|
31
|
+
{!--< tips >!--}
|
|
32
|
+
其中,event事件内容为:
|
|
33
|
+
`{ "module_name": "模块名" }`
|
|
34
|
+
{!--< /tips >!--}
|
|
35
|
+
"""
|
|
36
|
+
raise NotImplementedError
|
|
37
|
+
|
|
38
|
+
async def on_unload(self, event: dict) -> bool:
|
|
39
|
+
"""
|
|
40
|
+
当模块被卸载时调用
|
|
41
|
+
|
|
42
|
+
:param event: 事件内容
|
|
43
|
+
:return: 处理结果
|
|
44
|
+
|
|
45
|
+
{!--< tips >!--}
|
|
46
|
+
其中,event事件内容为:
|
|
47
|
+
`{ "module_name": "模块名" }`
|
|
48
|
+
{!--< /tips >!--}
|
|
49
|
+
"""
|
|
50
|
+
raise NotImplementedError
|
|
51
|
+
|
|
52
|
+
__all__ = [
|
|
53
|
+
"BaseModule"
|
|
54
|
+
]
|
ErisPulse/Core/Event/__init__.py
CHANGED
|
@@ -18,6 +18,20 @@ from .meta import meta
|
|
|
18
18
|
from . import exceptions
|
|
19
19
|
from .. import config
|
|
20
20
|
|
|
21
|
+
def _clear_all_handlers():
|
|
22
|
+
"""
|
|
23
|
+
{!--< internal-use >!--}
|
|
24
|
+
清除所有已注册的事件处理器和命令
|
|
25
|
+
"""
|
|
26
|
+
# 清除命令处理器
|
|
27
|
+
command._clear_commands()
|
|
28
|
+
|
|
29
|
+
# 清除各类事件处理器
|
|
30
|
+
message._clear_message_handlers()
|
|
31
|
+
notice._clear_notice_handlers()
|
|
32
|
+
request._clear_request_handlers()
|
|
33
|
+
meta._clear_meta_handlers()
|
|
34
|
+
|
|
21
35
|
# 初始化默认配置
|
|
22
36
|
def _setup_default_config():
|
|
23
37
|
"""
|
ErisPulse/Core/Event/base.py
CHANGED
|
@@ -10,7 +10,7 @@ ErisPulse 事件处理基础模块
|
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
12
|
from .. import adapter, logger
|
|
13
|
-
from typing import Callable, Any, Dict, List
|
|
13
|
+
from typing import Callable, Any, Dict, List
|
|
14
14
|
import asyncio
|
|
15
15
|
|
|
16
16
|
class BaseEventHandler:
|
|
@@ -56,7 +56,8 @@ class BaseEventHandler:
|
|
|
56
56
|
if self.event_type and not self._adapter_handler_registered:
|
|
57
57
|
adapter.on(self.event_type)(self._process_event)
|
|
58
58
|
self._adapter_handler_registered = True
|
|
59
|
-
|
|
59
|
+
logger.debug(f"[Event] 已注册事件处理器: {self.event_type}, Called by: {self.module_name}")
|
|
60
|
+
|
|
60
61
|
def unregister(self, handler: Callable) -> bool:
|
|
61
62
|
"""
|
|
62
63
|
注销事件处理器
|
|
@@ -108,3 +109,15 @@ class BaseEventHandler:
|
|
|
108
109
|
handler(event)
|
|
109
110
|
except Exception as e:
|
|
110
111
|
logger.error(f"事件处理器执行错误: {e}")
|
|
112
|
+
|
|
113
|
+
def _clear_handlers(self):
|
|
114
|
+
"""
|
|
115
|
+
{!--< internal-use >!--}
|
|
116
|
+
清除所有已注册的事件处理器
|
|
117
|
+
|
|
118
|
+
:return: 被清除的处理器数量
|
|
119
|
+
"""
|
|
120
|
+
count = len(self.handlers)
|
|
121
|
+
self.handlers.clear()
|
|
122
|
+
self._handler_map.clear()
|
|
123
|
+
return count
|
ErisPulse/Core/Event/command.py
CHANGED
|
@@ -15,10 +15,14 @@ from .base import BaseEventHandler
|
|
|
15
15
|
from .. import adapter, config, logger
|
|
16
16
|
from typing import Callable, Union, List, Dict, Any, Optional, Awaitable
|
|
17
17
|
import asyncio
|
|
18
|
-
import re
|
|
19
|
-
from collections import defaultdict
|
|
20
18
|
|
|
21
19
|
class CommandHandler:
|
|
20
|
+
"""
|
|
21
|
+
命令处理器
|
|
22
|
+
|
|
23
|
+
提供命令注册、处理和管理功能
|
|
24
|
+
"""
|
|
25
|
+
|
|
22
26
|
def __init__(self):
|
|
23
27
|
self.commands: Dict[str, Dict] = {}
|
|
24
28
|
self.aliases: Dict[str, str] = {} # 别名映射
|
|
@@ -398,6 +402,21 @@ class CommandHandler:
|
|
|
398
402
|
await adapter_instance.Send.To(detail_type, target_id).Text(f"命令执行出错: {error}")
|
|
399
403
|
except Exception as e:
|
|
400
404
|
logger.error(f"发送命令错误消息失败: {e}")
|
|
405
|
+
|
|
406
|
+
def _clear_commands(self):
|
|
407
|
+
"""
|
|
408
|
+
{!--< internal-use >!--}
|
|
409
|
+
清除所有已注册的命令
|
|
410
|
+
|
|
411
|
+
:return: 被清除的命令数量
|
|
412
|
+
"""
|
|
413
|
+
count = len(self.commands)
|
|
414
|
+
self.commands.clear()
|
|
415
|
+
self.aliases.clear()
|
|
416
|
+
self.groups.clear()
|
|
417
|
+
self.permissions.clear()
|
|
418
|
+
self._waiting_replies.clear()
|
|
419
|
+
return count
|
|
401
420
|
|
|
402
421
|
def get_command(self, name: str) -> Optional[Dict]:
|
|
403
422
|
"""
|
ErisPulse/Core/Event/message.py
CHANGED
|
@@ -14,6 +14,12 @@ from .base import BaseEventHandler
|
|
|
14
14
|
from typing import Callable, Dict, Any
|
|
15
15
|
|
|
16
16
|
class MessageHandler:
|
|
17
|
+
"""
|
|
18
|
+
消息事件处理器
|
|
19
|
+
|
|
20
|
+
提供不同类型消息事件的处理功能
|
|
21
|
+
"""
|
|
22
|
+
|
|
17
23
|
def __init__(self):
|
|
18
24
|
self.handler = BaseEventHandler("message", "message")
|
|
19
25
|
|
|
@@ -117,4 +123,13 @@ class MessageHandler:
|
|
|
117
123
|
"""
|
|
118
124
|
return self.handler.unregister(handler)
|
|
119
125
|
|
|
126
|
+
def _clear_message_handlers(self):
|
|
127
|
+
"""
|
|
128
|
+
{!--< internal-use >!--}
|
|
129
|
+
清除所有已注册的消息处理器
|
|
130
|
+
|
|
131
|
+
:return: 被清除的处理器数量
|
|
132
|
+
"""
|
|
133
|
+
return self.handler._clear_handlers()
|
|
134
|
+
|
|
120
135
|
message = MessageHandler()
|
ErisPulse/Core/Event/meta.py
CHANGED
|
@@ -13,6 +13,12 @@ from .base import BaseEventHandler
|
|
|
13
13
|
from typing import Callable, Dict, Any
|
|
14
14
|
|
|
15
15
|
class MetaHandler:
|
|
16
|
+
"""
|
|
17
|
+
元事件处理器
|
|
18
|
+
|
|
19
|
+
提供元事件处理功能,如连接、断开连接等
|
|
20
|
+
"""
|
|
21
|
+
|
|
16
22
|
def __init__(self):
|
|
17
23
|
self.handler = BaseEventHandler("meta", "meta")
|
|
18
24
|
|
|
@@ -108,5 +114,14 @@ class MetaHandler:
|
|
|
108
114
|
:return: 是否成功取消注册
|
|
109
115
|
"""
|
|
110
116
|
return self.handler.unregister(handler)
|
|
117
|
+
|
|
118
|
+
def _clear_meta_handlers(self):
|
|
119
|
+
"""
|
|
120
|
+
{!--< internal-use >!--}
|
|
121
|
+
清除所有已注册的元事件处理器
|
|
122
|
+
|
|
123
|
+
:return: 被清除的处理器数量
|
|
124
|
+
"""
|
|
125
|
+
return self.handler._clear_handlers()
|
|
111
126
|
|
|
112
127
|
meta = MetaHandler()
|
ErisPulse/Core/Event/notice.py
CHANGED
|
@@ -13,6 +13,12 @@ from .base import BaseEventHandler
|
|
|
13
13
|
from typing import Callable, Dict, Any
|
|
14
14
|
|
|
15
15
|
class NoticeHandler:
|
|
16
|
+
"""
|
|
17
|
+
通知事件处理器
|
|
18
|
+
|
|
19
|
+
提供通知事件处理功能
|
|
20
|
+
"""
|
|
21
|
+
|
|
16
22
|
def __init__(self):
|
|
17
23
|
self.handler = BaseEventHandler("notice", "notice")
|
|
18
24
|
|
|
@@ -132,5 +138,14 @@ class NoticeHandler:
|
|
|
132
138
|
:return: 是否成功取消注册
|
|
133
139
|
"""
|
|
134
140
|
return self.handler.unregister(handler)
|
|
141
|
+
|
|
142
|
+
def _clear_notice_handlers(self):
|
|
143
|
+
"""
|
|
144
|
+
{!--< internal-use >!--}
|
|
145
|
+
清除所有已注册的通知处理器
|
|
146
|
+
|
|
147
|
+
:return: 被清除的处理器数量
|
|
148
|
+
"""
|
|
149
|
+
return self.handler._clear_handlers()
|
|
135
150
|
|
|
136
151
|
notice = NoticeHandler()
|
ErisPulse/Core/Event/request.py
CHANGED
|
@@ -13,6 +13,12 @@ from .base import BaseEventHandler
|
|
|
13
13
|
from typing import Callable, Dict, Any
|
|
14
14
|
|
|
15
15
|
class RequestHandler:
|
|
16
|
+
"""
|
|
17
|
+
请求事件处理器
|
|
18
|
+
|
|
19
|
+
提供请求事件处理功能
|
|
20
|
+
"""
|
|
21
|
+
|
|
16
22
|
def __init__(self):
|
|
17
23
|
self.handler = BaseEventHandler("request", "request")
|
|
18
24
|
|
|
@@ -84,5 +90,14 @@ class RequestHandler:
|
|
|
84
90
|
:return: 是否成功取消注册
|
|
85
91
|
"""
|
|
86
92
|
return self.handler.unregister(handler)
|
|
87
|
-
|
|
93
|
+
|
|
94
|
+
def _clear_request_handlers(self):
|
|
95
|
+
"""
|
|
96
|
+
{!--< internal-use >!--}
|
|
97
|
+
清除所有已注册的请求处理器
|
|
98
|
+
|
|
99
|
+
:return: 被清除的处理器数量
|
|
100
|
+
"""
|
|
101
|
+
return self.handler._clear_handlers()
|
|
102
|
+
|
|
88
103
|
request = RequestHandler()
|
ErisPulse/Core/__init__.py
CHANGED
|
@@ -1,30 +1,49 @@
|
|
|
1
|
-
from .
|
|
1
|
+
from .lifecycle import lifecycle
|
|
2
|
+
from .adapter import adapter
|
|
3
|
+
from .Bases import BaseAdapter, BaseModule, SendDSL
|
|
2
4
|
from .storage import storage
|
|
3
|
-
from .env import env
|
|
4
5
|
from .logger import logger
|
|
5
|
-
from .module_registry import module_registry
|
|
6
6
|
from .module import module
|
|
7
|
-
from .router import router
|
|
7
|
+
from .router import router
|
|
8
8
|
from .config import config
|
|
9
|
+
from .ux import ux, UXManager
|
|
9
10
|
from . import exceptions
|
|
10
|
-
|
|
11
11
|
from . import Event
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
# 兼容性别名定义
|
|
14
|
+
adapter_server = router # 路由管理器别名
|
|
15
|
+
env = storage # 存储管理器别名
|
|
16
|
+
AdapterFather = BaseAdapter # 适配器基类别名
|
|
14
17
|
|
|
15
18
|
__all__ = [
|
|
19
|
+
# 事件模块
|
|
16
20
|
'Event',
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
'
|
|
20
|
-
'
|
|
21
|
-
'
|
|
22
|
-
'
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
'
|
|
26
|
-
'
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
'
|
|
21
|
+
|
|
22
|
+
# 适配器相关
|
|
23
|
+
'adapter', # 适配器管理器
|
|
24
|
+
'AdapterFather', # 适配器基类
|
|
25
|
+
'BaseAdapter', # 适配器基类别名
|
|
26
|
+
'SendDSL', # DSL发送接口基类
|
|
27
|
+
|
|
28
|
+
# 模块相关
|
|
29
|
+
'module', # 模块管理器
|
|
30
|
+
'BaseModule', # 模块基类
|
|
31
|
+
|
|
32
|
+
# 存储和配置相关
|
|
33
|
+
'storage', # 存储管理器
|
|
34
|
+
'config', # 配置管理器
|
|
35
|
+
'env', # 配置管理器别名
|
|
36
|
+
|
|
37
|
+
# 路由相关
|
|
38
|
+
'router', # 路由管理器
|
|
39
|
+
'adapter_server', # 路由管理器别名
|
|
40
|
+
|
|
41
|
+
# UX
|
|
42
|
+
'ux', # UX管理器实例
|
|
43
|
+
'UXManager', # UX管理器类
|
|
44
|
+
|
|
45
|
+
# 基础设施
|
|
46
|
+
'logger', # 日志管理器
|
|
47
|
+
'exceptions', # 异常处理模块
|
|
48
|
+
'lifecycle' # 生命周期管理器
|
|
30
49
|
]
|
|
@@ -19,6 +19,14 @@ DEFAULT_ERISPULSE_CONFIG = {
|
|
|
19
19
|
"level": "INFO",
|
|
20
20
|
"log_files": [],
|
|
21
21
|
"memory_limit": 1000
|
|
22
|
+
},
|
|
23
|
+
"storage": {
|
|
24
|
+
"max_snapshot": 20
|
|
25
|
+
},
|
|
26
|
+
"modules": {},
|
|
27
|
+
"adapters": {},
|
|
28
|
+
"framework": {
|
|
29
|
+
"enable_lazy_loading": True
|
|
22
30
|
}
|
|
23
31
|
}
|
|
24
32
|
|
|
@@ -29,7 +37,6 @@ def _ensure_erispulse_config_structure(config_dict: Dict[str, Any]) -> Dict[str,
|
|
|
29
37
|
:param config_dict: 当前配置
|
|
30
38
|
:return: 补全后的完整配置
|
|
31
39
|
"""
|
|
32
|
-
merged_config = DEFAULT_ERISPULSE_CONFIG.copy()
|
|
33
40
|
|
|
34
41
|
# 深度合并配置
|
|
35
42
|
for section, default_values in DEFAULT_ERISPULSE_CONFIG.items():
|
|
@@ -102,4 +109,22 @@ def get_logger_config() -> Dict[str, Any]:
|
|
|
102
109
|
:return: 日志配置字典
|
|
103
110
|
"""
|
|
104
111
|
erispulse_config = get_erispulse_config()
|
|
105
|
-
return erispulse_config["logger"]
|
|
112
|
+
return erispulse_config["logger"]
|
|
113
|
+
|
|
114
|
+
def get_storage_config() -> Dict[str, Any]:
|
|
115
|
+
"""
|
|
116
|
+
获取存储模块配置
|
|
117
|
+
|
|
118
|
+
:return: 存储配置字典
|
|
119
|
+
"""
|
|
120
|
+
erispulse_config = get_erispulse_config()
|
|
121
|
+
return erispulse_config["storage"]
|
|
122
|
+
|
|
123
|
+
def get_framework_config() -> Dict[str, Any]:
|
|
124
|
+
"""
|
|
125
|
+
获取框架配置
|
|
126
|
+
|
|
127
|
+
:return: 框架配置字典
|
|
128
|
+
"""
|
|
129
|
+
erispulse_config = get_erispulse_config()
|
|
130
|
+
return erispulse_config["framework"]
|