ErisPulse 2.3.4.dev0__py3-none-any.whl → 2.3.4.dev2__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 (77) hide show
  1. ErisPulse/{utils/cli → CLI}/__init__.py +1 -1
  2. ErisPulse/{utils/cli → CLI}/__init__.pyi +1 -1
  3. ErisPulse/{utils/cli/__main__.py → CLI/cli.py} +3 -4
  4. ErisPulse/{utils/cli/__main__.pyi → CLI/cli.pyi} +2 -3
  5. ErisPulse/{utils/cli → CLI}/commands/init.py +4 -9
  6. ErisPulse/{utils/cli → CLI}/commands/init.pyi +2 -14
  7. ErisPulse/{utils/cli → CLI}/commands/install.py +2 -7
  8. ErisPulse/{utils/cli → CLI}/commands/install.pyi +2 -14
  9. ErisPulse/{utils/cli → CLI}/commands/list.py +2 -7
  10. ErisPulse/{utils/cli → CLI}/commands/list.pyi +2 -14
  11. ErisPulse/{utils/cli → CLI}/commands/list_remote.py +2 -7
  12. ErisPulse/{utils/cli → CLI}/commands/list_remote.pyi +2 -14
  13. ErisPulse/{utils/cli → CLI}/commands/run.py +3 -7
  14. ErisPulse/{utils/cli → CLI}/commands/run.pyi +2 -11
  15. ErisPulse/{utils/cli → CLI}/commands/self_update.py +2 -7
  16. ErisPulse/{utils/cli → CLI}/commands/self_update.pyi +2 -14
  17. ErisPulse/{utils/cli → CLI}/commands/uninstall.py +1 -6
  18. ErisPulse/{utils/cli → CLI}/commands/uninstall.pyi +1 -14
  19. ErisPulse/{utils/cli → CLI}/commands/upgrade.py +1 -7
  20. ErisPulse/{utils/cli → CLI}/commands/upgrade.pyi +1 -14
  21. ErisPulse/{utils → CLI/utils}/__init__.py +1 -5
  22. ErisPulse/{utils → CLI/utils}/__init__.pyi +0 -2
  23. ErisPulse/{utils → CLI/utils}/package_manager.py +146 -20
  24. ErisPulse/{utils → CLI/utils}/package_manager.pyi +20 -3
  25. ErisPulse/{utils → CLI/utils}/reload_handler.py +7 -8
  26. ErisPulse/{utils → CLI/utils}/reload_handler.pyi +1 -1
  27. ErisPulse/Core/Bases/manager.py +136 -0
  28. ErisPulse/Core/Bases/manager.pyi +108 -0
  29. ErisPulse/Core/Bases/module.py +53 -1
  30. ErisPulse/Core/Bases/module.pyi +43 -0
  31. ErisPulse/Core/Event/command.py +6 -1
  32. ErisPulse/Core/_self_config.py +1 -1
  33. ErisPulse/Core/adapter.py +70 -10
  34. ErisPulse/Core/adapter.pyi +18 -1
  35. ErisPulse/Core/exceptions.py +4 -2
  36. ErisPulse/Core/lifecycle.py +9 -0
  37. ErisPulse/Core/logger.py +21 -15
  38. ErisPulse/Core/logger.pyi +2 -1
  39. ErisPulse/Core/module.py +57 -9
  40. ErisPulse/Core/module.pyi +12 -1
  41. ErisPulse/Core/router.py +13 -5
  42. ErisPulse/Core/storage.py +94 -256
  43. ErisPulse/Core/storage.pyi +13 -66
  44. ErisPulse/__init__.py +35 -1237
  45. ErisPulse/__init__.pyi +3 -290
  46. ErisPulse/__main__.py +1 -1
  47. ErisPulse/__main__.pyi +1 -1
  48. ErisPulse/loaders/__init__.py +22 -0
  49. ErisPulse/loaders/__init__.pyi +21 -0
  50. ErisPulse/loaders/adapter_loader.py +187 -0
  51. ErisPulse/loaders/adapter_loader.pyi +82 -0
  52. ErisPulse/loaders/base_loader.py +162 -0
  53. ErisPulse/loaders/base_loader.pyi +23 -0
  54. ErisPulse/loaders/initializer.py +150 -0
  55. ErisPulse/loaders/initializer.pyi +60 -0
  56. ErisPulse/loaders/module_loader.py +618 -0
  57. ErisPulse/loaders/module_loader.pyi +179 -0
  58. ErisPulse/loaders/strategy.py +129 -0
  59. ErisPulse/loaders/strategy.pyi +90 -0
  60. ErisPulse/sdk.py +435 -0
  61. ErisPulse/sdk.pyi +158 -0
  62. {erispulse-2.3.4.dev0.dist-info → erispulse-2.3.4.dev2.dist-info}/METADATA +1 -1
  63. erispulse-2.3.4.dev2.dist-info/RECORD +103 -0
  64. ErisPulse/sdk_protocol.py +0 -143
  65. ErisPulse/sdk_protocol.pyi +0 -97
  66. erispulse-2.3.4.dev0.dist-info/RECORD +0 -89
  67. /ErisPulse/{utils/cli → CLI}/base.py +0 -0
  68. /ErisPulse/{utils/cli → CLI}/base.pyi +0 -0
  69. /ErisPulse/{utils/cli → CLI}/commands/__init__.py +0 -0
  70. /ErisPulse/{utils/cli → CLI}/commands/__init__.pyi +0 -0
  71. /ErisPulse/{utils → CLI}/console.py +0 -0
  72. /ErisPulse/{utils → CLI}/console.pyi +0 -0
  73. /ErisPulse/{utils/cli → CLI}/registry.py +0 -0
  74. /ErisPulse/{utils/cli → CLI}/registry.pyi +0 -0
  75. {erispulse-2.3.4.dev0.dist-info → erispulse-2.3.4.dev2.dist-info}/WHEEL +0 -0
  76. {erispulse-2.3.4.dev0.dist-info → erispulse-2.3.4.dev2.dist-info}/entry_points.txt +0 -0
  77. {erispulse-2.3.4.dev0.dist-info → erispulse-2.3.4.dev2.dist-info}/licenses/LICENSE +0 -0
ErisPulse/sdk.py ADDED
@@ -0,0 +1,435 @@
1
+ """
2
+ ErisPulse SDK 主类
3
+
4
+ 提供统一的 SDK 接口,整合所有核心模块和加载器
5
+
6
+ {!--< tips >!--}
7
+ example:
8
+ >>> from ErisPulse import sdk
9
+ >>> await sdk.init()
10
+ >>> await sdk.adapter.startup()
11
+ {!--< /tips >!--}
12
+ """
13
+
14
+ import asyncio
15
+ from typing import Any
16
+ from .loaders.initializer import Initializer
17
+
18
+ # 导入核心模块
19
+ from .Core import Event
20
+ from .Core import lifecycle, logger, exceptions
21
+ from .Core import storage, env, config
22
+ from .Core import adapter, AdapterFather, BaseAdapter, SendDSL
23
+ from .Core import module
24
+ from .Core import router, adapter_server
25
+
26
+
27
+ class SDK:
28
+ """
29
+ ErisPulse SDK 主类
30
+
31
+ 整合所有核心模块和加载器,提供统一的初始化和管理接口
32
+
33
+ {!--< tips >!--}
34
+ SDK 提供以下核心属性:
35
+ - Event: 事件系统
36
+ - lifecycle: 生命周期管理器
37
+ - logger: 日志管理器
38
+ - exceptions: 异常处理模块
39
+ - storage: 存储管理器
40
+ - env: 存储管理器别名
41
+ - config: 配置管理器
42
+ - adapter: 适配器管理器
43
+ - AdapterFather: 适配器基类别名
44
+ - BaseAdapter: 适配器基类
45
+ - SendDSL: DSL 发送接口基类
46
+ - module: 模块管理器
47
+ - router: 路由管理器
48
+ - adapter_server: 路由管理器别名
49
+ {!--< /tips >!--}
50
+ """
51
+
52
+ # ==================== 核心模块属性 ====================
53
+
54
+ Event: Any
55
+ """事件系统"""
56
+
57
+ lifecycle: Any
58
+ """生命周期管理器"""
59
+
60
+ logger: Any
61
+ """日志管理器"""
62
+
63
+ exceptions: Any
64
+ """异常处理模块"""
65
+
66
+ storage: Any
67
+ """存储管理器"""
68
+
69
+ env: Any
70
+ """存储管理器别名"""
71
+
72
+ config: Any
73
+ """配置管理器"""
74
+
75
+ adapter: Any
76
+ """适配器管理器"""
77
+
78
+ AdapterFather: Any
79
+ """适配器基类别名"""
80
+
81
+ BaseAdapter: Any
82
+ """适配器基类"""
83
+
84
+ SendDSL: Any
85
+ """DSL 发送接口基类"""
86
+
87
+ module: Any
88
+ """模块管理器"""
89
+
90
+ router: Any
91
+ """路由管理器"""
92
+
93
+ adapter_server: Any
94
+ """路由管理器别名"""
95
+
96
+ def __init__(self):
97
+ """
98
+ 初始化 SDK 实例
99
+
100
+ 挂载所有核心模块到 SDK 实例
101
+ """
102
+ # 挂载核心模块
103
+ self.Event = Event
104
+ self.lifecycle = lifecycle
105
+ self.logger = logger
106
+ self.exceptions = exceptions
107
+
108
+ self.storage = storage
109
+ self.env = env
110
+ self.config = config
111
+
112
+ self.adapter = adapter
113
+ self.AdapterFather = AdapterFather
114
+ self.BaseAdapter = BaseAdapter
115
+ self.SendDSL = SendDSL
116
+
117
+ self.module = module
118
+
119
+ self.router = router
120
+ self.adapter_server = adapter_server
121
+
122
+ # 初始化协调器(在需要时创建)
123
+ self._initializer: Initializer = None # type: ignore
124
+ self._initialized: bool = False
125
+
126
+ # ==================== 初始化方法 ====================
127
+
128
+ async def init(self) -> bool:
129
+ """
130
+ SDK 初始化入口
131
+
132
+ :return: bool SDK 初始化是否成功
133
+
134
+ :example:
135
+ >>> success = await sdk.init()
136
+ >>> if success:
137
+ >>> await sdk.adapter.startup()
138
+ """
139
+ if not await self._prepare_environment():
140
+ return False
141
+
142
+ # 创建初始化协调器
143
+ self._initializer = Initializer(self)
144
+
145
+ # 执行初始化
146
+ self._initialized = await self._initializer.init()
147
+ return self._initialized
148
+
149
+ async def _prepare_environment(self) -> bool:
150
+ """
151
+ {!--< internal-use >!--}
152
+ 准备运行环境
153
+
154
+ 初始化项目环境文件和配置
155
+
156
+ :return: bool 环境准备是否成功
157
+ """
158
+ await lifecycle.submit_event(
159
+ "core.init.start",
160
+ msg="开始初始化"
161
+ )
162
+
163
+ logger.info("[Init] 准备初始化环境...")
164
+ try:
165
+ from .Core._self_config import get_erispulse_config
166
+ get_erispulse_config()
167
+ logger.info("[Init] 配置文件已加载")
168
+
169
+ main_init = await self._init_progress()
170
+ if main_init:
171
+ logger.info("[Init] 项目入口已生成, 你可以在 main.py 中编写一些代码")
172
+ return True
173
+ except Exception as e:
174
+ load_duration = self.lifecycle.stop_timer("core.init")
175
+ await lifecycle.submit_event(
176
+ "core.init.complete",
177
+ msg="模块初始化失败",
178
+ data={
179
+ "duration": load_duration,
180
+ "success": False
181
+ }
182
+ )
183
+ logger.error(f"环境准备失败: {e}")
184
+ return False
185
+
186
+ async def _init_progress(self) -> bool:
187
+ """
188
+ {!--< internal-use >!--}
189
+ 初始化项目环境文件
190
+
191
+ :return: bool 是否创建了新的 main.py 文件
192
+ """
193
+ from pathlib import Path
194
+
195
+ main_file = Path("main.py")
196
+ main_init = False
197
+
198
+ try:
199
+ if not main_file.exists():
200
+ main_content = """# main.py
201
+ # ErisPulse 主程序文件
202
+ # 本文件由 SDK 自动创建,您可随意修改
203
+ import asyncio
204
+ from ErisPulse import sdk
205
+
206
+ async def main():
207
+ try:
208
+ isInit = await sdk.init()
209
+
210
+ if not isInit:
211
+ sdk.logger.error("ErisPulse 初始化失败,请检查日志")
212
+ return
213
+
214
+ await sdk.adapter.startup()
215
+
216
+ # 保持程序运行(不建议修改)
217
+ await asyncio.Event().wait()
218
+ except Exception as e:
219
+ sdk.logger.error(e)
220
+ except KeyboardInterrupt:
221
+ sdk.logger.info("正在停止程序")
222
+ finally:
223
+ await sdk.adapter.shutdown()
224
+
225
+ if __name__ == "__main__":
226
+ asyncio.run(main())
227
+ """
228
+ with open(main_file, "w", encoding="utf-8") as f:
229
+ f.write(main_content)
230
+ main_init = True
231
+
232
+ return main_init
233
+ except Exception as e:
234
+ logger.error(f"无法初始化项目环境: {e}")
235
+ return False
236
+
237
+ def init_sync(self) -> bool:
238
+ """
239
+ SDK 初始化入口(同步版本)
240
+
241
+ 用于命令行直接调用,自动在事件循环中运行异步初始化
242
+
243
+ :return: bool SDK 初始化是否成功
244
+ """
245
+ return asyncio.run(self.init())
246
+
247
+ def init_task(self) -> asyncio.Task:
248
+ """
249
+ SDK 初始化入口,返回 Task 对象
250
+
251
+ :return: asyncio.Task 初始化任务
252
+ """
253
+ async def _async_init():
254
+ if not await self._prepare_environment():
255
+ return False
256
+
257
+ self._initializer = Initializer(self)
258
+ self._initialized = await self._initializer.init()
259
+ return self._initialized
260
+
261
+ try:
262
+ return asyncio.create_task(_async_init())
263
+ except RuntimeError:
264
+ loop = asyncio.new_event_loop()
265
+ asyncio.set_event_loop(loop)
266
+ return loop.create_task(_async_init())
267
+
268
+ # ==================== 模块加载方法 ====================
269
+
270
+ async def load_module(self, module_name: str) -> bool:
271
+ """
272
+ 手动加载指定模块
273
+
274
+ :param module_name: str 要加载的模块名称
275
+ :return: bool 加载是否成功
276
+
277
+ :example:
278
+ >>> await sdk.load_module("MyModule")
279
+ """
280
+ from .loaders.module_loader import LazyModule
281
+
282
+ try:
283
+ module_instance = getattr(self, module_name, None)
284
+ if isinstance(module_instance, LazyModule):
285
+ # 检查模块是否需要异步初始化
286
+ if hasattr(module_instance, '_needs_async_init') and object.__getattribute__(module_instance, '_needs_async_init'):
287
+ # 对于需要异步初始化的模块,执行完整异步初始化
288
+ await module_instance._initialize()
289
+ object.__setattr__(module_instance, '_needs_async_init', False)
290
+ return True
291
+ # 检查模块是否已经同步初始化但未完成异步部分
292
+ elif (object.__getattribute__(module_instance, '_initialized') and
293
+ object.__getattribute__(module_instance, '_is_base_module')):
294
+ # 如果是 BaseModule 子类且已同步初始化,只需完成异步部分
295
+ await module_instance._complete_async_init()
296
+ return True
297
+ else:
298
+ # 触发懒加载模块的完整初始化
299
+ await module_instance._initialize()
300
+ return True
301
+ elif module_instance is not None:
302
+ logger.warning(f"模块 {module_name} 已经加载")
303
+ return False
304
+ else:
305
+ logger.error(f"模块 {module_name} 不存在")
306
+ return False
307
+ except Exception as e:
308
+ logger.error(f"加载模块 {module_name} 失败: {e}")
309
+ return False
310
+
311
+ # ==================== 运行方法 ====================
312
+
313
+ async def run(self, keep_running: bool = True) -> None:
314
+ """
315
+ 无头模式运行 ErisPulse
316
+
317
+ :param keep_running: bool 是否保持运行
318
+
319
+ :example:
320
+ >>> await sdk.run(keep_running=True)
321
+ """
322
+ try:
323
+ isInit = await self.init()
324
+
325
+ if not isInit:
326
+ logger.error("ErisPulse 初始化失败,请检查日志")
327
+ return
328
+
329
+ await self.adapter.startup()
330
+
331
+ if keep_running:
332
+ # 保持程序运行
333
+ await asyncio.Event().wait()
334
+ except Exception as e:
335
+ logger.error(e)
336
+ finally:
337
+ await self.module.unload()
338
+ await self.adapter.shutdown()
339
+
340
+ # ==================== 重启方法 ====================
341
+
342
+ async def restart(self) -> bool:
343
+ """
344
+ SDK 重新启动
345
+
346
+ 执行完整的反初始化后再初始化过程
347
+
348
+ :return: bool 重新加载是否成功
349
+
350
+ :example:
351
+ >>> await sdk.restart()
352
+ """
353
+ logger.info("[Reload] 开始重新加载SDK...")
354
+
355
+ # 先执行反初始化
356
+ if not await self.uninit():
357
+ logger.error("[Reload] 反初始化失败,无法继续重新加载")
358
+ return False
359
+
360
+ # 再执行初始化
361
+ logger.info("[Reload] 开始重新初始化SDK...")
362
+ if not await self.init():
363
+ logger.error("[Reload] 初始化失败,请检查日志")
364
+ return False
365
+
366
+ logger.info("[Reload] 正在启动适配器...")
367
+ await self.adapter.startup()
368
+
369
+ logger.info("[Reload] 重新加载完成")
370
+ return True
371
+
372
+ # ==================== 反初始化方法 ====================
373
+
374
+ async def uninit(self) -> bool:
375
+ """
376
+ SDK 反初始化
377
+
378
+ 执行以下操作:
379
+ 1. 关闭所有适配器
380
+ 2. 卸载所有模块
381
+ 3. 清理所有事件处理器
382
+ 4. 清理僵尸线程
383
+
384
+ :return: bool 反初始化是否成功
385
+
386
+ :example:
387
+ >>> await sdk.uninit()
388
+ """
389
+ try:
390
+ logger.info("[Uninit] 开始反初始化SDK...")
391
+
392
+ # 1. 关闭所有适配器
393
+ logger.debug("[Uninit] 正在关闭适配器...")
394
+ await self.adapter.shutdown()
395
+
396
+ # 2. 卸载所有模块
397
+ logger.debug("[Uninit] 正在卸载模块...")
398
+ await self.module.unload()
399
+
400
+ # 3. 清理 Event 模块中的所有事件处理器
401
+ Event._clear_all_handlers()
402
+
403
+ # 4. 清理僵尸线程
404
+ logger.debug("[Uninit] 正在清理线程...")
405
+ # SDK 本身不创建线程,但可以记录可能的线程泄漏
406
+ current_task = asyncio.current_task()
407
+ logger.debug(f"[Uninit] 当前任务: {current_task}")
408
+
409
+ # 重置初始化状态
410
+ self._initialized = False
411
+ self._initializer = None
412
+
413
+ logger.info("[Uninit] SDK反初始化完成")
414
+ return True
415
+
416
+ except Exception as e:
417
+ logger.error(f"[Uninit] SDK反初始化失败: {e}")
418
+ return False
419
+
420
+ def __repr__(self) -> str:
421
+ """
422
+ 返回 SDK 的字符串表示
423
+
424
+ :return: str SDK 的字符串表示
425
+ """
426
+ return f"<ErisPulse SDK initialized={self._initialized}>"
427
+
428
+
429
+ # 创建全局 SDK 实例
430
+ sdk = SDK()
431
+
432
+ __all__ = [
433
+ "SDK",
434
+ "sdk"
435
+ ]
ErisPulse/sdk.pyi ADDED
@@ -0,0 +1,158 @@
1
+ # type: ignore
2
+ #
3
+ # Auto-generated type stub for sdk.py
4
+ # DO NOT EDIT MANUALLY - Generated by generate-type-stubs.py
5
+ #
6
+
7
+ """
8
+ ErisPulse SDK 主类
9
+
10
+ 提供统一的 SDK 接口,整合所有核心模块和加载器
11
+
12
+ {!--< tips >!--}
13
+ example:
14
+ >>> from ErisPulse import sdk
15
+ >>> await sdk.init()
16
+ >>> await sdk.adapter.startup()
17
+ {!--< /tips >!--}
18
+ """
19
+
20
+ import asyncio
21
+ from typing import Any
22
+ from .loaders.initializer import Initializer
23
+ from .Core import Event
24
+ from .Core import lifecycle, logger, exceptions
25
+ from .Core import storage, env, config
26
+ from .Core import adapter, AdapterFather, BaseAdapter, SendDSL
27
+ from .Core import module
28
+ from .Core import router, adapter_server
29
+
30
+ class SDK:
31
+ """
32
+ ErisPulse SDK 主类
33
+
34
+ 整合所有核心模块和加载器,提供统一的初始化和管理接口
35
+
36
+ {!--< tips >!--}
37
+ SDK 提供以下核心属性:
38
+ - Event: 事件系统
39
+ - lifecycle: 生命周期管理器
40
+ - logger: 日志管理器
41
+ - exceptions: 异常处理模块
42
+ - storage: 存储管理器
43
+ - env: 存储管理器别名
44
+ - config: 配置管理器
45
+ - adapter: 适配器管理器
46
+ - AdapterFather: 适配器基类别名
47
+ - BaseAdapter: 适配器基类
48
+ - SendDSL: DSL 发送接口基类
49
+ - module: 模块管理器
50
+ - router: 路由管理器
51
+ - adapter_server: 路由管理器别名
52
+ {!--< /tips >!--}
53
+ """
54
+ Event: Any
55
+ lifecycle: Any
56
+ logger: Any
57
+ exceptions: Any
58
+ storage: Any
59
+ env: Any
60
+ config: Any
61
+ adapter: Any
62
+ AdapterFather: Any
63
+ BaseAdapter: Any
64
+ SendDSL: Any
65
+ module: Any
66
+ router: Any
67
+ adapter_server: Any
68
+ def __init__(self: None) -> ...:
69
+ """
70
+ 初始化 SDK 实例
71
+
72
+ 挂载所有核心模块到 SDK 实例
73
+ """
74
+ ...
75
+ async def init(self: object) -> bool:
76
+ """
77
+ SDK 初始化入口
78
+
79
+ :return: bool SDK 初始化是否成功
80
+
81
+ :example:
82
+ >>> success = await sdk.init()
83
+ >>> if success:
84
+ >>> await sdk.adapter.startup()
85
+ """
86
+ ...
87
+ def init_sync(self: object) -> bool:
88
+ """
89
+ SDK 初始化入口(同步版本)
90
+
91
+ 用于命令行直接调用,自动在事件循环中运行异步初始化
92
+
93
+ :return: bool SDK 初始化是否成功
94
+ """
95
+ ...
96
+ def init_task(self: object) -> asyncio.Task:
97
+ """
98
+ SDK 初始化入口,返回 Task 对象
99
+
100
+ :return: asyncio.Task 初始化任务
101
+ """
102
+ ...
103
+ async def load_module(self: object, module_name: str) -> bool:
104
+ """
105
+ 手动加载指定模块
106
+
107
+ :param module_name: str 要加载的模块名称
108
+ :return: bool 加载是否成功
109
+
110
+ :example:
111
+ >>> await sdk.load_module("MyModule")
112
+ """
113
+ ...
114
+ async def run(self: object, keep_running: bool = ...) -> None:
115
+ """
116
+ 无头模式运行 ErisPulse
117
+
118
+ :param keep_running: bool 是否保持运行
119
+
120
+ :example:
121
+ >>> await sdk.run(keep_running=True)
122
+ """
123
+ ...
124
+ async def restart(self: object) -> bool:
125
+ """
126
+ SDK 重新启动
127
+
128
+ 执行完整的反初始化后再初始化过程
129
+
130
+ :return: bool 重新加载是否成功
131
+
132
+ :example:
133
+ >>> await sdk.restart()
134
+ """
135
+ ...
136
+ async def uninit(self: object) -> bool:
137
+ """
138
+ SDK 反初始化
139
+
140
+ 执行以下操作:
141
+ 1. 关闭所有适配器
142
+ 2. 卸载所有模块
143
+ 3. 清理所有事件处理器
144
+ 4. 清理僵尸线程
145
+
146
+ :return: bool 反初始化是否成功
147
+
148
+ :example:
149
+ >>> await sdk.uninit()
150
+ """
151
+ ...
152
+ def __repr__(self: object) -> str:
153
+ """
154
+ 返回 SDK 的字符串表示
155
+
156
+ :return: str SDK 的字符串表示
157
+ """
158
+ ...
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ErisPulse
3
- Version: 2.3.4.dev0
3
+ Version: 2.3.4.dev2
4
4
  Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
5
5
  Author-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
6
6
  License: MIT License