ErisPulse 2.5.0.dev0__tar.gz → 2.5.0.dev1__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.5.0.dev0 → erispulse-2.5.0.dev1}/PKG-INFO +6 -3
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/README.md +3 -1
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/pyproject.toml +3 -2
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/__init__.py +17 -0
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/__init__.pyi +19 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/cli.py +34 -16
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/cli.pyi +4 -3
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/create.py +95 -47
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/create.pyi +5 -4
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/init.py +97 -63
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/init.pyi +3 -2
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/install.py +186 -83
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/install.pyi +4 -3
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/list.py +37 -21
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/list.pyi +4 -3
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/list_remote.py +37 -17
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/list_remote.pyi +4 -3
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/run.py +47 -40
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/run.pyi +6 -5
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/self_update.py +96 -44
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/self_update.pyi +6 -5
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/uninstall.py +25 -14
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/uninstall.pyi +3 -2
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/upgrade.py +11 -7
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/upgrade.pyi +2 -1
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/__init__.py +198 -0
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/__init__.pyi +83 -0
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/__init__.py +27 -0
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/__init__.pyi +15 -0
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/en.py +271 -0
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/en.pyi +11 -0
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/ja.py +271 -0
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/ja.pyi +11 -0
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/ru.py +271 -0
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/ru.pyi +11 -0
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/zh_cn.py +271 -0
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/zh_cn.pyi +11 -0
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/zh_tw.py +271 -0
- erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/zh_tw.pyi +11 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/__init__.py +3 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/__init__.pyi +1 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/adapter.py +195 -72
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/adapter.pyi +6 -5
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/client.py +70 -21
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/client.pyi +6 -5
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/config.py +28 -7
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/config.pyi +4 -3
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/constants.py +13 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/__init__.py +548 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/__init__.pyi +150 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/constants.py +29 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/constants.pyi +11 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/__init__.py +44 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/__init__.pyi +15 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/en.py +305 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/en.pyi +11 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/ja.py +305 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/ja.pyi +11 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/ru.py +305 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/ru.pyi +11 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/zh_cn.py +305 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/zh_cn.pyi +11 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/zh_tw.py +305 -0
- erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/zh_tw.pyi +11 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/lifecycle.py +58 -29
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/lifecycle.pyi +3 -2
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/logger.py +21 -16
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/logger.pyi +5 -4
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/module.py +112 -54
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/module.pyi +6 -5
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/router.py +168 -102
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/router.pyi +17 -15
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/storage.py +50 -32
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/storage.pyi +5 -4
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/__init__.py +9 -9
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/__init__.pyi +2 -2
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/adapter.py +33 -18
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/adapter.pyi +4 -3
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/module.py +54 -31
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/module.pyi +7 -6
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/__init__.py +19 -17
- erispulse-2.5.0.dev1/src/ErisPulse/runtime/__init__.pyi +19 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/config_schema.py +25 -1
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/config_schema.pyi +9 -1
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/exceptions.py +6 -9
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/exceptions.pyi +3 -3
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/frame_config.py +25 -10
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/frame_config.pyi +10 -2
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/sdk.py +152 -83
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/sdk.pyi +5 -3
- erispulse-2.5.0.dev0/src/ErisPulse/CLI/__init__.py +0 -11
- erispulse-2.5.0.dev0/src/ErisPulse/CLI/__init__.pyi +0 -13
- erispulse-2.5.0.dev0/src/ErisPulse/runtime/__init__.pyi +0 -19
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/.gitignore +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/LICENSE +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/base.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/base.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/__init__.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/console.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/console.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/registry.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/registry.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/utils/__init__.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/utils/display.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/utils/display.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/utils/package_manager.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/utils/package_manager.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/__init__.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/__init__.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/adapter.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/adapter.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/client.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/client.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/errors.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/errors.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/manager.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/manager.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/module.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/module.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/router.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/router.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/storage.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/storage.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/websocket.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/websocket.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/__init__.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/__init__.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/base.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/base.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/command.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/command.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/message.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/message.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/message_builder.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/message_builder.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/meta.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/meta.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/notice.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/notice.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/request.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/request.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/session_type.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/session_type.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/wrapper.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/wrapper.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/constants.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/__main__.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/__main__.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/__init__.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/__init__.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/adapter.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/adapter.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/bases/__init__.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/bases/finder.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/bases/finder.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/module.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/module.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/__init__.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/__init__.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/bases/__init__.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/bases/loader.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/bases/loader.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/strategy.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/strategy.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/context.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/context.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/web_status/4xx.png +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/web_status/5xx.png +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/web_status/__init__.py +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/web_status/__init__.pyi +0 -0
- {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/web_status/unknow.png +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ErisPulse
|
|
3
|
-
Version: 2.5.0.
|
|
3
|
+
Version: 2.5.0.dev1
|
|
4
4
|
Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
|
|
5
5
|
Author-email: ErisDev <erisdev@88.com>
|
|
6
6
|
Maintainer-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
|
|
@@ -48,8 +48,9 @@ Requires-Dist: packaging>=25.0
|
|
|
48
48
|
Requires-Dist: pip>=23.0
|
|
49
49
|
Requires-Dist: rich>=13.0.0
|
|
50
50
|
Requires-Dist: toml>=0.10.2
|
|
51
|
-
Requires-Dist: uvicorn
|
|
51
|
+
Requires-Dist: uvicorn>=0.30.0
|
|
52
52
|
Requires-Dist: watchdog>=4.0.0
|
|
53
|
+
Requires-Dist: websockets>=12.0
|
|
53
54
|
Provides-Extra: dev
|
|
54
55
|
Requires-Dist: httpx>=0.24.0; extra == 'dev'
|
|
55
56
|
Requires-Dist: pyclean>=3.6.0; extra == 'dev'
|
|
@@ -79,7 +80,9 @@ Description-Content-Type: text/markdown
|
|
|
79
80
|
</td>
|
|
80
81
|
<td valign="middle">
|
|
81
82
|
|
|
82
|
-
[English](README.en.md) | **简体中文** | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [Русский](README.ru.md)
|
|
83
|
+
> [English](README.en.md) | **简体中文** | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [Русский](README.ru.md)
|
|
84
|
+
|
|
85
|
+
> 🎉 **v2.5.0-dev.1 现已支持多语言!** 框架核心及 CLI 界面已内置中文(简/繁)、英文、日文、俄文支持,会自动检测您的系统语言切换!
|
|
83
86
|
|
|
84
87
|
# ErisPulse
|
|
85
88
|
|
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
</td>
|
|
8
8
|
<td valign="middle">
|
|
9
9
|
|
|
10
|
-
[English](README.en.md) | **简体中文** | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [Русский](README.ru.md)
|
|
10
|
+
> [English](README.en.md) | **简体中文** | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [Русский](README.ru.md)
|
|
11
|
+
|
|
12
|
+
> 🎉 **v2.5.0-dev.1 现已支持多语言!** 框架核心及 CLI 界面已内置中文(简/繁)、英文、日文、俄文支持,会自动检测您的系统语言切换!
|
|
11
13
|
|
|
12
14
|
# ErisPulse
|
|
13
15
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ErisPulse"
|
|
7
|
-
version = "2.5.0-dev.
|
|
7
|
+
version = "2.5.0-dev.1"
|
|
8
8
|
description = "ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -65,7 +65,8 @@ dependencies = [
|
|
|
65
65
|
"watchdog>=4.0.0",
|
|
66
66
|
"toml>=0.10.2",
|
|
67
67
|
"fastapi>=0.116.1",
|
|
68
|
-
"uvicorn
|
|
68
|
+
"uvicorn>=0.30.0",
|
|
69
|
+
"websockets>=12.0",
|
|
69
70
|
"packaging>=25.0",
|
|
70
71
|
]
|
|
71
72
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""
|
|
2
|
+
CLI 模块
|
|
3
|
+
|
|
4
|
+
ErisPulse 命令行接口
|
|
5
|
+
|
|
6
|
+
{!--< internal-use >!--}
|
|
7
|
+
CLI 拥有独立的国际化模块 (CLI.i18n),与 Core.i18n 完全解耦。
|
|
8
|
+
此模块仅供内部使用,外部模块不应直接依赖 CLI.i18n。
|
|
9
|
+
{!--< /internal-use >!--}
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from .cli import CLI
|
|
13
|
+
from .i18n import i18n as _cli_i18n
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"CLI",
|
|
17
|
+
]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# type: ignore
|
|
2
|
+
#
|
|
3
|
+
# Auto-generated type stub for __init__.py
|
|
4
|
+
# DO NOT EDIT MANUALLY - Generated by generate-type-stubs.py
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
CLI 模块
|
|
9
|
+
|
|
10
|
+
ErisPulse 命令行接口
|
|
11
|
+
|
|
12
|
+
{!--< internal-use >!--}
|
|
13
|
+
CLI 拥有独立的国际化模块 (CLI.i18n),与 Core.i18n 完全解耦。
|
|
14
|
+
此模块仅供内部使用,外部模块不应直接依赖 CLI.i18n。
|
|
15
|
+
{!--< /internal-use >!--}
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from .cli import CLI
|
|
19
|
+
from .i18n import i18n as _cli_i18n
|
|
@@ -4,18 +4,19 @@
|
|
|
4
4
|
ErisPulse 命令行接口主入口
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
import sys
|
|
8
7
|
import importlib
|
|
9
|
-
import traceback
|
|
10
8
|
import pkgutil
|
|
9
|
+
import sys
|
|
10
|
+
import traceback
|
|
11
11
|
from argparse import ArgumentParser, RawDescriptionHelpFormatter
|
|
12
12
|
|
|
13
13
|
from rich.panel import Panel
|
|
14
14
|
from rich.text import Text
|
|
15
15
|
|
|
16
|
+
from .base import Command
|
|
16
17
|
from .console import console, print_banner
|
|
18
|
+
from .i18n import i18n
|
|
17
19
|
from .registry import CommandRegistry
|
|
18
|
-
from .base import Command
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
class CLI:
|
|
@@ -40,24 +41,31 @@ class CLI:
|
|
|
40
41
|
parser = ArgumentParser(
|
|
41
42
|
prog="epsdk",
|
|
42
43
|
formatter_class=RawDescriptionHelpFormatter,
|
|
43
|
-
description="
|
|
44
|
+
description=i18n.t("cli.parser.description"),
|
|
44
45
|
)
|
|
45
46
|
parser._positionals.title = "命令"
|
|
46
47
|
parser._optionals.title = "选项"
|
|
47
48
|
|
|
48
49
|
# 全局选项
|
|
49
|
-
parser.add_argument(
|
|
50
|
+
parser.add_argument(
|
|
51
|
+
"--version",
|
|
52
|
+
"-V",
|
|
53
|
+
action="store_true",
|
|
54
|
+
help=i18n.t("cli.parser.version_help"),
|
|
55
|
+
)
|
|
50
56
|
parser.add_argument(
|
|
51
57
|
"--verbose",
|
|
52
58
|
"-v",
|
|
53
59
|
action="count",
|
|
54
60
|
default=0,
|
|
55
|
-
help="
|
|
61
|
+
help=i18n.t("cli.parser.verbose_help"),
|
|
56
62
|
)
|
|
57
63
|
|
|
58
64
|
# 子命令
|
|
59
65
|
subparsers = parser.add_subparsers(
|
|
60
|
-
dest="command",
|
|
66
|
+
dest="command",
|
|
67
|
+
metavar=i18n.t("cli.parser.command_meta"),
|
|
68
|
+
help=i18n.t("cli.parser.command_help"),
|
|
61
69
|
)
|
|
62
70
|
|
|
63
71
|
self.subparsers = subparsers
|
|
@@ -103,14 +111,18 @@ class CLI:
|
|
|
103
111
|
self.registry.register(command_instance)
|
|
104
112
|
except Exception as e:
|
|
105
113
|
console.print(
|
|
106
|
-
f"[warning]
|
|
114
|
+
f"[warning]{i18n.t('cli.discover.instantiate_failed', name=attr_name, error=e)}[/]"
|
|
107
115
|
)
|
|
108
116
|
|
|
109
117
|
except Exception as e:
|
|
110
|
-
console.print(
|
|
118
|
+
console.print(
|
|
119
|
+
f"[warning]{i18n.t('cli.discover.load_failed', name=module_name, error=e)}[/]"
|
|
120
|
+
)
|
|
111
121
|
|
|
112
122
|
except ImportError as e:
|
|
113
|
-
console.print(
|
|
123
|
+
console.print(
|
|
124
|
+
f"[warning]{i18n.t('cli.discover.import_failed', error=e)}[/]"
|
|
125
|
+
)
|
|
114
126
|
|
|
115
127
|
def _register_builtin_commands(self):
|
|
116
128
|
"""注册所有内置命令(通过自动发现)"""
|
|
@@ -131,7 +143,7 @@ class CLI:
|
|
|
131
143
|
|
|
132
144
|
console.print(
|
|
133
145
|
Panel(
|
|
134
|
-
f"[title]
|
|
146
|
+
f"[title]{i18n.t('cli.run.version_text', version=__version__)}[/]",
|
|
135
147
|
subtitle=f"Python {sys.version.split()[0]}",
|
|
136
148
|
style="title",
|
|
137
149
|
)
|
|
@@ -157,7 +169,9 @@ class CLI:
|
|
|
157
169
|
# 没有指定命令时显示帮助
|
|
158
170
|
if not args.command:
|
|
159
171
|
if unknown:
|
|
160
|
-
console.print(
|
|
172
|
+
console.print(
|
|
173
|
+
f"[warning]{i18n.t('cli.run.unknown_args', args=' '.join(unknown))}[/]"
|
|
174
|
+
)
|
|
161
175
|
self.parser.print_help()
|
|
162
176
|
return
|
|
163
177
|
|
|
@@ -165,7 +179,9 @@ class CLI:
|
|
|
165
179
|
canonical = self.registry.resolve(args.command) or args.command
|
|
166
180
|
|
|
167
181
|
if unknown and canonical not in ("install", "create"):
|
|
168
|
-
console.print(
|
|
182
|
+
console.print(
|
|
183
|
+
f"[warning]{i18n.t('cli.run.unknown_args', args=' '.join(unknown))}[/]"
|
|
184
|
+
)
|
|
169
185
|
|
|
170
186
|
try:
|
|
171
187
|
# 执行命令
|
|
@@ -180,15 +196,17 @@ class CLI:
|
|
|
180
196
|
console.print()
|
|
181
197
|
command.execute(args)
|
|
182
198
|
else:
|
|
183
|
-
console.print(
|
|
199
|
+
console.print(
|
|
200
|
+
f"[error]{i18n.t('cli.run.unknown_command', command=args.command)}[/]"
|
|
201
|
+
)
|
|
184
202
|
self.parser.print_help()
|
|
185
203
|
sys.exit(1)
|
|
186
204
|
|
|
187
205
|
except KeyboardInterrupt:
|
|
188
|
-
console.print("\n[warning]
|
|
206
|
+
console.print(f"\n[warning]{i18n.t('cli.run.user_interrupted')}[/]")
|
|
189
207
|
sys.exit(1)
|
|
190
208
|
except Exception as e:
|
|
191
|
-
console.print(f"[error]
|
|
209
|
+
console.print(f"[error]{i18n.t('cli.run.exec_error', error=e)}[/]")
|
|
192
210
|
if args.verbose >= 1:
|
|
193
211
|
console.print(traceback.format_exc())
|
|
194
212
|
sys.exit(1)
|
|
@@ -10,16 +10,17 @@
|
|
|
10
10
|
ErisPulse 命令行接口主入口
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
-
import sys
|
|
14
13
|
import importlib
|
|
15
|
-
import traceback
|
|
16
14
|
import pkgutil
|
|
15
|
+
import sys
|
|
16
|
+
import traceback
|
|
17
17
|
from argparse import ArgumentParser, RawDescriptionHelpFormatter
|
|
18
18
|
from rich.panel import Panel
|
|
19
19
|
from rich.text import Text
|
|
20
|
+
from .base import Command
|
|
20
21
|
from .console import console, print_banner
|
|
22
|
+
from .i18n import i18n
|
|
21
23
|
from .registry import CommandRegistry
|
|
22
|
-
from .base import Command
|
|
23
24
|
|
|
24
25
|
class CLI:
|
|
25
26
|
"""
|
|
@@ -4,18 +4,18 @@ Create 命令实现
|
|
|
4
4
|
脚手架工具,快速创建 Module / Adapter 项目模板
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
import sys
|
|
8
7
|
import datetime
|
|
8
|
+
import sys
|
|
9
9
|
from argparse import ArgumentParser
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
|
|
12
|
-
from rich.prompt import
|
|
12
|
+
from rich.prompt import IntPrompt, Prompt
|
|
13
13
|
from rich.text import Text
|
|
14
14
|
|
|
15
|
-
from ..console import console
|
|
16
15
|
from ..base import Command
|
|
17
|
-
from ..
|
|
18
|
-
|
|
16
|
+
from ..console import console
|
|
17
|
+
from ..i18n import i18n
|
|
18
|
+
from ..utils.display import prompt_validated, section_header
|
|
19
19
|
|
|
20
20
|
_LICENSE_TEMPLATE = """MIT License
|
|
21
21
|
|
|
@@ -521,7 +521,7 @@ class CreateCommand(Command):
|
|
|
521
521
|
"""
|
|
522
522
|
|
|
523
523
|
name = "create"
|
|
524
|
-
description = "
|
|
524
|
+
description = i18n.t("cli.create.description")
|
|
525
525
|
aliases = ["c", "new"]
|
|
526
526
|
|
|
527
527
|
def add_arguments(self, parser: ArgumentParser):
|
|
@@ -529,18 +529,26 @@ class CreateCommand(Command):
|
|
|
529
529
|
"create_type",
|
|
530
530
|
nargs="?",
|
|
531
531
|
choices=["module", "adapter"],
|
|
532
|
-
help="
|
|
532
|
+
help=i18n.t("cli.create.type_help"),
|
|
533
|
+
)
|
|
534
|
+
parser.add_argument("--name", "-n", help=i18n.t("cli.create.name_help"))
|
|
535
|
+
parser.add_argument(
|
|
536
|
+
"--description", "-d", help=i18n.t("cli.create.desc_help"), default=""
|
|
533
537
|
)
|
|
534
|
-
parser.add_argument("--name", "-n", help="项目/模块/适配器名称 (PascalCase)")
|
|
535
|
-
parser.add_argument("--description", "-d", help="项目描述", default="")
|
|
536
|
-
parser.add_argument("--author", "-a", help="作者名称", default="")
|
|
537
|
-
parser.add_argument("--email", "-e", help="作者邮箱", default="")
|
|
538
|
-
parser.add_argument("--homepage", help="项目主页 URL", default="")
|
|
539
538
|
parser.add_argument(
|
|
540
|
-
"--
|
|
539
|
+
"--author", "-a", help=i18n.t("cli.create.author_help"), default=""
|
|
541
540
|
)
|
|
542
541
|
parser.add_argument(
|
|
543
|
-
"--
|
|
542
|
+
"--email", "-e", help=i18n.t("cli.create.email_help"), default=""
|
|
543
|
+
)
|
|
544
|
+
parser.add_argument(
|
|
545
|
+
"--homepage", help=i18n.t("cli.create.homepage_help"), default=""
|
|
546
|
+
)
|
|
547
|
+
parser.add_argument(
|
|
548
|
+
"--output", "-o", help=i18n.t("cli.create.output_help"), default="."
|
|
549
|
+
)
|
|
550
|
+
parser.add_argument(
|
|
551
|
+
"--force", "-f", action="store_true", help=i18n.t("cli.create.force_help")
|
|
544
552
|
)
|
|
545
553
|
|
|
546
554
|
def execute(self, args):
|
|
@@ -553,10 +561,10 @@ class CreateCommand(Command):
|
|
|
553
561
|
# 名称校验:非法时保留输入并重新提示,而非直接退出
|
|
554
562
|
if not (name and _validate_name(name)):
|
|
555
563
|
name = prompt_validated(
|
|
556
|
-
"
|
|
564
|
+
i18n.t("cli.create.name_prompt"),
|
|
557
565
|
default=name or default_name,
|
|
558
566
|
validate=_validate_name,
|
|
559
|
-
error_msg="
|
|
567
|
+
error_msg=i18n.t("cli.create.name_error"),
|
|
560
568
|
)
|
|
561
569
|
|
|
562
570
|
if create_type == "module":
|
|
@@ -570,11 +578,17 @@ class CreateCommand(Command):
|
|
|
570
578
|
|
|
571
579
|
:return: [str] 返回 "module" 或 "adapter"
|
|
572
580
|
"""
|
|
573
|
-
section_header("
|
|
574
|
-
console.print(
|
|
575
|
-
|
|
581
|
+
section_header(i18n.t("cli.create.select_type_title"))
|
|
582
|
+
console.print(
|
|
583
|
+
f" [bold]1.[/] Module [dim]{i18n.t('cli.create.select_type_module')}[/]"
|
|
584
|
+
)
|
|
585
|
+
console.print(
|
|
586
|
+
f" [bold]2.[/] Adapter [dim]{i18n.t('cli.create.select_type_adapter')}[/]"
|
|
587
|
+
)
|
|
576
588
|
console.print()
|
|
577
|
-
choice = IntPrompt.ask(
|
|
589
|
+
choice = IntPrompt.ask(
|
|
590
|
+
i18n.t("cli.create.select_prompt"), default=1, choices=["1", "2"]
|
|
591
|
+
)
|
|
578
592
|
console.print()
|
|
579
593
|
return "module" if choice == 1 else "adapter"
|
|
580
594
|
|
|
@@ -604,19 +618,31 @@ class CreateCommand(Command):
|
|
|
604
618
|
:return: [None] 无返回值
|
|
605
619
|
"""
|
|
606
620
|
description = self._ask_missing(
|
|
607
|
-
args,
|
|
621
|
+
args,
|
|
622
|
+
"description",
|
|
623
|
+
i18n.t("cli.create.module_desc_prompt"),
|
|
624
|
+
i18n.t("cli.create.module_desc_placeholder", name=name),
|
|
625
|
+
)
|
|
626
|
+
author = self._ask_missing(
|
|
627
|
+
args, "author", i18n.t("cli.create.author_prompt"), "yourname"
|
|
628
|
+
)
|
|
629
|
+
email = self._ask_missing(
|
|
630
|
+
args, "email", i18n.t("cli.create.email_prompt"), "your@mail.com"
|
|
608
631
|
)
|
|
609
|
-
author = self._ask_missing(args, "author", "作者名称", "yourname")
|
|
610
|
-
email = self._ask_missing(args, "email", "作者邮箱", "your@mail.com")
|
|
611
632
|
homepage = self._ask_missing(
|
|
612
|
-
args,
|
|
633
|
+
args,
|
|
634
|
+
"homepage",
|
|
635
|
+
i18n.t("cli.create.homepage_prompt"),
|
|
636
|
+
f"https://github.com/{author}/{name}",
|
|
613
637
|
)
|
|
614
638
|
|
|
615
639
|
output = Path(args.output)
|
|
616
640
|
project_dir = output / name
|
|
617
641
|
|
|
618
642
|
if project_dir.exists() and not args.force:
|
|
619
|
-
console.print(
|
|
643
|
+
console.print(
|
|
644
|
+
f"[error] {i18n.t('cli.create.dir_exists', dir=str(project_dir))}"
|
|
645
|
+
)
|
|
620
646
|
sys.exit(1)
|
|
621
647
|
|
|
622
648
|
try:
|
|
@@ -650,9 +676,11 @@ class CreateCommand(Command):
|
|
|
650
676
|
)
|
|
651
677
|
|
|
652
678
|
console.print()
|
|
653
|
-
console.print(
|
|
679
|
+
console.print(
|
|
680
|
+
f"[success] {i18n.t('cli.create.module_created', name=name)}[/]"
|
|
681
|
+
)
|
|
654
682
|
console.print()
|
|
655
|
-
console.print(Text("
|
|
683
|
+
console.print(Text(i18n.t("cli.create.project_structure"), style="bold"))
|
|
656
684
|
console.print(f" {name}/")
|
|
657
685
|
console.print(" ├── pyproject.toml")
|
|
658
686
|
console.print(" ├── LICENSE")
|
|
@@ -661,14 +689,16 @@ class CreateCommand(Command):
|
|
|
661
689
|
console.print(" ├── __init__.py")
|
|
662
690
|
console.print(" └── Core.py")
|
|
663
691
|
console.print()
|
|
664
|
-
console.print(Text("
|
|
665
|
-
console.print(f" ·
|
|
666
|
-
console.print(
|
|
667
|
-
|
|
668
|
-
|
|
692
|
+
console.print(Text(i18n.t("cli.create.next_steps"), style="bold"))
|
|
693
|
+
console.print(f" · {i18n.t('cli.create.cd_to', dir=name)}")
|
|
694
|
+
console.print(
|
|
695
|
+
f" · {i18n.t('cli.create.edit_module', file=name + '/Core.py')}"
|
|
696
|
+
)
|
|
697
|
+
console.print(f" · {i18n.t('cli.create.install_dev')}")
|
|
698
|
+
console.print(f" · {i18n.t('cli.create.run_test')}")
|
|
669
699
|
|
|
670
700
|
except Exception as e:
|
|
671
|
-
console.print(f"[error]
|
|
701
|
+
console.print(f"[error] {i18n.t('cli.create.failed', error=e)}")
|
|
672
702
|
sys.exit(1)
|
|
673
703
|
|
|
674
704
|
def _create_adapter(self, args, name: str):
|
|
@@ -680,12 +710,22 @@ class CreateCommand(Command):
|
|
|
680
710
|
:return: [None] 无返回值
|
|
681
711
|
"""
|
|
682
712
|
description = self._ask_missing(
|
|
683
|
-
args,
|
|
713
|
+
args,
|
|
714
|
+
"description",
|
|
715
|
+
i18n.t("cli.create.adapter_desc_prompt"),
|
|
716
|
+
i18n.t("cli.create.adapter_desc_placeholder", name=name),
|
|
717
|
+
)
|
|
718
|
+
author = self._ask_missing(
|
|
719
|
+
args, "author", i18n.t("cli.create.author_prompt"), "yourname"
|
|
720
|
+
)
|
|
721
|
+
email = self._ask_missing(
|
|
722
|
+
args, "email", i18n.t("cli.create.email_prompt"), "your@mail.com"
|
|
684
723
|
)
|
|
685
|
-
author = self._ask_missing(args, "author", "作者名称", "yourname")
|
|
686
|
-
email = self._ask_missing(args, "email", "作者邮箱", "your@mail.com")
|
|
687
724
|
homepage = self._ask_missing(
|
|
688
|
-
args,
|
|
725
|
+
args,
|
|
726
|
+
"homepage",
|
|
727
|
+
i18n.t("cli.create.homepage_prompt"),
|
|
728
|
+
f"https://github.com/{author}/{name}",
|
|
689
729
|
)
|
|
690
730
|
|
|
691
731
|
converter_name = _to_converter_name(name)
|
|
@@ -694,7 +734,9 @@ class CreateCommand(Command):
|
|
|
694
734
|
project_dir = output / name
|
|
695
735
|
|
|
696
736
|
if project_dir.exists() and not args.force:
|
|
697
|
-
console.print(
|
|
737
|
+
console.print(
|
|
738
|
+
f"[error] {i18n.t('cli.create.dir_exists', dir=str(project_dir))}"
|
|
739
|
+
)
|
|
698
740
|
sys.exit(1)
|
|
699
741
|
|
|
700
742
|
try:
|
|
@@ -743,9 +785,11 @@ class CreateCommand(Command):
|
|
|
743
785
|
)
|
|
744
786
|
|
|
745
787
|
console.print()
|
|
746
|
-
console.print(
|
|
788
|
+
console.print(
|
|
789
|
+
f"[success] {i18n.t('cli.create.adapter_created', name=name)}[/]"
|
|
790
|
+
)
|
|
747
791
|
console.print()
|
|
748
|
-
console.print(Text("
|
|
792
|
+
console.print(Text(i18n.t("cli.create.project_structure"), style="bold"))
|
|
749
793
|
console.print(f" {name}/")
|
|
750
794
|
console.print(" ├── pyproject.toml")
|
|
751
795
|
console.print(" ├── LICENSE")
|
|
@@ -755,13 +799,17 @@ class CreateCommand(Command):
|
|
|
755
799
|
console.print(" ├── Core.py")
|
|
756
800
|
console.print(" └── Converter.py")
|
|
757
801
|
console.print()
|
|
758
|
-
console.print(Text("
|
|
759
|
-
console.print(f" ·
|
|
760
|
-
console.print(
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
console.print(
|
|
802
|
+
console.print(Text(i18n.t("cli.create.next_steps"), style="bold"))
|
|
803
|
+
console.print(f" · {i18n.t('cli.create.cd_to', dir=name)}")
|
|
804
|
+
console.print(
|
|
805
|
+
f" · {i18n.t('cli.create.edit_adapter', file=name + '/Core.py')}"
|
|
806
|
+
)
|
|
807
|
+
console.print(
|
|
808
|
+
f" · {i18n.t('cli.create.edit_converter', file=name + '/Converter.py')}"
|
|
809
|
+
)
|
|
810
|
+
console.print(f" · {i18n.t('cli.create.install_dev')}")
|
|
811
|
+
console.print(f" · {i18n.t('cli.create.run_test')}")
|
|
764
812
|
|
|
765
813
|
except Exception as e:
|
|
766
|
-
console.print(f"[error]
|
|
814
|
+
console.print(f"[error] {i18n.t('cli.create.failed', error=e)}")
|
|
767
815
|
sys.exit(1)
|
|
@@ -10,15 +10,16 @@ Create 命令实现
|
|
|
10
10
|
脚手架工具,快速创建 Module / Adapter 项目模板
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
-
import sys
|
|
14
13
|
import datetime
|
|
14
|
+
import sys
|
|
15
15
|
from argparse import ArgumentParser
|
|
16
16
|
from pathlib import Path
|
|
17
|
-
from rich.prompt import
|
|
17
|
+
from rich.prompt import IntPrompt, Prompt
|
|
18
18
|
from rich.text import Text
|
|
19
|
-
from ..console import console
|
|
20
19
|
from ..base import Command
|
|
21
|
-
from ..
|
|
20
|
+
from ..console import console
|
|
21
|
+
from ..i18n import i18n
|
|
22
|
+
from ..utils.display import prompt_validated, section_header
|
|
22
23
|
|
|
23
24
|
def _camel_to_snake(name: str) -> str:
|
|
24
25
|
"""
|