springbootAI 2.2.1__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.1 → springbootai-2.2.3}/CHANGELOG.md +40 -0
- {springbootai-2.2.1/springbootAI.egg-info → springbootai-2.2.3}/PKG-INFO +1 -1
- {springbootai-2.2.1 → springbootai-2.2.3}/pyproject.toml +1 -1
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/ddl_auto.py +174 -33
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/version.py +1 -1
- {springbootai-2.2.1 → springbootai-2.2.3/springbootAI.egg-info}/PKG-INFO +1 -1
- {springbootai-2.2.1 → springbootai-2.2.3}/LICENSE +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/MANIFEST.in +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/README.md +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/SECURITY.md +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/requirements-ai.txt +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/requirements-langgraph.txt +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/requirements-mcp.txt +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/requirements.txt +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/setup.cfg +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/setup.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/ai/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/ai/advisors.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/ai/annotations.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/ai/autoconfig.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/ai/core.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/ai/etl.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/ai/memory.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/ai/observability.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/ai/providers.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/ai/resilience.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/ai/tools.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/ai/vectorstore.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/annotations/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/annotations/cache.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/annotations/cloud.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/annotations/conditional.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/annotations/core.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/annotations/langchain.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/annotations/langgraph.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/annotations/messaging.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/aop/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/aop/aspect.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/aop/cloud_aop.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/aop/comprehensive_aop.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/aop/method_interceptor.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/aop/proxy_factory.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/cloud/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/cloud/discovery.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/cloud/feign.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/cloud/gateway.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/cloud/load_balancer.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/cloud/seata.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/cloud/seata_bridge.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/cloud/sentinel.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/cloud/tracer.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/cloud/transaction_store.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/config/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/config/binding.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/config/config_loader.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/context/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/context/application_context.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/context/bean_definition.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/context/bean_factory.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/context/registry.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/context/scanner.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/core/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/core/graceful_shutdown.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/core/typing_utils.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/csv/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/csv/annotations.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/csv/converters.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/csv/easy_csv.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/csv/exceptions.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/csv/reader.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/csv/writer.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/data/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/data/page.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/data/repository.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/data/specification.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/datasource/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/datasource/annotations.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/datasource/context.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/datasource/dynamic.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/event/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/event/publisher.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/excel/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/excel/annotations.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/excel/converters.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/excel/easy_excel.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/excel/exceptions.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/excel/reader.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/excel/style.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/excel/writer.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/i18n/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/i18n/accessor.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/i18n/auto_config.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/i18n/holder.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/i18n/locale.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/i18n/locale_resolver.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/i18n/message_source.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/i18n/middleware.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/i18n/properties.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/i18n/sources.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/adapters.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/agents/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/agents/services.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/annotations.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/autoconfig.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/callbacks/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/callbacks/handlers.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/chains/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/chains/services.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/core.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/indexes/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/indexes/index.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/loaders/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/loaders/loaders.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/memory/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/memory/memory.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/parsers/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/parsers/parsers.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/partners.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/prompts/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/prompts/templates.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/retrievers/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/retrievers/retrievers.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/tools/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/tools/tools.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/utilities/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/utilities/utils.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/vectorstores/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langchain/vectorstores/stores.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langgraph/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langgraph/annotation_runtime.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langgraph/annotations.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langgraph/autoconfig.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langgraph/checkpoint.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langgraph/config.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/langgraph/runtime.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/logging/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/logging/loguru_logger.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/main.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/mcp/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/mcp/annotation_runtime.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/mcp/annotations.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/mcp/autoconfig.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/mcp/client.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/mcp/config.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/mcp/server.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/messaging/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/messaging/rabbitmq.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/monitoring/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/monitoring/prometheus.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/database.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/migration.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/mybatis_integration.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/annotations/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/annotations/annotations.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/cache/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/cache/cache.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/cache/redis_cache.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/circuit_breaker/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/circuit_breaker/circuit_breaker.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/configuration.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/core/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/core/sql_session.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/core/sql_session_factory.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/dialect/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/dialect/dialect.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/dynamic_sql/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/dynamic_sql/dynamic_sql.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/interceptor/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/interceptor/interceptor.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/mapper/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/mapper/mapper.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/metrics/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/metrics/metrics.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/pool/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/pool/connection_pool.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/security/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/security/access_control.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/security/password_encoder.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/security/sensitive_data_masker.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/security/sql_injection_detector.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/transaction/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/transaction/transaction.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/type_handler/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/type_handler/type_handler.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/xml_parser/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/orm/pymybatis/xml_parser/xml_parser.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/retry/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/retry/recovery.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/retry/retry_annotations.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/retry/retry_decorator.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/scheduling/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/scheduling/scheduler.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/security/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/security/jwt_utils.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/security/replay_protection.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/security/secret_manager.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/security/security_aop.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/security/security_context.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/test/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/test/slicing.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/tracing/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/tracing/skywalking.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/tx/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/tx/events.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/tx/synchronization.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/utils/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/utils/banner.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/utils/bean_utils.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/utils/logger.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/utils/redis_client.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/validation/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/validation/aop.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/validation/constraints.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/validation/exceptions.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/validation/validator.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/web/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/web/actuator.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/web/exception_handler.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/web/health.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/web/interceptor.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/web/result.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/web/swagger.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/web/web_context.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/websocket/__init__.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/websocket/annotations.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/websocket/broker.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/websocket/exceptions.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/websocket/handler.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/websocket/router.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/spring/websocket/session.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/springbootAI.egg-info/SOURCES.txt +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/springbootAI.egg-info/dependency_links.txt +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/springbootAI.egg-info/entry_points.txt +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/springbootAI.egg-info/requires.txt +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/springbootAI.egg-info/top_level.txt +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/sql/seata_undo_log.sql +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_actuator.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_ai_comprehensive.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_ai_declarative_annotations.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_ai_module.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_annotation_combinations.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_annotations_contract.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_aop_annotations_full.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_audit_time.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_bean_utils.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_cache_annotations.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_cloud_embedded_full.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_component_init_error.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_conditional_annotations.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_config_binding.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_config_fixes_185.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_connection_resilience.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_core_annotations_full.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_csv_module.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_data_repository.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_datasource_routing.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_ddl_auto.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_declarative_aop_post_authorize_recover.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_di_config_event_full.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_excel_module.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_i18n_module.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_jpa_version_transient.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_langchain_comprehensive.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_langchain_ext.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_langchain_module.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_langgraph_comprehensive.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_langgraph_module.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_logging_config.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_mcp_module.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_new_features.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_orm_pymybatis_full.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_production_readiness.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_pymybatis_contract.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_seata_bridge.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_seata_durable_store.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_security.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_security_full.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_security_hardening.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_swagger_module.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_test_slicing.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_transactional_events.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_validation_module.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_web_annotations_full.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_web_root_mapping.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_web_static_files.py +0 -0
- {springbootai-2.2.1 → springbootai-2.2.3}/tests/test_websocket_module.py +0 -0
|
@@ -1,5 +1,45 @@
|
|
|
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
|
+
|
|
27
|
+
## [2.2.2] - 2026-08-13
|
|
28
|
+
|
|
29
|
+
### 新增
|
|
30
|
+
|
|
31
|
+
- ORM `@Entity` / `@Table` 注解对齐 Java JPA 分离风格,支持三种写法(均向后兼容):
|
|
32
|
+
|
|
33
|
+
| 写法 | 说明 | 对齐 Java |
|
|
34
|
+
|------|------|-----------|
|
|
35
|
+
| `@Entity` + `@Table(...)` | 分离风格(推荐) | `@Entity` + `@Table` |
|
|
36
|
+
| `@Entity` 无括号 | 表名自动推导为 snake_case | `@Entity`(无 `@Table`) |
|
|
37
|
+
| `@Entity("name", ...)` | 一体化风格(完全兼容) | 原有写法不变 |
|
|
38
|
+
|
|
39
|
+
- `Table` 类新增 `__call__`,可直接作为类装饰器使用(`@Table(name=..., indexes=[...], comment=...)`)。
|
|
40
|
+
- `@Entity` 支持无括号形式(`@Entity`),检测到已有 `@Table` 时不覆盖表元数据。
|
|
41
|
+
- 提取 `_auto_generate_init` 辅助函数,消除 `Entity` 与 `Table.__call__` 间的重复代码。
|
|
42
|
+
|
|
3
43
|
## [2.2.1] - 2026-08-13
|
|
4
44
|
|
|
5
45
|
### 修复
|
|
@@ -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"
|
|
@@ -244,12 +244,47 @@ class Transient:
|
|
|
244
244
|
|
|
245
245
|
|
|
246
246
|
class Table:
|
|
247
|
-
"""
|
|
247
|
+
"""``@Table`` 表注解(对齐 JPA ``javax.persistence.Table``)。
|
|
248
|
+
|
|
249
|
+
既可作为元数据类使用(内部 ``EntityTable`` 解析),也可直接作为类装饰器使用。
|
|
250
|
+
作为装饰器时等价于 JPA 的 ``@Table``,与 ``@Entity`` 组合使用::
|
|
251
|
+
|
|
252
|
+
@Entity
|
|
253
|
+
@Table(name="sys_user", indexes=[Index("idx_name", ["name"])], comment="用户表")
|
|
254
|
+
class User:
|
|
255
|
+
id: int = Id()
|
|
256
|
+
name: str = Column(length=50)
|
|
257
|
+
|
|
258
|
+
也可单独使用(隐含 ``@Entity`` 语义,与 ``@Entity("sys_user")`` 等价)::
|
|
259
|
+
|
|
260
|
+
@Table(name="sys_user", comment="用户表")
|
|
261
|
+
class User:
|
|
262
|
+
id: int = Id()
|
|
263
|
+
"""
|
|
248
264
|
def __init__(self, name: str = "", indexes: List['Index'] = None, comment: str = ""):
|
|
249
265
|
self.name = name
|
|
250
266
|
self.indexes = indexes or []
|
|
251
267
|
self.comment = comment
|
|
252
268
|
|
|
269
|
+
def __call__(self, cls):
|
|
270
|
+
"""装饰器形式:将表元数据挂载到类上并标记为实体,返回类本身。
|
|
271
|
+
|
|
272
|
+
装饰器应用顺序(Python 底向上)::
|
|
273
|
+
|
|
274
|
+
@Entity # 外层,后执行
|
|
275
|
+
@Table(...) # 内层,先执行
|
|
276
|
+
class User: ...
|
|
277
|
+
|
|
278
|
+
``@Table`` 先设置 ``__table__`` 与 ``__entity__``,随后 ``@Entity``
|
|
279
|
+
检测到已有 ``__table__`` 则不覆盖。
|
|
280
|
+
"""
|
|
281
|
+
if not self.name:
|
|
282
|
+
self.name = _camel_to_snake(cls.__name__)
|
|
283
|
+
setattr(cls, '__table__', self)
|
|
284
|
+
setattr(cls, '__entity__', True)
|
|
285
|
+
_auto_generate_init(cls)
|
|
286
|
+
return cls
|
|
287
|
+
|
|
253
288
|
|
|
254
289
|
class Index:
|
|
255
290
|
"""索引定义"""
|
|
@@ -509,6 +544,9 @@ class DdlAutoManager:
|
|
|
509
544
|
# @Transient 字段不持久化,跳过
|
|
510
545
|
if _is_transient_field(cls, attr_name):
|
|
511
546
|
continue
|
|
547
|
+
# 私有字段(以 _ 开头)不持久化,跳过
|
|
548
|
+
if attr_name.startswith('_'):
|
|
549
|
+
continue
|
|
512
550
|
py_type = init_hints.get(attr_name) or cls_annotations.get(attr_name)
|
|
513
551
|
# 解包 Optional[X]:Python 3.10 的 get_type_hints 会把带 None 默认值的
|
|
514
552
|
# 参数注解自动包装为 Optional[X],3.11+ 不再包装。此处统一解包为承载类型,
|
|
@@ -1046,43 +1084,146 @@ class DdlAutoManager:
|
|
|
1046
1084
|
|
|
1047
1085
|
# ==================== 装饰器API(便捷使用) ====================
|
|
1048
1086
|
|
|
1049
|
-
def
|
|
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`` 标记字段 → 跳过
|
|
1050
1101
|
"""
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
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
|
+
|
|
1143
|
+
def _auto_generate_init(cls):
|
|
1144
|
+
"""为描述符风格实体类自动生成 ``__init__``(若类未显式声明)。
|
|
1145
|
+
|
|
1146
|
+
先调用 ``_auto_infer_columns`` 补全类型注解对应的 ``Column`` 描述符,
|
|
1147
|
+
再扫描 MRO 中所有 ``Column`` 实例属性,生成关键字构造器。
|
|
1148
|
+
若类已显式声明 ``__init__`` 则跳过,保持兼容。
|
|
1149
|
+
"""
|
|
1150
|
+
# 无论是否有自定义 __init__,都先补全 Column 描述符(DDL 解析依赖)
|
|
1151
|
+
_auto_infer_columns(cls)
|
|
1152
|
+
|
|
1153
|
+
if '__init__' in cls.__dict__:
|
|
1154
|
+
return
|
|
1155
|
+
fields = {}
|
|
1156
|
+
for cls_base in reversed(cls.__mro__):
|
|
1157
|
+
for name, value in cls_base.__dict__.items():
|
|
1158
|
+
if isinstance(value, Column):
|
|
1159
|
+
fields[name] = value
|
|
1160
|
+
|
|
1161
|
+
def __init__(self, **values):
|
|
1162
|
+
unknown = set(values) - set(fields)
|
|
1163
|
+
if unknown:
|
|
1164
|
+
names = ', '.join(sorted(unknown))
|
|
1165
|
+
raise TypeError(f"Unexpected entity field(s): {names}")
|
|
1166
|
+
for name, column in fields.items():
|
|
1167
|
+
setattr(self, name, values.get(name, column.default))
|
|
1168
|
+
|
|
1169
|
+
cls.__init__ = __init__
|
|
1170
|
+
|
|
1171
|
+
|
|
1172
|
+
def Entity(table_name: str = "", indexes: List[Index] = None, comment: str = ""):
|
|
1173
|
+
"""``@Entity`` 装饰器,标注一个类为 JPA 风格的实体类。
|
|
1174
|
+
|
|
1175
|
+
三种用法(均向后兼容):
|
|
1176
|
+
|
|
1177
|
+
1. **Java JPA 风格**(``@Entity`` + ``@Table`` 分离,推荐)::
|
|
1178
|
+
|
|
1179
|
+
@Entity
|
|
1180
|
+
@Table(name="sys_user", indexes=[Index("idx_name", ["name"])], comment="用户表")
|
|
1055
1181
|
class User:
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1182
|
+
id: int = Id()
|
|
1183
|
+
name: str = Column(length=50)
|
|
1184
|
+
|
|
1185
|
+
2. **简化风格**(仅 ``@Entity``,表名自动推导为类名 snake_case)::
|
|
1186
|
+
|
|
1187
|
+
@Entity
|
|
1188
|
+
class User:
|
|
1189
|
+
id: int = Id()
|
|
1190
|
+
name: str = Column(length=50)
|
|
1191
|
+
# 表名自动推导为 "user"
|
|
1192
|
+
|
|
1193
|
+
3. **一体化风格**(当前写法,完全兼容)::
|
|
1194
|
+
|
|
1195
|
+
@Entity("sys_user", indexes=[...], comment="用户表")
|
|
1196
|
+
class User:
|
|
1197
|
+
id: int = Id()
|
|
1198
|
+
name: str = Column(length=50)
|
|
1060
1199
|
"""
|
|
1061
|
-
|
|
1062
|
-
|
|
1200
|
+
# 支持 @Entity 无括号形式:直接接收类
|
|
1201
|
+
if inspect.isclass(table_name):
|
|
1202
|
+
cls = table_name
|
|
1063
1203
|
setattr(cls, '__entity__', True)
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1204
|
+
# 未显式指定表信息时,不覆盖已有 @Table 设置的 __table__
|
|
1205
|
+
existing = getattr(cls, '__table__', None)
|
|
1206
|
+
if not isinstance(existing, Table):
|
|
1207
|
+
setattr(cls, '__table__', Table(name=_camel_to_snake(cls.__name__)))
|
|
1208
|
+
_auto_generate_init(cls)
|
|
1209
|
+
return cls
|
|
1067
1210
|
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
cls.__init__ = __init__
|
|
1211
|
+
# @Entity("table_name", ...) 或 @Entity() 形式
|
|
1212
|
+
has_explicit_meta = bool(table_name or indexes or comment)
|
|
1213
|
+
t = Table(name=table_name, indexes=indexes, comment=comment) if has_explicit_meta else None
|
|
1214
|
+
|
|
1215
|
+
def decorator(cls):
|
|
1216
|
+
setattr(cls, '__entity__', True)
|
|
1217
|
+
if t is not None:
|
|
1218
|
+
if not t.name:
|
|
1219
|
+
t.name = _camel_to_snake(cls.__name__)
|
|
1220
|
+
setattr(cls, '__table__', t)
|
|
1221
|
+
else:
|
|
1222
|
+
# 无显式表信息:不覆盖已有 @Table 设置
|
|
1223
|
+
existing = getattr(cls, '__table__', None)
|
|
1224
|
+
if not isinstance(existing, Table):
|
|
1225
|
+
setattr(cls, '__table__', Table(name=_camel_to_snake(cls.__name__)))
|
|
1226
|
+
_auto_generate_init(cls)
|
|
1086
1227
|
return cls
|
|
1087
1228
|
return decorator
|
|
1088
1229
|
|
|
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
|