ErisPulse 2.1.15.dev3__py3-none-any.whl → 2.2.0.dev1__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/__main__.py CHANGED
@@ -249,8 +249,8 @@ class PackageManager:
249
249
  :raises ImportError: 核心模块不可用时抛出
250
250
  """
251
251
  try:
252
- from ErisPulse.Core import mods
253
- return mods.get_module_status(module_name)
252
+ from ErisPulse.Core import module_registry
253
+ return module_registry.get_module_status(module_name)
254
254
  except ImportError:
255
255
  return True
256
256
  except Exception:
@@ -339,28 +339,44 @@ class PackageManager:
339
339
  [sys.executable, "-m", "pip"] + args,
340
340
  stdout=subprocess.PIPE,
341
341
  stderr=subprocess.PIPE,
342
- universal_newlines=True
342
+ universal_newlines=True,
343
+ bufsize=1 # 行缓冲
343
344
  )
344
345
 
345
346
  stdout_lines = []
346
347
  stderr_lines = []
347
348
 
348
- # 实时读取输出
349
- while True:
350
- stdout_line = process.stdout.readline()
351
- stderr_line = process.stderr.readline()
352
-
353
- if stdout_line:
354
- stdout_lines.append(stdout_line)
355
- progress.update(task, advance=1)
356
-
357
- if stderr_line:
358
- stderr_lines.append(stderr_line)
359
- progress.update(task, advance=1)
360
-
361
- if stdout_line == '' and stderr_line == '' and process.poll() is not None:
362
- break
363
-
349
+ # 使用超时机制避免永久阻塞
350
+ import threading
351
+ import queue
352
+
353
+ def read_output(pipe, lines_list):
354
+ try:
355
+ for line in iter(pipe.readline, ''):
356
+ lines_list.append(line)
357
+ progress.update(task, advance=5) # 每行增加进度
358
+ pipe.close()
359
+ except Exception:
360
+ pass
361
+
362
+ stdout_thread = threading.Thread(target=read_output, args=(process.stdout, stdout_lines))
363
+ stderr_thread = threading.Thread(target=read_output, args=(process.stderr, stderr_lines))
364
+
365
+ stdout_thread.start()
366
+ stderr_thread.start()
367
+
368
+ # 等待进程结束,最多等待5分钟
369
+ try:
370
+ process.wait(timeout=300)
371
+ except subprocess.TimeoutExpired:
372
+ process.kill()
373
+ process.wait()
374
+ console.print("[warning]命令执行超时,已强制终止[/]")
375
+ return False, "", "命令执行超时"
376
+
377
+ stdout_thread.join(timeout=10)
378
+ stderr_thread.join(timeout=10)
379
+
364
380
  stdout = ''.join(stdout_lines)
365
381
  stderr = ''.join(stderr_lines)
366
382
 
@@ -368,7 +384,9 @@ class PackageManager:
368
384
  except subprocess.CalledProcessError as e:
369
385
  console.print(f"[error]命令执行失败: {e}[/]")
370
386
  return False, "", str(e)
371
-
387
+ except Exception as e:
388
+ console.print(f"[error]执行过程中发生异常: {e}[/]")
389
+ return False, "", str(e)
372
390
 
373
391
  def _compare_versions(self, version1: str, version2: str) -> int:
374
392
  """
@@ -813,34 +831,83 @@ class PackageManager:
813
831
  if target_version:
814
832
  package_spec += f"=={target_version}"
815
833
 
816
- # 执行更新命令
817
- success, stdout, stderr = self._run_pip_command_with_output(
818
- ["install", "--upgrade", package_spec],
819
- f"更新 ErisPulse SDK {f'到 {target_version}' if target_version else '到最新版本'}"
820
- )
821
-
822
- if success:
823
- new_version = target_version or "最新版本"
824
- console.print(Panel(
825
- f"[success]ErisPulse SDK 更新成功[/]\n"
826
- f" 当前版本: [bold]{current_version}[/]\n"
827
- f" 更新版本: [bold]{new_version}[/]\n\n"
828
- f"[dim]{stdout}[/]",
829
- title="更新完成",
830
- border_style="success"
831
- ))
834
+ # 检查是否在Windows上且尝试更新自身
835
+ if sys.platform == "win32":
836
+ # 构建更新脚本
837
+ update_script = f"""
838
+ import time
839
+ import subprocess
840
+ import sys
841
+ import os
842
+
843
+ # 等待原进程结束
844
+ time.sleep(2)
845
+
846
+ # 执行更新命令
847
+ try:
848
+ result = subprocess.run([
849
+ sys.executable, "-m", "pip", "install", "--upgrade", "{package_spec}"
850
+ ], capture_output=True, text=True, timeout=300)
851
+
852
+ if result.returncode == 0:
853
+ print("更新成功!")
854
+ print(result.stdout)
855
+ else:
856
+ print("更新失败:")
857
+ print(result.stderr)
858
+ except Exception as e:
859
+ print(f"更新过程中出错: {{e}}")
860
+
861
+ # 清理临时脚本
862
+ try:
863
+ os.remove(__file__)
864
+ except:
865
+ pass
866
+ """
867
+ # 创建临时更新脚本
868
+ import tempfile
869
+ script_path = os.path.join(tempfile.gettempdir(), "epsdk_update.py")
870
+ with open(script_path, "w", encoding="utf-8") as f:
871
+ f.write(update_script)
872
+
873
+ # 启动更新进程并退出当前进程
874
+ console.print("[info]正在启动更新进程...[/]")
875
+ console.print("[info]请稍后重新运行CLI以使用新版本[/]")
832
876
 
833
- if not target_version:
834
- console.print("[info]请重新启动CLI以使用新版本[/]")
877
+ subprocess.Popen([
878
+ sys.executable, script_path
879
+ ], creationflags=subprocess.CREATE_NEW_CONSOLE)
880
+
881
+ return True
835
882
  else:
836
- console.print(Panel(
837
- f"[error]ErisPulse SDK 更新失败[/]\n\n"
838
- f"[dim]{stderr}[/]",
839
- title="更新失败",
840
- border_style="error"
841
- ))
883
+ # 非Windows平台
884
+ success, stdout, stderr = self._run_pip_command_with_output(
885
+ ["install", "--upgrade", package_spec],
886
+ f"更新 ErisPulse SDK {f'到 {target_version}' if target_version else '到最新版本'}"
887
+ )
842
888
 
843
- return success
889
+ if success:
890
+ new_version = target_version or "最新版本"
891
+ console.print(Panel(
892
+ f"[success]ErisPulse SDK 更新成功[/]\n"
893
+ f" 当前版本: [bold]{current_version}[/]\n"
894
+ f" 更新版本: [bold]{new_version}[/]\n\n"
895
+ f"[dim]{stdout}[/]",
896
+ title="更新完成",
897
+ border_style="success"
898
+ ))
899
+
900
+ if not target_version:
901
+ console.print("[info]请重新启动CLI以使用新版本[/]")
902
+ else:
903
+ console.print(Panel(
904
+ f"[error]ErisPulse SDK 更新失败[/]\n\n"
905
+ f"[dim]{stderr}[/]",
906
+ title="更新失败",
907
+ border_style="error"
908
+ ))
909
+
910
+ return success
844
911
 
845
912
  class ReloadHandler(FileSystemEventHandler):
846
913
  """
@@ -1651,21 +1718,21 @@ class CLI:
1651
1718
  sys.exit(1)
1652
1719
 
1653
1720
  elif args.command == "module":
1654
- from ErisPulse.Core import mods
1721
+ from ErisPulse.Core import module_registry
1655
1722
  installed = self.package_manager.get_installed_packages()
1656
1723
 
1657
1724
  if args.module_command == "enable":
1658
1725
  if args.module not in installed["modules"]:
1659
1726
  console.print(f"[error]模块 [bold]{args.module}[/] 不存在或未安装[/]")
1660
1727
  else:
1661
- mods.set_module_status(args.module, True)
1728
+ module_registry.set_module_status(args.module, True)
1662
1729
  console.print(f"[success]模块 [bold]{args.module}[/] 已启用[/]")
1663
1730
 
1664
1731
  elif args.module_command == "disable":
1665
1732
  if args.module not in installed["modules"]:
1666
1733
  console.print(f"[error]模块 [bold]{args.module}[/] 不存在或未安装[/]")
1667
1734
  else:
1668
- mods.set_module_status(args.module, False)
1735
+ module_registry.set_module_status(args.module, False)
1669
1736
  console.print(f"[warning]模块 [bold]{args.module}[/] 已禁用[/]")
1670
1737
  else:
1671
1738
  self.parser.parse_args(["module", "--help"])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ErisPulse
3
- Version: 2.1.15.dev3
3
+ Version: 2.2.0.dev1
4
4
  Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
5
5
  Author-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
6
6
  License: MIT License
@@ -34,6 +34,12 @@ License: MIT License
34
34
  - Metadata definitions
35
35
 
36
36
  This ensures consistent behavior and interoperability across all adapter implementations.
37
+
38
+ 感谢所有为开源社区做出贡献的开发者和作者
39
+
40
+ 请尊重每一位开源作者的劳动成果,承诺在使用、修改和分发本软件时,将严格遵守相关许可证条款,并保留所有原始版权声明
41
+
42
+ 开源精神的核心在于分享、协作与尊重。我们希望通过本项目,能够传承这一精神,为开源社区的发展贡献一份力量
37
43
  License-File: LICENSE
38
44
  Classifier: Development Status :: 5 - Production/Stable
39
45
  Classifier: Intended Audience :: Developers
@@ -0,0 +1,27 @@
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=xndqrBPwIrvS8rspy8c_4We6sfrjNCFBJNmcBuMv0NU,1019
15
+ ErisPulse/Core/Event/base.py,sha256=cr7FEaSnxxpAKNMR9a4RkX6xX5BiqndsMwBZV_me4W8,3741
16
+ ErisPulse/Core/Event/cmd.py,sha256=iiKcvHFYYj_1ZnhmFJ0Ow4X96MjwSYIrGW_IWw0Z74w,6909
17
+ ErisPulse/Core/Event/exceptions.py,sha256=iGcuPaC7F4cZeujcvBdZb9bzQGnHBdb9CcPKoB760Bo,711
18
+ ErisPulse/Core/Event/manager.py,sha256=S__BVAyGbY41W4ocPiTQ00BDaPxH-kj0lWoLl2Q3MRw,4225
19
+ ErisPulse/Core/Event/message.py,sha256=TBDmeribhCRQrV6M0Df_815PgBwneap1-e0xc9IvT9k,2581
20
+ ErisPulse/Core/Event/meta.py,sha256=ThUrYhTDPjzy3XwlMEGTFTzQBOV7-irtIvbPEe76Mk4,2243
21
+ ErisPulse/Core/Event/notice.py,sha256=lnPJCTfAe5xviO-IkpCkcP8UhaAEJ3FvtBbNmoS9Ji4,2789
22
+ ErisPulse/Core/Event/request.py,sha256=Ri46OFYu7jkFeRqS4kHD_6j7KCpOdmDNjrxAki5YsWQ,1817
23
+ erispulse-2.2.0.dev1.dist-info/METADATA,sha256=9W2b-GP4uSM5IO4xV_owvZJcPUJmvT2EgsXrggvMjUY,7290
24
+ erispulse-2.2.0.dev1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
25
+ erispulse-2.2.0.dev1.dist-info/entry_points.txt,sha256=Jss71M6nEha0TA-DyVZugPYdcL14s9QpiOeIlgWxzOc,182
26
+ erispulse-2.2.0.dev1.dist-info/licenses/LICENSE,sha256=b2XwzcfWuv_36Op3xGdjcuPHgfCz62yT3bXYjfStpxY,1852
27
+ erispulse-2.2.0.dev1.dist-info/RECORD,,
@@ -28,4 +28,10 @@ This SDK's core adapter standardization layer strictly follows OneBot12 specific
28
28
  - Message segment definitions
29
29
  - Metadata definitions
30
30
 
31
- This ensures consistent behavior and interoperability across all adapter implementations.
31
+ This ensures consistent behavior and interoperability across all adapter implementations.
32
+
33
+ 感谢所有为开源社区做出贡献的开发者和作者
34
+
35
+ 请尊重每一位开源作者的劳动成果,承诺在使用、修改和分发本软件时,将严格遵守相关许可证条款,并保留所有原始版权声明
36
+
37
+ 开源精神的核心在于分享、协作与尊重。我们希望通过本项目,能够传承这一精神,为开源社区的发展贡献一份力量
@@ -1,17 +0,0 @@
1
- ErisPulse/__init__.py,sha256=ElwKDJgga0oePhwPXuxgUsWMevpfXdsii0X0zuJPmC0,26790
2
- ErisPulse/__main__.py,sha256=ePvZuyPEq5-ODog3aFMPQJCbj3TNKsZU_N3kynJ6aek,73908
3
- ErisPulse/Core/__init__.py,sha256=VCYMC8Ehfw603jV9KFaWdiWAh4UORSqrMTRuVfXZK0I,481
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=6p53nQE7NFXSqs_lftW-HQB1BQcgruAYOpIYx25QLVA,11252
10
- ErisPulse/Core/mods.py,sha256=vKLEDr2nQ4kUULHmUQYFbRL04ePIKlwLEOGB-ldMYS8,7130
11
- ErisPulse/Core/router.py,sha256=s2EBh2qpt3UXYhB06Ppc1XTFuZ3u0ZfXENJxwkgPoq8,8542
12
- ErisPulse/Core/storage.py,sha256=oRum4eVaTc3yxcaafggoIvrk41LPbvApSCxkGM3YmzU,17904
13
- erispulse-2.1.15.dev3.dist-info/METADATA,sha256=2F6t5xA_I3utUv6eRjgXJ24--oYEpHWQ8ZauCLRbI6I,6856
14
- erispulse-2.1.15.dev3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
15
- erispulse-2.1.15.dev3.dist-info/entry_points.txt,sha256=Jss71M6nEha0TA-DyVZugPYdcL14s9QpiOeIlgWxzOc,182
16
- erispulse-2.1.15.dev3.dist-info/licenses/LICENSE,sha256=4jyqikiB0G0n06CEEMMTzTXjE4IShghSlB74skMSPQs,1464
17
- erispulse-2.1.15.dev3.dist-info/RECORD,,