df-test-framework 4.4.2__tar.gz → 4.4.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.
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/CHANGELOG.md +9 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/PKG-INFO +1 -1
- df_test_framework-4.4.3/docs/guides/sanitize_guide.md +176 -0
- df_test_framework-4.4.3/docs/releases/v4.4.3.md +100 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/pyproject.toml +1 -1
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/__init__.py +1 -1
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/middleware/event_publisher.py +14 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/middleware/event_publisher.py +9 -1
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/event_publisher.py +28 -3
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/env_files.py +2 -3
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/readme.py +2 -4
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/config/schema.py +3 -13
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/logging/config.py +3 -3
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/logging/observability.py +5 -12
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/sanitize/service.py +4 -39
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/interceptors/grpc.py +3 -19
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/interceptors/http.py +3 -20
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/debugging/console.py +2 -21
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/http_recorder.py +5 -18
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/reporting/allure/observer.py +13 -69
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/sanitize/test_service.py +12 -66
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/tracing/test_integrations.py +0 -2
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/tracing/test_interceptors.py +11 -30
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/debugging/test_console_debug_observer.py +22 -62
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/uv.lock +129 -128
- df_test_framework-4.4.2/docs/guides/sanitize_guide.md +0 -186
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/.editorconfig +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/.env.example +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/.gitattributes +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/.github/workflows/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/.github/workflows/lint.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/.github/workflows/release.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/.github/workflows/scheduled.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/.github/workflows/security.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/.github/workflows/test.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/.gitignore +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/.gitleaks.toml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/.gitleaksignore +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/.pre-commit-config.yaml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/.python-version +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/AGENTS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/CLAUDE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/CONTRIBUTING.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/README_PYPI.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/CONTRIBUTOR_GUIDE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/DOC_REORGANIZATION_PLAN_v4.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/ESSENTIAL_DOCS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/FAQ.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/LEARNING_PATH.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/clients.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/core/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/core/context.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/core/events.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/core/exceptions.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/core/middleware.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/core/protocols.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/core/types.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/core.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/databases.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/drivers.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/extensions.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/infrastructure.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/patterns.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/api-reference/testing.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/ARCHITECTURE_V4.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/CODE_STRUCTURE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/PLUGIN_SYSTEM_V3.37.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/TEST_EXECUTION_LIFECYCLE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/REFACTORING_PLAN_V3.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/REFACTORING_PLAN_V3_REVISED.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/DI_STRATEGY.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/PREPARE_DATA_DESIGN.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/TESTING_MODULE_OPTIMIZATION.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/UOW_CLEANUP_ARCHITECTURE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/UOW_REFACTORING_PROPOSAL.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/allure_integration_modes.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/capability_plan_vs_current.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/config-driven-design.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/config-management-analysis.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/eventbus-integration-analysis.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/failure-diagnosis-v2-design.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/future_allure_plugin_plans.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/http-vs-web-comparison.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/observability-debugging-unification.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/provider-pattern-deep-dive.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/tech-debt-cleanup-plan.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/ui-failure-diagnosis-implementation-v3.46.3.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/design/ui-observability-design.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/discussion_1_initial_issues.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/v3_complete_draft.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/v3_final_draft.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/versions/FRAMEWORK_ARCHITECTURE_v3.6.2.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/versions/OVERVIEW_V3.17.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/versions/V3.14_ENTERPRISE_PLATFORM_DESIGN.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/versions/V3.16_LAYER4_BOOTSTRAP_ARCHITECTURE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/versions/V3.17_EVENT_SYSTEM_REDESIGN.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/versions/V3_ARCHITECTURE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/versions/V3_IMPLEMENTATION.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/versions/overview.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/archive/versions/v2-architecture.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/extension-points.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/failure-diagnosis-hook-example.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/multi-project-reuse.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/observability-architecture.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture/test-type-support.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/architecture//344/272/224/345/261/202/346/236/266/346/236/204/350/257/246/350/247/243.md" +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis/ACTION_PLAN_v2.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis/AUDIT_VERIFICATION_REPORT.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis/AUTH_PLACEMENT_ANALYSIS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis/CODE_REVIEW_f95e08cd.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis/COMPREHENSIVE_FEATURE_AUDIT.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis/FRAMEWORK_OPTIMIZATION_ANALYSIS_2025.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis/PHASE2_COMPARISON_ANALYSIS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis/PHASE2_COMPLETION_REPORT.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis/PHASE2_SUMMARY.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis/V3_REFACTORING_COMPLETE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis_2025/ALLURE_HTTP_LOGGING_ISSUE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis_2025/ALLURE_INTEGRATION_CHECK_REPORT.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis_2025/ALLURE_INTEGRATION_DESIGN.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis_2025/ALLURE_INTEGRATION_SUMMARY.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis_2025/ALLURE_ROOT_CAUSE_ANALYSIS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis_2025/CODE_ANALYSIS_AND_PROGRESS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis_2025/COMPREHENSIVE_FRAMEWORK_EVALUATION.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/analysis_2025/CONFIG_MODERNIZATION_ANALYSIS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/design/ARCHITECTURE_AUDIT.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/design/FUTURE_ENHANCEMENTS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/design/IMPLEMENTATION_SUMMARY.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/design/MIDDLEWARE_V3.14_DESIGN.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/design/ROADMAP_V3.29_ENHANCEMENTS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/design/SIGNATURE_FRAMEWORK_CAPABILITIES.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/design/TEMPLATE_DEBUG_FIXTURES_ISSUE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/design/observability-config-design.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/design/ui-best-practices-2026.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/design/web-architecture-consistency-design.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/design/web-event-driven-comparison.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/evaluations_2025/DUAL_AI_ANALYSIS_COMPARISON.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/evaluations_2025/FRAMEWORK_ASSESSMENT.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/evaluations_2025/FRAMEWORK_BEST_PRACTICES_UPDATE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/evaluations_2025/FRAMEWORK_CAPABILITIES.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/evaluations_2025/FRAMEWORK_IMPROVEMENT_PROPOSALS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/guides/async_database_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/guides/async_http_client.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/guides/httpx_advanced_usage.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/guides/logging_configuration.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/guides/logging_pytest_integration.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/guides/modern_logging_best_practices.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/guides/repository_uow_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/111.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/CONFIG_AND_INTERCEPTOR_INTEGRATION.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/DIRECTORY_STRUCTURE_REFACTORING.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE_VERIFICATION.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_CONFIG_BEST_PRACTICES.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_DESIGN.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_VS_ACTUAL.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_LOCATION_DECISION.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_NAMING_STANDARDS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/INTERCEPTOR_PERFORMANCE_ANALYSIS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/REFACTORING_IMPLEMENTATION_PLAN.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/interceptor_refactoring/REFACTORING_PROGRESS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/issues/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/issues/summary.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/issues/v1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/migration/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/migration/v3.15-to-v3.16.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/plans/CAPABILITY_LAYER_OPTIMIZATION.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/plans/REFACTORING_PLAN_v2.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/plans/REFACTORING_TASKS_v2.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/plans/RFC_MULTIPART_FORM_DATA_SUPPORT.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/plans/RFC_MULTIPART_IMPLEMENTATION_CODE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/plans/UV_SYNC_MIGRATION_SUMMARY.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/plans/UV_SYNC_QUICK_START.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/plans/v2-migration-plan-draft.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/CHANGELOG_AUDIT_REPORT.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/CODE_QUALITY_FIXES_2025-11-09.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/CORE_DOCS_UPDATE_PLAN.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/DOCUMENTATION_AUDIT_REPORT_2025-12-05.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/DOCUMENTATION_CLEANUP_SUMMARY.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/DOCUMENTATION_INDEX.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/DOCUMENTATION_MAINTENANCE_COMPLETE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/DOCUMENTATION_UPDATE_CHECKLIST.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/DOC_UPDATE_SUMMARY.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/IMPROVEMENTS_2025-01-09.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/PHASE3_COMPLETION_REPORT.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/PYTHON_VERSION_UNIFICATION.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/REFACTORING_COMPLETION_CHECK.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/TEST_CODE_GENERATION_ANALYSIS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.3.0_DOCUMENTATION_UPDATE_SUMMARY.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.3.0_MIGRATION_CHECKLIST.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.5_ALLURE_INTEGRATION_PLAN.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.5_DOCUMENTATION_COMPLETE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.5_OBSERVABILITY_FINAL_STATUS.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.5_PHASE2_ACCEPTANCE_REPORT.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN_REVISED.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/VERIFIED_BEST_PRACTICES_INTEGRATION_COMPLETE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/reports_2025/async_http_client_design.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/user-guide/PHASE3_FEATURES.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/user-guide/extensions.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/user-guide/ui-testing.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/v1/BaseAPI/346/234/200/344/275/263/345/256/236/350/267/265/346/214/207/345/215/227.md" +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/v1/FRAMEWORK_DESIGN_PRINCIPLES.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/v1/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/v1/UPGRADE_SUMMARY_v1.3.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/v1/architecture.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/v1/best-practices.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/v1/config-integration-guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/v1/optimization-report.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/v1/publishing.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/v1//344/270/272/344/273/200/344/271/210/351/200/211/346/213/251/346/265/213/350/257/225/346/241/206/346/236/266.md" +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/versions/QUICK_START_V3.14.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/archive/versions/QUICK_START_V3.5.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/ci-templates/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/ci-templates/github-actions.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/ci-templates/gitlab-ci.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/development/DOCUMENTATION_MAINTENANCE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/development/FRAMEWORK_DEPENDENCY_MANAGEMENT.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/development/RELEASE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/development/VERSION_CONTROL_RULES.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/development/local-development.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/DECIMAL_GUIDE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/allure_plugin.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/assertions_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/async_api_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/auth_session_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/bootstrap_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/config_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/database_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/decorators_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/distributed_tracing.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/event_bus_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/extensions.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/factory_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/fixture_chain_pattern.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/fixtures_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/graphql_client.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/grpc_client.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/helpers_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/http_client_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/integration-guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/local_debug_quickstart.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/logging_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/message_queue.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/middleware_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/mocking.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/monitoring_plugin.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/openapi_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/plugins_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/prometheus_metrics.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/redis_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/resilience_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/scaffold_cli_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/service_client_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/storage.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/telemetry_guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/test_data.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/test_data_cleanup.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/testing-development.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/guides/web-ui-testing.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/migration/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/migration/v3-to-v4.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.0.0-alpha.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.1.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.10.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.11.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.11.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.12.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.12.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.13.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.14.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.14.0_completion_report.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.14.0_implementation_complete.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.16.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.17.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.17.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.17.2.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.18.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.18.1-bugfix.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.18.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.19.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.2.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.20.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.21.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.22.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.22.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.23.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.24.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.25.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.26.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.27.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.28.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.28.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.29.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.3.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.30.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.31.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.32.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.33.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.34.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.34.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.35.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.35.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.35.2.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.35.3.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.35.4.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.35.5.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.35.6.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.35.7.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.36.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.36.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.37.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.38.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.38.10.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.38.2.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.38.4.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.38.5.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.38.7.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.38.8.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.38.9.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.39.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.39.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.4.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.40.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.41.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.41.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.42.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.43.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.44.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.45.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.46.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.46.2.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.46.3.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.5.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.6.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.6.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.6.2.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.7.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.8.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v3.9.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.0.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.0.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.0.2.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.0.3.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.0.4.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.1.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.1.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.1.2.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.2.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.2.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.2.2.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.3.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.3.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.4.0.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.4.1.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/releases/v4.4.2.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/skills/write-code.zip +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/skills/write-test.zip +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/troubleshooting/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/troubleshooting/common-errors.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/troubleshooting/debugging-guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/BEST_PRACTICES.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/QUICK_REFERENCE.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/QUICK_START.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/USER_MANUAL.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/VERIFIED_BEST_PRACTICES.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/ci-cd.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/code-generation.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/configuration.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/cross-project-sharing.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/debugging.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/examples.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/multi-repo.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/nested-settings-guide.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/docs/user-guide/security-best-practices.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/01-basic/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/01-basic/database_operations.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/01-basic/http_client_usage.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/01-basic/redis_cache.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/01-basic/storage_usage.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/02-bootstrap/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/02-bootstrap/custom_providers.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/02-bootstrap/custom_settings.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/02-bootstrap/minimal_bootstrap.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/02-bootstrap/with_extensions.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/03-testing/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/03-testing/conftest.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/03-testing/test_api.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/03-testing/test_database.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/03-testing/test_with_fixtures.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/04-patterns/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/04-patterns/builder_pattern.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/04-patterns/combined_patterns.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/04-patterns/repository_pattern.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/05-extensions/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/05-extensions/allure_enhancement_extension.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/05-extensions/custom_extension.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/05-extensions/data_factory_extension.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/05-extensions/environment_validator_extension.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/05-extensions/monitoring_extension.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/05-extensions/mq_monitor_extension.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/05-extensions/notification_extension.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/06-ui-testing/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/06-ui-testing/basic_ui_test.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/06-ui-testing/conftest.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/06-ui-testing/page_object_example.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-message-queue/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-message-queue/docker-compose-kafka.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-message-queue/docker-compose-rabbitmq.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-message-queue/docker-compose-rocketmq.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-message-queue/kafka_basic.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-message-queue/kafka_ssl.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-message-queue/rabbitmq_basic.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-message-queue/rabbitmq_topic.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-message-queue/rocketmq-broker.conf +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-message-queue/rocketmq_basic.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-v35-features/01_configurable_interceptors.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-v35-features/02_profile_configuration.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-v35-features/03_runtime_overrides.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-v35-features/04_observability.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/07-v35-features/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/08-v37-features/01_unit_of_work_basics.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/08-v37-features/02_repository_v37.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/08-v37-features/03_auto_rollback_testing.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/08-v37-features/04_multi_repository_transactions.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/08-v37-features/05_project_uow.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/08-v37-features/06_exception_handling_with_uow.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/08-v37-features/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/examples/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/scripts/fetch_swagger.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/scripts/security-scan.bat +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/scripts/security-scan.sh +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/bootstrap/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/bootstrap/bootstrap.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/bootstrap/providers.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/bootstrap/runtime.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/middleware/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/middleware/base.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/middleware/logging.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/middleware/retry.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/models.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/graphql/query_builder.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/middleware/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/middleware/base.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/middleware/logging.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/middleware/metadata.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/middleware/retry.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/middleware/timing.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/grpc/models.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/core/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/core/request.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/core/response.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/auth.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/factory.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/logging.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/retry.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/signature.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/middleware/telemetry.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/factory.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/httpx/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_base_api.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/httpx/base_api.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/httpx/client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/clients/http/rest/protocols.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/async_database.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/database.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/factory.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/query_builder.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/redis/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/redis/async_redis.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/redis/redis_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/repositories/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/repositories/base.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/repositories/query_spec.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/databases/uow.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/app_actions.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/async_app_actions.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/factory.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser_pool.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/async_page.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/browser.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/component.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/locator.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/playwright/page.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/drivers/web/protocols.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/engines/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/engines/batch/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/engines/batch/spark/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/engines/olap/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/engines/stream/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/engines/stream/flink/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/pubsub/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/kafka/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/kafka/client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/kafka/config.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/config.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/rocketmq/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/rocketmq/client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/messengers/queue/rocketmq/config.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/blob/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/file/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/file/local/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/file/local/client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/file/local/config.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/object/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/object/oss/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/object/oss/client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/object/oss/config.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/object/s3/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/object/s3/client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/capabilities/storages/object/s3/config.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/__main__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/commands/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/commands/cicd.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/commands/env.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/commands/generate_cmd.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/commands/init_cmd.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/commands/interactive.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/generators/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/generators/json_to_model.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/generators/openapi_generator.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/generators/openapi_parser.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/main.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/.github/workflows/release.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/.github/workflows/scheduled.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/.github/workflows/test-full.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/.github/workflows/test.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/.gitlab-ci.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/Jenkinsfile +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/docker/.dockerignore +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/docker/Dockerfile +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/cicd/docker/docker-compose.yml +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/actions.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/api_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/builder.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/graphql_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/redis_example.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/repository.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/settings_enhanced.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/test.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/test_complete.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/generators/test_graphql.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/async_example_api.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/async_ui_app_actions.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/base_api.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/conftest.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/constants.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/data_cleaners.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/docs_api.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/editorconfig.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/enhanced_gitignore.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/env.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/fixture_chain_example.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/fixtures_init.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/full_conftest.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/full_settings.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/gitattributes.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/gitignore.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/models_requests_example.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/models_responses_example.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/pyproject_toml.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/script_fetch_swagger.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/script_run_tests.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/settings.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/test_async_example.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/test_example.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/ui_app_actions.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/ui_conftest.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/ui_fixtures_init.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/ui_page_object.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/ui_settings.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/ui_test_example.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/uow.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/user_api_example.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/utils_converters.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/utils_validators.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/templates/project/vscode_settings.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/cli/utils.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/context/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/context/execution.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/context/propagation.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/decorators.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/events/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/events/types.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/exceptions.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/middleware/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/middleware/base.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/middleware/chain.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/middleware/decorator.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/middleware/protocol.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/models/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/models/base.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/protocols/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/protocols/client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/protocols/event.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/protocols/plugin.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/protocols/repository.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/protocols/telemetry.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/core/types.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/config/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/config/loader.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/config/middleware_schema.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/config/pipeline.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/config/settings.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/config/sources.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/context/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/context/carriers/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/context/carriers/grpc.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/context/carriers/http.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/context/carriers/mq.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/events/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/events/bus.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/events/handlers/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/helpers/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/helpers/crypto.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/helpers/hash.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/helpers/network.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/helpers/signature.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/logging/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/logging/interface.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/logging/logger.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/metrics/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/metrics/decorators.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/metrics/manager.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/metrics/observer.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/metrics/performance.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/metrics/registry.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/metrics/types.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/plugins/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/plugins/hooks.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/plugins/manager.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/resilience/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/resilience/circuit_breaker.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/sanitize/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/telemetry/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/telemetry/exporters/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/telemetry/facade.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/telemetry/noop.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/context.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/decorators.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/exporters.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/integrations/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/integrations/database.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/integrations/sqlalchemy_instrumentation.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/interceptors/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/infrastructure/tracing/manager.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/plugins/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/plugins/builtin/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/plugins/builtin/monitoring/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/plugins/builtin/monitoring/plugin.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/plugins/builtin/reporting/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/plugins/builtin/reporting/allure_plugin.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/plugins/builtin/reporting/oms_reporter_plugin.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/assertions/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/assertions/helper.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/assertions/json_schema.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/assertions/matchers.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/assertions/response.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/builders/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/builders/base.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/factories/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/factories/base.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/factories/examples.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/generators/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/generators/data_generator.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/loaders/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/loaders/base.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/loaders/csv_loader.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/loaders/json_loader.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/data/loaders/yaml_loader.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/debugging/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/decorators/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/decorators/actions_class.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/decorators/api_class.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/decorators/service_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/allure.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/auth.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/cleanup.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/core.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/debugging.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/message_queue.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/metrics.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/monitoring.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/fixtures/ui.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/mocking/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/mocking/database_mock.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/mocking/http_mock.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/mocking/redis_mock.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/mocking/time_mock.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/plugins/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/plugins/api_autodiscovery.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/plugins/debug.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/plugins/env_plugin.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/plugins/logging_plugin.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/plugins/markers.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/reporting/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/reporting/allure/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/src/df_test_framework/testing/reporting/allure/helper.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/README.md +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/bootstrap/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/bootstrap/test_bootstrap.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/bootstrap/test_providers.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/bootstrap/test_runtime.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/graphql/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/graphql/test_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/graphql/test_middleware.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/graphql/test_models.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/graphql/test_query_builder.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/grpc/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/grpc/test_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/grpc/test_middleware.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/grpc/test_models.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/http/auth/signature/test_strategies.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/http/core/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/http/core/test_multipart.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/http/core/test_request.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/http/core/test_response.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/http/middleware/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/http/middleware/test_factory.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/http/middleware/test_logging.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/http/rest/test_async_base_api.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/http/rest/test_async_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/http/rest/test_auth_control.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/http/rest/test_base_api.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/http/rest/test_factory.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/clients/http/rest/test_http_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/databases/redis/test_async_redis.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/databases/redis/test_redis_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/databases/test_async_database.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/databases/test_database.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/databases/test_database_factory.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/databases/test_query_builder.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/databases/test_repositories.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/databases/test_uow.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/drivers/web/playwright/test_async_browser_pool.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/drivers/web/test_async_ui.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/drivers/web/test_modern_ui.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/messengers/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/messengers/test_kafka_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/messengers/test_rabbitmq_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/messengers/test_rocketmq_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/storages/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/storages/test_local_file.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/storages/test_oss.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/capabilities/storages/test_s3.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/cli/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/cli/test_env_cmd.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/cli/test_generate_cmd.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/cli/test_init_cmd.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/cli/test_interactive_cmd.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/cli/test_main.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/cli/test_utils.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/conftest.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/core/protocols/test_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/core/protocols/test_event.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/core/protocols/test_plugin.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/core/protocols/test_repository.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/core/protocols/test_telemetry.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/core/test_context.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/core/test_decorators.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/core/test_event_types.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/core/test_events.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/core/test_middleware.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/core/test_types.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/config/test_loader.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/config/test_middleware_schema.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/context/test_carriers.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/events/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/events/test_bus.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/metrics/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/metrics/test_decorators.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/metrics/test_manager.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/metrics/test_observer.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/metrics/test_performance.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/metrics/test_registry.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/metrics/test_types.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/plugins/test_manager.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/resilience/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/resilience/test_circuit_breaker.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/sanitize/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/telemetry/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/telemetry/test_facade.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/telemetry/test_noop.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/test_bootstrap.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/test_helpers.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/test_logging.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/test_pipeline.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/test_runtime.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/test_settings.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/test_sources.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/tracing/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/tracing/test_context.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/tracing/test_decorators.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/tracing/test_exporters.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/infrastructure/tracing/test_manager.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/integration/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/integration/test_config_environment.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/integration/test_event_observability.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/integration/test_factory_assertions.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/integration/test_middleware_chain.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/migration/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/migration/test_v3_13_to_v3_14_examples.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/plugins/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/plugins/builtin/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/plugins/builtin/monitoring/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/plugins/builtin/monitoring/test_plugin.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/test_json_to_model_generator.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/assertions/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/assertions/test_json_schema.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/assertions/test_matchers.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/data/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/data/test_builders.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/data/test_data_generator.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/data/test_factories.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/debugging/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/decorators/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/decorators/test_actions_class.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/decorators/test_api_class.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/decorators/test_service_client.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/fixtures/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/fixtures/test_cleanup.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/fixtures/test_fixtures_core.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/fixtures/test_fixtures_debugging.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/fixtures/test_fixtures_message_queue.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/fixtures/test_fixtures_monitoring.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/fixtures/test_http_recorder.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/fixtures/test_monitoring_metrics.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/fixtures/test_ui_fixtures.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/mocking/__init__.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/mocking/test_database_mock.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/mocking/test_http_mock.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/mocking/test_redis_mock.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/mocking/test_time_mock.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/plugins/test_api_autodiscovery.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/plugins/test_debug_plugin.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/plugins/test_env_plugin.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/plugins/test_logging_plugin.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/plugins/test_markers.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/reporting/test_allure_observer.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/test_allure_helper.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/test_assertions.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/test_data_loaders.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/tests/testing/test_factories_presets.py +0 -0
- {df_test_framework-4.4.2 → df_test_framework-4.4.3}/verify_fixes.py +0 -0
|
@@ -5,6 +5,15 @@
|
|
|
5
5
|
格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
|
|
6
6
|
版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
|
|
7
7
|
|
|
8
|
+
## [4.4.3] - 2026-04-23
|
|
9
|
+
|
|
10
|
+
### ♻️ 重构
|
|
11
|
+
|
|
12
|
+
- **脱敏收归事件源(EventPublisher)**:HTTP/gRPC/GraphQL 三个 EventPublisher 中间件统一在发布事件前完成脱敏,事件总线成为"干净数据总线"。ConsoleDebugObserver、AllureObserver(事件路径)、HttpRequestRecorder header 展示均移除冗余脱敏逻辑,直接消费已脱敏的事件数据
|
|
13
|
+
- **消除独立脱敏硬编码**:TracingInterceptor(HTTP)、GrpcTracingMiddleware、ObservabilityLogger 三处自持的 sensitive_keys/sensitive_headers 配置参数废除,统一委托给 `SanitizeService`,与全局 `SanitizeConfig` 保持一致
|
|
14
|
+
- **简化 SanitizeService API**:`sanitize_data(data, context)` 和 `sanitize_text(text, context)` 的 `context` 参数移除(per-context 开关无意义,脱敏应在源头一次完成);`is_context_enabled()` 方法移除;`SanitizeConfig` 移除 `console`/`allure` 子配置,仅保留有独立意义的 `logging` 子配置
|
|
15
|
+
- **HttpRequestRecorder failure section 保留安全兜底**:`_format_body` 作为最终展示边界,保留对 body 的脱敏处理,防止非事件路径注入的原始数据泄露
|
|
16
|
+
|
|
8
17
|
## [4.4.2] - 2026-04-20
|
|
9
18
|
|
|
10
19
|
### 🐛 修复
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# 脱敏服务使用指南
|
|
2
|
+
|
|
3
|
+
> **最后更新**: 2026-04-23
|
|
4
|
+
> **适用版本**: v4.4.3+
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 为什么要脱敏
|
|
9
|
+
|
|
10
|
+
框架的测试输出会流向多个通道:pytest 终端、CI 日志、Allure 报告、调试控制台。
|
|
11
|
+
这些通道都容易被截图、归档、上传到测试平台,一旦裸打敏感数据就很难收回来。
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 架构:脱敏在事件源完成(v4.4.3)
|
|
16
|
+
|
|
17
|
+
v4.4.3 起,脱敏收归 **EventPublisher 层**:HTTP/gRPC/GraphQL 三个 EventPublisher 中间件在发布事件前统一脱敏,事件总线只承载干净数据。所有消费者(ConsoleDebugObserver、AllureObserver、追踪拦截器)直接消费已脱敏的事件,不再重复处理。
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
请求 → [中间件链] → EventPublisher(脱敏)→ EventBus → 各消费者
|
|
21
|
+
↑
|
|
22
|
+
唯一脱敏点
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**好处**:
|
|
26
|
+
- 脱敏规则只在 `SanitizeConfig` 定义一次,所有通道自动生效
|
|
27
|
+
- 业务项目补充字段后,终端、报告、日志、追踪全部同步覆盖
|
|
28
|
+
- 消费者逻辑简单,不需要了解"哪些字段是敏感的"
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 三条统一入口
|
|
33
|
+
|
|
34
|
+
### `sanitize_header(name, value)`
|
|
35
|
+
|
|
36
|
+
处理 HTTP/gRPC header 和 metadata 值。`PARTIAL` 策略下对 `Authorization: Bearer xxx` 这类带 scheme 前缀的值做特殊格式化,同时对超长非敏感值做截断。
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
service.sanitize_header("Authorization", "Bearer eyJhbGciOiJIUzI1NiJ9.payload.KS8yo")
|
|
40
|
+
# PARTIAL → 'Bearer eyJhbGci...KS8yo'
|
|
41
|
+
# FULL → '******'
|
|
42
|
+
# HASH → 'sha256:a1b2c3d4...'
|
|
43
|
+
|
|
44
|
+
service.sanitize_header("X-Api-Key", "sk-1234567890abcdef")
|
|
45
|
+
# PARTIAL → 'sk-1****cdef'
|
|
46
|
+
|
|
47
|
+
service.sanitize_header("User-Agent", "Mozilla/5.0 (Windows NT...)")
|
|
48
|
+
# 非敏感,超长时截断,不脱敏
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### `sanitize_data(data)`
|
|
52
|
+
|
|
53
|
+
处理结构化数据(dict / list),深度递归按字段名脱敏。适用于 JSON body、响应体、测试数据。
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
service.sanitize_data({
|
|
57
|
+
"euserId": 123,
|
|
58
|
+
"apiKey": "SUPER_SECRET",
|
|
59
|
+
"order": {"password": "pay_pwd_123"}
|
|
60
|
+
})
|
|
61
|
+
# → {"euserId": 123, "apiKey": "SUPE****RET", "order": {"password": "pay_****_12"}}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
顶层为 list 时同样支持:
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
service.sanitize_data([
|
|
68
|
+
{"name": "alice", "token": "tok_abc"},
|
|
69
|
+
{"name": "bob", "token": "tok_xyz"},
|
|
70
|
+
])
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### `sanitize_text(text)`
|
|
74
|
+
|
|
75
|
+
处理非结构化文本:form-urlencoded body、querystring、日志消息、错误描述。通过 `sensitive_patterns` 正则匹配替换。
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
service.sanitize_text("username=alice&password=secret123")
|
|
79
|
+
# → 'username=alice&password=******'
|
|
80
|
+
|
|
81
|
+
service.sanitize_text("Login failed: token=abc123xyz")
|
|
82
|
+
# → 'Login failed: token=******'
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 脱敏策略
|
|
88
|
+
|
|
89
|
+
通过 `default_strategy` 全局配置:
|
|
90
|
+
|
|
91
|
+
| 策略 | 效果 | 示例输出 |
|
|
92
|
+
|------|------|---------|
|
|
93
|
+
| `PARTIAL`(默认) | 保留首尾各 4 字符,中间 `****` | `myse****word` |
|
|
94
|
+
| `FULL` | 整体替换为 `mask_value` | `******` |
|
|
95
|
+
| `HASH` | SHA256 前 16 位 | `sha256:a1b2c3d4e5f6g7h8` |
|
|
96
|
+
|
|
97
|
+
> `sanitize_header` 在 `PARTIAL` 策略下对带 scheme 前缀的值额外格式化:
|
|
98
|
+
> `{scheme} {first8}...{last5}`;`FULL`/`HASH` 下严格遮蔽整个 token。
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 配置
|
|
103
|
+
|
|
104
|
+
### 框架内置的默认敏感字段
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
password, passwd, pwd
|
|
108
|
+
token, access_token, refresh_token
|
|
109
|
+
secret, api_key, apikey
|
|
110
|
+
authorization, auth, credential
|
|
111
|
+
x-token, x-api-key, x-sign, x-signature
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
`sensitive_patterns` 默认覆盖 `password=xxx`、`token=xxx`、`api_key=xxx` 等 key-value 文本格式。
|
|
115
|
+
|
|
116
|
+
### 业务项目补充字段
|
|
117
|
+
|
|
118
|
+
在 `config/base.yaml` 追加项目特有字段,**不要覆盖框架默认值**:
|
|
119
|
+
|
|
120
|
+
```yaml
|
|
121
|
+
# config/base.yaml
|
|
122
|
+
sanitize:
|
|
123
|
+
sensitive_keys:
|
|
124
|
+
# 框架默认字段(保留)
|
|
125
|
+
- password
|
|
126
|
+
- token
|
|
127
|
+
- api_key
|
|
128
|
+
- authorization
|
|
129
|
+
# 业务项目补充
|
|
130
|
+
- apiKey # camelCase 接口字段
|
|
131
|
+
- euserPayPwd # 支付密码
|
|
132
|
+
- payPassword
|
|
133
|
+
- ".*PayPwd$" # 正则:匹配所有支付密码字段
|
|
134
|
+
- ".*Secret$" # 正则:匹配所有 secret 字段
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
> `sensitive_keys` 支持精确匹配和正则,不区分大小写。
|
|
138
|
+
|
|
139
|
+
### 可选配置项
|
|
140
|
+
|
|
141
|
+
```yaml
|
|
142
|
+
sanitize:
|
|
143
|
+
enabled: true # 全局开关
|
|
144
|
+
default_strategy: PARTIAL # PARTIAL / FULL / HASH
|
|
145
|
+
keep_prefix: 4 # PARTIAL:保留前缀字符数
|
|
146
|
+
keep_suffix: 4 # PARTIAL:保留后缀字符数
|
|
147
|
+
mask_char: "*" # PARTIAL:掩码字符
|
|
148
|
+
mask_value: "******" # FULL:完整替换值
|
|
149
|
+
|
|
150
|
+
logging:
|
|
151
|
+
enabled: true # structlog 日志管道独立开关
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
`logging` 是唯一有意义的子配置:structlog processor 会拦截所有日志调用(不只是事件路径),独立开关可以在保留事件通道脱敏的同时关闭日志管道脱敏(反之亦然)。
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 本地调试
|
|
159
|
+
|
|
160
|
+
v4.4.3+ 脱敏在事件源(EventPublisher)统一完成,没有"只关终端、保留报告"的选项。如果需要在本地看完整数据:
|
|
161
|
+
|
|
162
|
+
```yaml
|
|
163
|
+
# config/environments/local.yaml
|
|
164
|
+
sanitize:
|
|
165
|
+
enabled: false # 关闭所有脱敏(终端、报告、日志均显示原始值)
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**注意**:`enabled: false` 同时影响 Allure 报告和 CI 日志,不要提交到共享环境配置。
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 相关文档
|
|
173
|
+
|
|
174
|
+
- [配置系统指南](config_guide.md)
|
|
175
|
+
- [HTTP 客户端指南](http_client_guide.md)
|
|
176
|
+
- [service_client 接入指南](service_client_guide.md)
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# v4.4.3 发布说明
|
|
2
|
+
|
|
3
|
+
**发布日期**: 2026-04-23
|
|
4
|
+
**版本类型**: PATCH(内部架构重构,无 API 增减)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
本版本完成了脱敏架构的根本性重构:**脱敏收归事件源**。
|
|
11
|
+
|
|
12
|
+
此前框架存在"多处分散脱敏"的问题——EventPublisher 发布原始数据,ConsoleDebugObserver、AllureObserver、TracingInterceptor、ObservabilityLogger 各自维护独立的脱敏逻辑和 sensitive_keys 配置,与全局 `SanitizeConfig` 割裂,导致:
|
|
13
|
+
|
|
14
|
+
- 用户在 `sanitize.sensitive_keys` 中添加的自定义字段,在 tracing/observability 路径下不生效
|
|
15
|
+
- 事件总线承载的是原始数据,所有消费者都需要重复脱敏
|
|
16
|
+
- 脱敏逻辑分散在 6+ 个文件,行为不一致
|
|
17
|
+
|
|
18
|
+
**v4.4.3 的核心原则**:事件是"显示就绪的记录",EventPublisher 是数据进入事件总线前的唯一脱敏点。
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 变更详情
|
|
23
|
+
|
|
24
|
+
### EventPublisher 层(数据源)
|
|
25
|
+
|
|
26
|
+
| 文件 | 变更 |
|
|
27
|
+
|------|------|
|
|
28
|
+
| `http/middleware/event_publisher.py` | 发布前脱敏 headers、params、request body、response headers |
|
|
29
|
+
| `grpc/middleware/event_publisher.py` | 发布前脱敏 metadata |
|
|
30
|
+
| `graphql/middleware/event_publisher.py` | 发布前脱敏 variables |
|
|
31
|
+
|
|
32
|
+
### 消费者层(移除冗余脱敏)
|
|
33
|
+
|
|
34
|
+
| 文件 | 变更 |
|
|
35
|
+
|------|------|
|
|
36
|
+
| `testing/debugging/console.py` | 删除 `_sanitize_service` 属性和 `_sanitize_value()` 方法 |
|
|
37
|
+
| `testing/reporting/allure/observer.py` | 事件路径移除脱敏;直接回调路径(原始 Request 对象)保留 `_sanitize_for_allure` |
|
|
38
|
+
| `testing/fixtures/http_recorder.py` | header 展示移除 `_sanitize_header`;`_format_body` 保留脱敏作为最终边界安全兜底 |
|
|
39
|
+
|
|
40
|
+
### 基础设施层(统一委托)
|
|
41
|
+
|
|
42
|
+
| 文件 | 变更 |
|
|
43
|
+
|------|------|
|
|
44
|
+
| `infrastructure/tracing/interceptors/http.py` | 废除 `sensitive_headers` 参数,`_sanitize_header` 委托 SanitizeService |
|
|
45
|
+
| `infrastructure/tracing/interceptors/grpc.py` | 废除 `sensitive_keys` 参数,`_sanitize_value` 委托 SanitizeService |
|
|
46
|
+
| `infrastructure/logging/observability.py` | `_sanitize_value(value)` → `_sanitize_value(key, value)`,委托 SanitizeService |
|
|
47
|
+
|
|
48
|
+
### SanitizeService API 简化
|
|
49
|
+
|
|
50
|
+
| 变更 | 原因 |
|
|
51
|
+
|------|------|
|
|
52
|
+
| `sanitize_data(data, context)` → `sanitize_data(data)` | per-context 开关无意义,脱敏应在源头一次完成 |
|
|
53
|
+
| `sanitize_text(text, context)` → `sanitize_text(text)` | 同上 |
|
|
54
|
+
| 移除 `is_context_enabled(context)` | 职责消除 |
|
|
55
|
+
| `SanitizeConfig` 移除 `console`/`allure` 子配置 | 两个通道的数据均来自已脱敏的事件,开关无实际意义 |
|
|
56
|
+
| 保留 `logging: SanitizeContextConfig` | structlog processor 拦截所有日志调用,不只是事件路径,独立开关有意义 |
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 迁移指南
|
|
61
|
+
|
|
62
|
+
### 代码变更(用户侧)
|
|
63
|
+
|
|
64
|
+
如果你在测试代码中直接调用了以下 API:
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
# ❌ 旧 API(已移除 context 参数)
|
|
68
|
+
service.sanitize_data(data, context="console")
|
|
69
|
+
service.sanitize_text(text, context="logging")
|
|
70
|
+
|
|
71
|
+
# ✅ 新 API
|
|
72
|
+
service.sanitize_data(data)
|
|
73
|
+
service.sanitize_text(text)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
# ❌ 旧:TracingInterceptor 自定义敏感头
|
|
78
|
+
TracingInterceptor(sensitive_headers=["x-custom-secret"])
|
|
79
|
+
|
|
80
|
+
# ✅ 新:在全局配置中声明
|
|
81
|
+
# settings.yaml: sanitize.sensitive_keys: ["x-custom-secret"]
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 配置变更
|
|
85
|
+
|
|
86
|
+
```yaml
|
|
87
|
+
# ❌ 旧配置(已无效)
|
|
88
|
+
sanitize:
|
|
89
|
+
console:
|
|
90
|
+
enabled: true
|
|
91
|
+
allure:
|
|
92
|
+
enabled: false
|
|
93
|
+
|
|
94
|
+
# ✅ 新配置(console/allure 子项移除,只保留 logging)
|
|
95
|
+
sanitize:
|
|
96
|
+
enabled: true
|
|
97
|
+
sensitive_keys: ["api_key", "euserPayPwd"]
|
|
98
|
+
logging:
|
|
99
|
+
enabled: true
|
|
100
|
+
```
|
|
@@ -110,6 +110,20 @@ class GraphQLEventPublisherMiddleware(GraphQLMiddleware):
|
|
|
110
110
|
query = self._truncate_query(request.query) if self._include_query else None
|
|
111
111
|
variables = request.variables_json if self._include_variables else None
|
|
112
112
|
|
|
113
|
+
# 脱敏 variables(用户显式启用时可能含敏感字段)
|
|
114
|
+
if variables:
|
|
115
|
+
import json as _json
|
|
116
|
+
|
|
117
|
+
from df_test_framework.infrastructure.sanitize import get_sanitize_service
|
|
118
|
+
|
|
119
|
+
_svc = get_sanitize_service()
|
|
120
|
+
try:
|
|
121
|
+
_parsed = _json.loads(variables)
|
|
122
|
+
if isinstance(_parsed, dict):
|
|
123
|
+
variables = _json.dumps(_svc.sanitize_data(_parsed), ensure_ascii=False)
|
|
124
|
+
except (ValueError, TypeError):
|
|
125
|
+
pass
|
|
126
|
+
|
|
113
127
|
# 发布请求开始事件
|
|
114
128
|
start_event, correlation_id = GraphQLRequestStartEvent.create(
|
|
115
129
|
url=request.url,
|
|
@@ -139,11 +139,19 @@ class GrpcEventPublisherMiddleware(GrpcMiddleware):
|
|
|
139
139
|
if self._log_request_data:
|
|
140
140
|
request_data = self._serialize_data(request.message)
|
|
141
141
|
|
|
142
|
+
# 脱敏:metadata 可能含 Authorization 等敏感头,进 EventBus 前处理
|
|
143
|
+
from df_test_framework.infrastructure.sanitize import get_sanitize_service
|
|
144
|
+
|
|
145
|
+
_svc = get_sanitize_service()
|
|
146
|
+
sanitized_metadata = {
|
|
147
|
+
k: _svc.sanitize_header(k, str(v)) for k, v in (request.metadata_dict or {}).items()
|
|
148
|
+
}
|
|
149
|
+
|
|
142
150
|
# 发布开始事件
|
|
143
151
|
start_event, correlation_id = GrpcRequestStartEvent.create(
|
|
144
152
|
service=self._service_name,
|
|
145
153
|
method=request.method,
|
|
146
|
-
metadata=
|
|
154
|
+
metadata=sanitized_metadata,
|
|
147
155
|
request_data=request_data,
|
|
148
156
|
)
|
|
149
157
|
await event_bus.publish(start_event)
|
|
@@ -97,6 +97,14 @@ class HttpEventPublisherMiddleware(BaseMiddleware[Request, Response]):
|
|
|
97
97
|
params = self._extract_params(request)
|
|
98
98
|
body = self._extract_body(request)
|
|
99
99
|
|
|
100
|
+
# 脱敏:在数据进入 EventBus 前完成,消费者直接展示
|
|
101
|
+
from df_test_framework.infrastructure.sanitize import get_sanitize_service
|
|
102
|
+
|
|
103
|
+
_svc = get_sanitize_service()
|
|
104
|
+
headers = {k: _svc.sanitize_header(k, v) for k, v in headers.items()}
|
|
105
|
+
params = _svc.sanitize_data(params) if params else {}
|
|
106
|
+
body = self._sanitize_body(_svc, body)
|
|
107
|
+
|
|
100
108
|
# 发布请求开始事件(异步发布,因为我们在 async 上下文中)
|
|
101
109
|
start_event, correlation_id = HttpRequestStartEvent.create(
|
|
102
110
|
method=request.method,
|
|
@@ -119,15 +127,18 @@ class HttpEventPublisherMiddleware(BaseMiddleware[Request, Response]):
|
|
|
119
127
|
response = await call_next(request)
|
|
120
128
|
duration = time.time() - start_time
|
|
121
129
|
|
|
122
|
-
#
|
|
130
|
+
# 发布请求结束事件(响应头和 body 同样脱敏)
|
|
131
|
+
resp_headers = {
|
|
132
|
+
k: _svc.sanitize_header(k, v) for k, v in (response.headers or {}).items()
|
|
133
|
+
}
|
|
123
134
|
end_event = HttpRequestEndEvent.create(
|
|
124
135
|
correlation_id=correlation_id,
|
|
125
136
|
method=request.method,
|
|
126
137
|
url=full_url,
|
|
127
138
|
status_code=response.status_code,
|
|
128
139
|
duration=duration,
|
|
129
|
-
headers=
|
|
130
|
-
body=response.body,
|
|
140
|
+
headers=resp_headers or None,
|
|
141
|
+
body=self._sanitize_body(_svc, response.body),
|
|
131
142
|
)
|
|
132
143
|
# v3.46.1: 手动注入 scope
|
|
133
144
|
if self._runtime.scope:
|
|
@@ -233,3 +244,17 @@ class HttpEventPublisherMiddleware(BaseMiddleware[Request, Response]):
|
|
|
233
244
|
file_info.append(f"{name}: <file>")
|
|
234
245
|
return f"<multipart: {', '.join(file_info)}>"
|
|
235
246
|
return None
|
|
247
|
+
|
|
248
|
+
def _sanitize_body(self, service: Any, body: str | None) -> str | None:
|
|
249
|
+
"""脱敏请求/响应 body:JSON 结构化脱敏,非 JSON 正则脱敏"""
|
|
250
|
+
if not body:
|
|
251
|
+
return body
|
|
252
|
+
import json
|
|
253
|
+
|
|
254
|
+
try:
|
|
255
|
+
parsed = json.loads(body)
|
|
256
|
+
if isinstance(parsed, (dict, list)):
|
|
257
|
+
return json.dumps(service.sanitize_data(parsed), ensure_ascii=False, default=str)
|
|
258
|
+
except (json.JSONDecodeError, ValueError):
|
|
259
|
+
pass
|
|
260
|
+
return service.sanitize_text(body)
|
|
@@ -696,10 +696,9 @@ logging:
|
|
|
696
696
|
level: DEBUG # DEBUG 级别日志
|
|
697
697
|
format: text # 彩色文本输出
|
|
698
698
|
|
|
699
|
-
#
|
|
699
|
+
# 本地调试时关闭脱敏,查看完整数据(v4.4.3+ 脱敏在事件源统一处理,仅全局开关有效)
|
|
700
700
|
sanitize:
|
|
701
|
-
|
|
702
|
-
enabled: false
|
|
701
|
+
enabled: false
|
|
703
702
|
|
|
704
703
|
# 可观测性配置
|
|
705
704
|
observability:
|
|
@@ -334,8 +334,7 @@ debug: true
|
|
|
334
334
|
logging:
|
|
335
335
|
level: DEBUG
|
|
336
336
|
sanitize:
|
|
337
|
-
|
|
338
|
-
enabled: false # 本地终端看完整值,日志 / Allure 仍脱敏
|
|
337
|
+
enabled: false # 本地调试关闭脱敏,v4.4.3+ 脱敏在事件源统一处理
|
|
339
338
|
observability:
|
|
340
339
|
debug_output: true
|
|
341
340
|
test:
|
|
@@ -1100,8 +1099,7 @@ web:
|
|
|
1100
1099
|
logging:
|
|
1101
1100
|
level: DEBUG
|
|
1102
1101
|
sanitize:
|
|
1103
|
-
|
|
1104
|
-
enabled: false # 本地终端看完整值,日志 / Allure 仍脱敏
|
|
1102
|
+
enabled: false # 本地调试关闭脱敏,v4.4.3+ 脱敏在事件源统一处理
|
|
1105
1103
|
observability:
|
|
1106
1104
|
debug_output: true
|
|
1107
1105
|
test:
|
|
@@ -746,11 +746,11 @@ class SanitizeConfig(BaseModel):
|
|
|
746
746
|
"""统一脱敏配置
|
|
747
747
|
|
|
748
748
|
v3.40.0 新增:将日志系统、ConsoleDebugObserver、AllureObserver 的脱敏逻辑统一。
|
|
749
|
+
v4.5.0 简化:脱敏统一在数据源(EventPublisher)处理,移除 console/allure 独立开关。
|
|
749
750
|
|
|
750
751
|
特性:
|
|
751
752
|
- 共享敏感字段定义(支持正则匹配)
|
|
752
753
|
- 多种脱敏策略(完全隐藏、部分保留、哈希)
|
|
753
|
-
- 各组件独立开关控制
|
|
754
754
|
- 配置驱动(YAML/环境变量)
|
|
755
755
|
|
|
756
756
|
Example:
|
|
@@ -765,9 +765,7 @@ class SanitizeConfig(BaseModel):
|
|
|
765
765
|
SANITIZE__DEFAULT_STRATEGY=partial
|
|
766
766
|
SANITIZE__KEEP_PREFIX=4
|
|
767
767
|
SANITIZE__KEEP_SUFFIX=4
|
|
768
|
-
SANITIZE__LOGGING__ENABLED=true
|
|
769
|
-
SANITIZE__CONSOLE__ENABLED=false # 本地调试时关闭
|
|
770
|
-
SANITIZE__ALLURE__ENABLED=true
|
|
768
|
+
SANITIZE__LOGGING__ENABLED=true # 日志管道独立开关
|
|
771
769
|
"""
|
|
772
770
|
|
|
773
771
|
enabled: bool = Field(default=True, description="是否启用脱敏(全局开关)")
|
|
@@ -827,19 +825,11 @@ class SanitizeConfig(BaseModel):
|
|
|
827
825
|
mask_char: str = Field(default="*", max_length=1, description="脱敏占位字符")
|
|
828
826
|
mask_value: str = Field(default="******", description="完全脱敏时的替换值")
|
|
829
827
|
|
|
830
|
-
#
|
|
828
|
+
# 日志管道独立开关(结构化日志是独立管道,可单独控制)
|
|
831
829
|
logging: SanitizeContextConfig = Field(
|
|
832
830
|
default_factory=SanitizeContextConfig,
|
|
833
831
|
description="日志系统脱敏配置",
|
|
834
832
|
)
|
|
835
|
-
console: SanitizeContextConfig = Field(
|
|
836
|
-
default_factory=SanitizeContextConfig,
|
|
837
|
-
description="控制台调试输出脱敏配置",
|
|
838
|
-
)
|
|
839
|
-
allure: SanitizeContextConfig = Field(
|
|
840
|
-
default_factory=SanitizeContextConfig,
|
|
841
|
-
description="Allure 报告脱敏配置",
|
|
842
|
-
)
|
|
843
833
|
|
|
844
834
|
|
|
845
835
|
class SignatureConfig(BaseModel):
|
|
@@ -136,8 +136,8 @@ def _sanitize_sensitive_data(logger: Any, method_name: str, event_dict: EventDic
|
|
|
136
136
|
|
|
137
137
|
service = get_sanitize_service()
|
|
138
138
|
|
|
139
|
-
#
|
|
140
|
-
if not service.
|
|
139
|
+
# 检查全局开关和日志管道独立开关
|
|
140
|
+
if not service.config.enabled or not service.config.logging.enabled:
|
|
141
141
|
return event_dict
|
|
142
142
|
|
|
143
143
|
# 脱敏字段值
|
|
@@ -148,7 +148,7 @@ def _sanitize_sensitive_data(logger: Any, method_name: str, event_dict: EventDic
|
|
|
148
148
|
|
|
149
149
|
# 脱敏消息内容
|
|
150
150
|
if "event" in event_dict and isinstance(event_dict["event"], str):
|
|
151
|
-
event_dict["event"] = service.sanitize_text(event_dict["event"]
|
|
151
|
+
event_dict["event"] = service.sanitize_text(event_dict["event"])
|
|
152
152
|
|
|
153
153
|
return event_dict
|
|
154
154
|
|
|
@@ -157,7 +157,7 @@ class ObservabilityLogger:
|
|
|
157
157
|
|
|
158
158
|
# 只输出关键 headers(认证、签名等)
|
|
159
159
|
key_headers = {
|
|
160
|
-
k: (self._sanitize_value(v) if sanitize else v)
|
|
160
|
+
k: (self._sanitize_value(k, v) if sanitize else v)
|
|
161
161
|
for k, v in headers.items()
|
|
162
162
|
if k.lower() in ("authorization", "x-sign", "x-token", "x-signature")
|
|
163
163
|
}
|
|
@@ -504,18 +504,11 @@ class ObservabilityLogger:
|
|
|
504
504
|
|
|
505
505
|
# 辅助方法
|
|
506
506
|
|
|
507
|
-
def _sanitize_value(self, value: str) -> str:
|
|
508
|
-
"""
|
|
507
|
+
def _sanitize_value(self, key: str, value: str) -> str:
|
|
508
|
+
"""脱敏敏感值(委托给 SanitizeService,与全局配置一致)"""
|
|
509
|
+
from df_test_framework.infrastructure.sanitize import get_sanitize_service
|
|
509
510
|
|
|
510
|
-
|
|
511
|
-
value: 原始值
|
|
512
|
-
|
|
513
|
-
Returns:
|
|
514
|
-
脱敏后的值
|
|
515
|
-
"""
|
|
516
|
-
if len(value) <= 10:
|
|
517
|
-
return value[:3] + "..."
|
|
518
|
-
return value[:10] + "..."
|
|
511
|
+
return get_sanitize_service().sanitize_header(key, value)
|
|
519
512
|
|
|
520
513
|
def _describe_changes(self, changes: dict[str, Any]) -> str:
|
|
521
514
|
"""描述变更内容
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
v3.40.0 新增:将日志系统、ConsoleDebugObserver、AllureObserver 的脱敏逻辑统一。
|
|
4
4
|
v3.40.1 重构:移除独立单例,与 settings 生命周期绑定,配置变更自动生效。
|
|
5
|
+
v4.5.0 简化:脱敏在数据源(EventPublisher)处理,移除 context 参数和各组件独立开关。
|
|
5
6
|
|
|
6
7
|
特性:
|
|
7
8
|
- 共享敏感字段定义(支持正则匹配)
|
|
8
9
|
- 多种脱敏策略(完全隐藏、部分保留、哈希)
|
|
9
10
|
- 深度递归脱敏(支持嵌套 dict/list)
|
|
10
11
|
- 消息内容正则脱敏
|
|
11
|
-
- 各组件独立开关控制
|
|
12
12
|
- 与 settings 生命周期绑定(clear_settings_cache 自动清除)
|
|
13
13
|
|
|
14
14
|
使用方式:
|
|
@@ -16,7 +16,7 @@ v3.40.1 重构:移除独立单例,与 settings 生命周期绑定,配置
|
|
|
16
16
|
>>> service = get_sanitize_service()
|
|
17
17
|
>>> service.sanitize_value("password", "secret123")
|
|
18
18
|
'secr****t123'
|
|
19
|
-
>>> service.sanitize_data({"password": "secret", "name": "test"}
|
|
19
|
+
>>> service.sanitize_data({"password": "secret", "name": "test"})
|
|
20
20
|
{'password': 'secr****', 'name': 'test'}
|
|
21
21
|
"""
|
|
22
22
|
|
|
@@ -181,13 +181,11 @@ class SanitizeService:
|
|
|
181
181
|
def sanitize_data(
|
|
182
182
|
self,
|
|
183
183
|
data: dict[str, Any] | list[Any] | None,
|
|
184
|
-
context: str,
|
|
185
184
|
) -> dict[str, Any] | list[Any] | None:
|
|
186
185
|
"""脱敏结构化数据(dict / list,深度递归)
|
|
187
186
|
|
|
188
187
|
Args:
|
|
189
188
|
data: 要脱敏的字典或列表(顶层为 list 时也会递归到内部 dict 元素)
|
|
190
|
-
context: 上下文(logging/console/allure),用于检查独立开关
|
|
191
189
|
|
|
192
190
|
Returns:
|
|
193
191
|
脱敏后的数据,结构与入参一致
|
|
@@ -198,10 +196,6 @@ class SanitizeService:
|
|
|
198
196
|
if not self.config.enabled:
|
|
199
197
|
return data
|
|
200
198
|
|
|
201
|
-
ctx_config = getattr(self.config, context, None)
|
|
202
|
-
if ctx_config is not None and not ctx_config.enabled:
|
|
203
|
-
return data
|
|
204
|
-
|
|
205
199
|
return self._sanitize_recursive(data)
|
|
206
200
|
|
|
207
201
|
def _sanitize_recursive(self, data: Any) -> Any:
|
|
@@ -231,7 +225,7 @@ class SanitizeService:
|
|
|
231
225
|
|
|
232
226
|
return data
|
|
233
227
|
|
|
234
|
-
def sanitize_text(self, text: str
|
|
228
|
+
def sanitize_text(self, text: str) -> str:
|
|
235
229
|
"""脱敏非结构化文本(正则匹配)
|
|
236
230
|
|
|
237
231
|
适用场景:日志消息、form-urlencoded body、querystring、纯文本错误消息等
|
|
@@ -239,7 +233,6 @@ class SanitizeService:
|
|
|
239
233
|
|
|
240
234
|
Args:
|
|
241
235
|
text: 原始文本
|
|
242
|
-
context: 上下文(logging/console/allure),用于检查独立开关
|
|
243
236
|
|
|
244
237
|
Returns:
|
|
245
238
|
脱敏后的文本
|
|
@@ -250,10 +243,6 @@ class SanitizeService:
|
|
|
250
243
|
if not isinstance(text, str):
|
|
251
244
|
return text
|
|
252
245
|
|
|
253
|
-
ctx_config = getattr(self.config, context, None)
|
|
254
|
-
if ctx_config is not None and not ctx_config.enabled:
|
|
255
|
-
return text
|
|
256
|
-
|
|
257
246
|
result = text
|
|
258
247
|
for pattern in self._message_patterns:
|
|
259
248
|
# 保留第一个分组(键名部分),替换第二个分组(值部分)
|
|
@@ -261,9 +250,7 @@ class SanitizeService:
|
|
|
261
250
|
|
|
262
251
|
return result
|
|
263
252
|
|
|
264
|
-
def sanitize_header(
|
|
265
|
-
self, name: str, value: str, context: str = "console", max_length: int = 80
|
|
266
|
-
) -> str:
|
|
253
|
+
def sanitize_header(self, name: str, value: str, max_length: int = 80) -> str:
|
|
267
254
|
"""脱敏单个 HTTP header 值(HTTP 专属)。
|
|
268
255
|
|
|
269
256
|
敏感字段按 SanitizeConfig.default_strategy 处理:
|
|
@@ -272,13 +259,9 @@ class SanitizeService:
|
|
|
272
259
|
- FULL:走 sanitize_value → mask_value(如 ******)
|
|
273
260
|
- HASH:走 sanitize_value → sha256:...
|
|
274
261
|
非敏感长值超过 max_length:截断为 '{val[:max_length-3]}...'
|
|
275
|
-
context 对应 SanitizeConfig 中的组件开关(console/allure/logging)。
|
|
276
262
|
"""
|
|
277
263
|
if not self.config.enabled:
|
|
278
264
|
return value
|
|
279
|
-
ctx_config = getattr(self.config, context, None)
|
|
280
|
-
if ctx_config is not None and not ctx_config.enabled:
|
|
281
|
-
return value
|
|
282
265
|
if self.is_sensitive(name):
|
|
283
266
|
# 延迟导入避免循环依赖
|
|
284
267
|
from df_test_framework.infrastructure.config import SanitizeStrategy
|
|
@@ -295,24 +278,6 @@ class SanitizeService:
|
|
|
295
278
|
return value[: max_length - 3] + "..."
|
|
296
279
|
return value
|
|
297
280
|
|
|
298
|
-
def is_context_enabled(self, context: str) -> bool:
|
|
299
|
-
"""检查指定上下文是否启用脱敏
|
|
300
|
-
|
|
301
|
-
Args:
|
|
302
|
-
context: 上下文名称(logging/console/allure)
|
|
303
|
-
|
|
304
|
-
Returns:
|
|
305
|
-
是否启用脱敏
|
|
306
|
-
"""
|
|
307
|
-
if not self.config.enabled:
|
|
308
|
-
return False
|
|
309
|
-
|
|
310
|
-
ctx_config = getattr(self.config, context, None)
|
|
311
|
-
if ctx_config is None:
|
|
312
|
-
return True # 未配置时默认启用
|
|
313
|
-
|
|
314
|
-
return ctx_config.enabled
|
|
315
|
-
|
|
316
281
|
|
|
317
282
|
def get_sanitize_service() -> SanitizeService:
|
|
318
283
|
"""获取脱敏服务实例
|