ErisPulse 2.3.3.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 (97) hide show
  1. ErisPulse/CLI/__init__.py +11 -0
  2. ErisPulse/CLI/__init__.pyi +13 -0
  3. ErisPulse/CLI/base.py +52 -0
  4. ErisPulse/CLI/base.pyi +50 -0
  5. ErisPulse/CLI/cli.py +224 -0
  6. ErisPulse/CLI/cli.pyi +80 -0
  7. ErisPulse/CLI/commands/__init__.py +6 -0
  8. ErisPulse/CLI/commands/__init__.pyi +12 -0
  9. ErisPulse/CLI/commands/init.py +395 -0
  10. ErisPulse/CLI/commands/init.pyi +70 -0
  11. ErisPulse/CLI/commands/install.py +302 -0
  12. ErisPulse/CLI/commands/install.pyi +58 -0
  13. ErisPulse/CLI/commands/list.py +160 -0
  14. ErisPulse/CLI/commands/list.pyi +44 -0
  15. ErisPulse/CLI/commands/list_remote.py +123 -0
  16. ErisPulse/CLI/commands/list_remote.pyi +35 -0
  17. ErisPulse/CLI/commands/run.py +108 -0
  18. ErisPulse/CLI/commands/run.pyi +39 -0
  19. ErisPulse/CLI/commands/self_update.py +232 -0
  20. ErisPulse/CLI/commands/self_update.pyi +47 -0
  21. ErisPulse/CLI/commands/uninstall.py +32 -0
  22. ErisPulse/CLI/commands/uninstall.pyi +24 -0
  23. ErisPulse/CLI/commands/upgrade.py +56 -0
  24. ErisPulse/CLI/commands/upgrade.pyi +25 -0
  25. ErisPulse/CLI/console.pyi +20 -0
  26. ErisPulse/CLI/registry.py +112 -0
  27. ErisPulse/CLI/registry.pyi +99 -0
  28. ErisPulse/{utils → CLI/utils}/__init__.py +2 -6
  29. ErisPulse/CLI/utils/__init__.pyi +14 -0
  30. ErisPulse/{utils → CLI/utils}/package_manager.py +146 -20
  31. ErisPulse/CLI/utils/package_manager.pyi +241 -0
  32. ErisPulse/{utils → CLI/utils}/reload_handler.py +7 -8
  33. ErisPulse/CLI/utils/reload_handler.pyi +64 -0
  34. ErisPulse/Core/Bases/__init__.pyi +14 -0
  35. ErisPulse/Core/Bases/adapter.py +13 -1
  36. ErisPulse/Core/Bases/adapter.pyi +140 -0
  37. ErisPulse/Core/Bases/manager.py +136 -0
  38. ErisPulse/Core/Bases/manager.pyi +108 -0
  39. ErisPulse/Core/Bases/module.py +53 -1
  40. ErisPulse/Core/Bases/module.pyi +95 -0
  41. ErisPulse/Core/Event/__init__.pyi +26 -0
  42. ErisPulse/Core/Event/base.pyi +62 -0
  43. ErisPulse/Core/Event/command.py +6 -1
  44. ErisPulse/Core/Event/command.pyi +113 -0
  45. ErisPulse/Core/Event/exceptions.pyi +43 -0
  46. ErisPulse/Core/Event/message.pyi +93 -0
  47. ErisPulse/Core/Event/meta.pyi +92 -0
  48. ErisPulse/Core/Event/notice.pyi +108 -0
  49. ErisPulse/Core/Event/request.pyi +76 -0
  50. ErisPulse/Core/Event/wrapper.py +2 -3
  51. ErisPulse/Core/Event/wrapper.pyi +403 -0
  52. ErisPulse/Core/__init__.py +16 -13
  53. ErisPulse/Core/__init__.pyi +16 -0
  54. ErisPulse/Core/_self_config.py +1 -1
  55. ErisPulse/Core/_self_config.pyi +72 -0
  56. ErisPulse/Core/adapter.py +70 -10
  57. ErisPulse/Core/adapter.pyi +246 -0
  58. ErisPulse/Core/config.pyi +70 -0
  59. ErisPulse/Core/exceptions.py +4 -2
  60. ErisPulse/Core/exceptions.pyi +60 -0
  61. ErisPulse/Core/lifecycle.py +15 -1
  62. ErisPulse/Core/lifecycle.pyi +92 -0
  63. ErisPulse/Core/logger.py +21 -15
  64. ErisPulse/Core/logger.pyi +169 -0
  65. ErisPulse/Core/module.py +57 -9
  66. ErisPulse/Core/module.pyi +189 -0
  67. ErisPulse/Core/router.py +13 -5
  68. ErisPulse/Core/router.pyi +120 -0
  69. ErisPulse/Core/storage.py +94 -256
  70. ErisPulse/Core/storage.pyi +220 -0
  71. ErisPulse/__init__.py +35 -1236
  72. ErisPulse/__init__.pyi +22 -0
  73. ErisPulse/__main__.py +1 -1
  74. ErisPulse/__main__.pyi +24 -0
  75. ErisPulse/loaders/__init__.py +22 -0
  76. ErisPulse/loaders/__init__.pyi +21 -0
  77. ErisPulse/loaders/adapter_loader.py +187 -0
  78. ErisPulse/loaders/adapter_loader.pyi +82 -0
  79. ErisPulse/loaders/base_loader.py +162 -0
  80. ErisPulse/loaders/base_loader.pyi +23 -0
  81. ErisPulse/loaders/initializer.py +150 -0
  82. ErisPulse/loaders/initializer.pyi +60 -0
  83. ErisPulse/loaders/module_loader.py +618 -0
  84. ErisPulse/loaders/module_loader.pyi +179 -0
  85. ErisPulse/loaders/strategy.py +129 -0
  86. ErisPulse/loaders/strategy.pyi +90 -0
  87. ErisPulse/sdk.py +435 -0
  88. ErisPulse/sdk.pyi +158 -0
  89. {erispulse-2.3.3.dev0.dist-info → erispulse-2.3.4.dev2.dist-info}/METADATA +6 -20
  90. erispulse-2.3.4.dev2.dist-info/RECORD +103 -0
  91. {erispulse-2.3.3.dev0.dist-info → erispulse-2.3.4.dev2.dist-info}/licenses/LICENSE +3 -3
  92. ErisPulse/Core/ux.py +0 -635
  93. ErisPulse/utils/cli.py +0 -1097
  94. erispulse-2.3.3.dev0.dist-info/RECORD +0 -35
  95. /ErisPulse/{utils → CLI}/console.py +0 -0
  96. {erispulse-2.3.3.dev0.dist-info → erispulse-2.3.4.dev2.dist-info}/WHEEL +0 -0
  97. {erispulse-2.3.3.dev0.dist-info → erispulse-2.3.4.dev2.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,35 @@
1
+ # type: ignore
2
+ #
3
+ # Auto-generated type stub for list_remote.py
4
+ # DO NOT EDIT MANUALLY - Generated by generate-type-stubs.py
5
+ #
6
+
7
+ """
8
+ List-Remote 命令实现
9
+
10
+ 列出远程可用的组件
11
+ """
12
+
13
+ import asyncio
14
+ from argparse import ArgumentParser
15
+ from rich.table import Table
16
+ from rich.box import SIMPLE
17
+ from ..utils import PackageManager
18
+ from ..console import console
19
+ from ..base import Command
20
+
21
+ class ListRemoteCommand(Command):
22
+ def __init__(self: None) -> ...:
23
+ ...
24
+ def add_arguments(self: object, parser: ArgumentParser) -> ...:
25
+ ...
26
+ def execute(self: object, args: ...) -> ...:
27
+ ...
28
+ def _print_remote_packages(self: object, pkg_type: str, force_refresh: bool = ...) -> ...:
29
+ """
30
+ 打印远程包信息
31
+
32
+ :param pkg_type: 包类型 (modules/adapters/cli)
33
+ :param force_refresh: 是否强制刷新缓存
34
+ """
35
+ ...
@@ -0,0 +1,108 @@
1
+ """
2
+ Run 命令实现
3
+
4
+ 运行主程序
5
+ """
6
+
7
+ import os
8
+ import time
9
+ from argparse import ArgumentParser
10
+ from watchdog.observers import Observer
11
+ from rich.panel import Panel
12
+
13
+ from ..console import console
14
+ from ..utils import ReloadHandler
15
+ from ..base import Command
16
+
17
+
18
+ class RunCommand(Command):
19
+ name = "run"
20
+ description = "运行主程序"
21
+
22
+ def add_arguments(self, parser: ArgumentParser):
23
+ parser.add_argument(
24
+ 'script',
25
+ nargs='?',
26
+ help='要运行的主程序路径 (默认: main.py)'
27
+ )
28
+ parser.add_argument(
29
+ '--reload',
30
+ action='store_true',
31
+ help='启用热重载模式'
32
+ )
33
+ parser.add_argument(
34
+ '--no-reload',
35
+ action='store_true',
36
+ help='禁用热重载模式'
37
+ )
38
+
39
+ def execute(self, args):
40
+ script = args.script or "main.py"
41
+
42
+ # 检查脚本是否存在
43
+ if not os.path.exists(script):
44
+ from ... import _prepare_environment
45
+ import asyncio
46
+ asyncio.run(_prepare_environment())
47
+
48
+ reload_mode = args.reload and not args.no_reload
49
+
50
+ # 设置文件监控
51
+ self.observer = None
52
+ self.handler = None
53
+ self._setup_watchdog(script, reload_mode)
54
+
55
+ try:
56
+ # 保持运行
57
+ console.print("\n[cyan]按 Ctrl+C 停止程序[/cyan]")
58
+ while True:
59
+ time.sleep(0.5)
60
+ except KeyboardInterrupt:
61
+ console.print("\n[info]正在安全关闭...[/]")
62
+ self._cleanup()
63
+ console.print("[success]已安全退出[/]")
64
+
65
+ def _setup_watchdog(self, script_path: str, reload_mode: bool):
66
+ """
67
+ 设置文件监控
68
+
69
+ :param script_path: 要监控的脚本路径
70
+ :param reload_mode: 是否启用重载模式
71
+ """
72
+ watch_dirs = [
73
+ os.path.dirname(os.path.abspath(script_path)),
74
+ ]
75
+
76
+ # 添加配置目录
77
+ config_dir = os.path.abspath(os.getcwd())
78
+ if config_dir not in watch_dirs:
79
+ watch_dirs.append(config_dir)
80
+
81
+ self.handler = ReloadHandler(script_path, reload_mode)
82
+ self.observer = Observer()
83
+
84
+ for d in watch_dirs:
85
+ if os.path.exists(d):
86
+ self.observer.schedule(
87
+ self.handler,
88
+ d,
89
+ recursive=reload_mode
90
+ )
91
+ console.print(f"[dim]监控目录: [path]{d}[/][/]")
92
+
93
+ self.observer.start()
94
+
95
+ mode_desc = "[bold]开发重载模式[/]" if reload_mode else "[bold]配置监控模式[/]"
96
+ console.print(Panel(
97
+ f"{mode_desc}\n监控目录: [path]{', '.join(watch_dirs)}[/]",
98
+ title="热重载已启动",
99
+ border_style="info"
100
+ ))
101
+
102
+ def _cleanup(self):
103
+ """清理资源"""
104
+ if self.observer:
105
+ self.observer.stop()
106
+ if self.handler and self.handler.process:
107
+ self.handler._terminate_process()
108
+ self.observer.join()
@@ -0,0 +1,39 @@
1
+ # type: ignore
2
+ #
3
+ # Auto-generated type stub for run.py
4
+ # DO NOT EDIT MANUALLY - Generated by generate-type-stubs.py
5
+ #
6
+
7
+ """
8
+ Run 命令实现
9
+
10
+ 运行主程序
11
+ """
12
+
13
+ import os
14
+ import time
15
+ from argparse import ArgumentParser
16
+ from watchdog.observers import Observer
17
+ from rich.panel import Panel
18
+ from ..console import console
19
+ from ..utils import ReloadHandler
20
+ from ..base import Command
21
+
22
+ class RunCommand(Command):
23
+ def add_arguments(self: object, parser: ArgumentParser) -> ...:
24
+ ...
25
+ def execute(self: object, args: ...) -> ...:
26
+ ...
27
+ def _setup_watchdog(self: object, script_path: str, reload_mode: bool) -> ...:
28
+ """
29
+ 设置文件监控
30
+
31
+ :param script_path: 要监控的脚本路径
32
+ :param reload_mode: 是否启用重载模式
33
+ """
34
+ ...
35
+ def _cleanup(self: object) -> ...:
36
+ """
37
+ 清理资源
38
+ """
39
+ ...
@@ -0,0 +1,232 @@
1
+ """
2
+ Self-Update 命令实现
3
+
4
+ 更新 ErisPulse SDK 本身
5
+ """
6
+
7
+ import sys
8
+ import asyncio
9
+ from argparse import ArgumentParser
10
+ from rich.prompt import Confirm, Prompt
11
+ from rich.panel import Panel
12
+
13
+ from ..utils import PackageManager
14
+ from ..console import console
15
+ from ..base import Command
16
+
17
+
18
+ class SelfUpdateCommand(Command):
19
+ name = "self-update"
20
+ description = "更新 ErisPulse SDK 本身"
21
+
22
+ def __init__(self):
23
+ self.package_manager = PackageManager()
24
+
25
+ def add_arguments(self, parser: ArgumentParser):
26
+ parser.add_argument(
27
+ 'version',
28
+ nargs='?',
29
+ help='要更新到的版本号 (可选,默认为最新版本)'
30
+ )
31
+ parser.add_argument(
32
+ '--pre',
33
+ action='store_true',
34
+ help='包含预发布版本'
35
+ )
36
+ parser.add_argument(
37
+ '--force', '-f',
38
+ action='store_true',
39
+ help='强制更新,即使版本相同'
40
+ )
41
+
42
+ def execute(self, args):
43
+ current_version = self.package_manager.get_installed_version()
44
+ console.print(Panel(
45
+ f"[title]ErisPulse SDK 自更新[/]\n"
46
+ f"当前版本: [bold]{current_version}[/]",
47
+ title_align="left"
48
+ ))
49
+
50
+ # 获取可用版本
51
+ with console.status("[bold green]正在获取版本信息...", spinner="dots"):
52
+ versions = asyncio.run(self.package_manager.get_pypi_versions())
53
+
54
+ if not versions:
55
+ console.print("[error]无法获取版本信息[/]")
56
+ sys.exit(1)
57
+
58
+ # 确定目标版本
59
+ target_version = self._select_target_version(versions, args.version, args.pre)
60
+
61
+ if target_version is None:
62
+ console.print("[info]操作已取消[/]")
63
+ sys.exit(0)
64
+
65
+ # 确认更新
66
+ if target_version == current_version and not args.force:
67
+ console.print(f"[info]当前已是目标版本 [bold]{current_version}[/][/]")
68
+ sys.exit(0)
69
+ elif not args.force:
70
+ if not Confirm.ask(
71
+ f"确认将ErisPulse SDK从 [bold]{current_version}[/] 更新到 [bold]{target_version}[/] 吗?",
72
+ default=False
73
+ ):
74
+ console.print("[info]操作已取消[/]")
75
+ sys.exit(0)
76
+
77
+ # 执行更新
78
+ success = self.package_manager.update_self(target_version, args.force)
79
+ if not success:
80
+ sys.exit(1)
81
+
82
+ def _select_target_version(self, versions, specified_version: str = None,
83
+ include_pre: bool = False) -> str:
84
+ """
85
+ 选择目标版本
86
+
87
+ :param versions: 版本列表
88
+ :param specified_version: 用户指定的版本
89
+ :param include_pre: 是否包含预发布版本
90
+ :return: 目标版本号
91
+ """
92
+ if specified_version:
93
+ # 用户已指定版本
94
+ if not any(v['version'] == specified_version for v in versions):
95
+ console.print(f"[warning]版本 {specified_version} 可能不存在[/]")
96
+ if not Confirm.ask("是否继续?", default=False):
97
+ return None
98
+ return specified_version
99
+
100
+ # 交互式选择
101
+ stable_versions = [v for v in versions if not v["pre_release"]]
102
+ pre_versions = [v for v in versions if v["pre_release"]]
103
+
104
+ latest_stable = stable_versions[0] if stable_versions else None
105
+ latest_pre = pre_versions[0] if pre_versions and include_pre else None
106
+
107
+ choices = []
108
+ choice_versions = {}
109
+
110
+ if latest_stable:
111
+ choice = f"最新稳定版 ({latest_stable['version']})"
112
+ choices.append(choice)
113
+ choice_versions[choice] = latest_stable['version']
114
+
115
+ if include_pre and latest_pre:
116
+ choice = f"最新预发布版 ({latest_pre['version']})"
117
+ choices.append(choice)
118
+ choice_versions[choice] = latest_pre['version']
119
+
120
+ # 添加其他选项
121
+ choices.append("查看所有版本")
122
+ choices.append("手动指定版本")
123
+ choices.append("取消")
124
+
125
+ # 显示选项
126
+ console.print("\n[info]请选择更新选项:[/]")
127
+ for i, choice in enumerate(choices, 1):
128
+ console.print(f" {i}. {choice}")
129
+
130
+ while True:
131
+ try:
132
+ selected_input = Prompt.ask(
133
+ "请输入选项编号",
134
+ default="1"
135
+ )
136
+
137
+ if selected_input.isdigit():
138
+ selected_index = int(selected_input)
139
+ if 1 <= selected_index <= len(choices):
140
+ selected = choices[selected_index - 1]
141
+ break
142
+ else:
143
+ console.print("[warning]请输入有效的选项编号[/]")
144
+ else:
145
+ if selected_input in choices:
146
+ selected = selected_input
147
+ break
148
+ else:
149
+ console.print("[warning]请输入有效的选项编号或选项名称[/]")
150
+ except KeyboardInterrupt:
151
+ console.print("\n[info]操作已取消[/]")
152
+ return None
153
+
154
+ if selected == "取消":
155
+ return None
156
+ elif selected == "手动指定版本":
157
+ target_version = Prompt.ask("请输入要更新到的版本号")
158
+ if not any(v['version'] == target_version for v in versions):
159
+ console.print(f"[warning]版本 {target_version} 可能不存在[/]")
160
+ if not Confirm.ask("是否继续?", default=False):
161
+ return None
162
+ return target_version
163
+ elif selected == "查看所有版本":
164
+ return self._select_from_version_list(versions, include_pre)
165
+ else:
166
+ return choice_versions[selected]
167
+
168
+ def _select_from_version_list(self, versions, include_pre: bool = False) -> str:
169
+ """
170
+ 从版本列表中选择
171
+
172
+ :param versions: 版本列表
173
+ :param include_pre: 是否包含预发布版本
174
+ :return: 选中的版本号
175
+ """
176
+ from rich.table import Table
177
+ from rich.box import SIMPLE
178
+
179
+ table = Table(
180
+ title="可用版本",
181
+ box=SIMPLE,
182
+ header_style="info"
183
+ )
184
+ table.add_column("序号")
185
+ table.add_column("版本")
186
+ table.add_column("类型")
187
+ table.add_column("上传时间")
188
+
189
+ displayed = 0
190
+ version_list = []
191
+ for version_info in versions:
192
+ if not include_pre and version_info["pre_release"]:
193
+ continue
194
+
195
+ version_list.append(version_info)
196
+ version_type = "[yellow]预发布[/]" if version_info["pre_release"] else "[green]稳定版[/]"
197
+ table.add_row(
198
+ str(displayed + 1),
199
+ version_info["version"],
200
+ version_type,
201
+ version_info["uploaded"][:10] if version_info["uploaded"] else "未知"
202
+ )
203
+ displayed += 1
204
+
205
+ if displayed >= 10:
206
+ break
207
+
208
+ if displayed == 0:
209
+ console.print("[info]没有找到符合条件的版本[/]")
210
+ return None
211
+
212
+ console.print(table)
213
+
214
+ # 显示版本选择
215
+ console.print("\n[info]请选择要更新到的版本:[/]")
216
+ while True:
217
+ try:
218
+ version_input = Prompt.ask("请输入版本序号或版本号")
219
+ if version_input.isdigit():
220
+ version_index = int(version_input)
221
+ if 1 <= version_index <= len(version_list):
222
+ return version_list[version_index - 1]['version']
223
+ else:
224
+ console.print("[warning]请输入有效的版本序号[/]")
225
+ else:
226
+ if any(v['version'] == version_input for v in version_list):
227
+ return version_input
228
+ else:
229
+ console.print("[warning]请输入有效的版本序号或版本号[/]")
230
+ except KeyboardInterrupt:
231
+ console.print("\n[info]操作已取消[/]")
232
+ return None
@@ -0,0 +1,47 @@
1
+ # type: ignore
2
+ #
3
+ # Auto-generated type stub for self_update.py
4
+ # DO NOT EDIT MANUALLY - Generated by generate-type-stubs.py
5
+ #
6
+
7
+ """
8
+ Self-Update 命令实现
9
+
10
+ 更新 ErisPulse SDK 本身
11
+ """
12
+
13
+ import sys
14
+ import asyncio
15
+ from argparse import ArgumentParser
16
+ from rich.prompt import Confirm, Prompt
17
+ from rich.panel import Panel
18
+ from ..utils import PackageManager
19
+ from ..console import console
20
+ from ..base import Command
21
+
22
+ class SelfUpdateCommand(Command):
23
+ def __init__(self: None) -> ...:
24
+ ...
25
+ def add_arguments(self: object, parser: ArgumentParser) -> ...:
26
+ ...
27
+ def execute(self: object, args: ...) -> ...:
28
+ ...
29
+ def _select_target_version(self: object, versions: ..., specified_version: str = ..., include_pre: bool = ...) -> str:
30
+ """
31
+ 选择目标版本
32
+
33
+ :param versions: 版本列表
34
+ :param specified_version: 用户指定的版本
35
+ :param include_pre: 是否包含预发布版本
36
+ :return: 目标版本号
37
+ """
38
+ ...
39
+ def _select_from_version_list(self: object, versions: ..., include_pre: bool = ...) -> str:
40
+ """
41
+ 从版本列表中选择
42
+
43
+ :param versions: 版本列表
44
+ :param include_pre: 是否包含预发布版本
45
+ :return: 选中的版本号
46
+ """
47
+ ...
@@ -0,0 +1,32 @@
1
+ """
2
+ Uninstall 命令实现
3
+
4
+ 支持卸载模块、适配器、CLI 扩展
5
+ """
6
+
7
+ import sys
8
+ from argparse import ArgumentParser
9
+
10
+ from ..utils import PackageManager
11
+ from ..base import Command
12
+
13
+
14
+ class UninstallCommand(Command):
15
+
16
+ name = "uninstall"
17
+ description = "卸载模块/适配器包"
18
+
19
+ def __init__(self):
20
+ self.package_manager = PackageManager()
21
+
22
+ def add_arguments(self, parser: ArgumentParser):
23
+ parser.add_argument(
24
+ 'package',
25
+ nargs='+',
26
+ help='要卸载的包名(可指定多个)'
27
+ )
28
+
29
+ def execute(self, args):
30
+ success = self.package_manager.uninstall_package(args.package)
31
+ if not success:
32
+ sys.exit(1)
@@ -0,0 +1,24 @@
1
+ # type: ignore
2
+ #
3
+ # Auto-generated type stub for uninstall.py
4
+ # DO NOT EDIT MANUALLY - Generated by generate-type-stubs.py
5
+ #
6
+
7
+ """
8
+ Uninstall 命令实现
9
+
10
+ 支持卸载模块、适配器、CLI 扩展
11
+ """
12
+
13
+ import sys
14
+ from argparse import ArgumentParser
15
+ from ..utils import PackageManager
16
+ from ..base import Command
17
+
18
+ class UninstallCommand(Command):
19
+ def __init__(self: None) -> ...:
20
+ ...
21
+ def add_arguments(self: object, parser: ArgumentParser) -> ...:
22
+ ...
23
+ def execute(self: object, args: ...) -> ...:
24
+ ...
@@ -0,0 +1,56 @@
1
+ """
2
+ Upgrade 命令实现
3
+
4
+ 升级组件
5
+ """
6
+
7
+ import sys
8
+ from argparse import ArgumentParser
9
+ from rich.prompt import Confirm
10
+
11
+ from ..utils import PackageManager
12
+ from ..base import Command
13
+
14
+
15
+ class UpgradeCommand(Command):
16
+ name = "upgrade"
17
+ description = "升级组件(不指定包名则升级所有)"
18
+
19
+ def __init__(self):
20
+ self.package_manager = PackageManager()
21
+
22
+ def add_arguments(self, parser: ArgumentParser):
23
+ parser.add_argument(
24
+ 'package',
25
+ nargs='*',
26
+ help='要升级的包名 (可选,不指定则升级所有)'
27
+ )
28
+ parser.add_argument(
29
+ '--force', '-f',
30
+ action='store_true',
31
+ help='跳过确认直接升级'
32
+ )
33
+ parser.add_argument(
34
+ '--pre',
35
+ action='store_true',
36
+ help='包含预发布版本'
37
+ )
38
+
39
+ def execute(self, args):
40
+ if args.package:
41
+ # 升级指定包
42
+ success = self.package_manager.upgrade_package(
43
+ args.package,
44
+ pre=args.pre
45
+ )
46
+ if not success:
47
+ sys.exit(1)
48
+ else:
49
+ # 升级所有包
50
+ if args.force or Confirm.ask(
51
+ "确定要升级所有ErisPulse组件吗?",
52
+ default=False
53
+ ):
54
+ success = self.package_manager.upgrade_all()
55
+ if not success:
56
+ sys.exit(1)
@@ -0,0 +1,25 @@
1
+ # type: ignore
2
+ #
3
+ # Auto-generated type stub for upgrade.py
4
+ # DO NOT EDIT MANUALLY - Generated by generate-type-stubs.py
5
+ #
6
+
7
+ """
8
+ Upgrade 命令实现
9
+
10
+ 升级组件
11
+ """
12
+
13
+ import sys
14
+ from argparse import ArgumentParser
15
+ from rich.prompt import Confirm
16
+ from ..utils import PackageManager
17
+ from ..base import Command
18
+
19
+ class UpgradeCommand(Command):
20
+ def __init__(self: None) -> ...:
21
+ ...
22
+ def add_arguments(self: object, parser: ArgumentParser) -> ...:
23
+ ...
24
+ def execute(self: object, args: ...) -> ...:
25
+ ...
@@ -0,0 +1,20 @@
1
+ # type: ignore
2
+ #
3
+ # Auto-generated type stub for console.py
4
+ # DO NOT EDIT MANUALLY - Generated by generate-type-stubs.py
5
+ #
6
+
7
+ import sys
8
+ from rich.console import Console
9
+ from rich.theme import Theme
10
+ from rich.highlighter import RegexHighlighter
11
+
12
+ class CommandHighlighter(RegexHighlighter):
13
+ """
14
+ 高亮CLI命令和参数
15
+
16
+ {!--< tips >!--}
17
+ 使用正则表达式匹配命令行参数和选项
18
+ {!--< /tips >!--}
19
+ """
20
+ ...