springbootAI 2.3.0__tar.gz → 2.3.2__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 (331) hide show
  1. {springbootai-2.3.0/springbootAI.egg-info → springbootai-2.3.2}/PKG-INFO +1 -1
  2. {springbootai-2.3.0 → springbootai-2.3.2}/pyproject.toml +3 -3
  3. {springbootai-2.3.0 → springbootai-2.3.2}/spring/__init__.py +1 -1
  4. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cli/main.py +57 -11
  5. springbootai-2.3.2/spring/cli/scaffold.py +1351 -0
  6. {springbootai-2.3.0 → springbootai-2.3.2}/spring/config/config_loader.py +318 -106
  7. {springbootai-2.3.0 → springbootai-2.3.2}/spring/context/application_context.py +237 -27
  8. {springbootai-2.3.0 → springbootai-2.3.2}/spring/context/bean_factory.py +178 -27
  9. springbootai-2.3.2/spring/core/graceful_shutdown.py +336 -0
  10. {springbootai-2.3.0 → springbootai-2.3.2}/spring/logging/loguru_logger.py +16 -2
  11. {springbootai-2.3.0 → springbootai-2.3.2}/spring/main.py +153 -79
  12. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/mybatis_integration.py +5 -0
  13. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/configuration.py +186 -74
  14. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/pool/connection_pool.py +88 -18
  15. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/version.py +1 -1
  16. {springbootai-2.3.0 → springbootai-2.3.2}/spring/security/jwt_utils.py +5 -2
  17. {springbootai-2.3.0 → springbootai-2.3.2}/spring/security/replay_protection.py +22 -5
  18. {springbootai-2.3.0 → springbootai-2.3.2}/spring/utils/banner.py +2 -2
  19. {springbootai-2.3.0 → springbootai-2.3.2}/spring/utils/redis_client.py +29 -9
  20. {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/health.py +36 -20
  21. {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/web_context.py +108 -25
  22. {springbootai-2.3.0 → springbootai-2.3.2/springbootAI.egg-info}/PKG-INFO +1 -1
  23. {springbootai-2.3.0 → springbootai-2.3.2}/springbootAI.egg-info/SOURCES.txt +3 -0
  24. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_config_fixes_185.py +129 -0
  25. springbootai-2.3.2/tests/test_pymybatis_configuration_hardening.py +129 -0
  26. springbootai-2.3.2/tests/test_scaffold_hardening.py +295 -0
  27. springbootai-2.3.2/tests/test_startup_lifecycle.py +628 -0
  28. springbootai-2.3.0/spring/cli/scaffold.py +0 -398
  29. springbootai-2.3.0/spring/core/graceful_shutdown.py +0 -196
  30. {springbootai-2.3.0 → springbootai-2.3.2}/CHANGELOG.md +0 -0
  31. {springbootai-2.3.0 → springbootai-2.3.2}/LICENSE +0 -0
  32. {springbootai-2.3.0 → springbootai-2.3.2}/MANIFEST.in +0 -0
  33. {springbootai-2.3.0 → springbootai-2.3.2}/README.md +0 -0
  34. {springbootai-2.3.0 → springbootai-2.3.2}/SECURITY.md +0 -0
  35. {springbootai-2.3.0 → springbootai-2.3.2}/requirements-ai.txt +0 -0
  36. {springbootai-2.3.0 → springbootai-2.3.2}/requirements-langgraph.txt +0 -0
  37. {springbootai-2.3.0 → springbootai-2.3.2}/requirements-mcp.txt +0 -0
  38. {springbootai-2.3.0 → springbootai-2.3.2}/requirements.txt +0 -0
  39. {springbootai-2.3.0 → springbootai-2.3.2}/setup.cfg +0 -0
  40. {springbootai-2.3.0 → springbootai-2.3.2}/setup.py +0 -0
  41. {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/__init__.py +0 -0
  42. {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/advisors.py +0 -0
  43. {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/annotations.py +0 -0
  44. {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/autoconfig.py +0 -0
  45. {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/core.py +0 -0
  46. {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/etl.py +0 -0
  47. {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/memory.py +0 -0
  48. {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/observability.py +0 -0
  49. {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/providers.py +0 -0
  50. {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/resilience.py +0 -0
  51. {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/tools.py +0 -0
  52. {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/vectorstore.py +0 -0
  53. {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/__init__.py +0 -0
  54. {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/batch.py +0 -0
  55. {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/cache.py +0 -0
  56. {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/cloud.py +0 -0
  57. {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/conditional.py +0 -0
  58. {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/core.py +0 -0
  59. {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/data.py +0 -0
  60. {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/enterprise.py +0 -0
  61. {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/langchain.py +0 -0
  62. {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/langgraph.py +0 -0
  63. {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/messaging.py +0 -0
  64. {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/security.py +0 -0
  65. {springbootai-2.3.0 → springbootai-2.3.2}/spring/aop/__init__.py +0 -0
  66. {springbootai-2.3.0 → springbootai-2.3.2}/spring/aop/aspect.py +0 -0
  67. {springbootai-2.3.0 → springbootai-2.3.2}/spring/aop/cloud_aop.py +0 -0
  68. {springbootai-2.3.0 → springbootai-2.3.2}/spring/aop/comprehensive_aop.py +0 -0
  69. {springbootai-2.3.0 → springbootai-2.3.2}/spring/aop/method_interceptor.py +0 -0
  70. {springbootai-2.3.0 → springbootai-2.3.2}/spring/aop/proxy_factory.py +0 -0
  71. {springbootai-2.3.0 → springbootai-2.3.2}/spring/batch/__init__.py +0 -0
  72. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cli/__init__.py +0 -0
  73. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/__init__.py +0 -0
  74. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/bus.py +0 -0
  75. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/config_center.py +0 -0
  76. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/discovery.py +0 -0
  77. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/feign.py +0 -0
  78. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/gateway.py +0 -0
  79. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/load_balancer.py +0 -0
  80. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/seata.py +0 -0
  81. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/seata_at_proxy.py +0 -0
  82. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/seata_bridge.py +0 -0
  83. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/sentinel.py +0 -0
  84. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/tracer.py +0 -0
  85. {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/transaction_store.py +0 -0
  86. {springbootai-2.3.0 → springbootai-2.3.2}/spring/config/__init__.py +0 -0
  87. {springbootai-2.3.0 → springbootai-2.3.2}/spring/config/binding.py +0 -0
  88. {springbootai-2.3.0 → springbootai-2.3.2}/spring/config/spring-configuration-metadata.json +0 -0
  89. {springbootai-2.3.0 → springbootai-2.3.2}/spring/context/__init__.py +0 -0
  90. {springbootai-2.3.0 → springbootai-2.3.2}/spring/context/bean_definition.py +0 -0
  91. {springbootai-2.3.0 → springbootai-2.3.2}/spring/context/registry.py +0 -0
  92. {springbootai-2.3.0 → springbootai-2.3.2}/spring/context/scanner.py +0 -0
  93. {springbootai-2.3.0 → springbootai-2.3.2}/spring/core/__init__.py +0 -0
  94. {springbootai-2.3.0 → springbootai-2.3.2}/spring/core/typing_utils.py +0 -0
  95. {springbootai-2.3.0 → springbootai-2.3.2}/spring/csv/__init__.py +0 -0
  96. {springbootai-2.3.0 → springbootai-2.3.2}/spring/csv/annotations.py +0 -0
  97. {springbootai-2.3.0 → springbootai-2.3.2}/spring/csv/converters.py +0 -0
  98. {springbootai-2.3.0 → springbootai-2.3.2}/spring/csv/easy_csv.py +0 -0
  99. {springbootai-2.3.0 → springbootai-2.3.2}/spring/csv/exceptions.py +0 -0
  100. {springbootai-2.3.0 → springbootai-2.3.2}/spring/csv/reader.py +0 -0
  101. {springbootai-2.3.0 → springbootai-2.3.2}/spring/csv/writer.py +0 -0
  102. {springbootai-2.3.0 → springbootai-2.3.2}/spring/data/__init__.py +0 -0
  103. {springbootai-2.3.0 → springbootai-2.3.2}/spring/data/page.py +0 -0
  104. {springbootai-2.3.0 → springbootai-2.3.2}/spring/data/repository.py +0 -0
  105. {springbootai-2.3.0 → springbootai-2.3.2}/spring/data/rest.py +0 -0
  106. {springbootai-2.3.0 → springbootai-2.3.2}/spring/data/specification.py +0 -0
  107. {springbootai-2.3.0 → springbootai-2.3.2}/spring/datasource/__init__.py +0 -0
  108. {springbootai-2.3.0 → springbootai-2.3.2}/spring/datasource/annotations.py +0 -0
  109. {springbootai-2.3.0 → springbootai-2.3.2}/spring/datasource/context.py +0 -0
  110. {springbootai-2.3.0 → springbootai-2.3.2}/spring/datasource/dynamic.py +0 -0
  111. {springbootai-2.3.0 → springbootai-2.3.2}/spring/devtools.py +0 -0
  112. {springbootai-2.3.0 → springbootai-2.3.2}/spring/event/__init__.py +0 -0
  113. {springbootai-2.3.0 → springbootai-2.3.2}/spring/event/publisher.py +0 -0
  114. {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/__init__.py +0 -0
  115. {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/annotations.py +0 -0
  116. {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/converters.py +0 -0
  117. {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/easy_excel.py +0 -0
  118. {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/exceptions.py +0 -0
  119. {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/reader.py +0 -0
  120. {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/style.py +0 -0
  121. {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/writer.py +0 -0
  122. {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/__init__.py +0 -0
  123. {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/accessor.py +0 -0
  124. {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/auto_config.py +0 -0
  125. {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/holder.py +0 -0
  126. {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/locale.py +0 -0
  127. {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/locale_resolver.py +0 -0
  128. {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/message_source.py +0 -0
  129. {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/middleware.py +0 -0
  130. {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/properties.py +0 -0
  131. {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/sources.py +0 -0
  132. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/__init__.py +0 -0
  133. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/adapters.py +0 -0
  134. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/agents/__init__.py +0 -0
  135. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/agents/services.py +0 -0
  136. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/annotations.py +0 -0
  137. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/autoconfig.py +0 -0
  138. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/callbacks/__init__.py +0 -0
  139. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/callbacks/handlers.py +0 -0
  140. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/chains/__init__.py +0 -0
  141. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/chains/services.py +0 -0
  142. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/core.py +0 -0
  143. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/indexes/__init__.py +0 -0
  144. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/indexes/index.py +0 -0
  145. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/loaders/__init__.py +0 -0
  146. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/loaders/loaders.py +0 -0
  147. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/memory/__init__.py +0 -0
  148. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/memory/memory.py +0 -0
  149. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/parsers/__init__.py +0 -0
  150. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/parsers/parsers.py +0 -0
  151. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/partners.py +0 -0
  152. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/prompts/__init__.py +0 -0
  153. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/prompts/templates.py +0 -0
  154. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/retrievers/__init__.py +0 -0
  155. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/retrievers/retrievers.py +0 -0
  156. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/tools/__init__.py +0 -0
  157. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/tools/tools.py +0 -0
  158. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/utilities/__init__.py +0 -0
  159. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/utilities/utils.py +0 -0
  160. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/vectorstores/__init__.py +0 -0
  161. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/vectorstores/stores.py +0 -0
  162. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langgraph/__init__.py +0 -0
  163. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langgraph/annotation_runtime.py +0 -0
  164. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langgraph/annotations.py +0 -0
  165. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langgraph/autoconfig.py +0 -0
  166. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langgraph/checkpoint.py +0 -0
  167. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langgraph/config.py +0 -0
  168. {springbootai-2.3.0 → springbootai-2.3.2}/spring/langgraph/runtime.py +0 -0
  169. {springbootai-2.3.0 → springbootai-2.3.2}/spring/logging/__init__.py +0 -0
  170. {springbootai-2.3.0 → springbootai-2.3.2}/spring/mcp/__init__.py +0 -0
  171. {springbootai-2.3.0 → springbootai-2.3.2}/spring/mcp/annotation_runtime.py +0 -0
  172. {springbootai-2.3.0 → springbootai-2.3.2}/spring/mcp/annotations.py +0 -0
  173. {springbootai-2.3.0 → springbootai-2.3.2}/spring/mcp/autoconfig.py +0 -0
  174. {springbootai-2.3.0 → springbootai-2.3.2}/spring/mcp/client.py +0 -0
  175. {springbootai-2.3.0 → springbootai-2.3.2}/spring/mcp/config.py +0 -0
  176. {springbootai-2.3.0 → springbootai-2.3.2}/spring/mcp/server.py +0 -0
  177. {springbootai-2.3.0 → springbootai-2.3.2}/spring/messaging/__init__.py +0 -0
  178. {springbootai-2.3.0 → springbootai-2.3.2}/spring/messaging/kafka.py +0 -0
  179. {springbootai-2.3.0 → springbootai-2.3.2}/spring/messaging/rabbitmq.py +0 -0
  180. {springbootai-2.3.0 → springbootai-2.3.2}/spring/monitoring/__init__.py +0 -0
  181. {springbootai-2.3.0 → springbootai-2.3.2}/spring/monitoring/prometheus.py +0 -0
  182. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/__init__.py +0 -0
  183. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/database.py +0 -0
  184. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/ddl_auto.py +0 -0
  185. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/migration.py +0 -0
  186. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/__init__.py +0 -0
  187. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/annotations/__init__.py +0 -0
  188. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/annotations/annotations.py +0 -0
  189. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/cache/__init__.py +0 -0
  190. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/cache/cache.py +0 -0
  191. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/cache/redis_cache.py +0 -0
  192. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/circuit_breaker/__init__.py +0 -0
  193. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/circuit_breaker/circuit_breaker.py +0 -0
  194. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/core/__init__.py +0 -0
  195. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/core/sql_session.py +0 -0
  196. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/core/sql_session_factory.py +0 -0
  197. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/dialect/__init__.py +0 -0
  198. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/dialect/dialect.py +0 -0
  199. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/dynamic_sql/__init__.py +0 -0
  200. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/dynamic_sql/dynamic_sql.py +0 -0
  201. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/interceptor/__init__.py +0 -0
  202. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/interceptor/interceptor.py +0 -0
  203. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/mapper/__init__.py +0 -0
  204. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/mapper/mapper.py +0 -0
  205. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/metrics/__init__.py +0 -0
  206. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/metrics/metrics.py +0 -0
  207. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/pool/__init__.py +0 -0
  208. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/security/__init__.py +0 -0
  209. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/security/access_control.py +0 -0
  210. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/security/password_encoder.py +0 -0
  211. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/security/sensitive_data_masker.py +0 -0
  212. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/security/sql_injection_detector.py +0 -0
  213. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/transaction/__init__.py +0 -0
  214. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/transaction/transaction.py +0 -0
  215. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/type_handler/__init__.py +0 -0
  216. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/type_handler/type_handler.py +0 -0
  217. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/xml_parser/__init__.py +0 -0
  218. {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/xml_parser/xml_parser.py +0 -0
  219. {springbootai-2.3.0 → springbootai-2.3.2}/spring/retry/__init__.py +0 -0
  220. {springbootai-2.3.0 → springbootai-2.3.2}/spring/retry/recovery.py +0 -0
  221. {springbootai-2.3.0 → springbootai-2.3.2}/spring/retry/retry_annotations.py +0 -0
  222. {springbootai-2.3.0 → springbootai-2.3.2}/spring/retry/retry_decorator.py +0 -0
  223. {springbootai-2.3.0 → springbootai-2.3.2}/spring/scheduling/__init__.py +0 -0
  224. {springbootai-2.3.0 → springbootai-2.3.2}/spring/scheduling/scheduler.py +0 -0
  225. {springbootai-2.3.0 → springbootai-2.3.2}/spring/security/__init__.py +0 -0
  226. {springbootai-2.3.0 → springbootai-2.3.2}/spring/security/oauth2.py +0 -0
  227. {springbootai-2.3.0 → springbootai-2.3.2}/spring/security/secret_manager.py +0 -0
  228. {springbootai-2.3.0 → springbootai-2.3.2}/spring/security/security_aop.py +0 -0
  229. {springbootai-2.3.0 → springbootai-2.3.2}/spring/security/security_context.py +0 -0
  230. {springbootai-2.3.0 → springbootai-2.3.2}/spring/test/__init__.py +0 -0
  231. {springbootai-2.3.0 → springbootai-2.3.2}/spring/test/slicing.py +0 -0
  232. {springbootai-2.3.0 → springbootai-2.3.2}/spring/tracing/__init__.py +0 -0
  233. {springbootai-2.3.0 → springbootai-2.3.2}/spring/tracing/skywalking.py +0 -0
  234. {springbootai-2.3.0 → springbootai-2.3.2}/spring/tx/__init__.py +0 -0
  235. {springbootai-2.3.0 → springbootai-2.3.2}/spring/tx/events.py +0 -0
  236. {springbootai-2.3.0 → springbootai-2.3.2}/spring/tx/synchronization.py +0 -0
  237. {springbootai-2.3.0 → springbootai-2.3.2}/spring/utils/__init__.py +0 -0
  238. {springbootai-2.3.0 → springbootai-2.3.2}/spring/utils/bean_utils.py +0 -0
  239. {springbootai-2.3.0 → springbootai-2.3.2}/spring/utils/logger.py +0 -0
  240. {springbootai-2.3.0 → springbootai-2.3.2}/spring/validation/__init__.py +0 -0
  241. {springbootai-2.3.0 → springbootai-2.3.2}/spring/validation/aop.py +0 -0
  242. {springbootai-2.3.0 → springbootai-2.3.2}/spring/validation/constraints.py +0 -0
  243. {springbootai-2.3.0 → springbootai-2.3.2}/spring/validation/exceptions.py +0 -0
  244. {springbootai-2.3.0 → springbootai-2.3.2}/spring/validation/validator.py +0 -0
  245. {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/__init__.py +0 -0
  246. {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/actuator.py +0 -0
  247. {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/csrf.py +0 -0
  248. {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/exception_handler.py +0 -0
  249. {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/hateoas.py +0 -0
  250. {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/interceptor.py +0 -0
  251. {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/result.py +0 -0
  252. {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/swagger.py +0 -0
  253. {springbootai-2.3.0 → springbootai-2.3.2}/spring/websocket/__init__.py +0 -0
  254. {springbootai-2.3.0 → springbootai-2.3.2}/spring/websocket/annotations.py +0 -0
  255. {springbootai-2.3.0 → springbootai-2.3.2}/spring/websocket/broker.py +0 -0
  256. {springbootai-2.3.0 → springbootai-2.3.2}/spring/websocket/exceptions.py +0 -0
  257. {springbootai-2.3.0 → springbootai-2.3.2}/spring/websocket/handler.py +0 -0
  258. {springbootai-2.3.0 → springbootai-2.3.2}/spring/websocket/router.py +0 -0
  259. {springbootai-2.3.0 → springbootai-2.3.2}/spring/websocket/session.py +0 -0
  260. {springbootai-2.3.0 → springbootai-2.3.2}/springbootAI.egg-info/dependency_links.txt +0 -0
  261. {springbootai-2.3.0 → springbootai-2.3.2}/springbootAI.egg-info/entry_points.txt +0 -0
  262. {springbootai-2.3.0 → springbootai-2.3.2}/springbootAI.egg-info/requires.txt +0 -0
  263. {springbootai-2.3.0 → springbootai-2.3.2}/springbootAI.egg-info/top_level.txt +0 -0
  264. {springbootai-2.3.0 → springbootai-2.3.2}/sql/seata_undo_log.sql +0 -0
  265. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_actuator.py +0 -0
  266. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_actuator_prometheus_admin.py +0 -0
  267. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_ai_comprehensive.py +0 -0
  268. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_ai_declarative_annotations.py +0 -0
  269. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_ai_module.py +0 -0
  270. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_annotation_combinations.py +0 -0
  271. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_annotations_contract.py +0 -0
  272. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_aop_annotations_full.py +0 -0
  273. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_audit_time.py +0 -0
  274. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_batch.py +0 -0
  275. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_bean_utils.py +0 -0
  276. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_bus.py +0 -0
  277. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_cache_annotations.py +0 -0
  278. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_cli.py +0 -0
  279. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_cloud_embedded_full.py +0 -0
  280. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_component_init_error.py +0 -0
  281. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_compositional_annotations.py +0 -0
  282. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_conditional_annotations.py +0 -0
  283. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_config_binding.py +0 -0
  284. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_config_center.py +0 -0
  285. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_connection_resilience.py +0 -0
  286. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_core_annotations_full.py +0 -0
  287. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_csrf.py +0 -0
  288. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_csv_module.py +0 -0
  289. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_data_repository.py +0 -0
  290. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_data_rest.py +0 -0
  291. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_datasource_routing.py +0 -0
  292. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_ddl_auto.py +0 -0
  293. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_declarative_aop_post_authorize_recover.py +0 -0
  294. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_devtools.py +0 -0
  295. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_di_config_event_full.py +0 -0
  296. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_excel_module.py +0 -0
  297. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_hateoas.py +0 -0
  298. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_i18n_module.py +0 -0
  299. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_jpa_version_transient.py +0 -0
  300. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_kafka.py +0 -0
  301. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_langchain_comprehensive.py +0 -0
  302. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_langchain_ext.py +0 -0
  303. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_langchain_module.py +0 -0
  304. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_langgraph_comprehensive.py +0 -0
  305. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_langgraph_module.py +0 -0
  306. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_logging_config.py +0 -0
  307. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_mcp_module.py +0 -0
  308. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_metadata.py +0 -0
  309. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_migration.py +0 -0
  310. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_new_annotations.py +0 -0
  311. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_new_features.py +0 -0
  312. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_oauth2.py +0 -0
  313. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_orm_pymybatis_full.py +0 -0
  314. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_production_readiness.py +0 -0
  315. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_pymybatis_contract.py +0 -0
  316. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_seata_at_proxy.py +0 -0
  317. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_seata_bridge.py +0 -0
  318. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_seata_durable_store.py +0 -0
  319. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_security.py +0 -0
  320. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_security_full.py +0 -0
  321. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_security_hardening.py +0 -0
  322. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_select_page.py +0 -0
  323. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_starter.py +0 -0
  324. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_swagger_module.py +0 -0
  325. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_test_slicing.py +0 -0
  326. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_transactional_events.py +0 -0
  327. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_validation_module.py +0 -0
  328. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_web_annotations_full.py +0 -0
  329. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_web_root_mapping.py +0 -0
  330. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_web_static_files.py +0 -0
  331. {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_websocket_module.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: springbootAI
3
- Version: 2.3.0
3
+ Version: 2.3.2
4
4
  Summary: Spring-style Python framework with Web, ORM, Cloud and AI integrations
5
5
  Author-email: YuConggen <1516933915@qq.com>
6
6
  License-Expression: MIT
@@ -12,7 +12,7 @@ build-backend = "setuptools.build_meta"
12
12
  [project]
13
13
  # 发行名 springbootAI(PyPI 包名,pip install springbootAI);导入包名仍为 spring
14
14
  name = "springbootAI"
15
- version = "2.3.0"
15
+ version = "2.3.2"
16
16
  description = "Spring-style Python framework with Web, ORM, Cloud and AI integrations"
17
17
  readme = "README.md"
18
18
  license = "MIT"
@@ -288,8 +288,8 @@ Issues = "https://github.com/YUCONGGEN/springbootAI/issues"
288
288
 
289
289
  [project.scripts]
290
290
  springbootai = "spring.main:run_cli"
291
- # 项目脚手架工具(类似 Spring Initializr),初始化符合 SpringBootAI 风格的新项目
292
- # 用法:springbootai-init my-project --modules web,orm
291
+ # 项目脚手架工具(类似 Spring Initializr)。真实终端默认中文问答;
292
+ # CI/脚本请显式使用:springbootai-init my-project --modules web,orm --non-interactive
293
293
  springbootai-init = "spring.cli.scaffold:main"
294
294
 
295
295
  [tool.setuptools.packages.find]
@@ -5,7 +5,7 @@ from .config import *
5
5
  from .utils import *
6
6
  from .main import create_app, run, SpringApplication, run_cli
7
7
 
8
- __version__ = "2.3.0"
8
+ __version__ = "2.3.2"
9
9
  __author__ = "yuconggen"
10
10
  __license__ = "MIT"
11
11
 
@@ -235,11 +235,27 @@ def create_parser() -> argparse.ArgumentParser:
235
235
  )
236
236
 
237
237
  # init 命令(复用 scaffold)
238
- init_parser = subparsers.add_parser('init', help='初始化新项目(类似 Spring Initializr)')
239
- init_parser.add_argument('project', help='项目名称/目标目录')
238
+ init_parser = subparsers.add_parser(
239
+ 'init', help='初始化新项目(中文问答向导;可用 --non-interactive 关闭问答)'
240
+ )
241
+ init_parser.add_argument('project', nargs='?', help='项目名称/目标目录;交互模式可留空')
240
242
  init_parser.add_argument('--package', default=None, help='Python 包名')
241
- init_parser.add_argument('--modules', default='web', help='启用的模块,逗号分隔')
242
- init_parser.add_argument('--port', type=int, default=8080, help='服务端口')
243
+ init_parser.add_argument('--modules', default=None, help='模块:web,orm,ai,cloud,redis')
244
+ # Keep the unified command in sync with ``spring.cli.scaffold`` (8000).
245
+ init_parser.add_argument('--port', type=int, default=8000, help='服务端口(默认 8000)')
246
+ init_parser.add_argument('--database', choices=['none', 'sqlite', 'mysql', 'postgresql'], default=None, help='数据库类型')
247
+ init_parser.add_argument('--redis', dest='redis', action='store_true', default=None, help='启用 Redis')
248
+ init_parser.add_argument('--no-redis', dest='redis', action='store_false', help='关闭 Redis')
249
+ init_parser.add_argument('--ai', dest='ai', action='store_true', default=None, help='启用 AI 配置')
250
+ init_parser.add_argument('--no-ai', dest='ai', action='store_false', help='关闭 AI 配置')
251
+ init_parser.add_argument('--cloud', dest='cloud', action='store_true', default=None, help='启用 Cloud 配置')
252
+ init_parser.add_argument('--no-cloud', dest='cloud', action='store_false', help='关闭 Cloud 配置')
253
+ init_parser.add_argument('--docker', dest='docker', action='store_true', default=None, help='生成 Docker 文件')
254
+ init_parser.add_argument('--no-docker', dest='docker', action='store_false', help='不生成 Docker 文件')
255
+ init_parser.add_argument('--sample-crud', dest='sample_crud', action='store_true', default=None, help='生成 CRUD 示例')
256
+ init_parser.add_argument('--no-sample-crud', dest='sample_crud', action='store_false', help='不生成 CRUD 示例')
257
+ init_parser.add_argument('--interactive', action='store_true', help='强制进入中文问答')
258
+ init_parser.add_argument('--non-interactive', action='store_true', help='禁用问答,适合 CI')
243
259
 
244
260
  # run 命令
245
261
  run_parser = subparsers.add_parser('run', help='运行应用')
@@ -253,7 +269,7 @@ def create_parser() -> argparse.ArgumentParser:
253
269
  return parser
254
270
 
255
271
 
256
- def main(argv: List[str] | None = None) -> None:
272
+ def main(argv: List[str] | None = None) -> int:
257
273
  """CLI 主入口(注册为 console_script: springbootai)。
258
274
 
259
275
  Args:
@@ -264,7 +280,7 @@ def main(argv: List[str] | None = None) -> None:
264
280
 
265
281
  if args.command is None:
266
282
  parser.print_help()
267
- return
283
+ return 0
268
284
 
269
285
  if args.command == 'version':
270
286
  _cmd_version(args)
@@ -275,19 +291,49 @@ def main(argv: List[str] | None = None) -> None:
275
291
  elif args.command == 'init':
276
292
  # 复用 scaffold 的 main 函数
277
293
  from spring.cli.scaffold import main as scaffold_main
278
- scaffold_argv = [args.project]
294
+ scaffold_argv = []
295
+ if args.project:
296
+ scaffold_argv.append(args.project)
279
297
  if args.package:
280
298
  scaffold_argv.extend(['--package', args.package])
281
- if args.modules:
299
+ if args.modules is not None:
282
300
  scaffold_argv.extend(['--modules', args.modules])
283
- if args.port:
301
+ if args.port is not None:
284
302
  scaffold_argv.extend(['--port', str(args.port)])
285
- scaffold_main(scaffold_argv)
303
+ if args.database is not None:
304
+ scaffold_argv.extend(['--database', args.database])
305
+ if args.redis is True:
306
+ scaffold_argv.append('--redis')
307
+ elif args.redis is False:
308
+ scaffold_argv.append('--no-redis')
309
+ if args.ai is True:
310
+ scaffold_argv.append('--ai')
311
+ elif args.ai is False:
312
+ scaffold_argv.append('--no-ai')
313
+ if args.cloud is True:
314
+ scaffold_argv.append('--cloud')
315
+ elif args.cloud is False:
316
+ scaffold_argv.append('--no-cloud')
317
+ if args.docker is True:
318
+ scaffold_argv.append('--docker')
319
+ elif args.docker is False:
320
+ scaffold_argv.append('--no-docker')
321
+ if args.sample_crud is True:
322
+ scaffold_argv.append('--sample-crud')
323
+ elif args.sample_crud is False:
324
+ scaffold_argv.append('--no-sample-crud')
325
+ if args.interactive:
326
+ scaffold_argv.append('--interactive')
327
+ if args.non_interactive:
328
+ scaffold_argv.append('--non-interactive')
329
+ return scaffold_main(scaffold_argv)
286
330
  elif args.command == 'run':
287
331
  _cmd_run(args)
288
332
  elif args.command == 'docs':
289
333
  _cmd_docs(args)
290
334
 
335
+ return 0
336
+
291
337
 
292
338
  if __name__ == '__main__':
293
- main()
339
+ sys.exit(main())