ErisPulse 2.6.3.dev0__tar.gz → 2.7.0__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 (204) hide show
  1. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/PKG-INFO +1 -1
  2. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/pyproject.toml +1 -1
  3. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/cli.py +17 -0
  4. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/commands/create.py +194 -142
  5. erispulse-2.7.0/src/ErisPulse/CLI/commands/doctor.py +127 -0
  6. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/commands/init.py +1 -0
  7. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/commands/list.py +29 -9
  8. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/commands/run.py +2 -1
  9. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/commands/types.py +3 -2
  10. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/console.py +2 -2
  11. erispulse-2.7.0/src/ErisPulse/CLI/constants.py +46 -0
  12. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/i18n/__init__.py +82 -2
  13. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/i18n/locales/en.py +33 -0
  14. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/i18n/locales/ja.py +33 -0
  15. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/i18n/locales/ru.py +33 -0
  16. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/i18n/locales/zh_cn.py +33 -0
  17. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/i18n/locales/zh_tw.py +33 -0
  18. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/utils/display.py +4 -2
  19. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/utils/package_manager.py +229 -38
  20. erispulse-2.7.0/src/ErisPulse/CLI/utils/scaffold_text.py +338 -0
  21. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Bases/__init__.py +24 -1
  22. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Bases/adapter.py +440 -20
  23. {erispulse-2.6.3.dev0/src/ErisPulse/runtime → erispulse-2.7.0/src/ErisPulse/Core/Bases}/config_schema.py +155 -34
  24. erispulse-2.7.0/src/ErisPulse/Core/Bases/converter.py +80 -0
  25. erispulse-2.7.0/src/ErisPulse/Core/Bases/i18n_schema.py +239 -0
  26. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Bases/module.py +37 -3
  27. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Bases/send_rules.py +3 -3
  28. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Event/command.py +60 -25
  29. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Event/session_type.py +28 -6
  30. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Event/wrapper.py +111 -4
  31. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/__init__.py +2 -0
  32. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/adapter.py +47 -3
  33. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/client.py +4 -3
  34. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/config.py +164 -26
  35. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/constants.py +80 -1
  36. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/i18n/locales/en.py +43 -7
  37. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/i18n/locales/ja.py +43 -7
  38. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/i18n/locales/ru.py +43 -7
  39. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/i18n/locales/zh_cn.py +43 -7
  40. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/i18n/locales/zh_tw.py +43 -7
  41. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/lifecycle.py +61 -0
  42. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/logger.py +31 -7
  43. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/master.py +1 -1
  44. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/module.py +11 -0
  45. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/router.py +183 -20
  46. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/storage.py +30 -0
  47. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/finders/adapter.py +3 -2
  48. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/finders/module.py +3 -2
  49. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/loaders/adapter.py +9 -2
  50. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/loaders/module.py +22 -7
  51. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/runtime/__init__.py +46 -13
  52. erispulse-2.7.0/src/ErisPulse/runtime/config_schema.py +39 -0
  53. erispulse-2.7.0/src/ErisPulse/runtime/diagnostics.py +317 -0
  54. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/runtime/frame_config.py +51 -1
  55. erispulse-2.7.0/src/ErisPulse/runtime/memory.py +121 -0
  56. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/sdk.py +221 -31
  57. erispulse-2.6.3.dev0/src/ErisPulse/CLI/__init__.pyi +0 -16
  58. erispulse-2.6.3.dev0/src/ErisPulse/CLI/base.pyi +0 -52
  59. erispulse-2.6.3.dev0/src/ErisPulse/CLI/cli.pyi +0 -89
  60. erispulse-2.6.3.dev0/src/ErisPulse/CLI/commands/__init__.pyi +0 -9
  61. erispulse-2.6.3.dev0/src/ErisPulse/CLI/commands/create.pyi +0 -95
  62. erispulse-2.6.3.dev0/src/ErisPulse/CLI/commands/init.pyi +0 -94
  63. erispulse-2.6.3.dev0/src/ErisPulse/CLI/commands/install.pyi +0 -78
  64. erispulse-2.6.3.dev0/src/ErisPulse/CLI/commands/language.pyi +0 -51
  65. erispulse-2.6.3.dev0/src/ErisPulse/CLI/commands/list.pyi +0 -58
  66. erispulse-2.6.3.dev0/src/ErisPulse/CLI/commands/list_remote.pyi +0 -44
  67. erispulse-2.6.3.dev0/src/ErisPulse/CLI/commands/run.pyi +0 -108
  68. erispulse-2.6.3.dev0/src/ErisPulse/CLI/commands/self_update.pyi +0 -68
  69. erispulse-2.6.3.dev0/src/ErisPulse/CLI/commands/types.pyi +0 -148
  70. erispulse-2.6.3.dev0/src/ErisPulse/CLI/commands/uninstall.pyi +0 -37
  71. erispulse-2.6.3.dev0/src/ErisPulse/CLI/commands/upgrade.pyi +0 -31
  72. erispulse-2.6.3.dev0/src/ErisPulse/CLI/console.pyi +0 -51
  73. erispulse-2.6.3.dev0/src/ErisPulse/CLI/hints.pyi +0 -71
  74. erispulse-2.6.3.dev0/src/ErisPulse/CLI/i18n/__init__.pyi +0 -115
  75. erispulse-2.6.3.dev0/src/ErisPulse/CLI/i18n/locales/__init__.pyi +0 -12
  76. erispulse-2.6.3.dev0/src/ErisPulse/CLI/i18n/locales/en.pyi +0 -8
  77. erispulse-2.6.3.dev0/src/ErisPulse/CLI/i18n/locales/ja.pyi +0 -8
  78. erispulse-2.6.3.dev0/src/ErisPulse/CLI/i18n/locales/ru.pyi +0 -8
  79. erispulse-2.6.3.dev0/src/ErisPulse/CLI/i18n/locales/zh_cn.pyi +0 -8
  80. erispulse-2.6.3.dev0/src/ErisPulse/CLI/i18n/locales/zh_tw.pyi +0 -8
  81. erispulse-2.6.3.dev0/src/ErisPulse/CLI/registry.pyi +0 -92
  82. erispulse-2.6.3.dev0/src/ErisPulse/CLI/utils/__init__.pyi +0 -11
  83. erispulse-2.6.3.dev0/src/ErisPulse/CLI/utils/display.pyi +0 -114
  84. erispulse-2.6.3.dev0/src/ErisPulse/CLI/utils/file_watcher.pyi +0 -123
  85. erispulse-2.6.3.dev0/src/ErisPulse/CLI/utils/package_manager.pyi +0 -391
  86. erispulse-2.6.3.dev0/src/ErisPulse/Core/Bases/__init__.pyi +0 -19
  87. erispulse-2.6.3.dev0/src/ErisPulse/Core/Bases/adapter.pyi +0 -786
  88. erispulse-2.6.3.dev0/src/ErisPulse/Core/Bases/client.pyi +0 -277
  89. erispulse-2.6.3.dev0/src/ErisPulse/Core/Bases/errors.pyi +0 -115
  90. erispulse-2.6.3.dev0/src/ErisPulse/Core/Bases/kv_builder.pyi +0 -125
  91. erispulse-2.6.3.dev0/src/ErisPulse/Core/Bases/manager.pyi +0 -138
  92. erispulse-2.6.3.dev0/src/ErisPulse/Core/Bases/module.pyi +0 -137
  93. erispulse-2.6.3.dev0/src/ErisPulse/Core/Bases/router.pyi +0 -451
  94. erispulse-2.6.3.dev0/src/ErisPulse/Core/Bases/send_builder.pyi +0 -231
  95. erispulse-2.6.3.dev0/src/ErisPulse/Core/Bases/send_rules.pyi +0 -167
  96. erispulse-2.6.3.dev0/src/ErisPulse/Core/Bases/storage.pyi +0 -397
  97. erispulse-2.6.3.dev0/src/ErisPulse/Core/Bases/websocket.pyi +0 -194
  98. erispulse-2.6.3.dev0/src/ErisPulse/Core/Event/__init__.pyi +0 -28
  99. erispulse-2.6.3.dev0/src/ErisPulse/Core/Event/base.pyi +0 -71
  100. erispulse-2.6.3.dev0/src/ErisPulse/Core/Event/command.pyi +0 -121
  101. erispulse-2.6.3.dev0/src/ErisPulse/Core/Event/message.pyi +0 -102
  102. erispulse-2.6.3.dev0/src/ErisPulse/Core/Event/message_builder.pyi +0 -147
  103. erispulse-2.6.3.dev0/src/ErisPulse/Core/Event/meta.pyi +0 -101
  104. erispulse-2.6.3.dev0/src/ErisPulse/Core/Event/notice.pyi +0 -117
  105. erispulse-2.6.3.dev0/src/ErisPulse/Core/Event/request.pyi +0 -86
  106. erispulse-2.6.3.dev0/src/ErisPulse/Core/Event/session_type.pyi +0 -216
  107. erispulse-2.6.3.dev0/src/ErisPulse/Core/Event/wrapper.pyi +0 -1170
  108. erispulse-2.6.3.dev0/src/ErisPulse/Core/__init__.pyi +0 -36
  109. erispulse-2.6.3.dev0/src/ErisPulse/Core/adapter.pyi +0 -494
  110. erispulse-2.6.3.dev0/src/ErisPulse/Core/assets/__init__.pyi +0 -65
  111. erispulse-2.6.3.dev0/src/ErisPulse/Core/client.pyi +0 -407
  112. erispulse-2.6.3.dev0/src/ErisPulse/Core/config.pyi +0 -129
  113. erispulse-2.6.3.dev0/src/ErisPulse/Core/constants.pyi +0 -217
  114. erispulse-2.6.3.dev0/src/ErisPulse/Core/i18n/__init__.pyi +0 -153
  115. erispulse-2.6.3.dev0/src/ErisPulse/Core/i18n/constants.pyi +0 -8
  116. erispulse-2.6.3.dev0/src/ErisPulse/Core/i18n/locales/__init__.pyi +0 -12
  117. erispulse-2.6.3.dev0/src/ErisPulse/Core/i18n/locales/en.pyi +0 -8
  118. erispulse-2.6.3.dev0/src/ErisPulse/Core/i18n/locales/ja.pyi +0 -8
  119. erispulse-2.6.3.dev0/src/ErisPulse/Core/i18n/locales/ru.pyi +0 -8
  120. erispulse-2.6.3.dev0/src/ErisPulse/Core/i18n/locales/zh_cn.pyi +0 -8
  121. erispulse-2.6.3.dev0/src/ErisPulse/Core/i18n/locales/zh_tw.pyi +0 -8
  122. erispulse-2.6.3.dev0/src/ErisPulse/Core/lifecycle.pyi +0 -240
  123. erispulse-2.6.3.dev0/src/ErisPulse/Core/logger.pyi +0 -378
  124. erispulse-2.6.3.dev0/src/ErisPulse/Core/master.pyi +0 -119
  125. erispulse-2.6.3.dev0/src/ErisPulse/Core/module.pyi +0 -300
  126. erispulse-2.6.3.dev0/src/ErisPulse/Core/router.pyi +0 -651
  127. erispulse-2.6.3.dev0/src/ErisPulse/Core/storage.pyi +0 -455
  128. erispulse-2.6.3.dev0/src/ErisPulse/__init__.pyi +0 -20
  129. erispulse-2.6.3.dev0/src/ErisPulse/__main__.pyi +0 -21
  130. erispulse-2.6.3.dev0/src/ErisPulse/finders/__init__.pyi +0 -19
  131. erispulse-2.6.3.dev0/src/ErisPulse/finders/adapter.pyi +0 -91
  132. erispulse-2.6.3.dev0/src/ErisPulse/finders/bases/__init__.pyi +0 -4
  133. erispulse-2.6.3.dev0/src/ErisPulse/finders/bases/finder.pyi +0 -66
  134. erispulse-2.6.3.dev0/src/ErisPulse/finders/module.pyi +0 -91
  135. erispulse-2.6.3.dev0/src/ErisPulse/loaders/__init__.pyi +0 -18
  136. erispulse-2.6.3.dev0/src/ErisPulse/loaders/adapter.pyi +0 -96
  137. erispulse-2.6.3.dev0/src/ErisPulse/loaders/bases/__init__.pyi +0 -4
  138. erispulse-2.6.3.dev0/src/ErisPulse/loaders/bases/loader.pyi +0 -20
  139. erispulse-2.6.3.dev0/src/ErisPulse/loaders/module.pyi +0 -185
  140. erispulse-2.6.3.dev0/src/ErisPulse/loaders/strategy.pyi +0 -90
  141. erispulse-2.6.3.dev0/src/ErisPulse/loaders/strict.pyi +0 -118
  142. erispulse-2.6.3.dev0/src/ErisPulse/runtime/__init__.pyi +0 -18
  143. erispulse-2.6.3.dev0/src/ErisPulse/runtime/config_schema.pyi +0 -285
  144. erispulse-2.6.3.dev0/src/ErisPulse/runtime/context.pyi +0 -34
  145. erispulse-2.6.3.dev0/src/ErisPulse/runtime/exceptions.pyi +0 -95
  146. erispulse-2.6.3.dev0/src/ErisPulse/runtime/frame_config.pyi +0 -116
  147. erispulse-2.6.3.dev0/src/ErisPulse/runtime/hints.pyi +0 -266
  148. erispulse-2.6.3.dev0/src/ErisPulse/runtime/tasks.pyi +0 -41
  149. erispulse-2.6.3.dev0/src/ErisPulse/sdk.pyi +0 -259
  150. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/.gitignore +0 -0
  151. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/LICENSE +0 -0
  152. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/README.pypi.md +0 -0
  153. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/__init__.py +0 -0
  154. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/base.py +0 -0
  155. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/commands/__init__.py +0 -0
  156. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/commands/install.py +0 -0
  157. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/commands/language.py +0 -0
  158. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/commands/list_remote.py +0 -0
  159. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/commands/self_update.py +0 -0
  160. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/commands/uninstall.py +0 -0
  161. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/commands/upgrade.py +0 -0
  162. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/hints.py +0 -0
  163. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/i18n/locales/__init__.py +0 -0
  164. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/registry.py +0 -0
  165. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/utils/__init__.py +0 -0
  166. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/CLI/utils/file_watcher.py +0 -0
  167. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Bases/client.py +0 -0
  168. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Bases/errors.py +0 -0
  169. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Bases/kv_builder.py +0 -0
  170. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Bases/manager.py +0 -0
  171. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Bases/router.py +0 -0
  172. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Bases/send_builder.py +0 -0
  173. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Bases/storage.py +0 -0
  174. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Bases/websocket.py +0 -0
  175. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Event/__init__.py +0 -0
  176. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Event/base.py +0 -0
  177. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Event/message.py +0 -0
  178. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Event/message_builder.py +0 -0
  179. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Event/meta.py +0 -0
  180. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Event/notice.py +0 -0
  181. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/Event/request.py +0 -0
  182. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/assets/__init__.py +0 -0
  183. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/assets/error.css +0 -0
  184. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/assets/error.html +0 -0
  185. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/assets/root.css +0 -0
  186. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/assets/root.html +0 -0
  187. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/i18n/__init__.py +0 -0
  188. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/i18n/constants.py +0 -0
  189. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/Core/i18n/locales/__init__.py +0 -0
  190. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/__init__.py +0 -0
  191. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/__main__.py +0 -0
  192. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/finders/__init__.py +0 -0
  193. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/finders/bases/__init__.py +0 -0
  194. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/finders/bases/finder.py +0 -0
  195. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/loaders/__init__.py +0 -0
  196. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/loaders/bases/__init__.py +0 -0
  197. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/loaders/bases/loader.py +0 -0
  198. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/loaders/strategy.py +0 -0
  199. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/loaders/strict.py +0 -0
  200. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/py.typed +0 -0
  201. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/runtime/context.py +0 -0
  202. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/runtime/exceptions.py +0 -0
  203. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/runtime/hints.py +0 -0
  204. {erispulse-2.6.3.dev0 → erispulse-2.7.0}/src/ErisPulse/runtime/tasks.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ErisPulse
3
- Version: 2.6.3.dev0
3
+ Version: 2.7.0
4
4
  Summary: Event-driven modular async bot framework — write once, deploy to any platform | 事件驱动的模块化异步机器人框架,一次编写,多平台部署
5
5
  Project-URL: Homepage, https://github.com/ErisPulse/ErisPulse
6
6
  Project-URL: Documentation, https://www.erisdev.com#docs
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ErisPulse"
7
- version = "2.6.3-dev.0"
7
+ version = "2.7.0"
8
8
  description = "Event-driven modular async bot framework — write once, deploy to any platform | 事件驱动的模块化异步机器人框架,一次编写,多平台部署"
9
9
  readme = "README.pypi.md"
10
10
  requires-python = ">=3.10"
@@ -60,6 +60,19 @@ class CLI:
60
60
  default=0,
61
61
  help=i18n.t("cli.parser.verbose_help"),
62
62
  )
63
+ parser.add_argument(
64
+ "--no-color",
65
+ action="store_true",
66
+ default=False,
67
+ help=i18n.t("cli.parser.no_color_help"),
68
+ )
69
+ parser.add_argument(
70
+ "--yes",
71
+ "-y",
72
+ action="store_true",
73
+ default=False,
74
+ help=i18n.t("cli.parser.yes_help"),
75
+ )
63
76
 
64
77
  # 子命令
65
78
  subparsers = parser.add_subparsers(
@@ -286,6 +299,10 @@ class CLI:
286
299
  args, unknown = self.parser.parse_known_args()
287
300
  args._unknown_args = unknown
288
301
 
302
+ # --no-color:禁用 Rich 控制台着色(CI / 日志采集场景)
303
+ if getattr(args, "no_color", False):
304
+ console.no_color = True
305
+
289
306
  print_banner()
290
307
 
291
308
  # 前几次启动时提醒用户确认语言(检测错误时用户仍可看懂多语言提示)
@@ -16,6 +16,7 @@ from ..base import Command
16
16
  from ..console import console
17
17
  from ..i18n import i18n
18
18
  from ..utils.display import prompt_validated, section_header
19
+ from ..utils.scaffold_text import ScaffoldText
19
20
 
20
21
  _LICENSE_TEMPLATE = """MIT License
21
22
 
@@ -63,30 +64,59 @@ _MODULE_INIT = """from .Core import Main
63
64
  """
64
65
 
65
66
  _MODULE_CORE = """from dataclasses import dataclass, field
66
- from ErisPulse.Core.Bases import BaseModule
67
+ from ErisPulse.Core.Bases import BaseConfig, BaseI18n, BaseModule, I18nKey
67
68
  from ErisPulse.Core.Event import command, message, notice
68
- from ErisPulse.runtime.config_schema import BaseConfig
69
-
70
-
71
- @dataclass
72
- class {name}Config(BaseConfig):
73
- \"\"\"{name} 模块配置\"\"\"
74
- enabled: bool = field(
75
- default=True,
76
- metadata={{
77
- \"description\": \"是否启用模块\",
78
- }},
79
- )
69
+ from ErisPulse.Core.i18n import i18n
80
70
 
81
71
 
82
72
  class Main(BaseModule):
83
73
  \"\"\"
84
- {name}模块
85
-
86
- 继承自BaseModule基类,实现了标准化的模块生命周期管理和事件处理
74
+ {text[module.doc]}
87
75
  \"\"\"
88
76
 
89
- ConfigClass = {name}Config
77
+ # {text[module.config_hint]}
78
+ @dataclass
79
+ class ConfigClass(BaseConfig):
80
+ \"\"\"{text[module.config_doc]}\"\"\"
81
+
82
+ enabled: bool = field(
83
+ default=True,
84
+ metadata={{
85
+ \"description\": {{\"i18n\": \"module.{name}.enabled\", \"default\": \"Enable module\"}},
86
+ }},
87
+ )
88
+
89
+ # {text[module.i18n_hint]}
90
+ class I18nClass(BaseI18n):
91
+ \"\"\"{name} translation keys\"\"\"
92
+
93
+ enabled: I18nKey = I18nKey(
94
+ key=\"module.{name}.enabled\",
95
+ default=\"Enable module\",
96
+ zh_CN=\"是否启用模块\",
97
+ en=\"Enable module\",
98
+ ja=\"モジュールを有効にする\",
99
+ ru=\"Включить модуль\",
100
+ zh_TW=\"啟用模組\",
101
+ )
102
+ hello_help: I18nKey = I18nKey(
103
+ key=\"module.{name}.command.hello.help\",
104
+ default=\"Send a greeting message\",
105
+ zh_CN=\"发送问候消息\",
106
+ en=\"Send a greeting message\",
107
+ ja=\"挨拶メッセージを送信\",
108
+ ru=\"Отправить приветствие\",
109
+ zh_TW=\"發送問候訊息\",
110
+ )
111
+ hello_reply: I18nKey = I18nKey(
112
+ key=\"module.{name}.command.hello.reply\",
113
+ default=\"Hello from {name}!\",
114
+ zh_CN=\"来自 {name} 的问候!\",
115
+ en=\"Hello from {name}!\",
116
+ ja=\"{name} からの挨拶です!\",
117
+ ru=\"Привет от {name}!\",
118
+ zh_TW=\"來自 {name} 的問候!\",
119
+ )
90
120
 
91
121
  def __init__(self, sdk=None):
92
122
  from ErisPulse import sdk as _sdk
@@ -96,7 +126,7 @@ class Main(BaseModule):
96
126
  self.adapter = self.sdk.adapter
97
127
  self.client = self.sdk.client
98
128
 
99
- self.logger.info(\"{name} 初始化完成\")
129
+ self.logger.info((\"{text[module.log.init_done]}\").format(name=\"{name}\"))
100
130
 
101
131
  @staticmethod
102
132
  def get_load_strategy():
@@ -108,35 +138,39 @@ class Main(BaseModule):
108
138
 
109
139
  async def on_load(self, event: dict) -> bool:
110
140
  \"\"\"
111
- 模块被加载时调用
141
+ {text[module.on_load_doc]}
112
142
 
113
- :param event: 事件内容
114
- :return: 处理结果
143
+ :param event: event data
144
+ :return: processing result
115
145
  \"\"\"
116
146
  await self._register_commands()
117
147
  await self._register_message_handlers()
118
- self.logger.info(f\"模块已加载: {{event}}\")
148
+ self.logger.info((\"{text[module.log.loaded]}\").format(event=event))
119
149
  return True
120
150
 
121
151
  async def on_unload(self, event: dict) -> bool:
122
152
  \"\"\"
123
- 模块被卸载时调用
153
+ {text[module.on_unload_doc]}
124
154
 
125
- :param event: 事件内容
126
- :return: 处理结果
155
+ :param event: event data
156
+ :return: processing result
127
157
  \"\"\"
128
- self.logger.info(f\"模块已卸载: {{event}}\")
158
+ self.logger.info((\"{text[module.log.unloaded]}\").format(event=event))
129
159
  return True
130
160
 
161
+ def on_config_update(self, old_config, new_config):
162
+ \"\"\"{text[module.config_updated_doc]}\"\"\"
163
+ self.logger.info(\"{text[module.log.config_updated]}\")
164
+
131
165
  async def _register_commands(self):
132
- @command(\"hello\", help=\"发送问候消息\")
166
+ @command(\"hello\", help=i18n.t(\"module.{name}.command.hello.help\"))
133
167
  async def hello_command(event):
134
- await event.reply(\"Hello from {name}!\")
168
+ await event.reply(i18n.t(\"module.{name}.command.hello.reply\"))
135
169
 
136
170
  async def _register_message_handlers(self):
137
171
  @message.on_private_message()
138
172
  async def private_message_handler(event):
139
- self.logger.info(f\"收到私聊消息: {{event.get_text()}}\")
173
+ self.logger.info((\"{text[module.log.private_message]}\").format(content=event.get_text()))
140
174
 
141
175
  @message.on_group_message()
142
176
  async def group_message_handler(event):
@@ -144,7 +178,7 @@ class Main(BaseModule):
144
178
 
145
179
  @notice.on_friend_add()
146
180
  async def friend_add_handler(event):
147
- self.logger.info(f\"新好友添加: {{event.get_user_nickname()}}\")
181
+ self.logger.info((\"{text[module.log.friend_add]}\").format(nickname=event.get_user_nickname()))
148
182
  """
149
183
 
150
184
  _ADAPTER_PYPROJECT = """[project]
@@ -179,63 +213,79 @@ _ADAPTER_CORE = """import asyncio
179
213
  import json
180
214
  from dataclasses import dataclass, field
181
215
  from ErisPulse.Core import BaseAdapter
182
- from ErisPulse.runtime.config_schema import BaseConfig
216
+ from ErisPulse.Core.Bases import BaseConfig, BaseI18n, I18nKey
183
217
  from ErisPulse.Core import router
184
-
185
-
186
- @dataclass
187
- class {name}Config(BaseConfig):
188
- \"\"\"{name} 适配器配置\"\"\"
189
- endpoint: str = field(
190
- default="https://api.example.com",
191
- metadata={{
192
- "description": {{"i18n": "adapter.{name}.endpoint", "default": "平台 API 地址"}},
193
- "required": False,
194
- "ui": {{"widget": "text", "group": "connection", "order": 1}},
195
- }},
196
- )
197
- token: str = field(
198
- default="",
199
- metadata={{
200
- "description": {{"i18n": "adapter.{name}.token", "default": "平台 Token"}},
201
- "required": True,
202
- "secret": True,
203
- "ui": {{"widget": "password", "group": "basic", "order": 2}},
204
- }},
205
- )
218
+ from ErisPulse.Core.i18n import i18n
206
219
 
207
220
 
208
221
  class {name}(BaseAdapter):
209
222
  \"\"\"
210
- {name} 适配器
211
-
212
- 继承自 BaseAdapter 基类,使用声明式配置管理(ConfigClass),
213
- 实现了 SendDSL 风格的链式调用接口和 Bot 状态追踪。
223
+ {text[adapter.doc]}
214
224
  \"\"\"
215
225
 
216
- ConfigClass = {name}Config
226
+ # {text[adapter.config_hint]}
227
+ @dataclass
228
+ class ConfigClass(BaseConfig):
229
+ \"\"\"{text[adapter.config_doc]}\"\"\"
230
+
231
+ endpoint: str = field(
232
+ default="https://api.example.com",
233
+ metadata={{
234
+ "description": {{"i18n": "adapter.{name}.endpoint", "default": "Platform API Endpoint"}},
235
+ "required": False,
236
+ "ui": {{"widget": "text", "group": "connection", "order": 1}},
237
+ }},
238
+ )
239
+ token: str = field(
240
+ default="",
241
+ metadata={{
242
+ "description": {{"i18n": "adapter.{name}.token", "default": "Platform Token"}},
243
+ "required": True,
244
+ "secret": True,
245
+ "ui": {{"widget": "password", "group": "basic", "order": 2}},
246
+ }},
247
+ )
248
+
249
+ # {text[adapter.i18n_hint]}
250
+ class I18nClass(BaseI18n):
251
+ \"\"\"{name} translation keys\"\"\"
252
+
253
+ endpoint: I18nKey = I18nKey(
254
+ key="adapter.{name}.endpoint",
255
+ default="Platform API Endpoint",
256
+ zh_CN="平台 API 地址",
257
+ en="Platform API Endpoint",
258
+ ja="APIアドレス",
259
+ ru="API адрес",
260
+ zh_TW="API 位址",
261
+ )
262
+ token: I18nKey = I18nKey(
263
+ key="adapter.{name}.token",
264
+ default="Platform Token",
265
+ zh_CN="平台 Token",
266
+ en="Platform Token",
267
+ ja="トークン",
268
+ ru="Токен",
269
+ zh_TW="權杖",
270
+ )
217
271
 
218
272
  def __init__(self, sdk=None):
219
- super().__init__()
273
+ super().__init__(sdk=sdk)
274
+ self.logger = self._get_logger()
220
275
  self.converter = self._setup_converter()
221
276
  self.convert = self.converter.convert
222
277
 
278
+ def on_config_update(self, old_config, new_config):
279
+ \"\"\"Called when adapter config hot-reloads\"\"\"
280
+ self.logger.info("{text[adapter.log.config_updated]}")
281
+
223
282
  def _setup_converter(self):
224
283
  from .Converter import {converter_name}
225
284
  return {converter_name}()
226
285
 
227
286
  class Send(BaseAdapter.Send):
228
287
  \"\"\"
229
- Send 消息发送 DSL
230
-
231
- At / AtAll / Reply / Using / To 由框架基类内置处理。
232
- 标准发送方法(Text/Image/Voice/Video/File)已从 SendDSL 基类继承,
233
- 默认委托给 Raw_ob12,无需重复实现。
234
- 使用 self._apply_modifiers(message) 合并修饰器到消息段。
235
- 使用 self.send_context 获取发送上下文 (target_type, target_id, account_id)。
236
-
237
- 支持链式调用:
238
- Send.To("group", "123").At("456").Reply("789").Text("hi")
288
+ {text[adapter.dsl.send_doc]}
239
289
  \"\"\"
240
290
 
241
291
  def Raw_ob12(self, message, **kwargs):
@@ -249,22 +299,18 @@ class {name}(BaseAdapter):
249
299
  )
250
300
  return asyncio.create_task(_do_send())
251
301
 
252
- # 标准方法 Text/Image/Voice/Video/File 已从基类继承,默认委托 Raw_ob12。
253
- # 如需平台特定逻辑,可覆盖单个方法:
302
+ # {text[adapter.dsl.send_std_methods_hint]}
303
+ # {text[adapter.dsl.send_override_hint]}
254
304
  # def Text(self, text: str):
255
305
  # return self.Raw_ob12([{{"type": "text", "data": {{"text": text}}}}])
256
306
 
257
- # 可添加平台特有的发送方法(会被 event.supports() 识别):
307
+ # {text[adapter.dsl.send_extra_methods_hint]}
258
308
  # def Sticker(self, sticker_id: str):
259
309
  # return self.Raw_ob12([{{"type": "sticker", "data": {{"id": sticker_id}}}}])
260
310
 
261
311
  class Request(BaseAdapter.Request):
262
312
  \"\"\"
263
- Request 请求操作 DSL
264
-
265
- 适配器应重写 accept / reject 实现平台特定的请求处理逻辑。
266
- 如果平台不支持请求操作,可不实现此内部类。
267
- 基类默认返回 retcode=10002(不支持的操作)。
313
+ {text[adapter.dsl.request_doc]}
268
314
  \"\"\"
269
315
 
270
316
  async def _do_accept(self, **kwargs):
@@ -299,23 +345,34 @@ class {name}(BaseAdapter):
299
345
  "message": result.get("message", ""),
300
346
  }}
301
347
 
348
+ class Api(BaseAdapter.Api):
349
+ \"\"\"
350
+ {text[adapter.dsl.api_doc]}
351
+ \"\"\"
352
+
353
+ # {text[adapter.dsl.api_std_methods_hint]}
354
+ # {text[adapter.dsl.api_override_hint]}
355
+ # async def get_user_info(self, user_id: str) -> dict:
356
+ # raw = await self._adapter._request("GET", f"/users/{{user_id}}")
357
+ # return self._adapter.make_response(data={{...}}, raw=raw)
358
+
302
359
  async def start(self):
303
- \"\"\"启动适配器\"\"\"
360
+ \"\"\"Start the adapter\"\"\"
304
361
  cfg = self.cfg
305
- self.logger.info(f"启动 {{cfg.endpoint}} 适配器")
362
+ self.logger.info("{text[adapter.log.starting]}")
306
363
 
307
364
  router.register_websocket(
308
365
  module_name="{entry_key}",
309
366
  path="/ws",
310
367
  handler=self._ws_handler,
311
368
  )
312
- self.logger.info("WebSocket 路由已注册: /ws")
369
+ self.logger.info("{text[adapter.log.ws_registered]}")
313
370
 
314
371
  async def _ws_handler(self, websocket):
315
372
  bot_id = self._get_bot_id()
316
373
 
317
374
  await self.emit_meta("connect", bot_id, user_name="{name}")
318
- self.logger.info(f"Bot {{bot_id}} 已连接")
375
+ self.logger.info("{text[adapter.log.bot_connected]}")
319
376
 
320
377
  try:
321
378
  while True:
@@ -325,18 +382,18 @@ class {name}(BaseAdapter):
325
382
  if event:
326
383
  await self.adapter.emit(event)
327
384
  except Exception as e:
328
- self.logger.warning(f"连接断开: {{e}}")
385
+ self.logger.warning("{text[adapter.log.connection_lost]}")
329
386
  finally:
330
387
  await self.emit_meta("disconnect", bot_id)
331
- self.logger.info(f"Bot {{bot_id}} 已断开")
388
+ self.logger.info("{text[adapter.log.bot_disconnected]}")
332
389
 
333
390
  async def shutdown(self):
334
- \"\"\"关闭适配器\"\"\"
391
+ \"\"\"Shut down the adapter\"\"\"
335
392
  router.unregister_websocket("{entry_key}", "/ws")
336
- self.logger.info("适配器已关闭")
393
+ self.logger.info("{text[adapter.log.shutdown]}")
337
394
 
338
395
  async def call_api(self, endpoint: str, **params):
339
- \"\"\"调用平台 API\"\"\"
396
+ \"\"\"Call platform API\"\"\"
340
397
  from ErisPulse.Core import client
341
398
 
342
399
  cfg = self.cfg
@@ -358,77 +415,51 @@ class {name}(BaseAdapter):
358
415
  raw=result,
359
416
  )
360
417
  except Exception as e:
361
- self.logger.error(f"API 调用失败: {{e}}")
418
+ self.logger.error(("{text[adapter.log.api_call_failed]}").format(error=e))
362
419
  return self.make_error(message=str(e))
363
420
  """
364
421
 
365
422
  _ADAPTER_CONVERTER = """\"\"\"
366
- {name} 事件转换器
367
-
368
- 将平台原生事件转换为 OneBot12 标准格式(正向转换)。
369
- 反向转换(发送方向)由适配器的 Send.Raw_ob12() 处理。
423
+ {text[adapter.converter_doc]}
370
424
  \"\"\"
371
425
 
372
- import time
373
- import uuid
426
+ from ErisPulse.Core.Bases import BaseConverter
374
427
 
375
428
 
376
- class {converter_name}:
429
+ class {converter_name}(BaseConverter):
377
430
  \"\"\"
378
- {name} 转换器类
431
+ {converter_name} converter class
379
432
 
380
- 负责将平台特定的事件格式转换为 ErisPulse 标准 OneBot12 格式。
381
- 所有转换后的事件必须包含 platform_raw 字段以保留原始数据。
433
+ Converts platform-specific event formats to the ErisPulse standard OneBot12 format.
434
+ Inherits BaseConverter to reuse common field construction (build_base_event)
435
+ and message-segment helpers (text/at/image).
382
436
  \"\"\"
383
437
 
384
- def convert(self, raw_event: dict) -> dict:
438
+ def __init__(self):
439
+ super().__init__(platform="{entry_key}")
440
+
441
+ def convert(self, raw_event: dict) -> dict | None:
385
442
  \"\"\"
386
- 将平台原生事件转换为 OneBot12 标准格式
443
+ Convert a platform-native event to the OneBot12 standard format
387
444
 
388
- :param raw_event: 平台原始事件数据
389
- :return: OneBot12 标准格式的事件字典,无法识别时返回 None
445
+ :param raw_event: raw platform event data
446
+ :return: OneBot12 event dict, or None if unrecognized
390
447
  \"\"\"
391
448
  if not isinstance(raw_event, dict):
392
449
  return None
393
450
 
394
- event_id = raw_event.get("event_id") or str(uuid.uuid4())
395
- timestamp = raw_event.get("timestamp") or int(time.time())
396
-
397
- event = {{
398
- "id": str(event_id),
399
- "time": int(timestamp),
400
- "type": self._convert_type(raw_event),
401
- "detail_type": self._convert_detail_type(raw_event),
402
- "platform": "{entry_key}",
403
- "self": {{
404
- "platform": "{entry_key}",
405
- "user_id": str(raw_event.get("self_id", "")),
406
- }},
407
- "{entry_key}_raw": raw_event,
408
- "{entry_key}_raw_type": raw_event.get("type", ""),
409
- }}
410
-
411
- if event["type"] == "message":
412
- event["user_id"] = str(raw_event.get("sender_id", ""))
413
- event["message"] = self._convert_message_segments(raw_event.get("content", ""))
414
- event["alt_message"] = raw_event.get("content", "")
451
+ event_type = raw_event.get("type", "")
452
+ base = self.build_base_event(raw_event, event_type)
415
453
 
416
- return event
454
+ if event_type == "message":
455
+ base["type"] = "message"
456
+ base["detail_type"] = "private" if raw_event.get("is_private") else "group"
457
+ base["user_id"] = str(raw_event.get("sender_id", ""))
458
+ base["message"] = [self.text(raw_event.get("content", ""))]
459
+ base["alt_message"] = raw_event.get("content", "")
460
+ return base
417
461
 
418
- def _convert_type(self, raw_event: dict) -> str:
419
- event_type = raw_event.get("type", "")
420
- type_map = {{
421
- "chat": "message",
422
- }}
423
- return type_map.get(event_type, "unknown")
424
-
425
- def _convert_detail_type(self, raw_event: dict) -> str:
426
- return "private" if raw_event.get("is_private") else "group"
427
-
428
- def _convert_message_segments(self, content) -> list:
429
- if isinstance(content, str) and content:
430
- return [{{"type": "text", "data": {{"text": content}}}}]
431
- return []
462
+ return None
432
463
  """
433
464
 
434
465
  _README_MODULE = """# {name}
@@ -438,7 +469,7 @@ _README_MODULE = """# {name}
438
469
  ## 安装
439
470
 
440
471
  ```bash
441
- epsdk install {name}
472
+ epsdk install ErisPulse-{name}
442
473
  ```
443
474
 
444
475
  ## 使用
@@ -462,7 +493,7 @@ _README_ADAPTER = """# {name}
462
493
  ## 安装
463
494
 
464
495
  ```bash
465
- epsdk install {name}
496
+ epsdk install ErisPulse-{name}
466
497
  ```
467
498
 
468
499
  ## 使用
@@ -530,6 +561,20 @@ def _validate_name(name: str) -> bool:
530
561
  return all(c.isalnum() or c == "_" for c in name)
531
562
 
532
563
 
564
+ def _scaffold_text(name: str) -> dict:
565
+ """
566
+ 构建当前语言的脚手架文案映射,并预填充 {name} 占位符
567
+
568
+ :param name: [str] 模块/适配器名称
569
+ :return: [dict] ScaffoldText.all() 的文案字典(含占位符替换)
570
+ """
571
+ st = ScaffoldText()
572
+ return {
573
+ key: (value.replace("{name}", name) if value else value)
574
+ for key, value in st.all().items()
575
+ }
576
+
577
+
533
578
  class CreateCommand(Command):
534
579
  """
535
580
  create 命令
@@ -669,7 +714,8 @@ class CreateCommand(Command):
669
714
 
670
715
  (pkg_dir / "__init__.py").write_text(_MODULE_INIT, encoding="utf-8")
671
716
  (pkg_dir / "Core.py").write_text(
672
- _MODULE_CORE.format(name=name), encoding="utf-8"
717
+ _MODULE_CORE.format(name=name, text=_scaffold_text(name)),
718
+ encoding="utf-8",
673
719
  )
674
720
  (project_dir / "pyproject.toml").write_text(
675
721
  _MODULE_PYPROJECT.format(
@@ -767,13 +813,19 @@ class CreateCommand(Command):
767
813
  )
768
814
  (pkg_dir / "Core.py").write_text(
769
815
  _ADAPTER_CORE.format(
770
- name=name, converter_name=converter_name, entry_key=entry_key
816
+ name=name,
817
+ converter_name=converter_name,
818
+ entry_key=entry_key,
819
+ text=_scaffold_text(name),
771
820
  ),
772
821
  encoding="utf-8",
773
822
  )
774
823
  (pkg_dir / "Converter.py").write_text(
775
824
  _ADAPTER_CONVERTER.format(
776
- name=name, converter_name=converter_name, entry_key=entry_key
825
+ name=name,
826
+ converter_name=converter_name,
827
+ entry_key=entry_key,
828
+ text=_scaffold_text(name),
777
829
  ),
778
830
  encoding="utf-8",
779
831
  )