aury-boot 0.0.11__tar.gz → 0.0.13__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 (198) hide show
  1. {aury_boot-0.0.11 → aury_boot-0.0.13}/PKG-INFO +1 -1
  2. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/_version.py +2 -2
  3. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/docs.py +71 -26
  4. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/init.py +10 -18
  5. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/10-storage.md.tpl +49 -6
  6. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/16-adapter.md.tpl +34 -34
  7. {aury_boot-0.0.11 → aury_boot-0.0.13}/.gitignore +0 -0
  8. {aury_boot-0.0.11 → aury_boot-0.0.13}/README.md +0 -0
  9. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/__init__.py +0 -0
  10. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/__init__.py +0 -0
  11. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/adapter/__init__.py +0 -0
  12. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/adapter/base.py +0 -0
  13. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/adapter/config.py +0 -0
  14. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/adapter/decorators.py +0 -0
  15. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/adapter/exceptions.py +0 -0
  16. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/adapter/http.py +0 -0
  17. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/app/__init__.py +0 -0
  18. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/app/base.py +0 -0
  19. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/app/components.py +0 -0
  20. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/app/middlewares.py +0 -0
  21. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/app/startup.py +0 -0
  22. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/config/__init__.py +0 -0
  23. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/config/multi_instance.py +0 -0
  24. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/config/settings.py +0 -0
  25. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/constants/__init__.py +0 -0
  26. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/constants/components.py +0 -0
  27. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/constants/scheduler.py +0 -0
  28. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/constants/service.py +0 -0
  29. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/errors/__init__.py +0 -0
  30. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/errors/chain.py +0 -0
  31. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/errors/codes.py +0 -0
  32. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/errors/exceptions.py +0 -0
  33. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/errors/handlers.py +0 -0
  34. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/errors/response.py +0 -0
  35. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/interfaces/__init__.py +0 -0
  36. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/interfaces/egress.py +0 -0
  37. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/interfaces/ingress.py +0 -0
  38. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/middleware/__init__.py +0 -0
  39. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/middleware/logging.py +0 -0
  40. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/migrations/__init__.py +0 -0
  41. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/migrations/manager.py +0 -0
  42. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/migrations/setup.py +0 -0
  43. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/rpc/__init__.py +0 -0
  44. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/rpc/base.py +0 -0
  45. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/rpc/client.py +0 -0
  46. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/rpc/discovery.py +0 -0
  47. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/scheduler/__init__.py +0 -0
  48. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/scheduler/runner.py +0 -0
  49. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/application/server/__init__.py +0 -0
  50. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/__init__.py +0 -0
  51. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/add.py +0 -0
  52. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/app.py +0 -0
  53. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/config.py +0 -0
  54. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/docker.py +0 -0
  55. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/generate.py +0 -0
  56. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/migrate/__init__.py +0 -0
  57. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/migrate/app.py +0 -0
  58. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/migrate/commands.py +0 -0
  59. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/pkg.py +0 -0
  60. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/scheduler.py +0 -0
  61. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/server/__init__.py +0 -0
  62. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/server/app.py +0 -0
  63. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/generate/api.py.tpl +0 -0
  64. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/generate/model.py.tpl +0 -0
  65. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/generate/repository.py.tpl +0 -0
  66. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/generate/schema.py.tpl +0 -0
  67. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/generate/service.py.tpl +0 -0
  68. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/AGENTS.md.tpl +0 -0
  69. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/README.md.tpl +0 -0
  70. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/admin_console_init.py.tpl +0 -0
  71. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/00-overview.md.tpl +0 -0
  72. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/01-model.md.tpl +0 -0
  73. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/02-repository.md.tpl +0 -0
  74. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/03-service.md.tpl +0 -0
  75. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/04-schema.md.tpl +0 -0
  76. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/05-api.md.tpl +0 -0
  77. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/06-exception.md.tpl +0 -0
  78. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/07-cache.md.tpl +0 -0
  79. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/08-scheduler.md.tpl +0 -0
  80. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/09-tasks.md.tpl +0 -0
  81. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/11-logging.md.tpl +0 -0
  82. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/12-admin.md.tpl +0 -0
  83. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/13-channel.md.tpl +0 -0
  84. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/14-mq.md.tpl +0 -0
  85. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/15-events.md.tpl +0 -0
  86. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/aury_docs/99-cli.md.tpl +0 -0
  87. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/config.py.tpl +0 -0
  88. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/conftest.py.tpl +0 -0
  89. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/env_templates/_header.tpl +0 -0
  90. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/env_templates/admin.tpl +0 -0
  91. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/env_templates/cache.tpl +0 -0
  92. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/env_templates/database.tpl +0 -0
  93. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/env_templates/log.tpl +0 -0
  94. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/env_templates/messaging.tpl +0 -0
  95. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/env_templates/rpc.tpl +0 -0
  96. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/env_templates/scheduler.tpl +0 -0
  97. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/env_templates/service.tpl +0 -0
  98. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/env_templates/storage.tpl +0 -0
  99. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/env_templates/third_party.tpl +0 -0
  100. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/gitignore.tpl +0 -0
  101. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/main.py.tpl +0 -0
  102. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/modules/api.py.tpl +0 -0
  103. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/modules/exceptions.py.tpl +0 -0
  104. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/modules/schedules.py.tpl +0 -0
  105. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/templates/project/modules/tasks.py.tpl +0 -0
  106. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/commands/worker.py +0 -0
  107. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/common/__init__.py +0 -0
  108. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/common/exceptions/__init__.py +0 -0
  109. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/common/i18n/__init__.py +0 -0
  110. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/common/i18n/translator.py +0 -0
  111. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/common/logging/__init__.py +0 -0
  112. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/common/logging/context.py +0 -0
  113. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/common/logging/decorators.py +0 -0
  114. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/common/logging/format.py +0 -0
  115. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/common/logging/setup.py +0 -0
  116. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/contrib/__init__.py +0 -0
  117. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/contrib/admin_console/__init__.py +0 -0
  118. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/contrib/admin_console/auth.py +0 -0
  119. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/contrib/admin_console/discovery.py +0 -0
  120. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/contrib/admin_console/install.py +0 -0
  121. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/contrib/admin_console/utils.py +0 -0
  122. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/__init__.py +0 -0
  123. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/exceptions/__init__.py +0 -0
  124. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/models/__init__.py +0 -0
  125. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/models/base.py +0 -0
  126. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/models/mixins.py +0 -0
  127. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/models/models.py +0 -0
  128. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/pagination/__init__.py +0 -0
  129. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/repository/__init__.py +0 -0
  130. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/repository/impl.py +0 -0
  131. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/repository/interceptors.py +0 -0
  132. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/repository/interface.py +0 -0
  133. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/repository/query_builder.py +0 -0
  134. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/service/__init__.py +0 -0
  135. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/service/base.py +0 -0
  136. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/domain/transaction/__init__.py +0 -0
  137. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/__init__.py +0 -0
  138. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/cache/__init__.py +0 -0
  139. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/cache/backends.py +0 -0
  140. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/cache/base.py +0 -0
  141. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/cache/exceptions.py +0 -0
  142. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/cache/factory.py +0 -0
  143. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/cache/manager.py +0 -0
  144. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/channel/__init__.py +0 -0
  145. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/channel/backends/__init__.py +0 -0
  146. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/channel/backends/memory.py +0 -0
  147. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/channel/backends/redis.py +0 -0
  148. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/channel/base.py +0 -0
  149. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/channel/manager.py +0 -0
  150. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/clients/__init__.py +0 -0
  151. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/clients/rabbitmq/__init__.py +0 -0
  152. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/clients/rabbitmq/config.py +0 -0
  153. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/clients/rabbitmq/manager.py +0 -0
  154. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/clients/redis/__init__.py +0 -0
  155. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/clients/redis/config.py +0 -0
  156. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/clients/redis/manager.py +0 -0
  157. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/database/__init__.py +0 -0
  158. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/database/config.py +0 -0
  159. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/database/exceptions.py +0 -0
  160. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/database/manager.py +0 -0
  161. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/database/query_tools/__init__.py +0 -0
  162. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/database/strategies/__init__.py +0 -0
  163. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/di/__init__.py +0 -0
  164. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/di/container.py +0 -0
  165. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/events/__init__.py +0 -0
  166. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/events/backends/__init__.py +0 -0
  167. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/events/backends/memory.py +0 -0
  168. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/events/backends/rabbitmq.py +0 -0
  169. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/events/backends/redis.py +0 -0
  170. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/events/base.py +0 -0
  171. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/events/manager.py +0 -0
  172. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/events/middleware.py +0 -0
  173. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/monitoring/__init__.py +0 -0
  174. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/mq/__init__.py +0 -0
  175. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/mq/backends/__init__.py +0 -0
  176. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/mq/backends/rabbitmq.py +0 -0
  177. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/mq/backends/redis.py +0 -0
  178. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/mq/base.py +0 -0
  179. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/mq/manager.py +0 -0
  180. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/scheduler/__init__.py +0 -0
  181. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/scheduler/exceptions.py +0 -0
  182. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/scheduler/manager.py +0 -0
  183. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/storage/__init__.py +0 -0
  184. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/storage/base.py +0 -0
  185. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/storage/exceptions.py +0 -0
  186. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/storage/factory.py +0 -0
  187. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/tasks/__init__.py +0 -0
  188. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/tasks/config.py +0 -0
  189. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/tasks/constants.py +0 -0
  190. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/tasks/exceptions.py +0 -0
  191. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/infrastructure/tasks/manager.py +0 -0
  192. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/testing/__init__.py +0 -0
  193. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/testing/base.py +0 -0
  194. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/testing/client.py +0 -0
  195. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/testing/factory.py +0 -0
  196. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/toolkit/__init__.py +0 -0
  197. {aury_boot-0.0.11 → aury_boot-0.0.13}/aury/boot/toolkit/http/__init__.py +0 -0
  198. {aury_boot-0.0.11 → aury_boot-0.0.13}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aury-boot
3
- Version: 0.0.11
3
+ Version: 0.0.13
4
4
  Summary: Aury Boot - 基于 FastAPI 生态的企业级 API 开发框架
5
5
  Requires-Python: >=3.13
6
6
  Requires-Dist: alembic>=1.17.2
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.0.11'
32
- __version_tuple__ = version_tuple = (0, 0, 11)
31
+ __version__ = version = '0.0.13'
32
+ __version_tuple__ = version_tuple = (0, 0, 13)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -83,8 +83,15 @@ def _detect_project_info(project_dir: Path) -> dict[str, str]:
83
83
  def _render_template(template_name: str, context: dict[str, str]) -> str:
84
84
  """渲染模板。
85
85
 
86
- 支持根目录模板和 aury_docs/ 子目录模板。
86
+ 支持根目录模板、aury_docs/ 子目录模板,且 .env.example 复用 init.py 的 env_templates 逻辑。
87
87
  """
88
+ # 特殊处理 env.example.tpl(通过 init.py 的 env_templates 目录合并生成)
89
+ if template_name == "env.example.tpl":
90
+ from .init import _read_env_template # 复用初始化脚手架的 env 生成逻辑
91
+
92
+ content = _read_env_template()
93
+ return content.format(**context)
94
+
88
95
  # 先在根目录找
89
96
  template_path = TEMPLATES_DIR / template_name
90
97
  if not template_path.exists():
@@ -173,6 +180,60 @@ def _get_aury_docs_templates() -> list[Path]:
173
180
  return sorted(AURY_DOCS_TPL_DIR.glob("*.md.tpl"))
174
181
 
175
182
 
183
+ def generate_aury_docs(
184
+ *,
185
+ project_dir: Path,
186
+ context: dict[str, str],
187
+ force: bool = False,
188
+ dry_run: bool = False,
189
+ quiet: bool = False,
190
+ ) -> int:
191
+ """核心实现:根据 aury_docs 模板生成开发文档包。
192
+
193
+ 被 `aury docs dev` 和 `aury init` 复用,确保生成逻辑一致。
194
+ 返回成功生成的文档数量。
195
+ """
196
+ if not quiet:
197
+ console.print()
198
+
199
+ # 确保输出目录存在
200
+ aury_docs_dir = project_dir / "aury_docs"
201
+ if not dry_run:
202
+ aury_docs_dir.mkdir(parents=True, exist_ok=True)
203
+
204
+ success_count = 0
205
+ for tpl_path in _get_aury_docs_templates():
206
+ try:
207
+ output_name = tpl_path.stem # 去掉 .tpl 后缀,保留 .md
208
+ output_path = aury_docs_dir / output_name
209
+ content = tpl_path.read_text(encoding="utf-8")
210
+ content = content.format(**context)
211
+ # init 直接写文件,不走 rich 提示
212
+ if quiet:
213
+ if output_path.exists() and not force and not dry_run:
214
+ continue
215
+ if not dry_run:
216
+ output_path.write_text(content, encoding="utf-8")
217
+ success_count += 1
218
+ else:
219
+ if _write_file(output_path, content, force=force, dry_run=dry_run):
220
+ success_count += 1
221
+ except Exception as e:
222
+ if not quiet:
223
+ console.print(f"[red]❌ 生成 {tpl_path.name} 失败: {e}[/red]")
224
+ # 静默模式下(init)忽略单个文档失败
225
+ continue
226
+
227
+ if not quiet:
228
+ console.print()
229
+ if dry_run:
230
+ console.print(f"[dim]🔍 预览模式完成,将生成 {success_count} 个文档到 aury_docs/ 目录[/dim]")
231
+ else:
232
+ console.print(f"[green]✨ 完成!成功生成 {success_count} 个文档到 aury_docs/ 目录[/green]")
233
+
234
+ return success_count
235
+
236
+
176
237
  @app.command(name="dev")
177
238
  def generate_dev_doc(
178
239
  project_dir: Path = typer.Argument(
@@ -198,32 +259,16 @@ def generate_dev_doc(
198
259
  ) -> None:
199
260
  """生成/更新 aury_docs/ 开发文档包。"""
200
261
  context = _detect_project_info(project_dir)
201
-
262
+
202
263
  console.print(f"[cyan]📚 检测到项目: {context['project_name']}[/cyan]")
203
- console.print()
204
-
205
- # 确保输出目录存在
206
- aury_docs_dir = project_dir / "aury_docs"
207
- if not dry_run:
208
- aury_docs_dir.mkdir(parents=True, exist_ok=True)
209
-
210
- success_count = 0
211
- for tpl_path in _get_aury_docs_templates():
212
- try:
213
- output_name = tpl_path.stem # 去掉 .tpl 后缀,保留 .md
214
- output_path = aury_docs_dir / output_name
215
- content = tpl_path.read_text(encoding="utf-8")
216
- content = content.format(**context)
217
- if _write_file(output_path, content, force=force, dry_run=dry_run):
218
- success_count += 1
219
- except Exception as e:
220
- console.print(f"[red]❌ 生成 {tpl_path.name} 失败: {e}[/red]")
221
-
222
- console.print()
223
- if dry_run:
224
- console.print(f"[dim]🔍 预览模式完成,将生成 {success_count} 个文档到 aury_docs/ 目录[/dim]")
225
- else:
226
- console.print(f"[green]✨ 完成!成功生成 {success_count} 个文档到 aury_docs/ 目录[/green]")
264
+
265
+ generate_aury_docs(
266
+ project_dir=project_dir,
267
+ context=context,
268
+ force=force,
269
+ dry_run=dry_run,
270
+ quiet=False,
271
+ )
227
272
 
228
273
 
229
274
  @app.command(name="cli")
@@ -836,25 +836,17 @@ def init(
836
836
  else:
837
837
  console.print(" [dim]ℹ️ migrations/ 目录已存在,跳过[/dim]")
838
838
 
839
- # 5. 生成开发文档 (aury_docs/) - 动态扫描模板目录
839
+ # 5. 生成开发文档 (aury_docs/) - 复用 docs.generate_aury_docs
840
840
  console.print("\n[bold]📚 生成开发文档...[/bold]")
841
- aury_docs_tpl_dir = TEMPLATES_DIR / "aury_docs"
842
- aury_docs_dir = base_path / "aury_docs"
843
- aury_docs_dir.mkdir(parents=True, exist_ok=True)
844
- docs_count = 0
845
- if aury_docs_tpl_dir.exists():
846
- for tpl_path in sorted(aury_docs_tpl_dir.glob("*.md.tpl")):
847
- output_name = tpl_path.stem # 去掉 .tpl 后缀,保留 .md
848
- output_path = aury_docs_dir / output_name
849
- if output_path.exists() and not force:
850
- continue
851
- try:
852
- content = tpl_path.read_text(encoding="utf-8")
853
- content = content.format(**template_vars)
854
- output_path.write_text(content, encoding="utf-8")
855
- docs_count += 1
856
- except Exception:
857
- pass
841
+ from .docs import generate_aury_docs
842
+
843
+ docs_count = generate_aury_docs(
844
+ project_dir=base_path,
845
+ context=template_vars,
846
+ force=force,
847
+ dry_run=False,
848
+ quiet=True,
849
+ )
858
850
  console.print(f" [green]✅ 已生成 {docs_count} 个文档到 aury_docs/[/green]")
859
851
 
860
852
  # 6. 生成 Docker 配置
@@ -11,17 +11,20 @@ pip install "aury-sdk-storage[aws]"
11
11
 
12
12
  ## 10.2 基本用法(StorageManager)
13
13
 
14
- `StorageManager` 支持**命名多实例**,可以同时管理多个存储后端。
14
+ `StorageManager` 支持**命名多实例**,内部使用 `aury-sdk-storage` 提供的 `StorageFactory.from_config()` 智能选择后端(COS 原生 / S3 兼容等),对上层暴露统一接口。
15
15
 
16
16
  ```python
17
17
  from aury.boot.infrastructure.storage import (
18
- StorageManager, StorageConfig, StorageBackend, StorageFile,
18
+ StorageManager,
19
+ StorageConfig,
20
+ StorageBackend,
21
+ StorageFile,
19
22
  )
20
23
 
21
24
  # 默认实例
22
25
  storage = StorageManager.get_instance()
23
26
  await storage.initialize(StorageConfig(
24
- backend=StorageBackend.COS,
27
+ backend=StorageBackend.COS, # 自动选择 COS 原生 SDK 或 S3 兼容模式
25
28
  bucket_name="my-bucket-1250000000",
26
29
  region="ap-guangzhou",
27
30
  endpoint="https://cos.ap-guangzhou.myqcloud.com",
@@ -45,6 +48,12 @@ url = await storage.upload_file(
45
48
  )
46
49
  )
47
50
 
51
+ # 批量上传
52
+ urls = await storage.upload_files([
53
+ StorageFile(object_name="img/1.jpg", data=b"..."),
54
+ StorageFile(object_name="img/2.jpg", data=b"..."),
55
+ ])
56
+
48
57
  # 下载文件
49
58
  content = await storage.download_file("user/123/avatar.png")
50
59
 
@@ -58,7 +67,38 @@ exists = await storage.file_exists("user/123/avatar.png")
58
67
  await storage.delete_file("user/123/avatar.png")
59
68
  ```
60
69
 
61
- ## 10.3 STS 临时凭证(前端直传)
70
+ ## 10.3 高级用法:直接使用 SDKStorageFactory / StorageType
71
+
72
+ 对于需要更精细控制后端类型(如在脚手架或基础设施层扩展存储实现)的场景,可以直接使用 SDK 导出的类型:
73
+
74
+ ```python
75
+ from aury.boot.infrastructure.storage import (
76
+ COSStorage,
77
+ LocalStorage,
78
+ S3Storage,
79
+ SDKStorageFactory, # SDK 工厂(基于 StorageType 枚举)
80
+ StorageConfig,
81
+ StorageFile,
82
+ StorageType,
83
+ )
84
+
85
+ # 使用 StorageType 创建后端
86
+ config = StorageConfig(
87
+ backend=StorageType.COS,
88
+ bucket_name="my-bucket-1250000000",
89
+ region="ap-guangzhou",
90
+ )
91
+
92
+ backend = SDKStorageFactory.from_config(config)
93
+ result = await backend.upload_file(
94
+ StorageFile(object_name="dev/test.txt", data=b"hello"),
95
+ )
96
+ print(result.url)
97
+ ```
98
+
99
+ > 一般业务代码直接通过 `StorageManager` 即可,只有在需要自定义装配流程或编写基础设施扩展时才需要直接使用 `SDKStorageFactory` / `StorageType` / `COSStorage` 等类型。
100
+
101
+ ## 10.4 STS 临时凭证(前端直传)
62
102
 
63
103
  ```python
64
104
  from aury.sdk.storage.sts import (
@@ -95,11 +135,14 @@ return {{
95
135
  }}
96
136
  ```
97
137
 
98
- ## 10.4 本地存储(开发测试)
138
+ ## 10.5 本地存储(开发测试)
99
139
 
100
140
  ```python
101
141
  from aury.boot.infrastructure.storage import (
102
- StorageManager, StorageConfig, StorageBackend, StorageFile,
142
+ StorageManager,
143
+ StorageConfig,
144
+ StorageBackend,
145
+ StorageFile,
103
146
  )
104
147
 
105
148
  storage = StorageManager.get_instance()
@@ -33,7 +33,7 @@ class PaymentAdapter(BaseAdapter):
33
33
  # 真实调用第三方 API
34
34
  response = await self.http_client.post(
35
35
  "https://api.payment.com/orders",
36
- json={"amount": amount, "order_id": order_id},
36
+ json={{"amount": amount, "order_id": order_id}},
37
37
  )
38
38
  return response.json()
39
39
 
@@ -41,29 +41,29 @@ class PaymentAdapter(BaseAdapter):
41
41
  async def create_order_mock(self, amount: int, order_id: str) -> dict:
42
42
  """创建支付订单(Mock 实现)。"""
43
43
  if amount > 100000:
44
- return {"success": False, "error": "金额超限"}
45
- return {
44
+ return {{"success": False, "error": "金额超限"}}
45
+ return {{
46
46
  "success": True,
47
- "transaction_id": f"mock_tx_{order_id}",
47
+ "transaction_id": f"mock_tx_{{order_id}}",
48
48
  "amount": amount,
49
- }
49
+ }}
50
50
 
51
51
  @adapter_method("query_order")
52
52
  async def query_order(self, transaction_id: str) -> dict:
53
53
  """查询支付订单。"""
54
54
  response = await self.http_client.get(
55
- f"https://api.payment.com/orders/{transaction_id}"
55
+ f"https://api.payment.com/orders/{{transaction_id}}"
56
56
  )
57
57
  return response.json()
58
58
 
59
59
  @query_order.mock
60
60
  async def query_order_mock(self, transaction_id: str) -> dict:
61
61
  """查询支付订单(Mock)。"""
62
- return {
62
+ return {{
63
63
  "transaction_id": transaction_id,
64
64
  "status": "paid",
65
65
  "mock": True,
66
- }
66
+ }}
67
67
  ```
68
68
 
69
69
  ## 16.3 Adapter 配置
@@ -78,7 +78,7 @@ THIRD_PARTY__GATEWAY_MODE=mock
78
78
 
79
79
  # 方法级模式覆盖(JSON 格式)
80
80
  # 例如:query 方法使用 real,其他方法使用全局配置
81
- THIRD_PARTY__METHOD_MODES={"query_order": "real"}
81
+ THIRD_PARTY__METHOD_MODES={{"query_order": "real"}}
82
82
 
83
83
  # Mock 策略:decorator(装饰器)/ auto(自动生成)
84
84
  THIRD_PARTY__MOCK_STRATEGY=decorator
@@ -98,10 +98,10 @@ settings = AdapterSettings()
98
98
  # 方式 2:代码显式配置
99
99
  settings = AdapterSettings(
100
100
  mode="mock",
101
- method_modes={
101
+ method_modes={{
102
102
  "query_order": "real", # query_order 使用真实调用
103
103
  "create_order": "mock", # create_order 使用 Mock
104
- },
104
+ }},
105
105
  debug=True,
106
106
  )
107
107
 
@@ -140,13 +140,13 @@ class WechatAdapter(HttpAdapter):
140
140
  return await self._request(
141
141
  "POST",
142
142
  "/cgi-bin/message/send",
143
- json={"touser": openid, "content": content},
143
+ json={{"touser": openid, "content": content}},
144
144
  )
145
145
 
146
146
  @send_message.mock
147
147
  async def send_message_mock(self, openid: str, content: str) -> dict:
148
148
  """发送消息(Mock)。"""
149
- return {"errcode": 0, "errmsg": "ok", "mock": True}
149
+ return {{"errcode": 0, "errmsg": "ok", "mock": True}}
150
150
  ```
151
151
 
152
152
  ## 16.5 方法级模式覆盖
@@ -156,13 +156,13 @@ class WechatAdapter(HttpAdapter):
156
156
  ```python
157
157
  settings = AdapterSettings(
158
158
  mode="mock", # 默认 Mock
159
- method_modes={
159
+ method_modes={{
160
160
  "query_order": "real", # 查询走真实接口
161
161
  "create_order": "mock", # 创建走 Mock
162
162
  "refund": "disabled", # 退款禁用
163
- },
163
+ }},
164
+ debug=True,
164
165
  )
165
-
166
166
  adapter = PaymentAdapter("payment", settings)
167
167
 
168
168
  # query_order 会调用真实 API
@@ -237,19 +237,19 @@ class PaymentAdapter(HttpAdapter):
237
237
  self, method: str, args: tuple, kwargs: dict
238
238
  ) -> None:
239
239
  """调用前钩子。"""
240
- logger.info(f"调用 {method},参数: {args}")
240
+ logger.info(f"调用 {{method}},参数: {{args}}")
241
241
 
242
242
  async def _on_after_call(
243
243
  self, method: str, args: tuple, kwargs: dict, result: Any
244
244
  ) -> None:
245
245
  """调用后钩子。"""
246
- logger.info(f"{method} 返回: {result}")
246
+ logger.info(f"{{method}} 返回: {{result}}")
247
247
 
248
248
  async def _on_call_error(
249
249
  self, method: str, args: tuple, kwargs: dict, error: Exception
250
250
  ) -> None:
251
251
  """调用异常钩子。"""
252
- logger.error(f"{method} 异常: {error}")
252
+ logger.error(f"{{method}} 异常: {{error}}")
253
253
  # 可以在这里发送告警
254
254
  ```
255
255
 
@@ -272,16 +272,16 @@ class CompositePaymentAdapter(BaseAdapter):
272
272
  elif channel == "wechat":
273
273
  return await self.wechat.create_order(amount, order_id)
274
274
  else:
275
- raise ValueError(f"不支持的支付渠道: {channel}")
275
+ raise ValueError(f"不支持的支付渠道: {{channel}}")
276
276
 
277
277
  @pay.mock
278
278
  async def pay_mock(self, channel: str, amount: int, order_id: str) -> dict:
279
279
  """统一 Mock 实现。"""
280
- return {
280
+ return {{
281
281
  "success": True,
282
282
  "channel": channel,
283
- "transaction_id": f"mock_{channel}_{order_id}",
284
- }
283
+ "transaction_id": f"mock_{{channel}}_{{order_id}}",
284
+ }}
285
285
  ```
286
286
 
287
287
  ## 16.8 异常处理
@@ -303,9 +303,9 @@ except AdapterTimeoutError:
303
303
  logger.error("支付适配器超时")
304
304
  # 重试或告警
305
305
  except AdapterValidationError as e:
306
- logger.error(f"参数校验失败: {e}")
306
+ logger.error(f"参数校验失败: {{e}}")
307
307
  except AdapterError as e:
308
- logger.error(f"适配器错误: {e}")
308
+ logger.error(f"适配器错误: {{e}}")
309
309
  ```
310
310
 
311
311
  ## 16.9 最佳实践
@@ -329,16 +329,16 @@ async def create_order_mock(self, amount: int, order_id: str) -> dict:
329
329
  """Mock 应模拟各种场景。"""
330
330
  # 模拟金额校验
331
331
  if amount <= 0:
332
- return {"success": False, "error": "金额必须大于0"}
332
+ return {{"success": False, "error": "金额必须大于0"}}
333
333
  if amount > 100000:
334
- return {"success": False, "error": "金额超限"}
334
+ return {{"success": False, "error": "金额超限"}}
335
335
 
336
336
  # 模拟偶发失败(可选)
337
337
  import random
338
338
  if random.random() < 0.01:
339
- return {"success": False, "error": "系统繁忙"}
339
+ return {{"success": False, "error": "系统繁忙"}}
340
340
 
341
- return {"success": True, "transaction_id": f"mock_{order_id}"}
341
+ return {{"success": True, "transaction_id": f"mock_{{order_id}}"}}
342
342
  ```
343
343
 
344
344
  ### 3. 环境配置建议
@@ -350,7 +350,7 @@ THIRD_PARTY__DEBUG=true
350
350
 
351
351
  # 测试环境 (.env.testing)
352
352
  THIRD_PARTY__GATEWAY_MODE=mock
353
- THIRD_PARTY__METHOD_MODES={"query": "sandbox"}
353
+ THIRD_PARTY__METHOD_MODES={{"query": "sandbox"}}
354
354
 
355
355
  # 生产环境 (.env.production)
356
356
  THIRD_PARTY__GATEWAY_MODE=real
@@ -381,11 +381,11 @@ class OrderService(BaseService):
381
381
  async def create_order(self, user_id: str, amount: int) -> Order:
382
382
  """创建订单并发起支付。"""
383
383
  # 1. 创建订单记录
384
- order = await self.order_repo.create({
384
+ order = await self.order_repo.create({{
385
385
  "user_id": user_id,
386
386
  "amount": amount,
387
387
  "status": "pending",
388
- })
388
+ }})
389
389
 
390
390
  # 2. 调用支付适配器
391
391
  pay_result = await self.payment.create_order(amount, str(order.id))
@@ -394,10 +394,10 @@ class OrderService(BaseService):
394
394
  raise PaymentError(pay_result["error"])
395
395
 
396
396
  # 3. 更新订单状态
397
- await self.order_repo.update(order, {
397
+ await self.order_repo.update(order, {{
398
398
  "transaction_id": pay_result["transaction_id"],
399
399
  "status": "paid",
400
- })
400
+ }})
401
401
 
402
402
  return order
403
403
  ```
File without changes
File without changes