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.
- {springbootai-2.3.0/springbootAI.egg-info → springbootai-2.3.2}/PKG-INFO +1 -1
- {springbootai-2.3.0 → springbootai-2.3.2}/pyproject.toml +3 -3
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/__init__.py +1 -1
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cli/main.py +57 -11
- springbootai-2.3.2/spring/cli/scaffold.py +1351 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/config/config_loader.py +318 -106
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/context/application_context.py +237 -27
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/context/bean_factory.py +178 -27
- springbootai-2.3.2/spring/core/graceful_shutdown.py +336 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/logging/loguru_logger.py +16 -2
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/main.py +153 -79
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/mybatis_integration.py +5 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/configuration.py +186 -74
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/pool/connection_pool.py +88 -18
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/version.py +1 -1
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/security/jwt_utils.py +5 -2
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/security/replay_protection.py +22 -5
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/utils/banner.py +2 -2
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/utils/redis_client.py +29 -9
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/health.py +36 -20
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/web_context.py +108 -25
- {springbootai-2.3.0 → springbootai-2.3.2/springbootAI.egg-info}/PKG-INFO +1 -1
- {springbootai-2.3.0 → springbootai-2.3.2}/springbootAI.egg-info/SOURCES.txt +3 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_config_fixes_185.py +129 -0
- springbootai-2.3.2/tests/test_pymybatis_configuration_hardening.py +129 -0
- springbootai-2.3.2/tests/test_scaffold_hardening.py +295 -0
- springbootai-2.3.2/tests/test_startup_lifecycle.py +628 -0
- springbootai-2.3.0/spring/cli/scaffold.py +0 -398
- springbootai-2.3.0/spring/core/graceful_shutdown.py +0 -196
- {springbootai-2.3.0 → springbootai-2.3.2}/CHANGELOG.md +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/LICENSE +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/MANIFEST.in +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/README.md +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/SECURITY.md +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/requirements-ai.txt +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/requirements-langgraph.txt +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/requirements-mcp.txt +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/requirements.txt +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/setup.cfg +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/setup.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/advisors.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/autoconfig.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/core.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/etl.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/memory.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/observability.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/providers.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/resilience.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/tools.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/ai/vectorstore.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/batch.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/cache.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/cloud.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/conditional.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/core.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/data.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/enterprise.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/langchain.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/langgraph.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/messaging.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/annotations/security.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/aop/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/aop/aspect.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/aop/cloud_aop.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/aop/comprehensive_aop.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/aop/method_interceptor.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/aop/proxy_factory.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/batch/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cli/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/bus.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/config_center.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/discovery.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/feign.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/gateway.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/load_balancer.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/seata.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/seata_at_proxy.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/seata_bridge.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/sentinel.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/tracer.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/cloud/transaction_store.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/config/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/config/binding.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/config/spring-configuration-metadata.json +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/context/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/context/bean_definition.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/context/registry.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/context/scanner.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/core/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/core/typing_utils.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/csv/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/csv/annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/csv/converters.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/csv/easy_csv.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/csv/exceptions.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/csv/reader.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/csv/writer.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/data/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/data/page.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/data/repository.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/data/rest.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/data/specification.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/datasource/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/datasource/annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/datasource/context.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/datasource/dynamic.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/devtools.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/event/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/event/publisher.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/converters.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/easy_excel.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/exceptions.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/reader.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/style.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/excel/writer.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/accessor.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/auto_config.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/holder.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/locale.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/locale_resolver.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/message_source.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/middleware.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/properties.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/i18n/sources.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/adapters.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/agents/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/agents/services.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/autoconfig.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/callbacks/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/callbacks/handlers.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/chains/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/chains/services.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/core.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/indexes/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/indexes/index.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/loaders/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/loaders/loaders.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/memory/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/memory/memory.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/parsers/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/parsers/parsers.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/partners.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/prompts/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/prompts/templates.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/retrievers/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/retrievers/retrievers.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/tools/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/tools/tools.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/utilities/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/utilities/utils.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/vectorstores/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langchain/vectorstores/stores.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langgraph/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langgraph/annotation_runtime.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langgraph/annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langgraph/autoconfig.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langgraph/checkpoint.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langgraph/config.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/langgraph/runtime.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/logging/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/mcp/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/mcp/annotation_runtime.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/mcp/annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/mcp/autoconfig.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/mcp/client.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/mcp/config.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/mcp/server.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/messaging/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/messaging/kafka.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/messaging/rabbitmq.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/monitoring/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/monitoring/prometheus.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/database.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/ddl_auto.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/migration.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/annotations/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/annotations/annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/cache/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/cache/cache.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/cache/redis_cache.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/circuit_breaker/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/circuit_breaker/circuit_breaker.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/core/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/core/sql_session.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/core/sql_session_factory.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/dialect/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/dialect/dialect.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/dynamic_sql/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/dynamic_sql/dynamic_sql.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/interceptor/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/interceptor/interceptor.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/mapper/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/mapper/mapper.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/metrics/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/metrics/metrics.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/pool/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/security/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/security/access_control.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/security/password_encoder.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/security/sensitive_data_masker.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/security/sql_injection_detector.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/transaction/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/transaction/transaction.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/type_handler/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/type_handler/type_handler.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/xml_parser/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/orm/pymybatis/xml_parser/xml_parser.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/retry/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/retry/recovery.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/retry/retry_annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/retry/retry_decorator.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/scheduling/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/scheduling/scheduler.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/security/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/security/oauth2.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/security/secret_manager.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/security/security_aop.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/security/security_context.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/test/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/test/slicing.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/tracing/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/tracing/skywalking.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/tx/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/tx/events.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/tx/synchronization.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/utils/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/utils/bean_utils.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/utils/logger.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/validation/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/validation/aop.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/validation/constraints.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/validation/exceptions.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/validation/validator.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/actuator.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/csrf.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/exception_handler.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/hateoas.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/interceptor.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/result.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/web/swagger.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/websocket/__init__.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/websocket/annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/websocket/broker.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/websocket/exceptions.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/websocket/handler.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/websocket/router.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/spring/websocket/session.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/springbootAI.egg-info/dependency_links.txt +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/springbootAI.egg-info/entry_points.txt +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/springbootAI.egg-info/requires.txt +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/springbootAI.egg-info/top_level.txt +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/sql/seata_undo_log.sql +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_actuator.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_actuator_prometheus_admin.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_ai_comprehensive.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_ai_declarative_annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_ai_module.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_annotation_combinations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_annotations_contract.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_aop_annotations_full.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_audit_time.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_batch.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_bean_utils.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_bus.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_cache_annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_cli.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_cloud_embedded_full.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_component_init_error.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_compositional_annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_conditional_annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_config_binding.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_config_center.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_connection_resilience.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_core_annotations_full.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_csrf.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_csv_module.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_data_repository.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_data_rest.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_datasource_routing.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_ddl_auto.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_declarative_aop_post_authorize_recover.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_devtools.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_di_config_event_full.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_excel_module.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_hateoas.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_i18n_module.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_jpa_version_transient.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_kafka.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_langchain_comprehensive.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_langchain_ext.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_langchain_module.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_langgraph_comprehensive.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_langgraph_module.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_logging_config.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_mcp_module.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_metadata.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_migration.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_new_annotations.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_new_features.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_oauth2.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_orm_pymybatis_full.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_production_readiness.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_pymybatis_contract.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_seata_at_proxy.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_seata_bridge.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_seata_durable_store.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_security.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_security_full.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_security_hardening.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_select_page.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_starter.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_swagger_module.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_test_slicing.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_transactional_events.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_validation_module.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_web_annotations_full.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_web_root_mapping.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_web_static_files.py +0 -0
- {springbootai-2.3.0 → springbootai-2.3.2}/tests/test_websocket_module.py +0 -0
|
@@ -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.
|
|
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
|
|
292
|
-
#
|
|
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]
|
|
@@ -235,11 +235,27 @@ def create_parser() -> argparse.ArgumentParser:
|
|
|
235
235
|
)
|
|
236
236
|
|
|
237
237
|
# init 命令(复用 scaffold)
|
|
238
|
-
init_parser = subparsers.add_parser(
|
|
239
|
-
|
|
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=
|
|
242
|
-
|
|
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) ->
|
|
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 = [
|
|
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
|
-
|
|
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())
|