springbootAI 1.8.0__tar.gz → 1.8.1__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-1.8.0/springbootAI.egg-info → springbootai-1.8.1}/PKG-INFO +2 -2
- {springbootai-1.8.0 → springbootai-1.8.1}/README.md +1 -1
- {springbootai-1.8.0 → springbootai-1.8.1}/pyproject.toml +1 -1
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/__init__.py +1 -1
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/logging/loguru_logger.py +42 -37
- {springbootai-1.8.0 → springbootai-1.8.1/springbootAI.egg-info}/PKG-INFO +2 -2
- {springbootai-1.8.0 → springbootai-1.8.1}/LICENSE +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/MANIFEST.in +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/requirements.txt +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/setup.cfg +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/setup.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/ai/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/ai/advisors.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/ai/annotations.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/ai/autoconfig.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/ai/core.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/ai/etl.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/ai/memory.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/ai/observability.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/ai/providers.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/ai/resilience.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/ai/tools.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/ai/vectorstore.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/annotations/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/annotations/cache.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/annotations/cloud.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/annotations/conditional.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/annotations/core.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/annotations/messaging.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/aop/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/aop/cloud_aop.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/aop/comprehensive_aop.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/aop/method_interceptor.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/aop/proxy_factory.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/cloud/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/cloud/discovery.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/cloud/feign.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/cloud/gateway.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/cloud/load_balancer.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/cloud/seata.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/cloud/sentinel.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/cloud/tracer.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/config/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/config/binding.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/config/config_loader.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/context/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/context/application_context.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/context/bean_definition.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/context/bean_factory.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/context/registry.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/context/scanner.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/core/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/core/graceful_shutdown.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/core/typing_utils.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/csv/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/csv/annotations.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/csv/converters.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/csv/easy_csv.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/csv/exceptions.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/csv/reader.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/csv/writer.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/data/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/data/page.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/data/repository.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/data/specification.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/datasource/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/datasource/annotations.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/datasource/context.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/datasource/dynamic.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/event/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/event/publisher.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/excel/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/excel/annotations.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/excel/converters.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/excel/easy_excel.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/excel/exceptions.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/excel/reader.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/excel/style.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/excel/writer.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/i18n/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/i18n/accessor.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/i18n/auto_config.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/i18n/holder.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/i18n/locale.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/i18n/locale_resolver.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/i18n/message_source.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/i18n/middleware.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/i18n/properties.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/i18n/sources.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/logging/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/main.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/messaging/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/messaging/rabbitmq.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/monitoring/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/monitoring/prometheus.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/database.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/ddl_auto.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/migration.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/mybatis_integration.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/annotations/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/annotations/annotations.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/cache/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/cache/cache.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/cache/redis_cache.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/circuit_breaker/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/circuit_breaker/circuit_breaker.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/configuration.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/core/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/core/sql_session.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/core/sql_session_factory.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/dialect/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/dialect/dialect.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/dynamic_sql/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/dynamic_sql/dynamic_sql.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/interceptor/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/interceptor/interceptor.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/mapper/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/mapper/mapper.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/metrics/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/metrics/metrics.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/pool/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/pool/connection_pool.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/security/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/security/access_control.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/security/password_encoder.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/security/sensitive_data_masker.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/security/sql_injection_detector.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/transaction/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/transaction/transaction.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/type_handler/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/type_handler/type_handler.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/version.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/xml_parser/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/xml_parser/xml_parser.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/retry/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/retry/retry_annotations.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/retry/retry_decorator.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/scheduling/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/scheduling/scheduler.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/security/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/security/jwt_utils.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/security/replay_protection.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/security/secret_manager.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/security/security_aop.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/security/security_context.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/test/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/test/slicing.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/tracing/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/tracing/skywalking.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/tx/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/tx/events.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/tx/synchronization.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/utils/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/utils/banner.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/utils/logger.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/utils/redis_client.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/validation/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/validation/aop.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/validation/constraints.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/validation/exceptions.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/validation/validator.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/web/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/web/actuator.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/web/exception_handler.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/web/health.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/web/interceptor.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/web/result.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/web/swagger.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/web/web_context.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/websocket/__init__.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/websocket/annotations.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/websocket/broker.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/websocket/exceptions.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/websocket/handler.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/websocket/router.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/spring/websocket/session.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/springbootAI.egg-info/SOURCES.txt +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/springbootAI.egg-info/dependency_links.txt +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/springbootAI.egg-info/entry_points.txt +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/springbootAI.egg-info/requires.txt +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/springbootAI.egg-info/top_level.txt +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/sql/seata_undo_log.sql +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_actuator.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_ai_module.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_annotation_combinations.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_annotations_contract.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_aop_annotations_full.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_cache_annotations.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_cloud_embedded_full.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_conditional_annotations.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_config_binding.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_connection_resilience.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_core_annotations_full.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_csv_module.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_data_repository.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_datasource_routing.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_ddl_auto.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_di_config_event_full.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_excel_module.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_i18n_module.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_jpa_version_transient.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_new_features.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_orm_pymybatis_full.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_production_readiness.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_pymybatis_contract.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_security.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_security_full.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_swagger_module.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_test_slicing.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_transactional_events.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_validation_module.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_web_annotations_full.py +0 -0
- {springbootai-1.8.0 → springbootai-1.8.1}/tests/test_websocket_module.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: springbootAI
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.1
|
|
4
4
|
Summary: Python版Spring Boot框架,集成PyMyBatis ORM
|
|
5
5
|
Author-email: YuConggen <1516933915@qq.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -86,7 +86,7 @@ Dynamic: license-file
|
|
|
86
86
|
|
|
87
87
|
SpringBootAI 是一个借鉴 Spring Boot 编程模型的 Python Web 框架,提供装饰器式组件扫描、依赖注入、FastAPI 路由、配置加载、安全能力、内嵌的 PyMyBatis ORM,以及企业级 AI 模块(对齐 Spring AI 2.0:ChatClient/Advisor/Tools/RAG/Function Calling)。本指南为框架核心综合使用文档;**AI / ORM / Cloud / Excel 等模块的完整注解与功能说明已分离为独立文档**(见下方“模块文档”),本指南相应章节保留概览与跳转链接。
|
|
88
88
|
|
|
89
|
-
- SpringBootAI 版本:`1.8.
|
|
89
|
+
- SpringBootAI 版本:`1.8.1`
|
|
90
90
|
- 内嵌 PyMyBatis 版本:`1.4.0`
|
|
91
91
|
- Python:3.10+
|
|
92
92
|
- 状态:Beta(企业试点)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
SpringBootAI 是一个借鉴 Spring Boot 编程模型的 Python Web 框架,提供装饰器式组件扫描、依赖注入、FastAPI 路由、配置加载、安全能力、内嵌的 PyMyBatis ORM,以及企业级 AI 模块(对齐 Spring AI 2.0:ChatClient/Advisor/Tools/RAG/Function Calling)。本指南为框架核心综合使用文档;**AI / ORM / Cloud / Excel 等模块的完整注解与功能说明已分离为独立文档**(见下方“模块文档”),本指南相应章节保留概览与跳转链接。
|
|
4
4
|
|
|
5
|
-
- SpringBootAI 版本:`1.8.
|
|
5
|
+
- SpringBootAI 版本:`1.8.1`
|
|
6
6
|
- 内嵌 PyMyBatis 版本:`1.4.0`
|
|
7
7
|
- Python:3.10+
|
|
8
8
|
- 状态:Beta(企业试点)
|
|
@@ -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 = "1.8.
|
|
15
|
+
version = "1.8.1"
|
|
16
16
|
description = "Python版Spring Boot框架,集成PyMyBatis ORM"
|
|
17
17
|
readme = "README.md"
|
|
18
18
|
license = "MIT"
|
|
@@ -73,53 +73,58 @@ class SpringLogger:
|
|
|
73
73
|
colorize=True,
|
|
74
74
|
)
|
|
75
75
|
|
|
76
|
-
# 创建日志目录
|
|
77
|
-
if not os.path.exists(self.log_dir):
|
|
78
|
-
os.makedirs(self.log_dir)
|
|
79
|
-
|
|
80
76
|
# 添加文件输出(按日期轮转)
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
77
|
+
# 创建日志目录,失败则优雅降级(仅控制台日志),保证 import 永不因权限问题崩溃
|
|
78
|
+
try:
|
|
79
|
+
os.makedirs(self.log_dir, exist_ok=True)
|
|
80
|
+
loguru_logger.add(
|
|
81
|
+
os.path.join(self.log_dir, "application_{time:YYYY-MM-DD}.log"),
|
|
82
|
+
format=self.log_format,
|
|
83
|
+
level=self.level,
|
|
84
|
+
rotation=self.rotation,
|
|
85
|
+
retention=self.retention,
|
|
86
|
+
compression="zip",
|
|
87
|
+
encoding="utf-8",
|
|
88
|
+
)
|
|
89
|
+
# 添加错误日志单独输出
|
|
90
|
+
loguru_logger.add(
|
|
91
|
+
os.path.join(self.log_dir, "error_{time:YYYY-MM-DD}.log"),
|
|
92
|
+
format=self.log_format,
|
|
93
|
+
level="ERROR",
|
|
94
|
+
rotation=self.rotation,
|
|
95
|
+
retention=self.retention,
|
|
96
|
+
compression="zip",
|
|
97
|
+
encoding="utf-8",
|
|
98
|
+
)
|
|
99
|
+
except (PermissionError, OSError) as exc:
|
|
100
|
+
# 当前工作目录无写权限(如系统目录/只读位置),降级为仅控制台日志
|
|
101
|
+
loguru_logger.warning(
|
|
102
|
+
f"无法创建日志目录 {self.log_dir!r},文件日志已禁用,仅使用控制台日志: {exc}"
|
|
103
|
+
)
|
|
101
104
|
|
|
102
105
|
def _setup_std_logging(self):
|
|
103
106
|
"""配置标准logging(fallback)"""
|
|
104
107
|
self._logger = logging.getLogger("Spring")
|
|
105
108
|
self._logger.setLevel(getattr(logging, self.level))
|
|
106
109
|
|
|
107
|
-
#
|
|
108
|
-
if not os.path.exists(self.log_dir):
|
|
109
|
-
os.makedirs(self.log_dir)
|
|
110
|
-
|
|
111
|
-
# 添加控制台输出
|
|
110
|
+
# 添加控制台输出(始终启用)
|
|
112
111
|
console_handler = logging.StreamHandler(sys.stdout)
|
|
113
112
|
console_handler.setFormatter(logging.Formatter(self.log_format))
|
|
114
113
|
self._logger.addHandler(console_handler)
|
|
115
|
-
|
|
116
|
-
#
|
|
117
|
-
|
|
118
|
-
os.
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
114
|
+
|
|
115
|
+
# 添加文件输出:目录创建失败则优雅降级,保证 import 永不崩溃
|
|
116
|
+
try:
|
|
117
|
+
os.makedirs(self.log_dir, exist_ok=True)
|
|
118
|
+
file_handler = logging.FileHandler(
|
|
119
|
+
os.path.join(self.log_dir, "application.log"),
|
|
120
|
+
encoding="utf-8"
|
|
121
|
+
)
|
|
122
|
+
file_handler.setFormatter(logging.Formatter(self.log_format))
|
|
123
|
+
self._logger.addHandler(file_handler)
|
|
124
|
+
except (PermissionError, OSError) as exc:
|
|
125
|
+
self._logger.warning(
|
|
126
|
+
f"无法创建日志目录 {self.log_dir!r},文件日志已禁用,仅使用控制台日志: {exc}"
|
|
127
|
+
)
|
|
123
128
|
|
|
124
129
|
def get_logger(self):
|
|
125
130
|
"""获取日志实例"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: springbootAI
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.1
|
|
4
4
|
Summary: Python版Spring Boot框架,集成PyMyBatis ORM
|
|
5
5
|
Author-email: YuConggen <1516933915@qq.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -86,7 +86,7 @@ Dynamic: license-file
|
|
|
86
86
|
|
|
87
87
|
SpringBootAI 是一个借鉴 Spring Boot 编程模型的 Python Web 框架,提供装饰器式组件扫描、依赖注入、FastAPI 路由、配置加载、安全能力、内嵌的 PyMyBatis ORM,以及企业级 AI 模块(对齐 Spring AI 2.0:ChatClient/Advisor/Tools/RAG/Function Calling)。本指南为框架核心综合使用文档;**AI / ORM / Cloud / Excel 等模块的完整注解与功能说明已分离为独立文档**(见下方“模块文档”),本指南相应章节保留概览与跳转链接。
|
|
88
88
|
|
|
89
|
-
- SpringBootAI 版本:`1.8.
|
|
89
|
+
- SpringBootAI 版本:`1.8.1`
|
|
90
90
|
- 内嵌 PyMyBatis 版本:`1.4.0`
|
|
91
91
|
- Python:3.10+
|
|
92
92
|
- 状态:Beta(企业试点)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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-1.8.0 → springbootai-1.8.1}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/security/sensitive_data_masker.py
RENAMED
|
File without changes
|
{springbootai-1.8.0 → springbootai-1.8.1}/spring/orm/pymybatis/security/sql_injection_detector.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|