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.
Files changed (175) hide show
  1. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/PKG-INFO +6 -3
  2. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/README.md +3 -1
  3. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/pyproject.toml +3 -2
  4. erispulse-2.5.0.dev1/src/ErisPulse/CLI/__init__.py +17 -0
  5. erispulse-2.5.0.dev1/src/ErisPulse/CLI/__init__.pyi +19 -0
  6. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/cli.py +34 -16
  7. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/cli.pyi +4 -3
  8. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/create.py +95 -47
  9. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/create.pyi +5 -4
  10. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/init.py +97 -63
  11. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/init.pyi +3 -2
  12. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/install.py +186 -83
  13. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/install.pyi +4 -3
  14. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/list.py +37 -21
  15. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/list.pyi +4 -3
  16. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/list_remote.py +37 -17
  17. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/list_remote.pyi +4 -3
  18. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/run.py +47 -40
  19. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/run.pyi +6 -5
  20. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/self_update.py +96 -44
  21. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/self_update.pyi +6 -5
  22. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/uninstall.py +25 -14
  23. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/uninstall.pyi +3 -2
  24. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/upgrade.py +11 -7
  25. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/upgrade.pyi +2 -1
  26. erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/__init__.py +198 -0
  27. erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/__init__.pyi +83 -0
  28. erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/__init__.py +27 -0
  29. erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/__init__.pyi +15 -0
  30. erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/en.py +271 -0
  31. erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/en.pyi +11 -0
  32. erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/ja.py +271 -0
  33. erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/ja.pyi +11 -0
  34. erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/ru.py +271 -0
  35. erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/ru.pyi +11 -0
  36. erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/zh_cn.py +271 -0
  37. erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/zh_cn.pyi +11 -0
  38. erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/zh_tw.py +271 -0
  39. erispulse-2.5.0.dev1/src/ErisPulse/CLI/i18n/locales/zh_tw.pyi +11 -0
  40. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/__init__.py +3 -0
  41. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/__init__.pyi +1 -0
  42. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/adapter.py +195 -72
  43. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/adapter.pyi +6 -5
  44. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/client.py +70 -21
  45. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/client.pyi +6 -5
  46. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/config.py +28 -7
  47. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/config.pyi +4 -3
  48. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/constants.py +13 -0
  49. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/__init__.py +548 -0
  50. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/__init__.pyi +150 -0
  51. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/constants.py +29 -0
  52. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/constants.pyi +11 -0
  53. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/__init__.py +44 -0
  54. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/__init__.pyi +15 -0
  55. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/en.py +305 -0
  56. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/en.pyi +11 -0
  57. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/ja.py +305 -0
  58. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/ja.pyi +11 -0
  59. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/ru.py +305 -0
  60. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/ru.pyi +11 -0
  61. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/zh_cn.py +305 -0
  62. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/zh_cn.pyi +11 -0
  63. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/zh_tw.py +305 -0
  64. erispulse-2.5.0.dev1/src/ErisPulse/Core/i18n/locales/zh_tw.pyi +11 -0
  65. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/lifecycle.py +58 -29
  66. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/lifecycle.pyi +3 -2
  67. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/logger.py +21 -16
  68. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/logger.pyi +5 -4
  69. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/module.py +112 -54
  70. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/module.pyi +6 -5
  71. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/router.py +168 -102
  72. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/router.pyi +17 -15
  73. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/storage.py +50 -32
  74. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/storage.pyi +5 -4
  75. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/__init__.py +9 -9
  76. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/__init__.pyi +2 -2
  77. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/adapter.py +33 -18
  78. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/adapter.pyi +4 -3
  79. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/module.py +54 -31
  80. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/module.pyi +7 -6
  81. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/__init__.py +19 -17
  82. erispulse-2.5.0.dev1/src/ErisPulse/runtime/__init__.pyi +19 -0
  83. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/config_schema.py +25 -1
  84. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/config_schema.pyi +9 -1
  85. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/exceptions.py +6 -9
  86. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/exceptions.pyi +3 -3
  87. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/frame_config.py +25 -10
  88. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/frame_config.pyi +10 -2
  89. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/sdk.py +152 -83
  90. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/sdk.pyi +5 -3
  91. erispulse-2.5.0.dev0/src/ErisPulse/CLI/__init__.py +0 -11
  92. erispulse-2.5.0.dev0/src/ErisPulse/CLI/__init__.pyi +0 -13
  93. erispulse-2.5.0.dev0/src/ErisPulse/runtime/__init__.pyi +0 -19
  94. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/.gitignore +0 -0
  95. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/LICENSE +0 -0
  96. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/base.py +0 -0
  97. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/base.pyi +0 -0
  98. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/__init__.py +0 -0
  99. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
  100. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/console.py +0 -0
  101. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/console.pyi +0 -0
  102. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/registry.py +0 -0
  103. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/registry.pyi +0 -0
  104. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/utils/__init__.py +0 -0
  105. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
  106. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/utils/display.py +0 -0
  107. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/utils/display.pyi +0 -0
  108. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/utils/package_manager.py +0 -0
  109. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/CLI/utils/package_manager.pyi +0 -0
  110. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/__init__.py +0 -0
  111. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/__init__.pyi +0 -0
  112. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/adapter.py +0 -0
  113. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/adapter.pyi +0 -0
  114. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/client.py +0 -0
  115. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/client.pyi +0 -0
  116. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/errors.py +0 -0
  117. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/errors.pyi +0 -0
  118. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/manager.py +0 -0
  119. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/manager.pyi +0 -0
  120. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/module.py +0 -0
  121. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/module.pyi +0 -0
  122. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/router.py +0 -0
  123. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/router.pyi +0 -0
  124. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/storage.py +0 -0
  125. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/storage.pyi +0 -0
  126. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/websocket.py +0 -0
  127. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Bases/websocket.pyi +0 -0
  128. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/__init__.py +0 -0
  129. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/__init__.pyi +0 -0
  130. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/base.py +0 -0
  131. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/base.pyi +0 -0
  132. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/command.py +0 -0
  133. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/command.pyi +0 -0
  134. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/message.py +0 -0
  135. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/message.pyi +0 -0
  136. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/message_builder.py +0 -0
  137. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/message_builder.pyi +0 -0
  138. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/meta.py +0 -0
  139. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/meta.pyi +0 -0
  140. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/notice.py +0 -0
  141. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/notice.pyi +0 -0
  142. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/request.py +0 -0
  143. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/request.pyi +0 -0
  144. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/session_type.py +0 -0
  145. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/session_type.pyi +0 -0
  146. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/wrapper.py +0 -0
  147. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/Event/wrapper.pyi +0 -0
  148. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/Core/constants.pyi +0 -0
  149. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/__main__.py +0 -0
  150. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/__main__.pyi +0 -0
  151. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/__init__.py +0 -0
  152. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/__init__.pyi +0 -0
  153. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/adapter.py +0 -0
  154. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/adapter.pyi +0 -0
  155. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/bases/__init__.py +0 -0
  156. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
  157. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/bases/finder.py +0 -0
  158. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/bases/finder.pyi +0 -0
  159. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/module.py +0 -0
  160. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/finders/module.pyi +0 -0
  161. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/__init__.py +0 -0
  162. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/__init__.pyi +0 -0
  163. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/bases/__init__.py +0 -0
  164. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
  165. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/bases/loader.py +0 -0
  166. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/bases/loader.pyi +0 -0
  167. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/strategy.py +0 -0
  168. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/loaders/strategy.pyi +0 -0
  169. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/context.py +0 -0
  170. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/runtime/context.pyi +0 -0
  171. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/web_status/4xx.png +0 -0
  172. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/web_status/5xx.png +0 -0
  173. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/web_status/__init__.py +0 -0
  174. {erispulse-2.5.0.dev0 → erispulse-2.5.0.dev1}/src/ErisPulse/web_status/__init__.pyi +0 -0
  175. {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.dev0
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[standard]>=0.30.0
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.0"
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[standard]>=0.30.0",
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="ErisPulse SDK 命令行工具",
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("--version", "-V", action="store_true", help="显示版本信息")
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="增加输出详细程度 (-v, -vv, -vvv)",
61
+ help=i18n.t("cli.parser.verbose_help"),
56
62
  )
57
63
 
58
64
  # 子命令
59
65
  subparsers = parser.add_subparsers(
60
- dest="command", metavar="<命令>", help="要执行的操作"
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]实例化命令 {attr_name} 失败: {e}[/]"
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(f"[warning]加载命令模块 {module_name} 失败: {e}[/]")
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(f"[warning]无法导入 commands 包: {e}[/]")
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]ErisPulse SDK[/] 版本: [bold]{__version__}[/]",
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(f"[warning]未识别的参数: {' '.join(unknown)}[/]")
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(f"[warning]未识别的参数: {' '.join(unknown)}[/]")
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(f"[error]未知命令: {args.command}[/]")
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]执行命令时出错: {e}[/]")
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 Prompt, IntPrompt
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 ..utils.display import section_header, prompt_validated
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 = "创建 Module / Adapter 项目脚手架"
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="创建类型: module 或 adapter",
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
- "--output", "-o", help="输出目录 (默认当前目录)", default="."
539
+ "--author", "-a", help=i18n.t("cli.create.author_help"), default=""
541
540
  )
542
541
  parser.add_argument(
543
- "--force", "-f", action="store_true", help="强制覆盖已存在的目录"
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
- " 名称 (PascalCase)",
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(" [bold]1.[/] Module [dim]— 自定义功能模块[/]")
575
- console.print(" [bold]2.[/] Adapter [dim]— 平台适配器[/]")
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(" 请选择", default=1, choices=["1", "2"])
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, "description", "模块描述", f"一个非常哇塞的{name}模块"
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, "homepage", "项目主页", f"https://github.com/{author}/{name}"
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(f"[error] 目录 {project_dir} 已存在,使用 --force 覆盖")
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(f"[success] Module 项目 [{name}] 创建成功[/]")
679
+ console.print(
680
+ f"[success] {i18n.t('cli.create.module_created', name=name)}[/]"
681
+ )
654
682
  console.print()
655
- console.print(Text(" 项目结构:", style="bold"))
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(" 接下来:", style="bold"))
665
- console.print(f" · cd {name}")
666
- console.print(f" · 编辑 {name}/Core.py 实现模块逻辑")
667
- console.print(" · pip install -e . (开发模式安装)")
668
- console.print(" · epsdk run (运行测试)")
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] 创建失败: {e}")
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, "description", "适配器描述", f"{name}平台适配器"
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, "homepage", "项目主页", f"https://github.com/{author}/{name}"
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(f"[error] 目录 {project_dir} 已存在,使用 --force 覆盖")
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(f"[success] Adapter 项目 [{name}] 创建成功[/]")
788
+ console.print(
789
+ f"[success] {i18n.t('cli.create.adapter_created', name=name)}[/]"
790
+ )
747
791
  console.print()
748
- console.print(Text(" 项目结构:", style="bold"))
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(" 接下来:", style="bold"))
759
- console.print(f" · cd {name}")
760
- console.print(f" · 编辑 {name}/Core.py 实现适配器逻辑")
761
- console.print(f" · 编辑 {name}/Converter.py 实现消息格式转换")
762
- console.print(" · pip install -e . (开发模式安装)")
763
- console.print(" · epsdk run (运行测试)")
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] 创建失败: {e}")
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 Prompt, IntPrompt
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 ..utils.display import section_header, prompt_validated
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
  """