springbootAI 2.3.4__tar.gz → 2.3.6__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 (351) hide show
  1. {springbootai-2.3.4 → springbootai-2.3.6}/CHANGELOG.md +16 -0
  2. {springbootai-2.3.4 → springbootai-2.3.6}/MANIFEST.in +1 -1
  3. springbootai-2.3.6/PKG-INFO +299 -0
  4. {springbootai-2.3.4 → springbootai-2.3.6}/README.md +39 -6
  5. springbootai-2.3.6/README_PYPI.md +137 -0
  6. {springbootai-2.3.4 → springbootai-2.3.6}/pyproject.toml +2 -2
  7. springbootai-2.3.6/springbootAI.egg-info/PKG-INFO +299 -0
  8. {springbootai-2.3.4 → springbootai-2.3.6}/springbootAI.egg-info/SOURCES.txt +4 -0
  9. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/__init__.py +1 -1
  10. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/ai/__init__.py +1 -1
  11. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/annotations/__init__.py +10 -0
  12. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/annotations/conditional.py +112 -0
  13. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/annotations/core.py +24 -1
  14. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/aop/aspect.py +111 -2
  15. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/context/bean_factory.py +185 -11
  16. springbootai-2.3.6/springbootai/context/lifecycle.py +241 -0
  17. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/csv/__init__.py +1 -1
  18. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/data/__init__.py +1 -1
  19. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/datasource/__init__.py +1 -1
  20. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/excel/__init__.py +1 -1
  21. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/i18n/__init__.py +1 -1
  22. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/__init__.py +1 -1
  23. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/logging/loguru_logger.py +7 -1
  24. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/__init__.py +1 -1
  25. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/version.py +1 -1
  26. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/security/secret_manager.py +2 -2
  27. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/test/__init__.py +1 -1
  28. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/tx/__init__.py +1 -1
  29. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/utils/banner.py +2 -2
  30. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/validation/__init__.py +1 -1
  31. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/websocket/__init__.py +1 -1
  32. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_annotations_contract.py +1 -0
  33. springbootai-2.3.6/tests/test_aop_pointcut_enhancements.py +201 -0
  34. springbootai-2.3.6/tests/test_ioc_lifecycle_enhancements.py +328 -0
  35. springbootai-2.3.4/PKG-INFO +0 -1976
  36. springbootai-2.3.4/springbootAI.egg-info/PKG-INFO +0 -1976
  37. {springbootai-2.3.4 → springbootai-2.3.6}/LICENSE +0 -0
  38. {springbootai-2.3.4 → springbootai-2.3.6}/SECURITY.md +0 -0
  39. {springbootai-2.3.4 → springbootai-2.3.6}/requirements-ai.txt +0 -0
  40. {springbootai-2.3.4 → springbootai-2.3.6}/requirements-langgraph.txt +0 -0
  41. {springbootai-2.3.4 → springbootai-2.3.6}/requirements-mcp.txt +0 -0
  42. {springbootai-2.3.4 → springbootai-2.3.6}/requirements.txt +0 -0
  43. {springbootai-2.3.4 → springbootai-2.3.6}/setup.cfg +0 -0
  44. {springbootai-2.3.4 → springbootai-2.3.6}/setup.py +0 -0
  45. {springbootai-2.3.4 → springbootai-2.3.6}/springbootAI.egg-info/dependency_links.txt +0 -0
  46. {springbootai-2.3.4 → springbootai-2.3.6}/springbootAI.egg-info/entry_points.txt +0 -0
  47. {springbootai-2.3.4 → springbootai-2.3.6}/springbootAI.egg-info/requires.txt +0 -0
  48. {springbootai-2.3.4 → springbootai-2.3.6}/springbootAI.egg-info/top_level.txt +0 -0
  49. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/ai/advisors.py +0 -0
  50. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/ai/annotation_runtime.py +0 -0
  51. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/ai/annotations.py +0 -0
  52. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/ai/autoconfig.py +0 -0
  53. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/ai/core.py +0 -0
  54. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/ai/etl.py +0 -0
  55. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/ai/memory.py +0 -0
  56. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/ai/observability.py +0 -0
  57. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/ai/providers.py +0 -0
  58. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/ai/resilience.py +0 -0
  59. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/ai/tools.py +0 -0
  60. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/ai/vectorstore.py +0 -0
  61. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/annotations/batch.py +0 -0
  62. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/annotations/cache.py +0 -0
  63. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/annotations/cloud.py +0 -0
  64. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/annotations/data.py +0 -0
  65. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/annotations/enterprise.py +0 -0
  66. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/annotations/langchain.py +0 -0
  67. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/annotations/langgraph.py +0 -0
  68. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/annotations/lombok.py +0 -0
  69. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/annotations/messaging.py +0 -0
  70. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/annotations/security.py +0 -0
  71. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/aop/__init__.py +0 -0
  72. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/aop/cloud_aop.py +0 -0
  73. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/aop/comprehensive_aop.py +0 -0
  74. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/aop/method_interceptor.py +0 -0
  75. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/aop/proxy_factory.py +0 -0
  76. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/batch/__init__.py +0 -0
  77. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cli/__init__.py +0 -0
  78. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cli/main.py +0 -0
  79. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cli/scaffold.py +0 -0
  80. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cloud/__init__.py +0 -0
  81. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cloud/bus.py +0 -0
  82. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cloud/config_center.py +0 -0
  83. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cloud/discovery.py +0 -0
  84. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cloud/feign.py +0 -0
  85. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cloud/gateway.py +0 -0
  86. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cloud/load_balancer.py +0 -0
  87. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cloud/nacos_config.py +0 -0
  88. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cloud/seata.py +0 -0
  89. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cloud/seata_at_proxy.py +0 -0
  90. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cloud/seata_bridge.py +0 -0
  91. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cloud/sentinel.py +0 -0
  92. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cloud/tracer.py +0 -0
  93. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/cloud/transaction_store.py +0 -0
  94. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/config/__init__.py +0 -0
  95. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/config/binding.py +0 -0
  96. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/config/config_loader.py +0 -0
  97. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/config/spring-configuration-metadata.json +0 -0
  98. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/context/__init__.py +0 -0
  99. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/context/application_context.py +0 -0
  100. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/context/bean_definition.py +0 -0
  101. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/context/registry.py +0 -0
  102. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/context/scanner.py +0 -0
  103. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/core/__init__.py +0 -0
  104. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/core/graceful_shutdown.py +0 -0
  105. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/core/typing_utils.py +0 -0
  106. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/csv/annotations.py +0 -0
  107. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/csv/converters.py +0 -0
  108. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/csv/easy_csv.py +0 -0
  109. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/csv/exceptions.py +0 -0
  110. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/csv/reader.py +0 -0
  111. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/csv/writer.py +0 -0
  112. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/data/page.py +0 -0
  113. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/data/repository.py +0 -0
  114. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/data/rest.py +0 -0
  115. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/data/specification.py +0 -0
  116. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/datasource/annotations.py +0 -0
  117. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/datasource/context.py +0 -0
  118. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/datasource/dynamic.py +0 -0
  119. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/devtools.py +0 -0
  120. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/event/__init__.py +0 -0
  121. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/event/publisher.py +0 -0
  122. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/excel/annotations.py +0 -0
  123. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/excel/converters.py +0 -0
  124. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/excel/easy_excel.py +0 -0
  125. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/excel/exceptions.py +0 -0
  126. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/excel/reader.py +0 -0
  127. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/excel/style.py +0 -0
  128. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/excel/writer.py +0 -0
  129. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/i18n/accessor.py +0 -0
  130. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/i18n/auto_config.py +0 -0
  131. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/i18n/holder.py +0 -0
  132. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/i18n/locale.py +0 -0
  133. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/i18n/locale_resolver.py +0 -0
  134. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/i18n/message_source.py +0 -0
  135. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/i18n/middleware.py +0 -0
  136. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/i18n/properties.py +0 -0
  137. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/i18n/sources.py +0 -0
  138. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/adapters.py +0 -0
  139. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/agents/__init__.py +0 -0
  140. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/agents/services.py +0 -0
  141. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/annotations.py +0 -0
  142. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/autoconfig.py +0 -0
  143. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/callbacks/__init__.py +0 -0
  144. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/callbacks/handlers.py +0 -0
  145. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/chains/__init__.py +0 -0
  146. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/chains/services.py +0 -0
  147. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/core.py +0 -0
  148. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/indexes/__init__.py +0 -0
  149. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/indexes/index.py +0 -0
  150. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/loaders/__init__.py +0 -0
  151. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/loaders/loaders.py +0 -0
  152. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/memory/__init__.py +0 -0
  153. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/memory/memory.py +0 -0
  154. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/parsers/__init__.py +0 -0
  155. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/parsers/parsers.py +0 -0
  156. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/partners.py +0 -0
  157. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/prompts/__init__.py +0 -0
  158. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/prompts/templates.py +0 -0
  159. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/retrievers/__init__.py +0 -0
  160. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/retrievers/retrievers.py +0 -0
  161. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/tools/__init__.py +0 -0
  162. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/tools/tools.py +0 -0
  163. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/utilities/__init__.py +0 -0
  164. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/utilities/utils.py +0 -0
  165. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/vectorstores/__init__.py +0 -0
  166. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langchain/vectorstores/stores.py +0 -0
  167. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langgraph/__init__.py +0 -0
  168. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langgraph/annotation_runtime.py +0 -0
  169. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langgraph/annotations.py +0 -0
  170. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langgraph/autoconfig.py +0 -0
  171. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langgraph/checkpoint.py +0 -0
  172. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langgraph/config.py +0 -0
  173. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/langgraph/runtime.py +0 -0
  174. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/logging/__init__.py +0 -0
  175. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/main.py +0 -0
  176. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/mcp/__init__.py +0 -0
  177. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/mcp/annotation_runtime.py +0 -0
  178. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/mcp/annotations.py +0 -0
  179. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/mcp/autoconfig.py +0 -0
  180. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/mcp/client.py +0 -0
  181. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/mcp/config.py +0 -0
  182. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/mcp/server.py +0 -0
  183. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/messaging/__init__.py +0 -0
  184. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/messaging/kafka.py +0 -0
  185. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/messaging/rabbitmq.py +0 -0
  186. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/monitoring/__init__.py +0 -0
  187. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/monitoring/admin_client.py +0 -0
  188. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/monitoring/prometheus.py +0 -0
  189. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/__init__.py +0 -0
  190. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/database.py +0 -0
  191. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/ddl_auto.py +0 -0
  192. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/migration.py +0 -0
  193. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/mybatis_integration.py +0 -0
  194. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/annotations/__init__.py +0 -0
  195. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/annotations/annotations.py +0 -0
  196. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/cache/__init__.py +0 -0
  197. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/cache/cache.py +0 -0
  198. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/cache/redis_cache.py +0 -0
  199. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/circuit_breaker/__init__.py +0 -0
  200. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/circuit_breaker/circuit_breaker.py +0 -0
  201. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/configuration.py +0 -0
  202. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/core/__init__.py +0 -0
  203. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/core/sql_session.py +0 -0
  204. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/core/sql_session_factory.py +0 -0
  205. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/dialect/__init__.py +0 -0
  206. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/dialect/dialect.py +0 -0
  207. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/dynamic_sql/__init__.py +0 -0
  208. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/dynamic_sql/dynamic_sql.py +0 -0
  209. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/interceptor/__init__.py +0 -0
  210. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/interceptor/interceptor.py +0 -0
  211. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/mapper/__init__.py +0 -0
  212. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/mapper/mapper.py +0 -0
  213. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/metrics/__init__.py +0 -0
  214. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/metrics/metrics.py +0 -0
  215. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/pool/__init__.py +0 -0
  216. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/pool/connection_pool.py +0 -0
  217. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/security/__init__.py +0 -0
  218. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/security/access_control.py +0 -0
  219. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/security/password_encoder.py +0 -0
  220. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/security/sensitive_data_masker.py +0 -0
  221. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/security/sql_injection_detector.py +0 -0
  222. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/transaction/__init__.py +0 -0
  223. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/transaction/transaction.py +0 -0
  224. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/type_handler/__init__.py +0 -0
  225. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/type_handler/type_handler.py +0 -0
  226. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/xml_parser/__init__.py +0 -0
  227. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/orm/pymybatis/xml_parser/xml_parser.py +0 -0
  228. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/retry/__init__.py +0 -0
  229. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/retry/recovery.py +0 -0
  230. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/retry/retry_annotations.py +0 -0
  231. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/retry/retry_decorator.py +0 -0
  232. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/scheduling/__init__.py +0 -0
  233. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/scheduling/scheduler.py +0 -0
  234. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/security/__init__.py +0 -0
  235. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/security/jwt_utils.py +0 -0
  236. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/security/oauth2.py +0 -0
  237. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/security/replay_protection.py +0 -0
  238. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/security/security_aop.py +0 -0
  239. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/security/security_context.py +0 -0
  240. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/test/slicing.py +0 -0
  241. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/tracing/__init__.py +0 -0
  242. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/tracing/skywalking.py +0 -0
  243. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/tx/events.py +0 -0
  244. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/tx/synchronization.py +0 -0
  245. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/utils/__init__.py +0 -0
  246. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/utils/bean_utils.py +0 -0
  247. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/utils/logger.py +0 -0
  248. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/utils/redis_client.py +0 -0
  249. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/validation/aop.py +0 -0
  250. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/validation/constraints.py +0 -0
  251. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/validation/exceptions.py +0 -0
  252. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/validation/validator.py +0 -0
  253. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/web/__init__.py +0 -0
  254. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/web/actuator.py +0 -0
  255. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/web/csrf.py +0 -0
  256. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/web/exception_handler.py +0 -0
  257. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/web/hateoas.py +0 -0
  258. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/web/health.py +0 -0
  259. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/web/interceptor.py +0 -0
  260. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/web/request_metrics.py +0 -0
  261. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/web/result.py +0 -0
  262. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/web/swagger.py +0 -0
  263. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/web/web_context.py +0 -0
  264. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/websocket/annotations.py +0 -0
  265. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/websocket/broker.py +0 -0
  266. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/websocket/exceptions.py +0 -0
  267. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/websocket/handler.py +0 -0
  268. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/websocket/router.py +0 -0
  269. {springbootai-2.3.4 → springbootai-2.3.6}/springbootai/websocket/session.py +0 -0
  270. {springbootai-2.3.4 → springbootai-2.3.6}/sql/seata_undo_log.sql +0 -0
  271. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_actuator.py +0 -0
  272. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_actuator_prometheus_admin.py +0 -0
  273. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_ai_annotations.py +0 -0
  274. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_ai_comprehensive.py +0 -0
  275. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_ai_declarative_annotations.py +0 -0
  276. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_ai_module.py +0 -0
  277. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_annotation_combinations.py +0 -0
  278. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_aop_annotations_full.py +0 -0
  279. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_audit_time.py +0 -0
  280. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_batch.py +0 -0
  281. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_bean_utils.py +0 -0
  282. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_bus.py +0 -0
  283. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_cache_annotations.py +0 -0
  284. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_cli.py +0 -0
  285. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_cloud_embedded_full.py +0 -0
  286. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_component_init_error.py +0 -0
  287. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_compositional_annotations.py +0 -0
  288. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_conditional_annotations.py +0 -0
  289. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_config_binding.py +0 -0
  290. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_config_center.py +0 -0
  291. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_config_fixes_185.py +0 -0
  292. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_connection_resilience.py +0 -0
  293. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_core.py +0 -0
  294. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_core_annotations_full.py +0 -0
  295. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_csrf.py +0 -0
  296. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_csv_module.py +0 -0
  297. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_data_repository.py +0 -0
  298. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_data_rest.py +0 -0
  299. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_datasource_routing.py +0 -0
  300. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_ddl_auto.py +0 -0
  301. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_declarative_aop_post_authorize_recover.py +0 -0
  302. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_devtools.py +0 -0
  303. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_di_config_event_full.py +0 -0
  304. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_excel_module.py +0 -0
  305. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_hateoas.py +0 -0
  306. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_i18n_module.py +0 -0
  307. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_jpa_version_transient.py +0 -0
  308. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_kafka.py +0 -0
  309. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_langchain_comprehensive.py +0 -0
  310. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_langchain_ext.py +0 -0
  311. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_langchain_module.py +0 -0
  312. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_langgraph_comprehensive.py +0 -0
  313. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_langgraph_module.py +0 -0
  314. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_logging_config.py +0 -0
  315. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_lombok_annotations.py +0 -0
  316. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_mcp_module.py +0 -0
  317. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_metadata.py +0 -0
  318. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_migration.py +0 -0
  319. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_nacos_config.py +0 -0
  320. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_new_annotations.py +0 -0
  321. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_new_features.py +0 -0
  322. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_oauth2.py +0 -0
  323. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_orm_pymybatis_full.py +0 -0
  324. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_production_readiness.py +0 -0
  325. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_pymybatis_configuration_hardening.py +0 -0
  326. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_pymybatis_contract.py +0 -0
  327. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_request_metrics.py +0 -0
  328. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_retry.py +0 -0
  329. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_runtime_configuration_fixes.py +0 -0
  330. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_scaffold_hardening.py +0 -0
  331. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_scheduling.py +0 -0
  332. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_seata_at_proxy.py +0 -0
  333. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_seata_bridge.py +0 -0
  334. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_seata_durable_store.py +0 -0
  335. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_security.py +0 -0
  336. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_security_full.py +0 -0
  337. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_security_hardening.py +0 -0
  338. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_select_page.py +0 -0
  339. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_starter.py +0 -0
  340. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_startup_lifecycle.py +0 -0
  341. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_swagger_module.py +0 -0
  342. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_test_slicing.py +0 -0
  343. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_tracing.py +0 -0
  344. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_transactional_events.py +0 -0
  345. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_validation_module.py +0 -0
  346. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_web_annotations_full.py +0 -0
  347. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_web_file_upload.py +0 -0
  348. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_web_root_mapping.py +0 -0
  349. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_web_security_responses.py +0 -0
  350. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_web_static_files.py +0 -0
  351. {springbootai-2.3.4 → springbootai-2.3.6}/tests/test_websocket_module.py +0 -0
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.3.6] - 2026-08-20
4
+
5
+ ### PyPI 展示修复
6
+
7
+ - 新增不含外链图片的 `README_PYPI.md`,作为 PyPI 项目说明,避免外链图片被转换到不可访问的 PyPI Camo 代理后显示为破损图片。
8
+ - GitHub 继续使用包含功能总览图和状态徽章的 `README.md`,两端展示互不影响。
9
+ - 发布版本升级到 `2.3.6`,同步框架主包、扩展模块、PyMyBatis 内嵌版本、README 版本矩阵和打包元数据。
10
+
11
+ ## [2.3.5] - 2026-08-20
12
+
13
+ ### 文档与发布
14
+
15
+ - 发布版本升级到 `2.3.5`,同步框架主包、扩展模块、PyMyBatis 内嵌版本、README 版本矩阵和打包元数据。
16
+ - README 首页新增 SpringBootAI 在线考试认证与证书说明,提供认证入口、适用场景、备考流程和重点知识范围。
17
+ - 认证平台入口:[http://www.yucg.cn:8230](http://www.yucg.cn:8230)。
18
+
3
19
  ## [2.3.4] - 2026-08-19
4
20
 
5
21
  ### 新增与完善
@@ -1,4 +1,4 @@
1
- include README.md
1
+ include README.md README_PYPI.md
2
2
  include LICENSE
3
3
  include CHANGELOG.md
4
4
  include SECURITY.md
@@ -0,0 +1,299 @@
1
+ Metadata-Version: 2.4
2
+ Name: springbootAI
3
+ Version: 2.3.6
4
+ Summary: Spring-style Python framework with Web, ORM, Cloud and AI integrations
5
+ Author-email: YuConggen <1516933915@qq.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/YUCONGGEN/springbootAI
8
+ Project-URL: Repository, https://github.com/YUCONGGEN/springbootAI.git
9
+ Project-URL: Documentation, https://github.com/YUCONGGEN/springbootAI#readme
10
+ Project-URL: Changelog, https://github.com/YUCONGGEN/springbootAI/blob/master/CHANGELOG.md
11
+ Project-URL: Issues, https://github.com/YUCONGGEN/springbootAI/issues
12
+ Keywords: spring,springboot,mybatis,orm,web,framework,python,ai,langchain,langgraph,mcp
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
20
+ Classifier: Topic :: Database
21
+ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
22
+ Requires-Python: >=3.10
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: fastapi==0.141.1
26
+ Requires-Dist: uvicorn==0.39.0
27
+ Requires-Dist: websockets==15.0.1
28
+ Requires-Dist: pyyaml==6.0.3
29
+ Requires-Dist: python-dotenv==1.2.2
30
+ Requires-Dist: DBUtils==3.1.2
31
+ Requires-Dist: cryptography==50.0.0
32
+ Requires-Dist: bcrypt==5.0.0
33
+ Requires-Dist: pyjwt==2.13.0
34
+ Requires-Dist: pydantic==2.13.4
35
+ Requires-Dist: requests==2.34.2
36
+ Requires-Dist: httpx==0.28.1
37
+ Requires-Dist: defusedxml==0.7.1
38
+ Provides-Extra: mysql
39
+ Requires-Dist: PyMySQL==1.2.0; extra == "mysql"
40
+ Provides-Extra: postgresql
41
+ Requires-Dist: psycopg2-binary==2.9.12; extra == "postgresql"
42
+ Provides-Extra: sqlalchemy
43
+ Requires-Dist: sqlalchemy==2.0.40; extra == "sqlalchemy"
44
+ Provides-Extra: redis
45
+ Requires-Dist: redis==8.1.0; extra == "redis"
46
+ Provides-Extra: rabbitmq
47
+ Requires-Dist: pika==1.4.4; extra == "rabbitmq"
48
+ Provides-Extra: kafka
49
+ Requires-Dist: kafka-python==2.0.2; extra == "kafka"
50
+ Provides-Extra: nacos
51
+ Requires-Dist: nacos-sdk-python==2.0.11; extra == "nacos"
52
+ Provides-Extra: prometheus
53
+ Requires-Dist: prometheus-client==0.26.0; extra == "prometheus"
54
+ Provides-Extra: logging
55
+ Requires-Dist: loguru==0.7.3; extra == "logging"
56
+ Provides-Extra: ast
57
+ Requires-Dist: sqlglot==27.28.1; extra == "ast"
58
+ Provides-Extra: excel
59
+ Requires-Dist: openpyxl==3.1.5; extra == "excel"
60
+ Provides-Extra: ai
61
+ Requires-Dist: langchain-openai==1.4.2; extra == "ai"
62
+ Requires-Dist: langchain-core==1.5.4; extra == "ai"
63
+ Requires-Dist: langchain-classic==1.0.8; extra == "ai"
64
+ Requires-Dist: langchain-text-splitters==1.1.2; extra == "ai"
65
+ Requires-Dist: langchain-community==0.4.2; extra == "ai"
66
+ Requires-Dist: numpy==2.2.6; extra == "ai"
67
+ Requires-Dist: pydantic==2.13.4; extra == "ai"
68
+ Provides-Extra: langchain
69
+ Requires-Dist: langchain-openai==1.4.2; extra == "langchain"
70
+ Requires-Dist: langchain-core==1.5.4; extra == "langchain"
71
+ Requires-Dist: langchain-classic==1.0.8; extra == "langchain"
72
+ Requires-Dist: langchain-text-splitters==1.1.2; extra == "langchain"
73
+ Requires-Dist: langchain-community==0.4.2; extra == "langchain"
74
+ Requires-Dist: numpy==2.2.6; extra == "langchain"
75
+ Requires-Dist: pydantic==2.13.4; extra == "langchain"
76
+ Requires-Dist: faiss-cpu<2,>=1.7.4; extra == "langchain"
77
+ Requires-Dist: pypdf<6,>=4.0.0; extra == "langchain"
78
+ Requires-Dist: beautifulsoup4<5,>=4.12.0; extra == "langchain"
79
+ Requires-Dist: sqlalchemy<3,>=2.0.0; extra == "langchain"
80
+ Requires-Dist: langchain-anthropic<2,>=0.2.0; extra == "langchain"
81
+ Requires-Dist: langchain-ollama<2,>=0.2.0; extra == "langchain"
82
+ Requires-Dist: langchain-chroma<2,>=0.1.0; extra == "langchain"
83
+ Requires-Dist: langchain-mistralai<2,>=0.2.0; extra == "langchain"
84
+ Requires-Dist: langchain-cohere<2,>=0.3.0; extra == "langchain"
85
+ Requires-Dist: langchain-google-vertexai<3,>=2.0.0; extra == "langchain"
86
+ Requires-Dist: langchain-deepseek<2,>=0.1.0; extra == "langchain"
87
+ Requires-Dist: langchain-zhipuai<2,>=0.0.1; extra == "langchain"
88
+ Requires-Dist: langchain-experimental<2,>=0.3.0; extra == "langchain"
89
+ Provides-Extra: langgraph
90
+ Requires-Dist: langgraph==1.2.9; extra == "langgraph"
91
+ Requires-Dist: langgraph-checkpoint-sqlite==3.1.1; extra == "langgraph"
92
+ Provides-Extra: mcp
93
+ Requires-Dist: mcp==2.0.0; extra == "mcp"
94
+ Provides-Extra: web
95
+ Requires-Dist: fastapi==0.141.1; extra == "web"
96
+ Requires-Dist: uvicorn==0.39.0; extra == "web"
97
+ Requires-Dist: pydantic==2.13.4; extra == "web"
98
+ Requires-Dist: python-multipart==0.0.20; extra == "web"
99
+ Provides-Extra: cloud
100
+ Requires-Dist: springbootAI[web]; extra == "cloud"
101
+ Requires-Dist: springbootAI[redis]; extra == "cloud"
102
+ Requires-Dist: springbootAI[rabbitmq]; extra == "cloud"
103
+ Requires-Dist: springbootAI[kafka]; extra == "cloud"
104
+ Requires-Dist: httpx==0.28.1; extra == "cloud"
105
+ Provides-Extra: all
106
+ Requires-Dist: springbootAI[web]; extra == "all"
107
+ Requires-Dist: springbootAI[mysql]; extra == "all"
108
+ Requires-Dist: springbootAI[redis]; extra == "all"
109
+ Requires-Dist: springbootAI[rabbitmq]; extra == "all"
110
+ Requires-Dist: springbootAI[kafka]; extra == "all"
111
+ Requires-Dist: springbootAI[prometheus]; extra == "all"
112
+ Requires-Dist: springbootAI[logging]; extra == "all"
113
+ Requires-Dist: springbootAI[excel]; extra == "all"
114
+ Requires-Dist: springbootAI[ai]; extra == "all"
115
+ Requires-Dist: springbootAI[langchain]; extra == "all"
116
+ Requires-Dist: springbootAI[langgraph]; extra == "all"
117
+ Requires-Dist: springbootAI[mcp]; extra == "all"
118
+ Requires-Dist: httpx==0.28.1; extra == "all"
119
+ Requires-Dist: psutil==6.1.1; extra == "all"
120
+ Provides-Extra: dev
121
+ Requires-Dist: pytest==9.1.1; extra == "dev"
122
+ Requires-Dist: pytest-cov==7.1.0; extra == "dev"
123
+ Requires-Dist: redis==8.1.0; extra == "dev"
124
+ Requires-Dist: sqlglot==27.28.1; extra == "dev"
125
+ Provides-Extra: full
126
+ Requires-Dist: PyMySQL==1.2.0; extra == "full"
127
+ Requires-Dist: psycopg2-binary==2.9.12; extra == "full"
128
+ Requires-Dist: sqlalchemy==2.0.40; extra == "full"
129
+ Requires-Dist: redis==8.1.0; extra == "full"
130
+ Requires-Dist: pika==1.4.4; extra == "full"
131
+ Requires-Dist: nacos-sdk-python==2.0.11; extra == "full"
132
+ Requires-Dist: prometheus-client==0.26.0; extra == "full"
133
+ Requires-Dist: loguru==0.7.3; extra == "full"
134
+ Requires-Dist: sqlglot==27.28.1; extra == "full"
135
+ Requires-Dist: defusedxml==0.7.1; extra == "full"
136
+ Requires-Dist: requests==2.34.2; extra == "full"
137
+ Requires-Dist: httpx==0.28.1; extra == "full"
138
+ Requires-Dist: openpyxl==3.1.5; extra == "full"
139
+ Requires-Dist: langchain-openai==1.4.2; extra == "full"
140
+ Requires-Dist: langchain-core==1.5.4; extra == "full"
141
+ Requires-Dist: langchain-classic==1.0.8; extra == "full"
142
+ Requires-Dist: langchain-text-splitters==1.1.2; extra == "full"
143
+ Requires-Dist: langchain-community==0.4.2; extra == "full"
144
+ Requires-Dist: numpy==2.2.6; extra == "full"
145
+ Requires-Dist: pydantic==2.13.4; extra == "full"
146
+ Requires-Dist: faiss-cpu<2,>=1.7.4; extra == "full"
147
+ Requires-Dist: pypdf<6,>=4.0.0; extra == "full"
148
+ Requires-Dist: beautifulsoup4<5,>=4.12.0; extra == "full"
149
+ Requires-Dist: langchain-experimental<2,>=0.3.0; extra == "full"
150
+ Requires-Dist: langchain-anthropic<2,>=0.2.0; extra == "full"
151
+ Requires-Dist: langchain-ollama<2,>=0.2.0; extra == "full"
152
+ Requires-Dist: langchain-chroma<2,>=0.1.0; extra == "full"
153
+ Requires-Dist: langchain-mistralai<2,>=0.2.0; extra == "full"
154
+ Requires-Dist: langchain-cohere<2,>=0.3.0; extra == "full"
155
+ Requires-Dist: langchain-google-vertexai<3,>=2.0.0; extra == "full"
156
+ Requires-Dist: langchain-deepseek<2,>=0.1.0; extra == "full"
157
+ Requires-Dist: langchain-zhipuai<2,>=0.0.1; extra == "full"
158
+ Requires-Dist: langgraph==1.2.9; extra == "full"
159
+ Requires-Dist: langgraph-checkpoint-sqlite==3.1.1; extra == "full"
160
+ Requires-Dist: mcp==2.0.0; extra == "full"
161
+ Dynamic: license-file
162
+
163
+ # SpringBootAI
164
+
165
+ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用框架。你可以使用 Python 编写 `@RestController`、`@Service`、`@Mapper` 和 `@Autowired`,框架负责组件扫描、依赖注入、Web 路由、事务切面及应用生命周期。
166
+
167
+ Web 运行时建立在 FastAPI、Starlette 和 Uvicorn 之上,同时提供 ORM、事务、缓存、消息队列、服务发现、生产治理以及 AI 生态集成。
168
+
169
+ > SpringBootAI 不是 Java Spring Boot 的 Python 绑定,也不是 Spring 官方项目。它适合熟悉 Controller、Service、Mapper 分层方式的团队,用统一写法开发 Web API、内部管理系统、数据服务和 AI 应用。
170
+
171
+ ## 安装
172
+
173
+ SpringBootAI 2.3.6 支持 Python 3.10、3.11 和 3.12:
174
+
175
+ ```bash
176
+ python -m pip install springbootAI
177
+ ```
178
+
179
+ 需要可选模块时,可以按需安装:
180
+
181
+ ```bash
182
+ python -m pip install "springbootAI[ai]"
183
+ python -m pip install "springbootAI[langchain]"
184
+ python -m pip install "springbootAI[langgraph]"
185
+ python -m pip install "springbootAI[mcp]"
186
+ python -m pip install "springbootAI[mysql]"
187
+ python -m pip install "springbootAI[redis]"
188
+ ```
189
+
190
+ 安装全部可选能力:
191
+
192
+ ```bash
193
+ python -m pip install "springbootAI[all]"
194
+ ```
195
+
196
+ ## 快速开始
197
+
198
+ 创建应用入口 `demo/Application.py`:
199
+
200
+ ```python
201
+ from springbootai.annotations import SpringBootApplication
202
+ from springbootai.main import run
203
+
204
+
205
+ @SpringBootApplication(scan_base_packages=["demo"])
206
+ class Application:
207
+ pass
208
+
209
+
210
+ if __name__ == "__main__":
211
+ run(Application)
212
+ ```
213
+
214
+ 创建控制器 `demo/controller/HelloController.py`:
215
+
216
+ ```python
217
+ from springbootai.annotations import GetMapping, RequestMapping, RestController
218
+ from springbootai.web.swagger import Operation, Tag
219
+
220
+
221
+ @Tag(name="入门接口", description="确认应用已经正常运行")
222
+ @RequestMapping("/api")
223
+ @RestController
224
+ class HelloController:
225
+ @Operation(summary="打招呼")
226
+ @GetMapping("/hello/{name}")
227
+ def hello(self, name: str):
228
+ return {"message": f"Hello, {name}"}
229
+ ```
230
+
231
+ 创建 `demo/application.yml`,首次运行时关闭暂时不需要的外部资源:
232
+
233
+ ```yaml
234
+ server:
235
+ host: 127.0.0.1
236
+ port: 8080
237
+
238
+ database:
239
+ enabled: false
240
+
241
+ redis:
242
+ enabled: false
243
+ ```
244
+
245
+ 启动应用:
246
+
247
+ ```bash
248
+ python -m demo.Application
249
+ ```
250
+
251
+ 访问 `http://127.0.0.1:8080/api/hello/Alice` 验证接口,访问 `http://127.0.0.1:8080/docs` 查看 Swagger 文档。
252
+
253
+ ## 核心能力
254
+
255
+ | 方向 | 能力 |
256
+ |---|---|
257
+ | Web 与 IoC | 路由映射、参数绑定、组件扫描、依赖注入、生命周期、Swagger |
258
+ | 数据与事务 | PyMyBatis Mapper、XML Mapper、分页、动态 SQL、事务和自动回滚 |
259
+ | 中间件与 Cloud | Redis、RabbitMQ、Kafka、Nacos、Feign、Gateway |
260
+ | 工程治理 | 配置合并、Profile、日志、健康检查、Prometheus、限流、熔断和链路追踪 |
261
+ | 安全能力 | JWT、OAuth2、CSRF、访问控制、密码加密和 SQL 注入防护 |
262
+ | AI 生态 | ChatClient、Tools、RAG、Advisor、LangChain、LangGraph 和 MCP client/server |
263
+ | 测试能力 | 测试切片、MockBean、TestPropertySource、集成测试和性能测试脚本 |
264
+
265
+ ## 考试认证与证书
266
+
267
+ SpringBootAI 提供配套的在线考试认证平台。学习者、团队成员和项目使用方可以通过认证考试检验自己对框架核心能力的掌握情况,并在通过考试后获得对应证书。
268
+
269
+ 认证入口:[http://www.yucg.cn:8230](http://www.yucg.cn:8230)
270
+
271
+ 认证内容建议重点关注:
272
+
273
+ - 安装、项目结构、启动入口、扫描包、配置文件和 Swagger。
274
+ - Controller、Service、Mapper 分层以及 Bean 注册、依赖注入和生命周期。
275
+ - PyMyBatis、动态 SQL、分页、事务边界和回滚行为。
276
+ - Profile、日志、健康检查、Prometheus、限流、熔断和测试切片。
277
+ - JWT、OAuth2、CSRF、访问控制和常见安全错误处理。
278
+ - ChatClient、Tools、RAG、LangChain、LangGraph 和 MCP。
279
+
280
+ 考试规则、题量、通过标准、证书领取方式和有效期以认证平台展示为准。
281
+
282
+ ## 文档
283
+
284
+ - [GitHub 项目主页](https://github.com/YUCONGGEN/springbootAI)
285
+ - [完整 README](https://github.com/YUCONGGEN/springbootAI#readme)
286
+ - [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md)
287
+ - [全部模块文档](https://github.com/YUCONGGEN/springbootAI/tree/master/doc)
288
+ - [变更日志](https://github.com/YUCONGGEN/springbootAI/blob/master/CHANGELOG.md)
289
+ - [安全报告](https://github.com/YUCONGGEN/springbootAI/blob/master/SECURITY.md)
290
+
291
+ ## 生产使用说明
292
+
293
+ 项目当前标记为 Beta。用于公网高并发、合规敏感或支付、订单、库存等核心系统前,请完成目标数据库、流量模型、故障恢复和安全基线验证。
294
+
295
+ 内嵌 Gateway 适合内部路由,不替代公网 Nginx、Kong 或 WAF。Seata `distributed` 模式对接官方 TC 与 TCC 回调;`at` 模式通过 ORM 拦截器生成 `undo_log` 实现自动回滚。
296
+
297
+ ## 许可证
298
+
299
+ SpringBootAI 使用 [MIT License](https://github.com/YUCONGGEN/springbootAI/blob/master/LICENSE)。
@@ -1,7 +1,7 @@
1
1
  # SpringBootAI
2
2
 
3
3
  <p align="center">
4
- <img src="doc/images/hero-banner.png" alt="SpringBootAI 功能总览" width="100%" />
4
+ <img src="https://raw.githubusercontent.com/YUCONGGEN/springbootAI/master/doc/images/hero-banner.png" alt="SpringBootAI 功能总览" width="100%" />
5
5
  </p>
6
6
 
7
7
  [![PyPI](https://img.shields.io/pypi/v/springbootAI)](https://pypi.org/project/springbootAI/)
@@ -10,6 +10,39 @@
10
10
  [![Security](https://github.com/YUCONGGEN/springbootAI/actions/workflows/security.yml/badge.svg?branch=master)](https://github.com/YUCONGGEN/springbootAI/actions/workflows/security.yml)
11
11
  [![License](https://img.shields.io/pypi/l/springbootAI)](https://github.com/YUCONGGEN/springbootAI/blob/master/LICENSE)
12
12
 
13
+ ## SpringBootAI 考试认证与证书
14
+
15
+ SpringBootAI 已提供配套的在线考试认证平台,学习者、团队成员和项目使用方可以通过认证考试检验自己对框架核心能力的掌握情况,并在通过考试后获得对应证书。
16
+
17
+ 认证入口:[http://www.yucg.cn:8230](http://www.yucg.cn:8230)
18
+
19
+ 认证适合以下场景:
20
+
21
+ - **个人学习证明**:用于记录自己已经系统学习 SpringBootAI 的 Web、IoC、配置、数据访问、AOP、AI 扩展和生产治理等核心内容。
22
+ - **团队能力评估**:团队引入 SpringBootAI 前,可以让成员通过统一考试确认基础概念、开发规范和常见问题处理能力。
23
+ - **项目交付背书**:在培训、内部推广、项目验收或技术选型说明中,证书可作为使用者熟悉框架体系和最佳实践的辅助证明。
24
+ - **持续学习路径**:认证内容覆盖从入门到进阶的关键知识点,适合结合 README、模块文档和示例工程逐步学习后再参加考试。
25
+
26
+ 建议的认证准备流程:
27
+
28
+ 1. 先按 README 中的“10 分钟跑通第一个接口”完成本地环境搭建,确认能够创建应用、启动服务并访问 Swagger。
29
+ 2. 阅读 [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md),理解 `@SpringBootApplication`、`@RestController`、`@Service`、`@Autowired`、配置文件和依赖注入的基本用法。
30
+ 3. 根据实际使用方向阅读模块文档,例如 Web MVC、ORM、事务、缓存、安全、配置绑定、测试切片、AI、LangChain、LangGraph、MCP 和 Cloud 微服务等。
31
+ 4. 运行示例或编写一个小型业务接口,至少覆盖 Controller、Service、配置读取、异常处理、Swagger 文档和数据访问中的若干能力。
32
+ 5. 访问认证平台参加考试,通过后按平台页面提示查看、下载或领取证书。证书信息、考试规则、题量、通过标准和有效期以认证平台展示为准。
33
+
34
+ 认证重点建议关注:
35
+
36
+ | 方向 | 建议掌握内容 |
37
+ |---|---|
38
+ | 快速入门 | 安装方式、项目结构、启动入口、扫描包、`application.yml`、Swagger 访问 |
39
+ | Web 与 IoC | 路由映射、参数绑定、Controller/Service 分层、Bean 注册、依赖注入、生命周期 |
40
+ | 数据与事务 | PyMyBatis Mapper、XML Mapper、分页、动态 SQL、事务边界、回滚行为 |
41
+ | 工程治理 | 配置合并、Profile、日志、健康检查、Prometheus、限流、熔断、测试切片 |
42
+ | 安全能力 | JWT、密码加密、SQL 注入防护、CSRF、OAuth2、访问控制与常见错误处理 |
43
+ | AI 生态 | ChatClient、Tools、RAG、Advisor、LangChain、LangGraph、MCP client/server |
44
+
45
+
13
46
  SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用框架。你使用 Python 编写 `@RestController`、`@Service`、`@Mapper` 和 `@Autowired`,框架负责组件扫描、依赖注入、Web 路由、事务切面及生命周期;Web 运行时建立在 FastAPI/Starlette/Uvicorn 之上。
14
47
 
15
48
  它不是 Java Spring Boot 的 Python 绑定,也不是 Spring 官方项目。它适合熟悉 Controller/Service/Mapper 分层的团队,用统一写法开发 Web API、内部管理系统、数据服务和 AI 应用。
@@ -21,7 +54,7 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
21
54
  | AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
22
55
  | 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
23
56
 
24
- 当前版本是 `2.3.2`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 模式通过 ORM 拦截器自动生成 undo_log 实现自动回滚。
57
+ 当前版本是 `2.3.6`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 模式通过 ORM 拦截器自动生成 undo_log 实现自动回滚。
25
58
 
26
59
  [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md) | [全部文档](https://github.com/YUCONGGEN/springbootAI/tree/master/doc) | [变更日志](https://github.com/YUCONGGEN/springbootAI/blob/master/CHANGELOG.md) | [安全报告](https://github.com/YUCONGGEN/springbootAI/blob/master/SECURITY.md) | [发布检查](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/RELEASE_CHECKLIST.md)
27
60
 
@@ -202,10 +235,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
202
235
 
203
236
  | 组件 | 当前版本 |
204
237
  |------|----------|
205
- | `springbootai` 框架 API | 2.3.2 |
206
- | `springbootai.orm.pymybatis` | 2.3.2 |
207
- | `springbootai.ai` AI 模块 | 2.3.2 |
208
- | `springbootai.langchain` LangChain 模块 | 2.3.2 |
238
+ | `springbootai` 框架 API | 2.3.6 |
239
+ | `springbootai.orm.pymybatis` | 2.3.6 |
240
+ | `springbootai.ai` AI 模块 | 2.3.6 |
241
+ | `springbootai.langchain` LangChain 模块 | 2.3.6 |
209
242
  | Python | 3.10+ |
210
243
 
211
244
  ### 1.4 适合什么场景
@@ -0,0 +1,137 @@
1
+ # SpringBootAI
2
+
3
+ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用框架。你可以使用 Python 编写 `@RestController`、`@Service`、`@Mapper` 和 `@Autowired`,框架负责组件扫描、依赖注入、Web 路由、事务切面及应用生命周期。
4
+
5
+ Web 运行时建立在 FastAPI、Starlette 和 Uvicorn 之上,同时提供 ORM、事务、缓存、消息队列、服务发现、生产治理以及 AI 生态集成。
6
+
7
+ > SpringBootAI 不是 Java Spring Boot 的 Python 绑定,也不是 Spring 官方项目。它适合熟悉 Controller、Service、Mapper 分层方式的团队,用统一写法开发 Web API、内部管理系统、数据服务和 AI 应用。
8
+
9
+ ## 安装
10
+
11
+ SpringBootAI 2.3.6 支持 Python 3.10、3.11 和 3.12:
12
+
13
+ ```bash
14
+ python -m pip install springbootAI
15
+ ```
16
+
17
+ 需要可选模块时,可以按需安装:
18
+
19
+ ```bash
20
+ python -m pip install "springbootAI[ai]"
21
+ python -m pip install "springbootAI[langchain]"
22
+ python -m pip install "springbootAI[langgraph]"
23
+ python -m pip install "springbootAI[mcp]"
24
+ python -m pip install "springbootAI[mysql]"
25
+ python -m pip install "springbootAI[redis]"
26
+ ```
27
+
28
+ 安装全部可选能力:
29
+
30
+ ```bash
31
+ python -m pip install "springbootAI[all]"
32
+ ```
33
+
34
+ ## 快速开始
35
+
36
+ 创建应用入口 `demo/Application.py`:
37
+
38
+ ```python
39
+ from springbootai.annotations import SpringBootApplication
40
+ from springbootai.main import run
41
+
42
+
43
+ @SpringBootApplication(scan_base_packages=["demo"])
44
+ class Application:
45
+ pass
46
+
47
+
48
+ if __name__ == "__main__":
49
+ run(Application)
50
+ ```
51
+
52
+ 创建控制器 `demo/controller/HelloController.py`:
53
+
54
+ ```python
55
+ from springbootai.annotations import GetMapping, RequestMapping, RestController
56
+ from springbootai.web.swagger import Operation, Tag
57
+
58
+
59
+ @Tag(name="入门接口", description="确认应用已经正常运行")
60
+ @RequestMapping("/api")
61
+ @RestController
62
+ class HelloController:
63
+ @Operation(summary="打招呼")
64
+ @GetMapping("/hello/{name}")
65
+ def hello(self, name: str):
66
+ return {"message": f"Hello, {name}"}
67
+ ```
68
+
69
+ 创建 `demo/application.yml`,首次运行时关闭暂时不需要的外部资源:
70
+
71
+ ```yaml
72
+ server:
73
+ host: 127.0.0.1
74
+ port: 8080
75
+
76
+ database:
77
+ enabled: false
78
+
79
+ redis:
80
+ enabled: false
81
+ ```
82
+
83
+ 启动应用:
84
+
85
+ ```bash
86
+ python -m demo.Application
87
+ ```
88
+
89
+ 访问 `http://127.0.0.1:8080/api/hello/Alice` 验证接口,访问 `http://127.0.0.1:8080/docs` 查看 Swagger 文档。
90
+
91
+ ## 核心能力
92
+
93
+ | 方向 | 能力 |
94
+ |---|---|
95
+ | Web 与 IoC | 路由映射、参数绑定、组件扫描、依赖注入、生命周期、Swagger |
96
+ | 数据与事务 | PyMyBatis Mapper、XML Mapper、分页、动态 SQL、事务和自动回滚 |
97
+ | 中间件与 Cloud | Redis、RabbitMQ、Kafka、Nacos、Feign、Gateway |
98
+ | 工程治理 | 配置合并、Profile、日志、健康检查、Prometheus、限流、熔断和链路追踪 |
99
+ | 安全能力 | JWT、OAuth2、CSRF、访问控制、密码加密和 SQL 注入防护 |
100
+ | AI 生态 | ChatClient、Tools、RAG、Advisor、LangChain、LangGraph 和 MCP client/server |
101
+ | 测试能力 | 测试切片、MockBean、TestPropertySource、集成测试和性能测试脚本 |
102
+
103
+ ## 考试认证与证书
104
+
105
+ SpringBootAI 提供配套的在线考试认证平台。学习者、团队成员和项目使用方可以通过认证考试检验自己对框架核心能力的掌握情况,并在通过考试后获得对应证书。
106
+
107
+ 认证入口:[http://www.yucg.cn:8230](http://www.yucg.cn:8230)
108
+
109
+ 认证内容建议重点关注:
110
+
111
+ - 安装、项目结构、启动入口、扫描包、配置文件和 Swagger。
112
+ - Controller、Service、Mapper 分层以及 Bean 注册、依赖注入和生命周期。
113
+ - PyMyBatis、动态 SQL、分页、事务边界和回滚行为。
114
+ - Profile、日志、健康检查、Prometheus、限流、熔断和测试切片。
115
+ - JWT、OAuth2、CSRF、访问控制和常见安全错误处理。
116
+ - ChatClient、Tools、RAG、LangChain、LangGraph 和 MCP。
117
+
118
+ 考试规则、题量、通过标准、证书领取方式和有效期以认证平台展示为准。
119
+
120
+ ## 文档
121
+
122
+ - [GitHub 项目主页](https://github.com/YUCONGGEN/springbootAI)
123
+ - [完整 README](https://github.com/YUCONGGEN/springbootAI#readme)
124
+ - [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md)
125
+ - [全部模块文档](https://github.com/YUCONGGEN/springbootAI/tree/master/doc)
126
+ - [变更日志](https://github.com/YUCONGGEN/springbootAI/blob/master/CHANGELOG.md)
127
+ - [安全报告](https://github.com/YUCONGGEN/springbootAI/blob/master/SECURITY.md)
128
+
129
+ ## 生产使用说明
130
+
131
+ 项目当前标记为 Beta。用于公网高并发、合规敏感或支付、订单、库存等核心系统前,请完成目标数据库、流量模型、故障恢复和安全基线验证。
132
+
133
+ 内嵌 Gateway 适合内部路由,不替代公网 Nginx、Kong 或 WAF。Seata `distributed` 模式对接官方 TC 与 TCC 回调;`at` 模式通过 ORM 拦截器生成 `undo_log` 实现自动回滚。
134
+
135
+ ## 许可证
136
+
137
+ SpringBootAI 使用 [MIT License](https://github.com/YUCONGGEN/springbootAI/blob/master/LICENSE)。
@@ -12,9 +12,9 @@ build-backend = "setuptools.build_meta"
12
12
  [project]
13
13
  # Distribution name: springbootAI (pip install springbootAI); import package: springbootai.
14
14
  name = "springbootAI"
15
- version = "2.3.4"
15
+ version = "2.3.6"
16
16
  description = "Spring-style Python framework with Web, ORM, Cloud and AI integrations"
17
- readme = "README.md"
17
+ readme = "README_PYPI.md"
18
18
  license = "MIT"
19
19
  license-files = ["LICENSE"]
20
20
  authors = [