ErisPulse 2.3.9.dev1__tar.gz → 2.3.9.dev2__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.
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/PKG-INFO +8 -2
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/README.md +33 -27
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/pyproject.toml +1 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/init.py +3 -3
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/init.pyi +1 -1
- erispulse-2.3.9.dev2/src/ErisPulse/CLI/commands/uninstall.py +137 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/uninstall.pyi +7 -0
- erispulse-2.3.9.dev1/src/ErisPulse/CLI/commands/uninstall.py +0 -32
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/.gitignore +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/LICENSE +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/base.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/base.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/cli.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/cli.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/install.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/install.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/list.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/list.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/list_remote.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/list_remote.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/run.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/run.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/self_update.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/self_update.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/upgrade.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/commands/upgrade.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/console.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/console.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/registry.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/registry.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/utils/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/utils/package_manager.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/CLI/utils/package_manager.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Bases/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Bases/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Bases/adapter.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Bases/adapter.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Bases/manager.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Bases/manager.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Bases/module.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Bases/module.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/base.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/base.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/command.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/command.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/message.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/message.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/meta.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/meta.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/notice.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/notice.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/request.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/request.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/session_type.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/session_type.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/wrapper.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/Event/wrapper.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/adapter.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/adapter.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/config.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/config.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/lifecycle.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/lifecycle.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/logger.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/logger.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/module.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/module.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/router.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/router.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/storage.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/Core/storage.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/__main__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/__main__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/finders/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/finders/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/finders/adapter.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/finders/adapter.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/finders/bases/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/finders/bases/finder.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/finders/bases/finder.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/finders/cli.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/finders/cli.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/finders/module.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/finders/module.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/loaders/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/loaders/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/loaders/adapter.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/loaders/adapter.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/loaders/bases/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/loaders/bases/loader.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/loaders/bases/loader.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/loaders/module.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/loaders/module.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/loaders/strategy.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/loaders/strategy.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/runtime/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/runtime/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/runtime/cleanup.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/runtime/cleanup.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/runtime/exceptions.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/runtime/exceptions.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/runtime/frame_config.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/runtime/frame_config.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/sdk.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev2}/src/ErisPulse/sdk.pyi +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ErisPulse
|
|
3
|
-
Version: 2.3.9.
|
|
3
|
+
Version: 2.3.9.dev2
|
|
4
4
|
Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
|
|
5
5
|
Author-email: ErisDev <erisdev@88.com>
|
|
6
6
|
Maintainer-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
|
|
@@ -58,6 +58,12 @@ Requires-Dist: pytest-xdist>=3.0.0; extra == 'test'
|
|
|
58
58
|
Requires-Dist: pytest>=7.0.0; extra == 'test'
|
|
59
59
|
Description-Content-Type: text/markdown
|
|
60
60
|
|
|
61
|
+
<div align="center">
|
|
62
|
+
|
|
63
|
+
[English](README.en.md) | [简体中文](README.md) | [繁體中文](README.zh-Hant.md)
|
|
64
|
+
|
|
65
|
+
</div>
|
|
66
|
+
|
|
61
67
|
<table>
|
|
62
68
|
<tr>
|
|
63
69
|
<td width="35%" valign="middle" align="center">
|
|
@@ -211,7 +217,7 @@ epsdk run main.py --reload
|
|
|
211
217
|
|
|
212
218
|
## 贡献指南
|
|
213
219
|
|
|
214
|
-
|
|
220
|
+
ErisPulse 项目的健全性还需要您的一份力!我们欢迎各种形式的贡献,包括但不限于:
|
|
215
221
|
|
|
216
222
|
1. **报告问题**
|
|
217
223
|
在 [GitHub Issues](https://github.com/ErisPulse/ErisPulse/issues) 提交 bug 报告
|
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
</
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
[English](README.en.md) | [简体中文](README.md) | [繁體中文](README.zh-Hant.md)
|
|
4
|
+
|
|
5
|
+
</div>
|
|
6
|
+
|
|
7
|
+
<table>
|
|
8
|
+
<tr>
|
|
9
|
+
<td width="35%" valign="middle" align="center">
|
|
10
|
+
<img src=".github/assets/erispulse_logo_1024.png" width="280" alt="ErisPulse" />
|
|
11
|
+
</td>
|
|
12
|
+
<td width="65%" valign="middle">
|
|
13
|
+
|
|
14
|
+
# ErisPulse
|
|
15
|
+
|
|
16
|
+
**事件驱动的多平台机器人开发框架**
|
|
11
17
|
|
|
12
18
|
[](https://pypi.org/project/ErisPulse/)
|
|
13
19
|
[](https://pypi.org/project/ErisPulse/)
|
|
@@ -149,23 +155,23 @@ epsdk run main.py --reload
|
|
|
149
155
|
| 文档 | [erisdev.com](https://www.erisdev.com/#docs) | [Cloudflare](https://erispulse.pages.dev/#docs) • [GitHub](https://erispulse.github.io/#docs) • [Netlify](https://erispulse.netlify.app/#docs) |
|
|
150
156
|
| 模块市场 | [erisdev.com](https://www.erisdev.com/#market) | [Cloudflare](https://erispulse.pages.dev/#market) • [GitHub](https://erispulse.github.io/#market) • [Netlify](https://erispulse.netlify.app/#market) |
|
|
151
157
|
|
|
152
|
-
## 贡献指南
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
1. **报告问题**
|
|
157
|
-
在 [GitHub Issues](https://github.com/ErisPulse/ErisPulse/issues) 提交 bug 报告
|
|
158
|
-
|
|
159
|
-
2. **功能请求**
|
|
160
|
-
通过 [社区讨论](https://github.com/ErisPulse/ErisPulse/discussions) 提出新想法
|
|
161
|
-
|
|
162
|
-
3. **代码贡献**
|
|
163
|
-
提交 Pull Request 前请阅读我们的 [代码风格](docs/styleguide/) 以及 [贡献指南](CONTRIBUTING.md)
|
|
164
|
-
|
|
165
|
-
4. **文档改进**
|
|
166
|
-
帮助完善文档和示例代码
|
|
167
|
-
|
|
168
|
-
[加入社区讨论](https://github.com/ErisPulse/ErisPulse/discussions)
|
|
158
|
+
## 贡献指南
|
|
159
|
+
|
|
160
|
+
ErisPulse 项目的健全性还需要您的一份力!我们欢迎各种形式的贡献,包括但不限于:
|
|
161
|
+
|
|
162
|
+
1. **报告问题**
|
|
163
|
+
在 [GitHub Issues](https://github.com/ErisPulse/ErisPulse/issues) 提交 bug 报告
|
|
164
|
+
|
|
165
|
+
2. **功能请求**
|
|
166
|
+
通过 [社区讨论](https://github.com/ErisPulse/ErisPulse/discussions) 提出新想法
|
|
167
|
+
|
|
168
|
+
3. **代码贡献**
|
|
169
|
+
提交 Pull Request 前请阅读我们的 [代码风格](docs/styleguide/) 以及 [贡献指南](CONTRIBUTING.md)
|
|
170
|
+
|
|
171
|
+
4. **文档改进**
|
|
172
|
+
帮助完善文档和示例代码
|
|
173
|
+
|
|
174
|
+
[加入社区讨论](https://github.com/ErisPulse/ErisPulse/discussions)
|
|
169
175
|
|
|
170
176
|
---
|
|
171
177
|
|
|
@@ -177,7 +177,7 @@ class InitCommand(Command):
|
|
|
177
177
|
"email": "邮件适配器"
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
def _configure_adapters_interactive_sync(self, project_path:
|
|
180
|
+
def _configure_adapters_interactive_sync(self, project_path: Path = None):
|
|
181
181
|
"""
|
|
182
182
|
交互式配置适配器的同步版本
|
|
183
183
|
|
|
@@ -377,7 +377,7 @@ class InitCommand(Command):
|
|
|
377
377
|
|
|
378
378
|
# 询问是否要配置适配器
|
|
379
379
|
if Confirm.ask("\n[cyan]是否要配置适配器?[/cyan]", default=True):
|
|
380
|
-
self._configure_adapters_interactive_sync(
|
|
380
|
+
self._configure_adapters_interactive_sync(project_path)
|
|
381
381
|
|
|
382
382
|
# 保存配置
|
|
383
383
|
config.force_save()
|
|
@@ -392,4 +392,4 @@ class InitCommand(Command):
|
|
|
392
392
|
|
|
393
393
|
except Exception as e:
|
|
394
394
|
console.print(f"[red]交互式初始化失败: {e}[/]")
|
|
395
|
-
return False
|
|
395
|
+
return False
|
|
@@ -44,7 +44,7 @@ class InitCommand(Command):
|
|
|
44
44
|
:return: 适配器名称到描述的映射
|
|
45
45
|
"""
|
|
46
46
|
...
|
|
47
|
-
def _configure_adapters_interactive_sync(self: object, project_path:
|
|
47
|
+
def _configure_adapters_interactive_sync(self: object, project_path: Path = ...) -> ...:
|
|
48
48
|
"""
|
|
49
49
|
交互式配置适配器的同步版本
|
|
50
50
|
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Uninstall 命令实现
|
|
3
|
+
|
|
4
|
+
支持卸载模块、适配器、CLI 扩展
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import sys
|
|
8
|
+
from argparse import ArgumentParser
|
|
9
|
+
|
|
10
|
+
from rich.panel import Panel
|
|
11
|
+
from rich.prompt import Prompt
|
|
12
|
+
from rich.table import Table
|
|
13
|
+
from rich.box import SIMPLE
|
|
14
|
+
|
|
15
|
+
from ..utils import PackageManager
|
|
16
|
+
from ..console import console
|
|
17
|
+
from ..base import Command
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class UninstallCommand(Command):
|
|
21
|
+
|
|
22
|
+
name = "uninstall"
|
|
23
|
+
description = "卸载模块/适配器包(不指定包名时进入交互式卸载)"
|
|
24
|
+
|
|
25
|
+
def __init__(self):
|
|
26
|
+
self.package_manager = PackageManager()
|
|
27
|
+
|
|
28
|
+
def add_arguments(self, parser: ArgumentParser):
|
|
29
|
+
parser.add_argument(
|
|
30
|
+
'package',
|
|
31
|
+
nargs='*',
|
|
32
|
+
help='要卸载的包名(可指定多个)'
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
def execute(self, args):
|
|
36
|
+
if args.package:
|
|
37
|
+
# 直接卸载指定包
|
|
38
|
+
success = self.package_manager.uninstall_package(args.package)
|
|
39
|
+
if not success:
|
|
40
|
+
sys.exit(1)
|
|
41
|
+
else:
|
|
42
|
+
# 交互式卸载
|
|
43
|
+
self._interactive_uninstall()
|
|
44
|
+
|
|
45
|
+
def _interactive_uninstall(self):
|
|
46
|
+
console.print(Panel(
|
|
47
|
+
"[bold cyan]ErisPulse 卸载向导[/]\n"
|
|
48
|
+
"选择要卸载的包",
|
|
49
|
+
title="卸载向导",
|
|
50
|
+
border_style="cyan"
|
|
51
|
+
))
|
|
52
|
+
|
|
53
|
+
# 获取已安装的包
|
|
54
|
+
installed = self.package_manager.get_installed_packages()
|
|
55
|
+
|
|
56
|
+
# 收集所有已安装的包
|
|
57
|
+
all_packages = []
|
|
58
|
+
|
|
59
|
+
# 添加适配器
|
|
60
|
+
for name, info in installed.get("adapters", {}).items():
|
|
61
|
+
all_packages.append({
|
|
62
|
+
"type": "适配器",
|
|
63
|
+
"name": name,
|
|
64
|
+
"package": info["package"],
|
|
65
|
+
"version": info["version"]
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
# 添加模块
|
|
69
|
+
for name, info in installed.get("modules", {}).items():
|
|
70
|
+
all_packages.append({
|
|
71
|
+
"type": "模块",
|
|
72
|
+
"name": name,
|
|
73
|
+
"package": info["package"],
|
|
74
|
+
"version": info["version"]
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
# 添加 CLI 扩展
|
|
78
|
+
for name, info in installed.get("cli_extensions", {}).items():
|
|
79
|
+
all_packages.append({
|
|
80
|
+
"type": "CLI",
|
|
81
|
+
"name": name,
|
|
82
|
+
"package": info["package"],
|
|
83
|
+
"version": info["version"]
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
if not all_packages:
|
|
87
|
+
console.print("[yellow]没有已安装的包[/]")
|
|
88
|
+
return
|
|
89
|
+
|
|
90
|
+
# 显示包列表
|
|
91
|
+
table = Table(box=SIMPLE)
|
|
92
|
+
table.add_column("序号", style="cyan")
|
|
93
|
+
table.add_column("类型", style="bold")
|
|
94
|
+
table.add_column("名称")
|
|
95
|
+
table.add_column("包名")
|
|
96
|
+
table.add_column("版本")
|
|
97
|
+
|
|
98
|
+
for i, pkg in enumerate(all_packages, 1):
|
|
99
|
+
table.add_row(
|
|
100
|
+
str(i),
|
|
101
|
+
pkg["type"],
|
|
102
|
+
pkg["name"],
|
|
103
|
+
pkg["package"],
|
|
104
|
+
pkg["version"]
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
console.print(table)
|
|
108
|
+
|
|
109
|
+
# 选择要卸载的包
|
|
110
|
+
selected = Prompt.ask(
|
|
111
|
+
"\n[cyan]请输入要卸载的包序号(多个用逗号分隔,如: 1,3)或按 q 退出:[/cyan]"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
if selected.lower() == 'q':
|
|
115
|
+
console.print("[info]退出卸载向导[/]")
|
|
116
|
+
return
|
|
117
|
+
|
|
118
|
+
try:
|
|
119
|
+
indices = [int(idx.strip()) for idx in selected.split(",")]
|
|
120
|
+
selected_packages = []
|
|
121
|
+
|
|
122
|
+
for idx in indices:
|
|
123
|
+
if 1 <= idx <= len(all_packages):
|
|
124
|
+
pkg_info = all_packages[idx - 1]
|
|
125
|
+
selected_packages.append(pkg_info["package"])
|
|
126
|
+
console.print(f"[green]已选择: {pkg_info['name']} ({pkg_info['package']})[/]")
|
|
127
|
+
else:
|
|
128
|
+
console.print(f"[red]无效的序号: {idx}[/]")
|
|
129
|
+
|
|
130
|
+
if selected_packages:
|
|
131
|
+
# 卸载选中的包
|
|
132
|
+
success = self.package_manager.uninstall_package(selected_packages)
|
|
133
|
+
if not success:
|
|
134
|
+
sys.exit(1)
|
|
135
|
+
|
|
136
|
+
except ValueError:
|
|
137
|
+
console.print("[red]输入格式错误,请输入数字序号[/]")
|
|
@@ -12,7 +12,12 @@ Uninstall 命令实现
|
|
|
12
12
|
|
|
13
13
|
import sys
|
|
14
14
|
from argparse import ArgumentParser
|
|
15
|
+
from rich.panel import Panel
|
|
16
|
+
from rich.prompt import Prompt
|
|
17
|
+
from rich.table import Table
|
|
18
|
+
from rich.box import SIMPLE
|
|
15
19
|
from ..utils import PackageManager
|
|
20
|
+
from ..console import console
|
|
16
21
|
from ..base import Command
|
|
17
22
|
|
|
18
23
|
class UninstallCommand(Command):
|
|
@@ -22,3 +27,5 @@ class UninstallCommand(Command):
|
|
|
22
27
|
...
|
|
23
28
|
def execute(self: object, args: ...) -> ...:
|
|
24
29
|
...
|
|
30
|
+
def _interactive_uninstall(self: object) -> ...:
|
|
31
|
+
...
|
|
@@ -1,32 +0,0 @@
|
|
|
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)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|