df-test-framework 4.7.5__tar.gz → 4.8.0__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.7.5 → df_test_framework-4.8.0}/AGENTS.md +2 -2
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/CHANGELOG.md +40 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/CLAUDE.md +2 -2
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/PKG-INFO +3 -1
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/README.md +2 -2
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/ESSENTIAL_DOCS.md +2 -2
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/README.md +2 -2
- df_test_framework-4.8.0/docs/guides/helpers_guide.md +464 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/README.md +10 -3
- df_test_framework-4.8.0/docs/releases/v4.8.0.md +144 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/pyproject.toml +8 -1
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/__init__.py +24 -1
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/signature.py +14 -25
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/object/oss/client.py +0 -8
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/helpers/__init__.py +14 -2
- df_test_framework-4.8.0/src/df_test_framework/infrastructure/helpers/gmcrypto.py +296 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/helpers/hash.py +44 -1
- df_test_framework-4.8.0/src/df_test_framework/infrastructure/helpers/signature.py +252 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/auth/signature/test_strategies.py +6 -2
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/storages/test_oss.py +8 -7
- df_test_framework-4.8.0/tests/infrastructure/test_gmcrypto.py +259 -0
- df_test_framework-4.8.0/tests/infrastructure/test_helpers.py +650 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/uv.lock +15 -2
- df_test_framework-4.7.5/docs/guides/helpers_guide.md +0 -306
- df_test_framework-4.7.5/src/df_test_framework/infrastructure/helpers/signature.py +0 -81
- df_test_framework-4.7.5/tests/infrastructure/test_helpers.py +0 -258
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.editorconfig +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.env.example +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.gitattributes +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.github/workflows/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.github/workflows/lint.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.github/workflows/release.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.github/workflows/scheduled.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.github/workflows/security.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.github/workflows/test.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.gitignore +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.gitleaks.toml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.gitleaksignore +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.pre-commit-config.yaml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.python-version +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/CONTRIBUTING.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/README_PYPI.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/CONTRIBUTOR_GUIDE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/DOC_REORGANIZATION_PLAN_v4.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/FAQ.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/LEARNING_PATH.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/clients.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core/context.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core/events.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core/exceptions.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core/middleware.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core/protocols.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core/types.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/databases.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/drivers.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/extensions.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/infrastructure.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/patterns.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/testing.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/ARCHITECTURE_V4.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/CODE_STRUCTURE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/PLUGIN_SYSTEM_V3.37.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/TEST_EXECUTION_LIFECYCLE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/REFACTORING_PLAN_V3.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/REFACTORING_PLAN_V3_REVISED.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/DI_STRATEGY.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/PREPARE_DATA_DESIGN.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/TESTING_MODULE_OPTIMIZATION.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/UOW_CLEANUP_ARCHITECTURE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/UOW_REFACTORING_PROPOSAL.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/allure_integration_modes.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/capability_plan_vs_current.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/config-driven-design.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/config-management-analysis.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/eventbus-integration-analysis.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/failure-diagnosis-v2-design.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/future_allure_plugin_plans.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/http-vs-web-comparison.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/observability-debugging-unification.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/provider-pattern-deep-dive.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/tech-debt-cleanup-plan.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/ui-failure-diagnosis-implementation-v3.46.3.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/ui-observability-design.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/discussion_1_initial_issues.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/v3_complete_draft.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/v3_final_draft.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/FRAMEWORK_ARCHITECTURE_v3.6.2.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/OVERVIEW_V3.17.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/V3.14_ENTERPRISE_PLATFORM_DESIGN.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/V3.16_LAYER4_BOOTSTRAP_ARCHITECTURE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/V3.17_EVENT_SYSTEM_REDESIGN.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/V3_ARCHITECTURE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/V3_IMPLEMENTATION.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/overview.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/v2-architecture.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/extension-points.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/failure-diagnosis-hook-example.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/multi-project-reuse.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/observability-architecture.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/observability-modernization.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/test-type-support.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/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.7.5 → df_test_framework-4.8.0}/docs/archive/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/ACTION_PLAN_v2.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/AUDIT_VERIFICATION_REPORT.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/AUTH_PLACEMENT_ANALYSIS.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/CODE_REVIEW_f95e08cd.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/COMPREHENSIVE_FEATURE_AUDIT.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/FRAMEWORK_OPTIMIZATION_ANALYSIS_2025.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/PHASE2_COMPARISON_ANALYSIS.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/PHASE2_COMPLETION_REPORT.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/PHASE2_SUMMARY.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/V3_REFACTORING_COMPLETE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/ALLURE_HTTP_LOGGING_ISSUE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_CHECK_REPORT.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_DESIGN.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_SUMMARY.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/ALLURE_ROOT_CAUSE_ANALYSIS.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/CODE_ANALYSIS_AND_PROGRESS.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/COMPREHENSIVE_FRAMEWORK_EVALUATION.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/CONFIG_MODERNIZATION_ANALYSIS.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/ARCHITECTURE_AUDIT.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/FUTURE_ENHANCEMENTS.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/IMPLEMENTATION_SUMMARY.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/MIDDLEWARE_V3.14_DESIGN.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/ROADMAP_V3.29_ENHANCEMENTS.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/SIGNATURE_FRAMEWORK_CAPABILITIES.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/TEMPLATE_DEBUG_FIXTURES_ISSUE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/observability-config-design.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/ui-best-practices-2026.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/web-architecture-consistency-design.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/web-event-driven-comparison.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/evaluations_2025/DUAL_AI_ANALYSIS_COMPARISON.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/evaluations_2025/FRAMEWORK_ASSESSMENT.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/evaluations_2025/FRAMEWORK_BEST_PRACTICES_UPDATE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/evaluations_2025/FRAMEWORK_CAPABILITIES.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/evaluations_2025/FRAMEWORK_IMPROVEMENT_PROPOSALS.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/guides/async_database_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/guides/async_http_client.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/guides/httpx_advanced_usage.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/guides/logging_configuration.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/guides/logging_pytest_integration.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/guides/modern_logging_best_practices.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/guides/repository_uow_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/111.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/CONFIG_AND_INTERCEPTOR_INTEGRATION.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/DIRECTORY_STRUCTURE_REFACTORING.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE_VERIFICATION.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_CONFIG_BEST_PRACTICES.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_DESIGN.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_VS_ACTUAL.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_LOCATION_DECISION.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_NAMING_STANDARDS.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_PERFORMANCE_ANALYSIS.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/REFACTORING_IMPLEMENTATION_PLAN.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/REFACTORING_PROGRESS.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/issues/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/issues/summary.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/issues/v1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/migration/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/migration/v3.15-to-v3.16.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/CAPABILITY_LAYER_OPTIMIZATION.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/REFACTORING_PLAN_v2.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/REFACTORING_TASKS_v2.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/RFC_MULTIPART_FORM_DATA_SUPPORT.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/RFC_MULTIPART_IMPLEMENTATION_CODE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/UV_SYNC_MIGRATION_SUMMARY.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/UV_SYNC_QUICK_START.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/v2-migration-plan-draft.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/CHANGELOG_AUDIT_REPORT.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/CODE_QUALITY_FIXES_2025-11-09.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/CORE_DOCS_UPDATE_PLAN.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/DOCUMENTATION_AUDIT_REPORT_2025-12-05.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/DOCUMENTATION_CLEANUP_SUMMARY.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/DOCUMENTATION_INDEX.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/DOCUMENTATION_MAINTENANCE_COMPLETE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/DOCUMENTATION_UPDATE_CHECKLIST.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/DOC_UPDATE_SUMMARY.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/IMPROVEMENTS_2025-01-09.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/PHASE3_COMPLETION_REPORT.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/PYTHON_VERSION_UNIFICATION.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/REFACTORING_COMPLETION_CHECK.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/TEST_CODE_GENERATION_ANALYSIS.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.3.0_DOCUMENTATION_UPDATE_SUMMARY.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.3.0_MIGRATION_CHECKLIST.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.5_ALLURE_INTEGRATION_PLAN.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.5_DOCUMENTATION_COMPLETE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.5_OBSERVABILITY_FINAL_STATUS.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.5_PHASE2_ACCEPTANCE_REPORT.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN_REVISED.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/VERIFIED_BEST_PRACTICES_INTEGRATION_COMPLETE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/async_http_client_design.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/user-guide/PHASE3_FEATURES.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/user-guide/extensions.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/user-guide/ui-testing.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/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.7.5 → df_test_framework-4.8.0}/docs/archive/v1/FRAMEWORK_DESIGN_PRINCIPLES.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/UPGRADE_SUMMARY_v1.3.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/architecture.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/best-practices.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/config-integration-guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/optimization-report.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/publishing.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/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.7.5 → df_test_framework-4.8.0}/docs/archive/versions/QUICK_START_V3.14.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/versions/QUICK_START_V3.5.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/ci-templates/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/ci-templates/github-actions.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/ci-templates/gitlab-ci.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/development/DOCUMENTATION_MAINTENANCE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/development/FRAMEWORK_DEPENDENCY_MANAGEMENT.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/development/RELEASE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/development/VERSION_CONTROL_RULES.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/development/local-development.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/DECIMAL_GUIDE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/allure_plugin.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/assertions_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/async_api_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/auth_session_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/bootstrap_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/config_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/database_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/decorators_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/distributed_tracing.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/event_bus_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/extensions.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/factory_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/fixture_chain_pattern.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/fixtures_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/graphql_client.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/grpc_client.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/http_client_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/integration-guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/local_debug_quickstart.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/logging_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/message_queue.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/middleware_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/mocking.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/monitoring_plugin.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/openapi_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/plugin_hooks_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/plugins_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/prometheus_metrics.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/redis_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/resilience_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/sanitize_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/scaffold_cli_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/service_client_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/storage.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/telemetry_guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/test_data.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/test_data_cleanup.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/test_data_pipeline_design.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/testing-development.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/web-ui-testing.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/migration/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/migration/v3-to-v4.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.0.0-alpha.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.1.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.10.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.11.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.11.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.12.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.12.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.13.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.14.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.14.0_completion_report.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.14.0_implementation_complete.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.16.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.17.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.17.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.17.2.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.18.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.18.1-bugfix.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.18.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.19.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.2.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.20.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.21.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.22.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.22.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.23.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.24.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.25.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.26.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.27.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.28.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.28.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.29.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.3.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.30.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.31.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.32.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.33.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.34.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.34.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.2.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.3.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.4.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.5.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.6.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.7.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.36.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.36.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.37.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.10.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.2.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.4.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.5.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.7.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.8.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.9.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.39.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.39.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.4.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.40.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.41.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.41.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.42.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.43.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.44.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.45.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.46.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.46.2.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.46.3.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.5.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.6.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.6.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.6.2.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.7.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.8.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.9.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.0.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.0.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.0.2.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.0.3.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.0.4.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.1.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.1.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.1.2.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.2.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.2.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.2.2.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.3.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.3.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.4.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.4.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.4.2.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.4.3.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.4.4.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.5.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.6.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.6.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.7.0.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.7.1.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.7.2.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.7.3.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.7.4.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.7.5.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/skills/write-code.zip +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/skills/write-test.zip +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/troubleshooting/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/troubleshooting/common-errors.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/troubleshooting/debugging-guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/BEST_PRACTICES.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/QUICK_REFERENCE.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/QUICK_START.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/USER_MANUAL.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/VERIFIED_BEST_PRACTICES.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/ci-cd.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/code-generation.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/configuration.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/cross-project-sharing.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/debugging.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/examples.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/multi-repo.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/nested-settings-guide.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/security-best-practices.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/01-basic/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/01-basic/database_operations.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/01-basic/http_client_usage.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/01-basic/redis_cache.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/01-basic/storage_usage.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/02-bootstrap/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/02-bootstrap/custom_providers.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/02-bootstrap/custom_settings.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/02-bootstrap/minimal_bootstrap.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/02-bootstrap/with_extensions.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/03-testing/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/03-testing/conftest.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/03-testing/test_api.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/03-testing/test_database.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/03-testing/test_with_fixtures.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/04-patterns/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/04-patterns/builder_pattern.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/04-patterns/combined_patterns.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/04-patterns/repository_pattern.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/allure_enhancement_extension.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/custom_extension.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/data_factory_extension.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/environment_validator_extension.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/monitoring_extension.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/mq_monitor_extension.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/notification_extension.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/06-ui-testing/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/06-ui-testing/basic_ui_test.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/06-ui-testing/conftest.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/06-ui-testing/page_object_example.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/docker-compose-kafka.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/docker-compose-rabbitmq.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/docker-compose-rocketmq.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/kafka_basic.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/kafka_ssl.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/rabbitmq_basic.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/rabbitmq_topic.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/rocketmq-broker.conf +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/rocketmq_basic.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-v35-features/01_configurable_interceptors.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-v35-features/02_profile_configuration.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-v35-features/03_runtime_overrides.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-v35-features/04_observability.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-v35-features/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/08-v37-features/01_unit_of_work_basics.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/08-v37-features/02_repository_v37.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/08-v37-features/03_auto_rollback_testing.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/08-v37-features/04_multi_repository_transactions.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/08-v37-features/05_project_uow.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/08-v37-features/06_exception_handling_with_uow.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/08-v37-features/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/scripts/fetch_swagger.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/scripts/security-scan.bat +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/scripts/security-scan.sh +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/bootstrap/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/bootstrap/bootstrap.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/bootstrap/providers.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/bootstrap/runtime.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/middleware/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/middleware/base.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/middleware/event_publisher.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/middleware/logging.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/middleware/retry.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/models.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/query_builder.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/middleware/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/middleware/base.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/middleware/event_publisher.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/middleware/logging.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/middleware/metadata.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/middleware/retry.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/middleware/timing.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/models.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/core/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/core/request.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/core/response.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/auth.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/event_publisher.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/factory.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/logging.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/retry.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/telemetry.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/rest/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/rest/factory.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_base_api.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/async_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/base_api.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/rest/httpx/client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/rest/protocols.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/async_database.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/database.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/factory.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/query_builder.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/redis/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/redis/async_redis.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/redis/redis_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/repositories/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/repositories/base.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/repositories/query_spec.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/uow.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/app_actions.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/async_app_actions.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/factory.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/playwright/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/playwright/async_browser_pool.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/playwright/async_page.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/playwright/browser.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/playwright/component.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/playwright/locator.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/playwright/page.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/protocols.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/engines/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/engines/batch/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/engines/batch/spark/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/engines/olap/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/engines/stream/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/engines/stream/flink/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/pubsub/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/kafka/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/kafka/client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/kafka/config.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/config.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/config.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/blob/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/file/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/file/local/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/file/local/client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/file/local/config.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/object/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/object/oss/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/object/oss/config.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/object/s3/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/object/s3/client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/object/s3/config.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/__main__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/commands/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/commands/cicd.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/commands/env.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/commands/generate_cmd.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/commands/init_cmd.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/commands/interactive.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/generators/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/generators/json_to_model.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/generators/openapi_generator.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/generators/openapi_parser.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/main.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/release.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/scheduled.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/test-full.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/cicd/.github/workflows/test.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/cicd/.gitlab-ci.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/cicd/Jenkinsfile +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/cicd/docker/.dockerignore +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/cicd/docker/Dockerfile +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/cicd/docker/docker-compose.yml +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/actions.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/api_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/builder.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/env_files.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/graphql_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/redis_example.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/repository.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/settings_enhanced.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/test.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/test_complete.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/test_graphql.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/async_example_api.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/async_ui_app_actions.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/base_api.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/conftest.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/constants.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/data_cleaners.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/default_http_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/docs_api.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/editorconfig.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/enhanced_gitignore.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/env.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/fixture_chain_example.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/fixtures_init.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/full_conftest.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/full_settings.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/gitattributes.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/gitignore.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/models_requests_example.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/models_responses_example.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/pyproject_toml.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/readme.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/script_fetch_swagger.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/script_run_tests.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/settings.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/test_async_example.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/test_example.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/ui_app_actions.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/ui_clients.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/ui_conftest.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/ui_fixtures_init.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/ui_page_object.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/ui_settings.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/ui_test_example.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/uow.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/user_api_example.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/utils_converters.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/utils_validators.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/vscode_settings.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/utils.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/context/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/context/execution.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/context/propagation.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/decorators.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/events/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/events/types.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/exceptions.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/middleware/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/middleware/base.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/middleware/chain.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/middleware/decorator.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/middleware/protocol.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/models/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/models/base.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/protocols/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/protocols/client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/protocols/event.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/protocols/plugin.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/protocols/repository.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/protocols/telemetry.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/types.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/config/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/config/loader.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/config/middleware_schema.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/config/pipeline.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/config/schema.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/config/settings.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/config/sources.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/context/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/context/carriers/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/context/carriers/grpc.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/context/carriers/http.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/context/carriers/mq.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/events/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/events/bus.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/events/handlers/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/helpers/crypto.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/helpers/network.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/logging/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/logging/config.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/logging/interface.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/logging/logger.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/logging/observability.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/metrics/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/metrics/decorators.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/metrics/manager.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/metrics/observer.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/metrics/performance.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/metrics/registry.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/metrics/types.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/plugins/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/plugins/hooks.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/plugins/manager.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/resilience/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/resilience/circuit_breaker.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/sanitize/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/sanitize/service.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/telemetry/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/telemetry/exporters/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/telemetry/facade.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/telemetry/noop.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/context.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/decorators.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/exporters.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/integrations/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/integrations/database.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/integrations/sqlalchemy_instrumentation.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/interceptors/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/interceptors/grpc.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/interceptors/http.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/manager.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/plugins/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/plugins/builtin/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/plugins/builtin/monitoring/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/plugins/builtin/monitoring/plugin.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/plugins/builtin/reporting/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/plugins/builtin/reporting/allure_plugin.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/assertions/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/assertions/helper.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/assertions/json_schema.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/assertions/matchers.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/assertions/response.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/builders/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/builders/base.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/factories/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/factories/base.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/factories/examples.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/generators/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/generators/data_generator.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/loaders/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/loaders/base.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/loaders/csv_loader.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/loaders/json_loader.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/loaders/yaml_loader.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/pipeline/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/pipeline/_registry.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/pipeline/context.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/pipeline/dataset.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/pipeline/loader.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/pipeline/reporter.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/pipeline/resolver.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/debugging/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/debugging/console.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/decorators/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/decorators/actions_class.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/decorators/api_class.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/decorators/service_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/decorators/ui_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/allure.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/auth.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/cleanup.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/core.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/debugging.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/http_recorder.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/message_queue.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/metrics.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/monitoring.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/ui.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/mocking/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/mocking/database_mock.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/mocking/http_mock.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/mocking/redis_mock.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/mocking/time_mock.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/plugins/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/plugins/api_autodiscovery.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/plugins/data_pipeline.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/plugins/debug.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/plugins/env_plugin.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/plugins/logging_plugin.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/plugins/markers.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/reporting/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/reporting/allure/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/reporting/allure/helper.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/reporting/allure/observer.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/README.md +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/bootstrap/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/bootstrap/test_bootstrap.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/bootstrap/test_plugin_middlewares.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/bootstrap/test_providers.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/bootstrap/test_runtime.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/graphql/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/graphql/test_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/graphql/test_middleware.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/graphql/test_models.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/graphql/test_query_builder.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/grpc/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/grpc/test_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/grpc/test_middleware.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/grpc/test_models.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/core/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/core/test_multipart.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/core/test_request.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/core/test_response.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/middleware/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/middleware/test_event_publisher.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/middleware/test_factory.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/middleware/test_logging.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/rest/test_async_base_api.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/rest/test_async_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/rest/test_auth_control.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/rest/test_base_api.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/rest/test_factory.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/rest/test_http_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/redis/test_async_redis.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/redis/test_redis_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/test_async_database.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/test_database.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/test_database_factory.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/test_query_builder.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/test_repositories.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/test_uow.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/drivers/web/playwright/test_async_browser_pool.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/drivers/web/test_async_ui.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/drivers/web/test_modern_ui.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/messengers/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/messengers/test_kafka_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/messengers/test_rabbitmq_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/messengers/test_rocketmq_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/storages/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/storages/test_local_file.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/storages/test_s3.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/cli/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/cli/test_env_cmd.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/cli/test_generate_cmd.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/cli/test_init_cmd.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/cli/test_interactive_cmd.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/cli/test_main.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/cli/test_utils.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/conftest.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/protocols/test_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/protocols/test_event.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/protocols/test_plugin.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/protocols/test_repository.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/protocols/test_telemetry.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/test_context.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/test_decorators.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/test_event_types.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/test_events.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/test_middleware.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/test_types.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/config/test_loader.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/config/test_middleware_schema.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/context/test_carriers.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/events/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/events/test_bus.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/metrics/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/metrics/test_decorators.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/metrics/test_manager.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/metrics/test_observer.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/metrics/test_performance.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/metrics/test_registry.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/metrics/test_types.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/plugins/test_manager.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/resilience/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/resilience/test_circuit_breaker.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/sanitize/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/sanitize/test_service.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/telemetry/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/telemetry/test_facade.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/telemetry/test_noop.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/test_bootstrap.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/test_logging.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/test_pipeline.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/test_runtime.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/test_settings.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/test_sources.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/tracing/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/tracing/test_context.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/tracing/test_decorators.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/tracing/test_exporters.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/tracing/test_integrations.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/tracing/test_interceptors.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/tracing/test_manager.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/integration/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/integration/test_config_environment.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/integration/test_event_observability.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/integration/test_factory_assertions.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/integration/test_middleware_chain.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/migration/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/migration/test_v3_13_to_v3_14_examples.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/plugins/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/plugins/builtin/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/plugins/builtin/monitoring/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/plugins/builtin/monitoring/test_plugin.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/test_json_to_model_generator.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/assertions/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/assertions/test_json_schema.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/assertions/test_matchers.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/data/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/data/pipeline/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/data/pipeline/test_pipeline.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/data/pipeline/test_pipeline_plugin.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/data/test_builders.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/data/test_data_generator.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/data/test_factories.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/debugging/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/debugging/test_console_debug_observer.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/decorators/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/decorators/test_actions_class.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/decorators/test_api_class.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/decorators/test_service_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/decorators/test_ui_client.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_allure_fixture.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_cleanup.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_fixtures_core.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_fixtures_debugging.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_fixtures_message_queue.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_fixtures_monitoring.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_http_recorder.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_lifecycle_hooks.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_monitoring_metrics.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_plugin_lifecycle_integration.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_ui_fixtures.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/mocking/__init__.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/mocking/test_database_mock.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/mocking/test_http_mock.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/mocking/test_redis_mock.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/mocking/test_time_mock.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/plugins/test_api_autodiscovery.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/plugins/test_debug_plugin.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/plugins/test_env_plugin.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/plugins/test_logging_plugin.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/plugins/test_markers.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/reporting/test_allure_observer.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/test_allure_helper.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/test_assertions.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/test_data_loaders.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/test_factories_presets.py +0 -0
- {df_test_framework-4.7.5 → df_test_framework-4.8.0}/verify_fixes.py +0 -0
|
@@ -8,8 +8,8 @@ This file provides guidance to Codex (Codex.ai/code) when working with code in t
|
|
|
8
8
|
|
|
9
9
|
**DF Test Framework** - 现代化 Python 测试自动化框架
|
|
10
10
|
|
|
11
|
-
- **版本**: v4.
|
|
12
|
-
- **更新时间**: 2026-
|
|
11
|
+
- **版本**: v4.8.0
|
|
12
|
+
- **更新时间**: 2026-08-10
|
|
13
13
|
- **Python**: 3.12+
|
|
14
14
|
- **核心技术栈**: pytest + httpx + Playwright + Pydantic v2 + SQLAlchemy 2.0 + Pluggy
|
|
15
15
|
- **架构**: 五层架构 + 横切关注点(能力层驱动设计)
|
|
@@ -7,6 +7,46 @@
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [4.8.0] - 2026-08-10
|
|
11
|
+
|
|
12
|
+
### ✨ 新增
|
|
13
|
+
|
|
14
|
+
- **`compute_sign` 支持固定字段顺序与带键名的密钥**:新增 `field_order` 与 `secret_key_name` 两个参数。
|
|
15
|
+
- `field_order`:按给定顺序拼接,`params` 里缺失的字段按空串占位(顺序型协议要求占位而非跳过,跳过会让分隔符错位)。不传时仍按 key 字母序,行为不变。
|
|
16
|
+
- `secret_key_name`:密钥拼成 `"{name}={secret}"` 并用 `separator` 连接,形如 `…&key=xxx`。不传时密钥直接贴住拼接串,与历史一致。
|
|
17
|
+
- 背景:此前 `concat_mode` / `separator` / `secret_position` 三个维度可配,唯独排序写死 `sorted(params.keys())`,因为该函数抽取自「字母序 + 只拼 value」这一种规则。回调类协议常按业务语义排字段(事件→主体→时间→追踪),字母序拼不出来,只能在项目侧另写一份签名实现。
|
|
18
|
+
- 兼容性:两个参数均默认 `None`,不传时签名结果与既有版本逐字节一致,存量调用方无需改动。
|
|
19
|
+
|
|
20
|
+
- **签名模块拆成拼接层与摘要层**:新增 `build_sign_source`(参数 → 签名源)与 `digest_sign`(签名源 → 签名)两个公开函数,`compute_sign` 成为两者串联的便捷入口,签名与行为完全不变。
|
|
21
|
+
- 动机:真实协议的规则几乎两两不同(字母序/倒序/固定序、空值占位/跳过、`k=v`/`kv`/只拼值、密钥在首/尾/**中间**、大小写输出)。继续往 `compute_sign` 加关键字参数追不上,且有些规则根本表达不了——例如平安的 `join.toUpperCase() + key + timestamp`,密钥后面还接 timestamp,任何 `secret_position` 组合都拼不出。
|
|
22
|
+
- 现在这类协议自己拼签名源再调 `digest_sign` 即可,不必等框架加参数。
|
|
23
|
+
- 同批新增的拼接维度:`skip_empty`(跳过空值)、`trailing_separator`(每项后带分隔符)、`key_value_joiner`(键值连接符,支持 `kv` 无等号)、`field_order` 增加 `"sorted_desc"` / `"as_given"`、`output_case`(大写 hex 输出)。
|
|
24
|
+
- `params` 值不再要求是字符串:内部统一 `str()`,`None` 视作空串,省去每个调用方自己转。
|
|
25
|
+
- 测试以六个真实协议为样本(虚拟充值对外 API、NNK 券状态回调、供应链 SDK、平安、移动、上海移动),验证的是"真实规则拼不拼得出来",而非单个参数是否生效。
|
|
26
|
+
|
|
27
|
+
- **国密 SM2/SM3/SM4**:`sm3()`、`sm2_encrypt/sm2_decrypt`、`sm4_encrypt/sm4_decrypt`,需 `gm` 可选依赖(`pip install df-test-framework[gm]`)。
|
|
28
|
+
- SM3 也接进 `digest_sign(..., algorithm="sm3")`,用于以 SM3 替代 MD5/SHA-256 的接口签名。
|
|
29
|
+
- SM4 默认 ECB + PKCS7 填充(国密接口文档普遍规定 `SM4/ECB/PKCS5Padding`,16 字节分组下 PKCS5 与 PKCS7 等价),另支持 CBC。
|
|
30
|
+
- SM2 输出 `C1C3C2` 且 C1 带 `04` 未压缩点前缀 —— 与 Java BouncyCastle `SM2Engine` 直接互通。解密侧对不带 `04` 的密文自动补齐,兼容其他库的产出。
|
|
31
|
+
- 测试用 GM/T 0004-2012(SM3)与 GB/T 32907-2016(SM4)标准向量,并跑通一条完整的信封加密协议(SM4 加业务参数 → SM2 加 SM4 密钥 → SM3 签名),验证三个原语能直接拼出协议报文。
|
|
32
|
+
|
|
33
|
+
**依赖选型 —— 为什么是 `gmalg` 而不是更常见的 `gmssl`**:国密官方只发标准、不出参考实现,Python 生态因此质量参差,选型硬指标是能否与 Java 后端(BouncyCastle)互通。
|
|
34
|
+
- `gmalg` 1.1.1(2026-01):纯 Python 零依赖,SM2 密文默认就是带 `04` 的 `C1C3C2`,实测密文结构 `65+32+16=113` 字节与对接文档逐字对应;306 star / 2 open issues。
|
|
35
|
+
- `gmssl`(py-gmssl)3.2.2:PyPI 停在 2022-06、48 个 open issue。密文不带 `04`([#101](https://github.com/duanhongyi/gmssl/issues/101));`lstrip("04")` 按字符集而非前缀剥离会破坏以 `0`/`4` 开头的公钥([#96](https://github.com/duanhongyi/gmssl/issues/96),实测约 1/8 公钥受影响);**解密不校验 C3,密文出错时静默返回垃圾数据**——对测试代码是最坏的失败模式;另有 10-20% 随机解密失败([#102](https://github.com/duanhongyi/gmssl/issues/102))。
|
|
36
|
+
- 官方 `gmssl-python` 是 GmSSL C 库的 ctypes 绑定,需先编译 C 库;`tongsuopy` 发布版无 SM2 加解密 API;`fastgm` 已停更。均不适合测试执行机。
|
|
37
|
+
|
|
38
|
+
- **`sha1()`**:用于仍在使用 SHA-1 的遗留签名协议,`digest_sign` 同步支持 `algorithm="sha1"`。
|
|
39
|
+
|
|
40
|
+
### ⚠️ 行为变更
|
|
41
|
+
|
|
42
|
+
- **`compute_sign` 的 HMAC 密钥不再进消息体**:`algorithm="hmac-sha256"` 时密钥此前既被拼进签名源、又作 HMAC 密钥,等于用了两次。HMAC 的设计前提就是密钥不进消息体,拼进去既不增强安全性,也和标准 HMAC 协议(AWS SigV4、GitHub webhook)对不上。修复后 HMAC 下 `secret_position` / `secret_key_name` 一并失效。
|
|
43
|
+
- **影响面**:`hmac-sha256` 的签名输出会变;非 HMAC 算法逐字节不变 —— 已用 1296 组参数/算法/密钥组合验证,972 组非 HMAC 全部一致,324 组差异全部落在 `hmac-sha256`。
|
|
44
|
+
- 确有协议要求密钥同时出现在消息体里时,用 `build_sign_source` + `digest_sign` 自行组合。
|
|
45
|
+
|
|
46
|
+
### 🔧 改进
|
|
47
|
+
|
|
48
|
+
- **`SignatureMiddleware` 的签名规则委托给 `compute_sign`**:此前中间件另有一份签名实现,与 `compute_sign` 在 HMAC 语义上不一致(中间件是对的)。收敛为一处后两者不会再漂移,收敛前后逐组比对 72 种组合,签名结果完全一致。附带:算法取值非法时的报错文案从英文 `Unknown algorithm` 变为框架统一的中文 `不支持的算法`。
|
|
49
|
+
|
|
10
50
|
## [4.7.5] - 2026-06-29
|
|
11
51
|
|
|
12
52
|
### ✨ 新增
|
|
@@ -8,8 +8,8 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|
|
8
8
|
|
|
9
9
|
**DF Test Framework** - 现代化 Python 测试自动化框架
|
|
10
10
|
|
|
11
|
-
- **版本**: v4.
|
|
12
|
-
- **更新时间**: 2026-
|
|
11
|
+
- **版本**: v4.8.0
|
|
12
|
+
- **更新时间**: 2026-08-10
|
|
13
13
|
- **Python**: 3.12+
|
|
14
14
|
- **核心技术栈**: pytest + httpx + Playwright + Pydantic v2 + SQLAlchemy 2.0 + Pluggy
|
|
15
15
|
- **架构**: 五层架构 + 横切关注点(能力层驱动设计)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: df-test-framework
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.8.0
|
|
4
4
|
Summary: 基于交互模式的现代化测试自动化框架,支持多种测试场景
|
|
5
5
|
Project-URL: Homepage, https://github.com/yourorg/df-test-framework
|
|
6
6
|
Project-URL: Repository, https://github.com/yourorg/df-test-framework
|
|
@@ -78,6 +78,8 @@ Requires-Dist: asyncpg>=0.29.0; extra == 'database-async'
|
|
|
78
78
|
Provides-Extra: database-mssql
|
|
79
79
|
Requires-Dist: aioodbc>=0.5.0; extra == 'database-mssql'
|
|
80
80
|
Requires-Dist: pyodbc>=5.1.0; extra == 'database-mssql'
|
|
81
|
+
Provides-Extra: gm
|
|
82
|
+
Requires-Dist: gmalg>=1.1.1; extra == 'gm'
|
|
81
83
|
Provides-Extra: kafka
|
|
82
84
|
Requires-Dist: confluent-kafka>=2.12.0; extra == 'kafka'
|
|
83
85
|
Provides-Extra: mq
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# DF Test Framework 文档中心
|
|
2
2
|
|
|
3
|
-
> 版本:v4.
|
|
3
|
+
> 版本:v4.8.0 · 最近更新:2026-08-10
|
|
4
4
|
> 现代化 Python 测试自动化框架的官方知识库。
|
|
5
5
|
|
|
6
6
|
---
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
| [插件 Hook 扩展指南](guides/plugin_hooks_guide.md) ⭐ | 注册插件、注入全局中间件、挂接测试/会话生命周期 |
|
|
98
98
|
| [插件系统指南](guides/plugins_guide.md) | Pluggy Hooks,自定义插件 |
|
|
99
99
|
| [扩展点指南](guides/extensions.md) | Hook 接入自定义能力(历史参考) |
|
|
100
|
-
| [工具函数指南](guides/helpers_guide.md) |
|
|
100
|
+
| [工具函数指南](guides/helpers_guide.md) | 哈希、API 签名、AES / 国密 SM2·SM3·SM4 加解密、公网 IP |
|
|
101
101
|
|
|
102
102
|
---
|
|
103
103
|
|
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
# 工具函数使用指南
|
|
2
|
+
|
|
3
|
+
> **最后更新**: 2026-08-08
|
|
4
|
+
> **引入版本**: v4.2.0(签名两层拆分与国密支持见 CHANGELOG [Unreleased])
|
|
5
|
+
|
|
6
|
+
## 概述
|
|
7
|
+
|
|
8
|
+
`infrastructure/helpers` 模块提供测试中常用的工具函数,包括哈希计算、AES / 国密加解密、API 签名和公网 IP 探测。
|
|
9
|
+
|
|
10
|
+
**设计原则**:
|
|
11
|
+
- 哈希/签名/网络工具基于 stdlib,**零额外依赖**
|
|
12
|
+
- AES 加解密需安装 `crypto` 可选依赖组(`pycryptodome`)
|
|
13
|
+
- 国密 SM2/SM3/SM4 需安装 `gm` 可选依赖组(`gmalg`)
|
|
14
|
+
- 所有函数均为纯函数,无���态,线程安全
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 快速开始
|
|
19
|
+
|
|
20
|
+
```python
|
|
21
|
+
from df_test_framework import md5, sha1, sha256, hmac_sha256, compute_sign, get_public_ip
|
|
22
|
+
|
|
23
|
+
# 哈希
|
|
24
|
+
md5("hello") # '5d41402abc4b2a76b9719d911017c592'
|
|
25
|
+
sha256("hello") # '2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824'
|
|
26
|
+
hmac_sha256("hello", secret="my_secret")
|
|
27
|
+
|
|
28
|
+
# API 签名
|
|
29
|
+
params = {"userId": "123", "productCode": "P001"}
|
|
30
|
+
sign = compute_sign(params, secret="my_api_key")
|
|
31
|
+
|
|
32
|
+
# 协议拼法特殊时,拆成两层自己组合
|
|
33
|
+
from df_test_framework import build_sign_source, digest_sign
|
|
34
|
+
source = build_sign_source(params, concat_mode="key_value", separator="&")
|
|
35
|
+
sign = digest_sign(source + api_key, algorithm="sha256")
|
|
36
|
+
|
|
37
|
+
# 国密(需 gm 可选依赖)
|
|
38
|
+
from df_test_framework import sm3, sm4_encrypt, sm2_encrypt
|
|
39
|
+
sm3("abc")
|
|
40
|
+
|
|
41
|
+
# 公网 IP
|
|
42
|
+
ip = get_public_ip() # e.g., "113.57.21.67"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 哈希函数
|
|
48
|
+
|
|
49
|
+
基于 Python stdlib `hashlib`,无额外依赖。
|
|
50
|
+
|
|
51
|
+
### md5
|
|
52
|
+
|
|
53
|
+
```python
|
|
54
|
+
from df_test_framework import md5
|
|
55
|
+
|
|
56
|
+
md5("hello")
|
|
57
|
+
# '5d41402abc4b2a76b9719d911017c592'
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
返回 32 位小写 hex 字符串。
|
|
61
|
+
|
|
62
|
+
### sha256
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
from df_test_framework import sha256
|
|
66
|
+
|
|
67
|
+
sha256("hello")
|
|
68
|
+
# '2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824'
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
返回 64 位小写 hex 字符串。
|
|
72
|
+
|
|
73
|
+
### hmac_sha256
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
from df_test_framework import hmac_sha256
|
|
77
|
+
|
|
78
|
+
hmac_sha256("hello", secret="my_secret")
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
返回 64 位小写 hex HMAC-SHA256 签名。
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## API 参数签名
|
|
86
|
+
|
|
87
|
+
签名协议千差万别,但都由两步组成:**把参数拼成签名源**,再**对签名源做摘要**。
|
|
88
|
+
模块按这两步拆开,各自可单独使用:
|
|
89
|
+
|
|
90
|
+
| 函数 | 职责 |
|
|
91
|
+
|------|------|
|
|
92
|
+
| `build_sign_source` | 参数 → 签名源(排序、拼接、密钥位置) |
|
|
93
|
+
| `digest_sign` | 签名源 → 签名(算法、输出大小写) |
|
|
94
|
+
| `compute_sign` | 两步串联的便捷入口,覆盖绝大多数协议 |
|
|
95
|
+
|
|
96
|
+
### 基本用法
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
from df_test_framework import compute_sign
|
|
100
|
+
|
|
101
|
+
params = {"euserId": "123", "productCode": "P001", "buyNum": "1"}
|
|
102
|
+
sign = compute_sign(params, secret="my_api_key")
|
|
103
|
+
# 排序: buyNum, euserId, productCode → "1" + "123" + "P001" + "my_api_key" → MD5
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 参数说明
|
|
107
|
+
|
|
108
|
+
| 参数 | 类型 | 默认值 | 说明 |
|
|
109
|
+
|------|------|--------|------|
|
|
110
|
+
| `params` | `dict[str, Any]` | 必填 | 参与签名的参数。值统一 `str()` 转换,`None` 视作空串 |
|
|
111
|
+
| `secret` | `str` | 必填 | 签名密钥 |
|
|
112
|
+
| `algorithm` | `str` | `"md5"` | `"md5"` / `"sha1"` / `"sha256"` / `"sm3"` / `"hmac-sha256"` |
|
|
113
|
+
| `concat_mode` | `str` | `"values_only"` | `"values_only"` 只拼值;`"key_value"` 拼键值对 |
|
|
114
|
+
| `separator` | `str` | `""` | 各项之间的分隔符 |
|
|
115
|
+
| `key_value_joiner` | `str` | `"="` | 键值连接符。部分协议直接 `keyvalue` 相连,传空串 |
|
|
116
|
+
| `field_order` | `str \| Sequence[str]` | `"sorted"` | `"sorted"` / `"sorted_desc"` / `"as_given"` 或显式字段序列 |
|
|
117
|
+
| `skip_empty` | `bool` | `False` | 跳过空值(`None` 与空串) |
|
|
118
|
+
| `trailing_separator` | `bool` | `False` | 参数段末尾补一个分隔符 |
|
|
119
|
+
| `secret_position` | `str` | `"append"` | 密钥拼在首还是尾 |
|
|
120
|
+
| `secret_key_name` | `str \| None` | `None` | 密钥的键名,拼成 `&key=xxx` 形式 |
|
|
121
|
+
| `output_case` | `str` | `"lower"` | 输出大小写。部分协议要求大写 hex |
|
|
122
|
+
|
|
123
|
+
### 字段顺序
|
|
124
|
+
|
|
125
|
+
默认按 key 字母升序。**回调类协议常按业务语义排字段**(事件→主体→时间→追踪),
|
|
126
|
+
这时传显式序列:
|
|
127
|
+
|
|
128
|
+
```python
|
|
129
|
+
compute_sign(
|
|
130
|
+
payload, api_key,
|
|
131
|
+
concat_mode="key_value", separator="&",
|
|
132
|
+
field_order=("eventType", "cardPwd", "cardNo", "occurTime"),
|
|
133
|
+
secret_key_name="key",
|
|
134
|
+
)
|
|
135
|
+
# → "eventType=USED&cardPwd=P1&cardNo=&occurTime=...&key=api_key" → MD5
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
给了 `field_order` 时,`params` 里**缺失的字段按空串占位**——顺序型协议要占位
|
|
139
|
+
而非跳过,跳过会让分隔符错位。需要丢掉空字段时用 `skip_empty=True`。
|
|
140
|
+
|
|
141
|
+
### HMAC 类算法的密钥语义
|
|
142
|
+
|
|
143
|
+
`hmac-*` 下密钥**不会**被拼进签名源,只作 HMAC 密钥(`secret_position` /
|
|
144
|
+
`secret_key_name` 随之失效)。HMAC 的设计前提就是密钥不进消息体,拼进去既不
|
|
145
|
+
增强安全性,也和标准 HMAC 协议(AWS SigV4、GitHub webhook)对不上。
|
|
146
|
+
|
|
147
|
+
```python
|
|
148
|
+
compute_sign({"a": "1", "b": "2"}, "k", algorithm="hmac-sha256")
|
|
149
|
+
# 签名源是 "12"(不含 k),k 作 HMAC 密钥
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### 拼不出来的协议:自己拼签名源
|
|
153
|
+
|
|
154
|
+
不要等框架加参数。穷举参数追不上真实世界的协议差异,而这条路对任何规则都成立:
|
|
155
|
+
|
|
156
|
+
```python
|
|
157
|
+
from df_test_framework import build_sign_source, digest_sign
|
|
158
|
+
|
|
159
|
+
# 某协议:参数拼完整体转大写,密钥后面还要接 timestamp
|
|
160
|
+
# 密钥不在两端而在中间,任何 secret_position 组合都表达不了
|
|
161
|
+
body = build_sign_source(
|
|
162
|
+
params, concat_mode="key_value", key_value_joiner="", skip_empty=True
|
|
163
|
+
)
|
|
164
|
+
sign = digest_sign(body.upper() + api_key + timestamp, algorithm="sha256")
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 真实协议样例
|
|
168
|
+
|
|
169
|
+
框架测试里以六个真实协议为样本(`tests/infrastructure/test_helpers.py`
|
|
170
|
+
的 `TestRealWorldProtocols`),可直接照抄:
|
|
171
|
+
|
|
172
|
+
| 协议特征 | 写法 |
|
|
173
|
+
|---------|------|
|
|
174
|
+
| 字母序 + 只拼值 + 末尾裸接密钥 | `compute_sign(params, key)` |
|
|
175
|
+
| 固定序 + `k=v&` + 末尾 `key=密钥` | `field_order=(...), concat_mode="key_value", separator="&", secret_key_name="key"` |
|
|
176
|
+
| 跳过空值 + 每项后带 `&` + 大写输出 | `skip_empty=True, trailing_separator=True, output_case="upper"` |
|
|
177
|
+
| key 倒序 | `field_order="sorted_desc"` |
|
|
178
|
+
| 密钥在中间 | 用 `build_sign_source` + `digest_sign` |
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## AES 加解密
|
|
183
|
+
|
|
184
|
+
需要安装 `crypto` 可选依赖:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
pip install df-test-framework[crypto]
|
|
188
|
+
# 或
|
|
189
|
+
pip install pycryptodome
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### 基本用法
|
|
193
|
+
|
|
194
|
+
```python
|
|
195
|
+
from df_test_framework import aes_encrypt, aes_decrypt
|
|
196
|
+
|
|
197
|
+
# AES-CBC 加密(hex 输出)
|
|
198
|
+
ciphertext = aes_encrypt("hello", key="0123456789abcdef", iv="abcdef0123456789")
|
|
199
|
+
|
|
200
|
+
# AES-CBC 解密
|
|
201
|
+
plaintext = aes_decrypt(ciphertext, key="0123456789abcdef", iv="abcdef0123456789")
|
|
202
|
+
assert plaintext == "hello"
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### 参数说明
|
|
206
|
+
|
|
207
|
+
| 参数 | 类型 | 默认值 | 说明 |
|
|
208
|
+
|------|------|--------|------|
|
|
209
|
+
| `plaintext`/`ciphertext` | `str` | 必填 | 明文/密文 |
|
|
210
|
+
| `key` | `str \| bytes` | 必填 | 密钥(16/24/32 字节 → AES-128/192/256) |
|
|
211
|
+
| `iv` | `str \| bytes \| None` | `None` | 初始向量(CBC 模式必填,16 字节) |
|
|
212
|
+
| `mode` | `str` | `"CBC"` | AES 模式:`"CBC"` / `"ECB"` |
|
|
213
|
+
| `encoding` | `str` | `"hex"` | 编码格式:`"hex"` / `"base64"` |
|
|
214
|
+
|
|
215
|
+
### AES-ECB 模式
|
|
216
|
+
|
|
217
|
+
```python
|
|
218
|
+
# ECB 模式不需要 IV
|
|
219
|
+
ciphertext = aes_encrypt("hello", key="0123456789abcdef", mode="ECB")
|
|
220
|
+
plaintext = aes_decrypt(ciphertext, key="0123456789abcdef", mode="ECB")
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Base64 编码
|
|
224
|
+
|
|
225
|
+
```python
|
|
226
|
+
ciphertext = aes_encrypt(
|
|
227
|
+
"hello",
|
|
228
|
+
key="0123456789abcdef",
|
|
229
|
+
iv="abcdef0123456789",
|
|
230
|
+
encoding="base64",
|
|
231
|
+
)
|
|
232
|
+
plaintext = aes_decrypt(
|
|
233
|
+
ciphertext,
|
|
234
|
+
key="0123456789abcdef",
|
|
235
|
+
iv="abcdef0123456789",
|
|
236
|
+
encoding="base64",
|
|
237
|
+
)
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### 未安装依赖时的行为
|
|
241
|
+
|
|
242
|
+
如果未安装 `pycryptodome`,导入 `aes_encrypt`/`aes_decrypt` 时会静默跳过(不报错)。调用时会抛出 `ImportError` 并提示安装方式。
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 国密 SM2/SM3/SM4
|
|
247
|
+
|
|
248
|
+
需要安装 `gm` 可选依赖:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
pip install df-test-framework[gm]
|
|
252
|
+
# 或
|
|
253
|
+
pip install gmalg
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### 基本用法
|
|
257
|
+
|
|
258
|
+
```python
|
|
259
|
+
from df_test_framework import sm2_decrypt, sm2_encrypt, sm3, sm4_decrypt, sm4_encrypt
|
|
260
|
+
|
|
261
|
+
# SM3 杂凑
|
|
262
|
+
sm3("abc") # '66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0'
|
|
263
|
+
|
|
264
|
+
# 也可作签名算法
|
|
265
|
+
compute_sign(params, api_key, algorithm="sm3")
|
|
266
|
+
|
|
267
|
+
# SM4(默认 ECB + PKCS7,国密接口文档普遍规定 SM4/ECB/PKCS5Padding)
|
|
268
|
+
ciphertext = sm4_encrypt("hello", key="0123456789abcdef")
|
|
269
|
+
plaintext = sm4_decrypt(ciphertext, key="0123456789abcdef")
|
|
270
|
+
|
|
271
|
+
# SM2(输出 C1C3C2,C1 带 04 前缀,与 Java BouncyCastle 直接互通)
|
|
272
|
+
ciphertext = sm2_encrypt(b"sm4-key-16bytes!", public_key=server_pk)
|
|
273
|
+
sm4_key = sm2_decrypt(ciphertext, private_key=client_sk) # 返回 bytes
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### 参数说明
|
|
277
|
+
|
|
278
|
+
| 函数 | 关键参数 | 说明 |
|
|
279
|
+
|------|---------|------|
|
|
280
|
+
| `sm4_encrypt/decrypt` | `key` | 必须 16 字节;`str` 按 UTF-8 处理 |
|
|
281
|
+
| | `mode` | `"ECB"`(默认)/ `"CBC"`;CBC 需 `iv` |
|
|
282
|
+
| | `encoding` | `"base64"`(默认)/ `"hex"` |
|
|
283
|
+
| `sm2_encrypt` | `public_key` | 裸点 65/64 字节,或 X.509 DER(91 字节);hex、Base64 或 bytes |
|
|
284
|
+
| `sm2_decrypt` | `private_key` | 裸值 32 字节或 PKCS#8 DER(150 字节);**返回 `bytes`** 而非 `str` |
|
|
285
|
+
|
|
286
|
+
`sm2_decrypt` 返回 `bytes` 是因为信封加密里这一步解出的通常是 SM4 密钥
|
|
287
|
+
(16 字节二进制),强行 decode 会抛异常。文本明文自行 `.decode("utf-8")`。
|
|
288
|
+
|
|
289
|
+
### 与 Java 后端互通:`04` 前缀是硬要求
|
|
290
|
+
|
|
291
|
+
Java 侧用 BouncyCastle `SM2Engine`,C1 用未压缩点编码,**带 `04` 前缀**:
|
|
292
|
+
|
|
293
|
+
```
|
|
294
|
+
04 ‖ X(32) ‖ Y(32) ‖ C3(32) ‖ C2(n)
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
后端切分密文的依据就是这个(`c1Len = fieldSize/8*2 + 1 = 65`,那个 `+1` 就是 `04`)。
|
|
298
|
+
少了它,后端会把 X 的首字节当成前缀,整个切错位。
|
|
299
|
+
|
|
300
|
+
`sm2_encrypt` 默认输出的正是这个格式,**不需要手工补前缀**。
|
|
301
|
+
`sm2_decrypt` 反过来对不带 `04` 的密文自动补齐,兼容其他库的产出。
|
|
302
|
+
|
|
303
|
+
### 依赖选型:为什么是 `gmalg` 而不是 `gmssl`
|
|
304
|
+
|
|
305
|
+
> 调研于 2026-08。国密官方(国家密码管理局/密标委)**只发标准、不出参考实现**,
|
|
306
|
+
> 也不提供官方 SDK——只有标准文本 + 商用密码产品检测认证。
|
|
307
|
+
> 没有权威参考实现来消解编码分歧,Python 生态因此质量参差,选型必须自己验。
|
|
308
|
+
|
|
309
|
+
| 库 | 最新版 | 维护 | 依赖 | `04` 前缀 | 结论 |
|
|
310
|
+
|----|--------|------|------|----------|------|
|
|
311
|
+
| **gmalg** | 1.1.1 / 2026-01 | 306★,2 open issues | **纯 Python 零依赖** | 原生带 | **采用** |
|
|
312
|
+
| gmssl (py-gmssl) | 3.2.2 / **2022-06** | 559★,**48 open** | 纯 Python | 不带 | 排除 |
|
|
313
|
+
| gmssl-python(官方绑定) | 2.2.2 / 2023-10 | ctypes | **需装 libgmssl** | DER | 部署代价大 |
|
|
314
|
+
| gmssl_pyx | 2.0.1 / 2026-04 | 活跃 | C 扩展 | DER,需转换 | 备选 |
|
|
315
|
+
| tongsuopy(蚂蚁) | 1.0.1 / 2023-02 | — | cffi | — | **发布版无 SM2 加解密 API** |
|
|
316
|
+
| fastgm | 0.4.1 / 2022-02 | 停更 | 需编译 | 不带 | 排除 |
|
|
317
|
+
|
|
318
|
+
**star 数最高的 `gmssl` 恰恰不能用**,三个已验证的问题:
|
|
319
|
+
|
|
320
|
+
1. **密文不带 `04`**([#101](https://github.com/duanhongyi/gmssl/issues/101))——
|
|
321
|
+
与 BouncyCastle 不互通,必须手工补/剥
|
|
322
|
+
2. **解密不校验 C3**——密文出错时**静默返回垃圾数据而不报错**。
|
|
323
|
+
对测试代码这是最坏的失败模式:用例会"通过"但数据是错的
|
|
324
|
+
3. `lstrip("04")` 按**字符集**而非前缀剥离([#96](https://github.com/duanhongyi/gmssl/issues/96)),
|
|
325
|
+
会破坏以 `0`/`4` 开头的公钥——实测约 1/8 的随机公钥受影响
|
|
326
|
+
|
|
327
|
+
另有 10-20% 随机解密失败的报告([#102](https://github.com/duanhongyi/gmssl/issues/102),2026-03 仍 open)。
|
|
328
|
+
|
|
329
|
+
**两库算法本身是一致的**:`gmalg` 密文剥掉 `04` 后 `gmssl` 能解,反之补上也能解。
|
|
330
|
+
差别只在 C1 的点编码约定——`gmssl` 不是算错,是选了与 Java 生态相反的那种。
|
|
331
|
+
|
|
332
|
+
### 验证依据
|
|
333
|
+
|
|
334
|
+
框架测试的期望值全部来自外部权威,不是拿底层库跟自己比
|
|
335
|
+
(自比测试在换实现或底层算错时一样是绿的):
|
|
336
|
+
|
|
337
|
+
| 来源 | 覆盖 |
|
|
338
|
+
|------|------|
|
|
339
|
+
| GM/T 0004-2012 附录 A | SM3 标准向量 |
|
|
340
|
+
| GB/T 32907-2016 | SM4 标准向量 |
|
|
341
|
+
| 后端 `SM2Utils` 切分逻辑 | 密文布局 `04‖X‖Y‖C3‖C2` |
|
|
342
|
+
| 对接文档「重要说明」 | 完整信封加密协议(见 `tests/infrastructure/test_gmcrypto.py`) |
|
|
343
|
+
|
|
344
|
+
### 完整信封加密示例
|
|
345
|
+
|
|
346
|
+
国密接口常见的三段式(SM4 加业务数据 → SM2 加 SM4 密钥 → SM3 签名):
|
|
347
|
+
|
|
348
|
+
```python
|
|
349
|
+
import json, secrets
|
|
350
|
+
|
|
351
|
+
sm4_key = secrets.token_bytes(16) # 1. 随机 SM4 密钥
|
|
352
|
+
req_param = sm4_encrypt(json.dumps(business), sm4_key) # 2. SM4 加业务参数
|
|
353
|
+
req_key = sm2_encrypt(sm4_key, server_public_key) # 3. SM2 加 SM4 密钥
|
|
354
|
+
sign = sm3(req_param + api_key) # 4. SM3 签名
|
|
355
|
+
|
|
356
|
+
payload = {"reqParam": req_param, "reqKey": req_key, "sign": sign, ...}
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### 未安装依赖时的行为
|
|
360
|
+
|
|
361
|
+
与 AES 一致:未安装 `gmalg` 时导入静默跳过,调用抛 `ImportError` 并提示安装方式。
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## 公网 IP 探测
|
|
366
|
+
|
|
367
|
+
```python
|
|
368
|
+
from df_test_framework import get_public_ip
|
|
369
|
+
|
|
370
|
+
ip = get_public_ip()
|
|
371
|
+
print(ip) # e.g., "113.57.21.67"
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### 工作原理
|
|
375
|
+
|
|
376
|
+
依次尝试以下公共服务,任一成功即返回:
|
|
377
|
+
1. `httpbin.org/ip`
|
|
378
|
+
2. `api.ipify.org`
|
|
379
|
+
3. `ifconfig.me/ip`
|
|
380
|
+
|
|
381
|
+
### 参数
|
|
382
|
+
|
|
383
|
+
| 参数 | 类型 | 默认值 | 说明 |
|
|
384
|
+
|------|------|--------|------|
|
|
385
|
+
| `timeout` | `int` | `10` | 每个服务的超时时间(秒) |
|
|
386
|
+
|
|
387
|
+
### 使用场景
|
|
388
|
+
|
|
389
|
+
- IP 白名单测试:测试前获取当前出口 IP,确认已加入白名单
|
|
390
|
+
- 网络环境验证:确认测试机器的网络出口
|
|
391
|
+
|
|
392
|
+
### 异常处理
|
|
393
|
+
|
|
394
|
+
所有服务均不可用时抛出 `RuntimeError`:
|
|
395
|
+
|
|
396
|
+
```python
|
|
397
|
+
try:
|
|
398
|
+
ip = get_public_ip(timeout=5)
|
|
399
|
+
except RuntimeError as e:
|
|
400
|
+
print(f"无法获取公网 IP: {e}")
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## 实际场景示例
|
|
406
|
+
|
|
407
|
+
### 场景1:虚拟充值接口签名
|
|
408
|
+
|
|
409
|
+
```python
|
|
410
|
+
from df_test_framework import compute_sign
|
|
411
|
+
|
|
412
|
+
def test_recharge(api_service_client):
|
|
413
|
+
params = {
|
|
414
|
+
"euserId": "U001",
|
|
415
|
+
"productCode": "PHONE_50",
|
|
416
|
+
"buyNum": "1",
|
|
417
|
+
"orderNo": "ORD20260402001",
|
|
418
|
+
}
|
|
419
|
+
sign = compute_sign(params, secret="my_api_key")
|
|
420
|
+
params["sign"] = sign
|
|
421
|
+
|
|
422
|
+
result = api_service_client.recharge(**params)
|
|
423
|
+
assert result["retCode"] == "0"
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
### 场景2:加密敏感参数
|
|
427
|
+
|
|
428
|
+
```python
|
|
429
|
+
from df_test_framework import aes_encrypt
|
|
430
|
+
|
|
431
|
+
def test_create_order_with_encrypted_phone(order_api):
|
|
432
|
+
encrypted_phone = aes_encrypt(
|
|
433
|
+
"13800138000",
|
|
434
|
+
key="0123456789abcdef",
|
|
435
|
+
iv="abcdef0123456789",
|
|
436
|
+
)
|
|
437
|
+
response = order_api.create_order(phone=encrypted_phone)
|
|
438
|
+
assert response["success"] is True
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
### 场景3:IP 白名单验证
|
|
442
|
+
|
|
443
|
+
```python
|
|
444
|
+
from df_test_framework import get_public_ip
|
|
445
|
+
|
|
446
|
+
def test_api_ip_whitelist(api_client):
|
|
447
|
+
ip = get_public_ip()
|
|
448
|
+
print(f"当前出口 IP: {ip}")
|
|
449
|
+
# 确认 IP 在白名单中,否则请求会被拒绝
|
|
450
|
+
response = api_client.get("/protected/data")
|
|
451
|
+
assert response.status_code != 403, f"IP {ip} 不在白名单中"
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
---
|
|
455
|
+
|
|
456
|
+
## 相关文档
|
|
457
|
+
|
|
458
|
+
- [装饰器使用指南](decorators_guide.md) - @api_class、@actions_class、@service_client
|
|
459
|
+
- [HTTP 客户端指南](http_client_guide.md) - HTTP 客户端和中间件
|
|
460
|
+
- [v4.2.0 发布说明](../releases/v4.2.0.md) - 完整变更日志
|
|
461
|
+
|
|
462
|
+
---
|
|
463
|
+
|
|
464
|
+
**完成时间**: 2026-04-02
|
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
# Release Notes 发布说明索引
|
|
2
2
|
|
|
3
|
-
> 当前版本:**v4.
|
|
3
|
+
> 当前版本:**v4.8.0** · 最近更新:2026-08-10
|
|
4
4
|
|
|
5
5
|
完整变更摘要见 [CHANGELOG.md](../../CHANGELOG.md)。
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
## v4.
|
|
9
|
+
## v4.8.x(当前系列)
|
|
10
10
|
|
|
11
11
|
| 版本 | 发布日期 | 核心特性 |
|
|
12
12
|
|------|----------|----------|
|
|
13
|
-
| **[v4.
|
|
13
|
+
| **[v4.8.0](v4.8.0.md)** ⭐ 当前 | 2026-08-10 | 国密 SM2/SM3/SM4 + 签名模块两层拆分(`build_sign_source` / `digest_sign`)|
|
|
14
|
+
|
|
15
|
+
## v4.7.x
|
|
16
|
+
|
|
17
|
+
| 版本 | 发布日期 | 核心特性 |
|
|
18
|
+
|------|----------|----------|
|
|
19
|
+
| **[v4.7.5](v4.7.5.md)** | 2026-06-29 | 插件扩展 Hook 接线 + 可观测性实例级注入 |
|
|
20
|
+
| **[v4.7.4](v4.7.4.md)** | 2026-06-29 | `OmsReporterPlugin` 嵌入式 scope 路由:一次 Bootstrap 多次执行复用,`bind_execution` / `unbind_execution` |
|
|
14
21
|
| **[v4.7.3](v4.7.3.md)** | 2026-05-27 | 日志时间戳标准化:RFC 3339 毫秒 + 显式时区,`use_utc` → `timestamp` |
|
|
15
22
|
| **[v4.7.2](v4.7.2.md)** | 2026-05-26 | 脚手架 `flows/` 目录 + 文档结构补强 + pytest addopts 收敛 |
|
|
16
23
|
| **[v4.7.1](v4.7.1.md)** | 2026-05-22 | 修复 `_auto_allure_observer` 未取消订阅导致 Allure 重复记录 |
|