springbootAI 2.2.2__tar.gz → 2.2.3__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.2.2 → springbootai-2.2.3}/CHANGELOG.md +24 -0
- {springbootai-2.2.2/springbootAI.egg-info → springbootai-2.2.3}/PKG-INFO +1 -1
- {springbootai-2.2.2 → springbootai-2.2.3}/pyproject.toml +1 -1
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/ddl_auto.py +64 -1
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/version.py +1 -1
- {springbootai-2.2.2 → springbootai-2.2.3/springbootAI.egg-info}/PKG-INFO +1 -1
- {springbootai-2.2.2 → springbootai-2.2.3}/LICENSE +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/MANIFEST.in +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/README.md +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/SECURITY.md +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/requirements-ai.txt +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/requirements-langgraph.txt +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/requirements-mcp.txt +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/requirements.txt +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/setup.cfg +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/setup.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/ai/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/ai/advisors.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/ai/annotations.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/ai/autoconfig.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/ai/core.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/ai/etl.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/ai/memory.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/ai/observability.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/ai/providers.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/ai/resilience.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/ai/tools.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/ai/vectorstore.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/annotations/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/annotations/cache.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/annotations/cloud.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/annotations/conditional.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/annotations/core.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/annotations/langchain.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/annotations/langgraph.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/annotations/messaging.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/aop/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/aop/aspect.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/aop/cloud_aop.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/aop/comprehensive_aop.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/aop/method_interceptor.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/aop/proxy_factory.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/cloud/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/cloud/discovery.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/cloud/feign.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/cloud/gateway.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/cloud/load_balancer.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/cloud/seata.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/cloud/seata_bridge.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/cloud/sentinel.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/cloud/tracer.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/cloud/transaction_store.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/config/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/config/binding.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/config/config_loader.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/context/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/context/application_context.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/context/bean_definition.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/context/bean_factory.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/context/registry.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/context/scanner.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/core/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/core/graceful_shutdown.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/core/typing_utils.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/csv/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/csv/annotations.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/csv/converters.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/csv/easy_csv.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/csv/exceptions.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/csv/reader.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/csv/writer.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/data/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/data/page.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/data/repository.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/data/specification.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/datasource/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/datasource/annotations.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/datasource/context.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/datasource/dynamic.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/event/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/event/publisher.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/excel/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/excel/annotations.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/excel/converters.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/excel/easy_excel.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/excel/exceptions.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/excel/reader.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/excel/style.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/excel/writer.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/i18n/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/i18n/accessor.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/i18n/auto_config.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/i18n/holder.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/i18n/locale.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/i18n/locale_resolver.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/i18n/message_source.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/i18n/middleware.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/i18n/properties.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/i18n/sources.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/adapters.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/agents/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/agents/services.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/annotations.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/autoconfig.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/callbacks/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/callbacks/handlers.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/chains/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/chains/services.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/core.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/indexes/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/indexes/index.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/loaders/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/loaders/loaders.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/memory/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/memory/memory.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/parsers/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/parsers/parsers.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/partners.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/prompts/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/prompts/templates.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/retrievers/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/retrievers/retrievers.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/tools/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/tools/tools.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/utilities/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/utilities/utils.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/vectorstores/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langchain/vectorstores/stores.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langgraph/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langgraph/annotation_runtime.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langgraph/annotations.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langgraph/autoconfig.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langgraph/checkpoint.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langgraph/config.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/langgraph/runtime.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/logging/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/logging/loguru_logger.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/main.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/mcp/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/mcp/annotation_runtime.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/mcp/annotations.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/mcp/autoconfig.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/mcp/client.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/mcp/config.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/mcp/server.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/messaging/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/messaging/rabbitmq.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/monitoring/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/monitoring/prometheus.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/database.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/migration.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/mybatis_integration.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/annotations/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/annotations/annotations.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/cache/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/cache/cache.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/cache/redis_cache.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/circuit_breaker/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/circuit_breaker/circuit_breaker.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/configuration.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/core/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/core/sql_session.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/core/sql_session_factory.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/dialect/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/dialect/dialect.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/dynamic_sql/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/dynamic_sql/dynamic_sql.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/interceptor/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/interceptor/interceptor.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/mapper/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/mapper/mapper.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/metrics/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/metrics/metrics.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/pool/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/pool/connection_pool.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/security/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/security/access_control.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/security/password_encoder.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/security/sensitive_data_masker.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/security/sql_injection_detector.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/transaction/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/transaction/transaction.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/type_handler/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/type_handler/type_handler.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/xml_parser/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/xml_parser/xml_parser.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/retry/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/retry/recovery.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/retry/retry_annotations.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/retry/retry_decorator.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/scheduling/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/scheduling/scheduler.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/security/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/security/jwt_utils.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/security/replay_protection.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/security/secret_manager.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/security/security_aop.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/security/security_context.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/test/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/test/slicing.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/tracing/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/tracing/skywalking.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/tx/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/tx/events.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/tx/synchronization.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/utils/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/utils/banner.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/utils/bean_utils.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/utils/logger.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/utils/redis_client.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/validation/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/validation/aop.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/validation/constraints.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/validation/exceptions.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/validation/validator.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/web/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/web/actuator.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/web/exception_handler.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/web/health.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/web/interceptor.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/web/result.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/web/swagger.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/web/web_context.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/websocket/__init__.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/websocket/annotations.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/websocket/broker.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/websocket/exceptions.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/websocket/handler.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/websocket/router.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/spring/websocket/session.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/springbootAI.egg-info/SOURCES.txt +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/springbootAI.egg-info/dependency_links.txt +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/springbootAI.egg-info/entry_points.txt +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/springbootAI.egg-info/requires.txt +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/springbootAI.egg-info/top_level.txt +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/sql/seata_undo_log.sql +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_actuator.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_ai_comprehensive.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_ai_declarative_annotations.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_ai_module.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_annotation_combinations.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_annotations_contract.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_aop_annotations_full.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_audit_time.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_bean_utils.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_cache_annotations.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_cloud_embedded_full.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_component_init_error.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_conditional_annotations.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_config_binding.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_config_fixes_185.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_connection_resilience.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_core_annotations_full.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_csv_module.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_data_repository.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_datasource_routing.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_ddl_auto.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_declarative_aop_post_authorize_recover.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_di_config_event_full.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_excel_module.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_i18n_module.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_jpa_version_transient.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_langchain_comprehensive.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_langchain_ext.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_langchain_module.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_langgraph_comprehensive.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_langgraph_module.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_logging_config.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_mcp_module.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_new_features.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_orm_pymybatis_full.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_production_readiness.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_pymybatis_contract.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_seata_bridge.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_seata_durable_store.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_security.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_security_full.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_security_hardening.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_swagger_module.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_test_slicing.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_transactional_events.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_validation_module.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_web_annotations_full.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_web_root_mapping.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_web_static_files.py +0 -0
- {springbootai-2.2.2 → springbootai-2.2.3}/tests/test_websocket_module.py +0 -0
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.2.3] - 2026-08-13
|
|
4
|
+
|
|
5
|
+
### 新增
|
|
6
|
+
|
|
7
|
+
- ORM 实体字段自动推断:类型注解无需显式 `= Column(...)` 赋值,对齐 Java JPA 字段自动映射。
|
|
8
|
+
- `name: str` → 自动创建 `Column(default=None)`
|
|
9
|
+
- `name: str = ""` → 自动创建 `Column(default="")`
|
|
10
|
+
- `name: int = 0` → 自动创建 `Column(default=0)`
|
|
11
|
+
- 已有 `Column()`/`Id()`/`CreateTime()` 等描述符的字段保留不覆盖
|
|
12
|
+
- 以 `_` 开头的私有字段自动跳过
|
|
13
|
+
|
|
14
|
+
```python
|
|
15
|
+
@Entity
|
|
16
|
+
@Table(name="sys_user", comment="用户表")
|
|
17
|
+
class User:
|
|
18
|
+
id: int = Id()
|
|
19
|
+
username: str = "" # 自动推断 Column(default="")
|
|
20
|
+
display_name: str = "系统管理员" # 自动推断 Column(default="系统管理员")
|
|
21
|
+
enabled: bool = True # 自动推断 Column(default=True)
|
|
22
|
+
_cache: dict = {} # 私有字段,跳过
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
- `_parse_entity` 跳过以 `_` 开头的私有字段,不生成 DDL 列。
|
|
26
|
+
|
|
3
27
|
## [2.2.2] - 2026-08-13
|
|
4
28
|
|
|
5
29
|
### 新增
|
|
@@ -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.2.
|
|
15
|
+
version = "2.2.3"
|
|
16
16
|
description = "Spring-style Python framework with Web, ORM, Cloud and AI integrations"
|
|
17
17
|
readme = "README.md"
|
|
18
18
|
license = "MIT"
|
|
@@ -544,6 +544,9 @@ class DdlAutoManager:
|
|
|
544
544
|
# @Transient 字段不持久化,跳过
|
|
545
545
|
if _is_transient_field(cls, attr_name):
|
|
546
546
|
continue
|
|
547
|
+
# 私有字段(以 _ 开头)不持久化,跳过
|
|
548
|
+
if attr_name.startswith('_'):
|
|
549
|
+
continue
|
|
547
550
|
py_type = init_hints.get(attr_name) or cls_annotations.get(attr_name)
|
|
548
551
|
# 解包 Optional[X]:Python 3.10 的 get_type_hints 会把带 None 默认值的
|
|
549
552
|
# 参数注解自动包装为 Optional[X],3.11+ 不再包装。此处统一解包为承载类型,
|
|
@@ -1081,12 +1084,72 @@ class DdlAutoManager:
|
|
|
1081
1084
|
|
|
1082
1085
|
# ==================== 装饰器API(便捷使用) ====================
|
|
1083
1086
|
|
|
1087
|
+
def _auto_infer_columns(cls):
|
|
1088
|
+
"""扫描类型注解,为未显式赋 ``Column`` 描述符的字段自动创建 ``Column`` 实例。
|
|
1089
|
+
|
|
1090
|
+
对齐 Java JPA:实体类中所有非 ``@Transient`` 字段自动映射为数据库列,
|
|
1091
|
+
无需显式 ``= Column(...)`` 赋值。
|
|
1092
|
+
|
|
1093
|
+
推断规则:
|
|
1094
|
+
- ``name: str`` → ``Column(default=None)``
|
|
1095
|
+
- ``name: str = ""`` → ``Column(default="")``
|
|
1096
|
+
- ``name: int = 0`` → ``Column(default=0)``
|
|
1097
|
+
- ``name: str = Column(...)`` → 保留原 Column,不覆盖
|
|
1098
|
+
- ``name: int = Id()`` → 保留原 Id,不覆盖
|
|
1099
|
+
- 以 ``_`` 开头的字段 → 跳过(私有/内部字段)
|
|
1100
|
+
- ``@Transient`` 标记字段 → 跳过
|
|
1101
|
+
"""
|
|
1102
|
+
# 收集 MRO 中所有类型注解
|
|
1103
|
+
all_annotations = {}
|
|
1104
|
+
for cls_base in reversed(cls.__mro__):
|
|
1105
|
+
base_anns = getattr(cls_base, '__annotations__', {})
|
|
1106
|
+
all_annotations.update(base_anns)
|
|
1107
|
+
|
|
1108
|
+
for attr_name in all_annotations:
|
|
1109
|
+
# 跳过私有字段
|
|
1110
|
+
if attr_name.startswith('_'):
|
|
1111
|
+
continue
|
|
1112
|
+
# 跳过 @Transient 字段
|
|
1113
|
+
if _is_transient_field(cls, attr_name):
|
|
1114
|
+
continue
|
|
1115
|
+
|
|
1116
|
+
# 查找 MRO 中最近的类属性值
|
|
1117
|
+
existing = None
|
|
1118
|
+
for cls_base in cls.__mro__:
|
|
1119
|
+
if attr_name in cls_base.__dict__:
|
|
1120
|
+
existing = cls_base.__dict__[attr_name]
|
|
1121
|
+
break
|
|
1122
|
+
|
|
1123
|
+
# 已有 Column/Id/Version/CreateTime/UpdateTime 描述符,不覆盖
|
|
1124
|
+
if isinstance(existing, Column):
|
|
1125
|
+
continue
|
|
1126
|
+
# 已有 @column 装饰器标记
|
|
1127
|
+
if hasattr(existing, '__column__'):
|
|
1128
|
+
continue
|
|
1129
|
+
# 已有 Transient 标记
|
|
1130
|
+
if isinstance(existing, Transient):
|
|
1131
|
+
continue
|
|
1132
|
+
|
|
1133
|
+
# 推断默认值:非 None 的类属性值作为 Column default
|
|
1134
|
+
default_val = None
|
|
1135
|
+
if existing is not None and not callable(existing) \
|
|
1136
|
+
and not isinstance(existing, (classmethod, staticmethod)):
|
|
1137
|
+
default_val = existing
|
|
1138
|
+
|
|
1139
|
+
# 创建 Column 描述符并挂到类上
|
|
1140
|
+
setattr(cls, attr_name, Column(default=default_val))
|
|
1141
|
+
|
|
1142
|
+
|
|
1084
1143
|
def _auto_generate_init(cls):
|
|
1085
1144
|
"""为描述符风格实体类自动生成 ``__init__``(若类未显式声明)。
|
|
1086
1145
|
|
|
1087
|
-
|
|
1146
|
+
先调用 ``_auto_infer_columns`` 补全类型注解对应的 ``Column`` 描述符,
|
|
1147
|
+
再扫描 MRO 中所有 ``Column`` 实例属性,生成关键字构造器。
|
|
1088
1148
|
若类已显式声明 ``__init__`` 则跳过,保持兼容。
|
|
1089
1149
|
"""
|
|
1150
|
+
# 无论是否有自定义 __init__,都先补全 Column 描述符(DDL 解析依赖)
|
|
1151
|
+
_auto_infer_columns(cls)
|
|
1152
|
+
|
|
1090
1153
|
if '__init__' in cls.__dict__:
|
|
1091
1154
|
return
|
|
1092
1155
|
fields = {}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{springbootai-2.2.2 → springbootai-2.2.3}/spring/orm/pymybatis/circuit_breaker/circuit_breaker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|