ErisPulse 2.4.3.dev1__tar.gz → 2.4.4__tar.gz

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 (117) hide show
  1. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/PKG-INFO +1 -1
  2. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/pyproject.toml +1 -1
  3. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/init.py +1 -13
  4. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/run.py +53 -15
  5. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/run.pyi +5 -3
  6. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/logger.py +1 -1
  7. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/sdk.py +2 -0
  8. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/.gitignore +0 -0
  9. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/LICENSE +0 -0
  10. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/README.md +0 -0
  11. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/__init__.py +0 -0
  12. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/__init__.pyi +0 -0
  13. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/base.py +0 -0
  14. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/base.pyi +0 -0
  15. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/cli.py +0 -0
  16. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/cli.pyi +0 -0
  17. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/__init__.py +0 -0
  18. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
  19. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/init.pyi +0 -0
  20. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/install.py +0 -0
  21. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/install.pyi +0 -0
  22. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/list.py +0 -0
  23. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/list.pyi +0 -0
  24. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/list_remote.py +0 -0
  25. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/list_remote.pyi +0 -0
  26. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/self_update.py +0 -0
  27. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/self_update.pyi +0 -0
  28. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/uninstall.py +0 -0
  29. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/uninstall.pyi +0 -0
  30. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/upgrade.py +0 -0
  31. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/commands/upgrade.pyi +0 -0
  32. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/console.py +0 -0
  33. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/console.pyi +0 -0
  34. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/registry.py +0 -0
  35. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/registry.pyi +0 -0
  36. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/utils/__init__.py +0 -0
  37. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
  38. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/utils/package_manager.py +0 -0
  39. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/CLI/utils/package_manager.pyi +0 -0
  40. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Bases/__init__.py +0 -0
  41. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Bases/__init__.pyi +0 -0
  42. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Bases/adapter.py +0 -0
  43. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Bases/adapter.pyi +0 -0
  44. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Bases/manager.py +0 -0
  45. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Bases/manager.pyi +0 -0
  46. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Bases/module.py +0 -0
  47. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Bases/module.pyi +0 -0
  48. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Bases/storage.py +0 -0
  49. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Bases/storage.pyi +0 -0
  50. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/__init__.py +0 -0
  51. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/__init__.pyi +0 -0
  52. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/base.py +0 -0
  53. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/base.pyi +0 -0
  54. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/command.py +0 -0
  55. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/command.pyi +0 -0
  56. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/message.py +0 -0
  57. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/message.pyi +0 -0
  58. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/message_builder.py +0 -0
  59. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/message_builder.pyi +0 -0
  60. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/meta.py +0 -0
  61. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/meta.pyi +0 -0
  62. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/notice.py +0 -0
  63. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/notice.pyi +0 -0
  64. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/request.py +0 -0
  65. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/request.pyi +0 -0
  66. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/session_type.py +0 -0
  67. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/session_type.pyi +0 -0
  68. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/wrapper.py +0 -0
  69. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/Event/wrapper.pyi +0 -0
  70. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/__init__.py +0 -0
  71. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/__init__.pyi +0 -0
  72. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/adapter.py +0 -0
  73. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/adapter.pyi +0 -0
  74. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/config.py +0 -0
  75. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/config.pyi +0 -0
  76. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/lifecycle.py +0 -0
  77. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/lifecycle.pyi +0 -0
  78. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/logger.pyi +0 -0
  79. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/module.py +0 -0
  80. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/module.pyi +0 -0
  81. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/router.py +0 -0
  82. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/router.pyi +0 -0
  83. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/storage.py +0 -0
  84. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/Core/storage.pyi +0 -0
  85. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/__init__.py +0 -0
  86. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/__init__.pyi +0 -0
  87. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/__main__.py +0 -0
  88. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/__main__.pyi +0 -0
  89. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/finders/__init__.py +0 -0
  90. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/finders/__init__.pyi +0 -0
  91. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/finders/adapter.py +0 -0
  92. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/finders/adapter.pyi +0 -0
  93. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/finders/bases/__init__.py +0 -0
  94. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
  95. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/finders/bases/finder.py +0 -0
  96. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/finders/bases/finder.pyi +0 -0
  97. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/finders/module.py +0 -0
  98. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/finders/module.pyi +0 -0
  99. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/loaders/__init__.py +0 -0
  100. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/loaders/__init__.pyi +0 -0
  101. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/loaders/adapter.py +0 -0
  102. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/loaders/adapter.pyi +0 -0
  103. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/loaders/bases/__init__.py +0 -0
  104. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
  105. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/loaders/bases/loader.py +0 -0
  106. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/loaders/bases/loader.pyi +0 -0
  107. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/loaders/module.py +0 -0
  108. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/loaders/module.pyi +0 -0
  109. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/loaders/strategy.py +0 -0
  110. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/loaders/strategy.pyi +0 -0
  111. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/runtime/__init__.py +0 -0
  112. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/runtime/__init__.pyi +0 -0
  113. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/runtime/exceptions.py +0 -0
  114. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/runtime/exceptions.pyi +0 -0
  115. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/runtime/frame_config.py +0 -0
  116. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/runtime/frame_config.pyi +0 -0
  117. {erispulse-2.4.3.dev1 → erispulse-2.4.4}/src/ErisPulse/sdk.pyi +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ErisPulse
3
- Version: 2.4.3.dev1
3
+ Version: 2.4.4
4
4
  Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
5
5
  Author-email: ErisDev <erisdev@88.com>
6
6
  Maintainer-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ErisPulse"
7
- version = "2.4.3-dev.1"
7
+ version = "2.4.4"
8
8
  description = "ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -16,7 +16,6 @@ from ..console import console
16
16
  from ..utils import PackageManager
17
17
  from ..base import Command
18
18
 
19
-
20
19
  class InitCommand(Command):
21
20
  name = "init"
22
21
  description = "初始化 ErisPulse 项目"
@@ -119,18 +118,7 @@ class InitCommand(Command):
119
118
  f.write("import asyncio\n")
120
119
  f.write("from ErisPulse import sdk\n\n")
121
120
  f.write("async def main():\n")
122
- f.write(' """主程序入口"""\n')
123
- f.write(" # 初始化 SDK\n")
124
- f.write(" await sdk.init()\n\n")
125
- f.write(" # 启动适配器\n")
126
- f.write(" await sdk.adapter.startup()\n\n")
127
- f.write(' print("ErisPulse 已启动,按 Ctrl+C 退出")\n')
128
- f.write(" try:\n")
129
- f.write(" while True:\n")
130
- f.write(" await asyncio.sleep(1)\n")
131
- f.write(" except KeyboardInterrupt:\n")
132
- f.write(" print(\"\\n正在关闭...\")\n")
133
- f.write(" await sdk.adapter.shutdown()\n\n")
121
+ f.write(" await sdk.run(keep_running=True)\n\n")
134
122
  f.write("if __name__ == \"__main__\":\n")
135
123
  f.write(" asyncio.run(main())\n")
136
124
 
@@ -5,8 +5,11 @@ Run 命令实现
5
5
  """
6
6
 
7
7
  import os
8
+ import sys
8
9
  import time
9
10
  import asyncio
11
+ import subprocess
12
+ import runpy
10
13
  from argparse import ArgumentParser
11
14
  from watchdog.observers import Observer
12
15
  from rich.panel import Panel
@@ -114,27 +117,62 @@ class RunCommand(Command):
114
117
  self._observer.join()
115
118
 
116
119
  def _run_script(self, script_path: str, reload_mode: bool):
117
- """
118
- 运行指定脚本文件
119
- """
120
- async def _run():
121
- from ... import sdk
120
+ script_path_abs = os.path.abspath(script_path)
122
121
 
123
- if reload_mode:
124
- loop = asyncio.get_running_loop()
125
- watch_dir = os.path.dirname(os.path.abspath(script_path))
126
- self._setup_watchdog(watch_dir, loop)
122
+ if reload_mode:
123
+ self._run_script_with_reload(script_path_abs)
124
+ else:
125
+ try:
126
+ runpy.run_path(script_path_abs, run_name="__main__")
127
+ except SystemExit:
128
+ pass
129
+ except KeyboardInterrupt:
130
+ pass
131
+
132
+ def _run_script_with_reload(self, script_path_abs: str):
133
+ watch_dir = os.path.dirname(script_path_abs)
134
+
135
+ process = subprocess.Popen([sys.executable, script_path_abs])
136
+
137
+ reload_state = {
138
+ "process": process,
139
+ "last_reload": 0.0,
140
+ }
141
+
142
+ class _ScriptReloadHandler(FileSystemEventHandler):
143
+ def on_modified(self, event):
144
+ now = time.time()
145
+ if now - reload_state["last_reload"] < 1.0:
146
+ return
147
+ if event.src_path.endswith(".py"):
148
+ reload_state["last_reload"] = now
149
+ console.print(f"检测到文件变更 ({os.path.basename(event.src_path)}),正在重启...")
150
+ reload_state["process"].terminate()
151
+ reload_state["process"].wait()
152
+ reload_state["process"] = subprocess.Popen([sys.executable, script_path_abs])
153
+
154
+ observer = Observer()
155
+ observer.schedule(_ScriptReloadHandler(), watch_dir, recursive=True)
156
+ observer.start()
127
157
 
128
- await sdk.run(keep_running=True)
158
+ console.print(Panel(
159
+ f"[bold]开发重载模式[/]\n监控目录: [path]{watch_dir}[/]",
160
+ title="热重载已启动",
161
+ border_style="info"
162
+ ))
129
163
 
130
164
  try:
131
- asyncio.run(_run())
165
+ while True:
166
+ proc = reload_state["process"]
167
+ proc.wait()
168
+ time.sleep(0.3)
169
+ if reload_state["process"] is proc:
170
+ break
132
171
  except KeyboardInterrupt:
133
- pass
172
+ reload_state["process"].terminate()
134
173
  finally:
135
- if reload_mode and hasattr(self, '_observer'):
136
- self._observer.stop()
137
- self._observer.join()
174
+ observer.stop()
175
+ observer.join()
138
176
 
139
177
  def _setup_watchdog(self, watch_dir: str, loop: asyncio.AbstractEventLoop):
140
178
  if not os.path.exists(watch_dir):
@@ -11,8 +11,11 @@ Run 命令实现
11
11
  """
12
12
 
13
13
  import os
14
+ import sys
14
15
  import time
15
16
  import asyncio
17
+ import subprocess
18
+ import runpy
16
19
  from argparse import ArgumentParser
17
20
  from watchdog.observers import Observer
18
21
  from rich.panel import Panel
@@ -55,9 +58,8 @@ class RunCommand(Command):
55
58
  """
56
59
  ...
57
60
  def _run_script(self: object, script_path: str, reload_mode: bool) -> ...:
58
- """
59
- 运行指定脚本文件
60
- """
61
+ ...
62
+ def _run_script_with_reload(self: object, script_path_abs: str) -> ...:
61
63
  ...
62
64
  def _setup_watchdog(self: object, watch_dir: str, loop: asyncio.AbstractEventLoop) -> ...:
63
65
  ...
@@ -120,7 +120,7 @@ class Logger:
120
120
  try:
121
121
  self._file_handler = logging.FileHandler(p, encoding="utf-8")
122
122
  # 使用自定义格式化器去除rich markup标签
123
- self._file_handler.setFormatter(logging.Formatter("[%(name)s] %(message)s"))
123
+ self._file_handler.setFormatter(logging.Formatter("%(message)s"))
124
124
  self._logger.addHandler(self._file_handler)
125
125
  return True
126
126
  except Exception as e:
@@ -646,6 +646,8 @@ class SDK:
646
646
  if keep_running:
647
647
  # 保持程序运行
648
648
  await asyncio.Event().wait()
649
+ except asyncio.CancelledError:
650
+ logger.info("收到关闭信号,正在清理...")
649
651
  except Exception as e:
650
652
  logger.error(e)
651
653
  finally:
File without changes
File without changes
File without changes