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.
Files changed (922) hide show
  1. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/AGENTS.md +2 -2
  2. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/CHANGELOG.md +40 -0
  3. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/CLAUDE.md +2 -2
  4. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/PKG-INFO +3 -1
  5. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/README.md +2 -2
  6. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/ESSENTIAL_DOCS.md +2 -2
  7. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/README.md +2 -2
  8. df_test_framework-4.8.0/docs/guides/helpers_guide.md +464 -0
  9. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/README.md +10 -3
  10. df_test_framework-4.8.0/docs/releases/v4.8.0.md +144 -0
  11. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/pyproject.toml +8 -1
  12. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/__init__.py +24 -1
  13. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/signature.py +14 -25
  14. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/object/oss/client.py +0 -8
  15. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/helpers/__init__.py +14 -2
  16. df_test_framework-4.8.0/src/df_test_framework/infrastructure/helpers/gmcrypto.py +296 -0
  17. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/helpers/hash.py +44 -1
  18. df_test_framework-4.8.0/src/df_test_framework/infrastructure/helpers/signature.py +252 -0
  19. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/auth/signature/test_strategies.py +6 -2
  20. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/storages/test_oss.py +8 -7
  21. df_test_framework-4.8.0/tests/infrastructure/test_gmcrypto.py +259 -0
  22. df_test_framework-4.8.0/tests/infrastructure/test_helpers.py +650 -0
  23. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/uv.lock +15 -2
  24. df_test_framework-4.7.5/docs/guides/helpers_guide.md +0 -306
  25. df_test_framework-4.7.5/src/df_test_framework/infrastructure/helpers/signature.py +0 -81
  26. df_test_framework-4.7.5/tests/infrastructure/test_helpers.py +0 -258
  27. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.editorconfig +0 -0
  28. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.env.example +0 -0
  29. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.gitattributes +0 -0
  30. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.github/workflows/README.md +0 -0
  31. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.github/workflows/lint.yml +0 -0
  32. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.github/workflows/release.yml +0 -0
  33. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.github/workflows/scheduled.yml +0 -0
  34. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.github/workflows/security.yml +0 -0
  35. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.github/workflows/test.yml +0 -0
  36. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.gitignore +0 -0
  37. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.gitleaks.toml +0 -0
  38. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.gitleaksignore +0 -0
  39. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.pre-commit-config.yaml +0 -0
  40. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/.python-version +0 -0
  41. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/CONTRIBUTING.md +0 -0
  42. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/README_PYPI.md +0 -0
  43. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/CONTRIBUTOR_GUIDE.md +0 -0
  44. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/DOC_REORGANIZATION_PLAN_v4.0.md +0 -0
  45. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/FAQ.md +0 -0
  46. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/LEARNING_PATH.md +0 -0
  47. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/README.md +0 -0
  48. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/clients.md +0 -0
  49. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core/README.md +0 -0
  50. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core/context.md +0 -0
  51. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core/events.md +0 -0
  52. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core/exceptions.md +0 -0
  53. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core/middleware.md +0 -0
  54. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core/protocols.md +0 -0
  55. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core/types.md +0 -0
  56. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/core.md +0 -0
  57. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/databases.md +0 -0
  58. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/drivers.md +0 -0
  59. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/extensions.md +0 -0
  60. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/infrastructure.md +0 -0
  61. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/patterns.md +0 -0
  62. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/api-reference/testing.md +0 -0
  63. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/ARCHITECTURE_V4.0.md +0 -0
  64. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/CODE_STRUCTURE.md +0 -0
  65. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/PLUGIN_SYSTEM_V3.37.md +0 -0
  66. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/README.md +0 -0
  67. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/TEST_EXECUTION_LIFECYCLE.md +0 -0
  68. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/README.md +0 -0
  69. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/REFACTORING_PLAN_V3.md +0 -0
  70. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/REFACTORING_PLAN_V3_REVISED.md +0 -0
  71. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/DI_STRATEGY.md +0 -0
  72. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/PREPARE_DATA_DESIGN.md +0 -0
  73. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/TESTING_MODULE_OPTIMIZATION.md +0 -0
  74. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/UOW_CLEANUP_ARCHITECTURE.md +0 -0
  75. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/UOW_REFACTORING_PROPOSAL.md +0 -0
  76. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/allure_integration_modes.md +0 -0
  77. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/capability_plan_vs_current.md +0 -0
  78. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/config-driven-design.md +0 -0
  79. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/config-management-analysis.md +0 -0
  80. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/eventbus-integration-analysis.md +0 -0
  81. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/failure-diagnosis-v2-design.md +0 -0
  82. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/future_allure_plugin_plans.md +0 -0
  83. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/http-vs-web-comparison.md +0 -0
  84. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/observability-debugging-unification.md +0 -0
  85. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/provider-pattern-deep-dive.md +0 -0
  86. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/tech-debt-cleanup-plan.md +0 -0
  87. {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
  88. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/design/ui-observability-design.md +0 -0
  89. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/discussion_1_initial_issues.md +0 -0
  90. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/v3_complete_draft.md +0 -0
  91. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/v3_final_draft.md +0 -0
  92. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/FRAMEWORK_ARCHITECTURE_v3.6.2.md +0 -0
  93. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/OVERVIEW_V3.17.md +0 -0
  94. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/V3.14_ENTERPRISE_PLATFORM_DESIGN.md +0 -0
  95. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/V3.16_LAYER4_BOOTSTRAP_ARCHITECTURE.md +0 -0
  96. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/V3.17_EVENT_SYSTEM_REDESIGN.md +0 -0
  97. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/V3_ARCHITECTURE.md +0 -0
  98. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/V3_IMPLEMENTATION.md +0 -0
  99. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/overview.md +0 -0
  100. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/archive/versions/v2-architecture.md +0 -0
  101. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/extension-points.md +0 -0
  102. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/failure-diagnosis-hook-example.py +0 -0
  103. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/multi-project-reuse.md +0 -0
  104. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/observability-architecture.md +0 -0
  105. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/observability-modernization.md +0 -0
  106. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/architecture/test-type-support.md +0 -0
  107. {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
  108. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/README.md +0 -0
  109. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/ACTION_PLAN_v2.0.md +0 -0
  110. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/AUDIT_VERIFICATION_REPORT.md +0 -0
  111. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/AUTH_PLACEMENT_ANALYSIS.md +0 -0
  112. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/CODE_REVIEW_f95e08cd.md +0 -0
  113. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/COMPREHENSIVE_FEATURE_AUDIT.md +0 -0
  114. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/FRAMEWORK_OPTIMIZATION_ANALYSIS_2025.md +0 -0
  115. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/PHASE2_COMPARISON_ANALYSIS.md +0 -0
  116. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/PHASE2_COMPLETION_REPORT.md +0 -0
  117. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/PHASE2_SUMMARY.md +0 -0
  118. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/README.md +0 -0
  119. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis/V3_REFACTORING_COMPLETE.md +0 -0
  120. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/ALLURE_HTTP_LOGGING_ISSUE.md +0 -0
  121. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_CHECK_REPORT.md +0 -0
  122. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_DESIGN.md +0 -0
  123. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/ALLURE_INTEGRATION_SUMMARY.md +0 -0
  124. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/ALLURE_ROOT_CAUSE_ANALYSIS.md +0 -0
  125. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/CODE_ANALYSIS_AND_PROGRESS.md +0 -0
  126. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/COMPREHENSIVE_FRAMEWORK_EVALUATION.md +0 -0
  127. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/analysis_2025/CONFIG_MODERNIZATION_ANALYSIS.md +0 -0
  128. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/ARCHITECTURE_AUDIT.md +0 -0
  129. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/FUTURE_ENHANCEMENTS.md +0 -0
  130. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/IMPLEMENTATION_SUMMARY.md +0 -0
  131. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/MIDDLEWARE_V3.14_DESIGN.md +0 -0
  132. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/ROADMAP_V3.29_ENHANCEMENTS.md +0 -0
  133. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/SIGNATURE_FRAMEWORK_CAPABILITIES.md +0 -0
  134. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/TEMPLATE_DEBUG_FIXTURES_ISSUE.md +0 -0
  135. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/observability-config-design.md +0 -0
  136. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/ui-best-practices-2026.md +0 -0
  137. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/web-architecture-consistency-design.md +0 -0
  138. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/design/web-event-driven-comparison.md +0 -0
  139. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/evaluations_2025/DUAL_AI_ANALYSIS_COMPARISON.md +0 -0
  140. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/evaluations_2025/FRAMEWORK_ASSESSMENT.md +0 -0
  141. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/evaluations_2025/FRAMEWORK_BEST_PRACTICES_UPDATE.md +0 -0
  142. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/evaluations_2025/FRAMEWORK_CAPABILITIES.md +0 -0
  143. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/evaluations_2025/FRAMEWORK_IMPROVEMENT_PROPOSALS.md +0 -0
  144. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/guides/async_database_guide.md +0 -0
  145. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/guides/async_http_client.md +0 -0
  146. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/guides/httpx_advanced_usage.md +0 -0
  147. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/guides/logging_configuration.md +0 -0
  148. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/guides/logging_pytest_integration.md +0 -0
  149. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/guides/modern_logging_best_practices.md +0 -0
  150. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/guides/repository_uow_guide.md +0 -0
  151. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/111.md +0 -0
  152. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/CONFIG_AND_INTERCEPTOR_INTEGRATION.md +0 -0
  153. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/DIRECTORY_STRUCTURE_REFACTORING.md +0 -0
  154. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE.md +0 -0
  155. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_ARCHITECTURE_VERIFICATION.md +0 -0
  156. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_CONFIG_BEST_PRACTICES.md +0 -0
  157. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_DESIGN.md +0 -0
  158. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_IDEAL_VS_ACTUAL.md +0 -0
  159. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_LOCATION_DECISION.md +0 -0
  160. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_NAMING_STANDARDS.md +0 -0
  161. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/INTERCEPTOR_PERFORMANCE_ANALYSIS.md +0 -0
  162. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/README.md +0 -0
  163. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/REFACTORING_IMPLEMENTATION_PLAN.md +0 -0
  164. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/interceptor_refactoring/REFACTORING_PROGRESS.md +0 -0
  165. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/issues/README.md +0 -0
  166. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/issues/summary.md +0 -0
  167. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/issues/v1.md +0 -0
  168. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/migration/README.md +0 -0
  169. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/migration/v3.15-to-v3.16.md +0 -0
  170. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/CAPABILITY_LAYER_OPTIMIZATION.md +0 -0
  171. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/REFACTORING_PLAN_v2.md +0 -0
  172. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/REFACTORING_TASKS_v2.md +0 -0
  173. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/RFC_MULTIPART_FORM_DATA_SUPPORT.md +0 -0
  174. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/RFC_MULTIPART_IMPLEMENTATION_CODE.md +0 -0
  175. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/UV_SYNC_MIGRATION_SUMMARY.md +0 -0
  176. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/UV_SYNC_QUICK_START.md +0 -0
  177. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/plans/v2-migration-plan-draft.md +0 -0
  178. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/CHANGELOG_AUDIT_REPORT.md +0 -0
  179. {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
  180. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/CORE_DOCS_UPDATE_PLAN.md +0 -0
  181. {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
  182. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/DOCUMENTATION_CLEANUP_SUMMARY.md +0 -0
  183. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/DOCUMENTATION_INDEX.md +0 -0
  184. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/DOCUMENTATION_MAINTENANCE_COMPLETE.md +0 -0
  185. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/DOCUMENTATION_UPDATE_CHECKLIST.md +0 -0
  186. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/DOC_UPDATE_SUMMARY.md +0 -0
  187. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/IMPROVEMENTS_2025-01-09.md +0 -0
  188. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/PHASE3_COMPLETION_REPORT.md +0 -0
  189. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/PYTHON_VERSION_UNIFICATION.md +0 -0
  190. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/REFACTORING_COMPLETION_CHECK.md +0 -0
  191. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/TEST_CODE_GENERATION_ANALYSIS.md +0 -0
  192. {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
  193. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.3.0_MIGRATION_CHECKLIST.md +0 -0
  194. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.5_ALLURE_INTEGRATION_PLAN.md +0 -0
  195. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.5_DOCUMENTATION_COMPLETE.md +0 -0
  196. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.5_OBSERVABILITY_FINAL_STATUS.md +0 -0
  197. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.5_PHASE2_ACCEPTANCE_REPORT.md +0 -0
  198. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN.md +0 -0
  199. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/V3.5_REFACTOR_PLAN_REVISED.md +0 -0
  200. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/VERIFIED_BEST_PRACTICES_INTEGRATION_COMPLETE.md +0 -0
  201. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/reports_2025/async_http_client_design.md +0 -0
  202. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/user-guide/PHASE3_FEATURES.md +0 -0
  203. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/user-guide/extensions.md +0 -0
  204. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/user-guide/ui-testing.md +0 -0
  205. {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
  206. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/FRAMEWORK_DESIGN_PRINCIPLES.md +0 -0
  207. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/README.md +0 -0
  208. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/UPGRADE_SUMMARY_v1.3.1.md +0 -0
  209. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/architecture.md +0 -0
  210. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/best-practices.md +0 -0
  211. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/config-integration-guide.md +0 -0
  212. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/optimization-report.md +0 -0
  213. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/v1/publishing.md +0 -0
  214. {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
  215. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/versions/QUICK_START_V3.14.md +0 -0
  216. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/archive/versions/QUICK_START_V3.5.md +0 -0
  217. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/ci-templates/README.md +0 -0
  218. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/ci-templates/github-actions.yml +0 -0
  219. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/ci-templates/gitlab-ci.yml +0 -0
  220. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/development/DOCUMENTATION_MAINTENANCE.md +0 -0
  221. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/development/FRAMEWORK_DEPENDENCY_MANAGEMENT.md +0 -0
  222. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/development/RELEASE.md +0 -0
  223. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/development/VERSION_CONTROL_RULES.md +0 -0
  224. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/development/local-development.md +0 -0
  225. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/DECIMAL_GUIDE.md +0 -0
  226. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/allure_plugin.md +0 -0
  227. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/assertions_guide.md +0 -0
  228. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/async_api_guide.md +0 -0
  229. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/auth_session_guide.md +0 -0
  230. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/bootstrap_guide.md +0 -0
  231. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/config_guide.md +0 -0
  232. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/database_guide.md +0 -0
  233. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/decorators_guide.md +0 -0
  234. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/distributed_tracing.md +0 -0
  235. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/event_bus_guide.md +0 -0
  236. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/extensions.md +0 -0
  237. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/factory_guide.md +0 -0
  238. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/fixture_chain_pattern.md +0 -0
  239. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/fixtures_guide.md +0 -0
  240. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/graphql_client.md +0 -0
  241. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/grpc_client.md +0 -0
  242. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/http_client_guide.md +0 -0
  243. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/integration-guide.md +0 -0
  244. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/local_debug_quickstart.md +0 -0
  245. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/logging_guide.md +0 -0
  246. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/message_queue.md +0 -0
  247. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/middleware_guide.md +0 -0
  248. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/mocking.md +0 -0
  249. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/monitoring_plugin.md +0 -0
  250. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/openapi_guide.md +0 -0
  251. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/plugin_hooks_guide.md +0 -0
  252. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/plugins_guide.md +0 -0
  253. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/prometheus_metrics.md +0 -0
  254. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/redis_guide.md +0 -0
  255. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/resilience_guide.md +0 -0
  256. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/sanitize_guide.md +0 -0
  257. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/scaffold_cli_guide.md +0 -0
  258. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/service_client_guide.md +0 -0
  259. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/storage.md +0 -0
  260. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/telemetry_guide.md +0 -0
  261. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/test_data.md +0 -0
  262. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/test_data_cleanup.md +0 -0
  263. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/test_data_pipeline_design.md +0 -0
  264. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/testing-development.md +0 -0
  265. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/guides/web-ui-testing.md +0 -0
  266. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/migration/README.md +0 -0
  267. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/migration/v3-to-v4.md +0 -0
  268. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.0.0-alpha.md +0 -0
  269. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.1.0.md +0 -0
  270. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.10.0.md +0 -0
  271. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.11.0.md +0 -0
  272. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.11.1.md +0 -0
  273. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.12.0.md +0 -0
  274. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.12.1.md +0 -0
  275. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.13.0.md +0 -0
  276. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.14.0.md +0 -0
  277. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.14.0_completion_report.md +0 -0
  278. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.14.0_implementation_complete.md +0 -0
  279. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.16.0.md +0 -0
  280. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.17.0.md +0 -0
  281. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.17.1.md +0 -0
  282. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.17.2.md +0 -0
  283. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.18.0.md +0 -0
  284. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.18.1-bugfix.md +0 -0
  285. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.18.1.md +0 -0
  286. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.19.0.md +0 -0
  287. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.2.0.md +0 -0
  288. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.20.0.md +0 -0
  289. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.21.0.md +0 -0
  290. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.22.0.md +0 -0
  291. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.22.1.md +0 -0
  292. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.23.0.md +0 -0
  293. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.24.0.md +0 -0
  294. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.25.0.md +0 -0
  295. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.26.0.md +0 -0
  296. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.27.0.md +0 -0
  297. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.28.0.md +0 -0
  298. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.28.1.md +0 -0
  299. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.29.0.md +0 -0
  300. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.3.0.md +0 -0
  301. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.30.0.md +0 -0
  302. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.31.0.md +0 -0
  303. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.32.0.md +0 -0
  304. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.33.0.md +0 -0
  305. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.34.0.md +0 -0
  306. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.34.1.md +0 -0
  307. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.0.md +0 -0
  308. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.1.md +0 -0
  309. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.2.md +0 -0
  310. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.3.md +0 -0
  311. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.4.md +0 -0
  312. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.5.md +0 -0
  313. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.6.md +0 -0
  314. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.35.7.md +0 -0
  315. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.36.0.md +0 -0
  316. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.36.1.md +0 -0
  317. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.37.0.md +0 -0
  318. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.0.md +0 -0
  319. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.10.md +0 -0
  320. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.2.md +0 -0
  321. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.4.md +0 -0
  322. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.5.md +0 -0
  323. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.7.md +0 -0
  324. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.8.md +0 -0
  325. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.38.9.md +0 -0
  326. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.39.0.md +0 -0
  327. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.39.1.md +0 -0
  328. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.4.0.md +0 -0
  329. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.40.0.md +0 -0
  330. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.41.0.md +0 -0
  331. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.41.1.md +0 -0
  332. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.42.0.md +0 -0
  333. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.43.0.md +0 -0
  334. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.44.0.md +0 -0
  335. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.45.0.md +0 -0
  336. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.46.1.md +0 -0
  337. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.46.2.md +0 -0
  338. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.46.3.md +0 -0
  339. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.5.0.md +0 -0
  340. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.6.0.md +0 -0
  341. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.6.1.md +0 -0
  342. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.6.2.md +0 -0
  343. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.7.0.md +0 -0
  344. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.8.0.md +0 -0
  345. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v3.9.0.md +0 -0
  346. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.0.0.md +0 -0
  347. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.0.1.md +0 -0
  348. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.0.2.md +0 -0
  349. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.0.3.md +0 -0
  350. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.0.4.md +0 -0
  351. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.1.0.md +0 -0
  352. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.1.1.md +0 -0
  353. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.1.2.md +0 -0
  354. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.2.0.md +0 -0
  355. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.2.1.md +0 -0
  356. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.2.2.md +0 -0
  357. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.3.0.md +0 -0
  358. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.3.1.md +0 -0
  359. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.4.0.md +0 -0
  360. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.4.1.md +0 -0
  361. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.4.2.md +0 -0
  362. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.4.3.md +0 -0
  363. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.4.4.md +0 -0
  364. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.5.0.md +0 -0
  365. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.6.0.md +0 -0
  366. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.6.1.md +0 -0
  367. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.7.0.md +0 -0
  368. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.7.1.md +0 -0
  369. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.7.2.md +0 -0
  370. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.7.3.md +0 -0
  371. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.7.4.md +0 -0
  372. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/releases/v4.7.5.md +0 -0
  373. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/skills/write-code.zip +0 -0
  374. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/skills/write-test.zip +0 -0
  375. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/troubleshooting/README.md +0 -0
  376. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/troubleshooting/common-errors.md +0 -0
  377. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/troubleshooting/debugging-guide.md +0 -0
  378. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/BEST_PRACTICES.md +0 -0
  379. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/QUICK_REFERENCE.md +0 -0
  380. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/QUICK_START.md +0 -0
  381. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/README.md +0 -0
  382. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/USER_MANUAL.md +0 -0
  383. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/VERIFIED_BEST_PRACTICES.md +0 -0
  384. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/ci-cd.md +0 -0
  385. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/code-generation.md +0 -0
  386. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/configuration.md +0 -0
  387. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/cross-project-sharing.md +0 -0
  388. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/debugging.md +0 -0
  389. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/examples.md +0 -0
  390. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/multi-repo.md +0 -0
  391. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/nested-settings-guide.md +0 -0
  392. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/docs/user-guide/security-best-practices.md +0 -0
  393. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/01-basic/README.md +0 -0
  394. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/01-basic/database_operations.py +0 -0
  395. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/01-basic/http_client_usage.py +0 -0
  396. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/01-basic/redis_cache.py +0 -0
  397. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/01-basic/storage_usage.py +0 -0
  398. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/02-bootstrap/README.md +0 -0
  399. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/02-bootstrap/custom_providers.py +0 -0
  400. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/02-bootstrap/custom_settings.py +0 -0
  401. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/02-bootstrap/minimal_bootstrap.py +0 -0
  402. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/02-bootstrap/with_extensions.py +0 -0
  403. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/03-testing/README.md +0 -0
  404. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/03-testing/conftest.py +0 -0
  405. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/03-testing/test_api.py +0 -0
  406. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/03-testing/test_database.py +0 -0
  407. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/03-testing/test_with_fixtures.py +0 -0
  408. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/04-patterns/README.md +0 -0
  409. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/04-patterns/builder_pattern.py +0 -0
  410. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/04-patterns/combined_patterns.py +0 -0
  411. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/04-patterns/repository_pattern.py +0 -0
  412. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/README.md +0 -0
  413. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/allure_enhancement_extension.py +0 -0
  414. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/custom_extension.py +0 -0
  415. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/data_factory_extension.py +0 -0
  416. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/environment_validator_extension.py +0 -0
  417. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/monitoring_extension.py +0 -0
  418. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/mq_monitor_extension.py +0 -0
  419. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/05-extensions/notification_extension.py +0 -0
  420. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/06-ui-testing/README.md +0 -0
  421. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/06-ui-testing/basic_ui_test.py +0 -0
  422. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/06-ui-testing/conftest.py +0 -0
  423. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/06-ui-testing/page_object_example.py +0 -0
  424. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/README.md +0 -0
  425. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/docker-compose-kafka.yml +0 -0
  426. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/docker-compose-rabbitmq.yml +0 -0
  427. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/docker-compose-rocketmq.yml +0 -0
  428. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/kafka_basic.py +0 -0
  429. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/kafka_ssl.py +0 -0
  430. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/rabbitmq_basic.py +0 -0
  431. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/rabbitmq_topic.py +0 -0
  432. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/rocketmq-broker.conf +0 -0
  433. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-message-queue/rocketmq_basic.py +0 -0
  434. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-v35-features/01_configurable_interceptors.py +0 -0
  435. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-v35-features/02_profile_configuration.py +0 -0
  436. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-v35-features/03_runtime_overrides.py +0 -0
  437. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-v35-features/04_observability.py +0 -0
  438. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/07-v35-features/README.md +0 -0
  439. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/08-v37-features/01_unit_of_work_basics.py +0 -0
  440. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/08-v37-features/02_repository_v37.py +0 -0
  441. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/08-v37-features/03_auto_rollback_testing.py +0 -0
  442. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/08-v37-features/04_multi_repository_transactions.py +0 -0
  443. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/08-v37-features/05_project_uow.py +0 -0
  444. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/08-v37-features/06_exception_handling_with_uow.py +0 -0
  445. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/08-v37-features/README.md +0 -0
  446. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/examples/README.md +0 -0
  447. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/scripts/fetch_swagger.py +0 -0
  448. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/scripts/security-scan.bat +0 -0
  449. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/scripts/security-scan.sh +0 -0
  450. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/bootstrap/__init__.py +0 -0
  451. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/bootstrap/bootstrap.py +0 -0
  452. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/bootstrap/providers.py +0 -0
  453. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/bootstrap/runtime.py +0 -0
  454. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/__init__.py +0 -0
  455. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/__init__.py +0 -0
  456. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/__init__.py +0 -0
  457. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/client.py +0 -0
  458. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/middleware/__init__.py +0 -0
  459. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/middleware/base.py +0 -0
  460. {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
  461. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/middleware/logging.py +0 -0
  462. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/middleware/retry.py +0 -0
  463. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/models.py +0 -0
  464. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/graphql/query_builder.py +0 -0
  465. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/__init__.py +0 -0
  466. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/client.py +0 -0
  467. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/middleware/__init__.py +0 -0
  468. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/middleware/base.py +0 -0
  469. {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
  470. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/middleware/logging.py +0 -0
  471. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/middleware/metadata.py +0 -0
  472. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/middleware/retry.py +0 -0
  473. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/middleware/timing.py +0 -0
  474. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/grpc/models.py +0 -0
  475. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/__init__.py +0 -0
  476. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/core/__init__.py +0 -0
  477. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/core/request.py +0 -0
  478. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/core/response.py +0 -0
  479. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/__init__.py +0 -0
  480. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/auth.py +0 -0
  481. {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
  482. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/factory.py +0 -0
  483. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/logging.py +0 -0
  484. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/retry.py +0 -0
  485. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/middleware/telemetry.py +0 -0
  486. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/rest/__init__.py +0 -0
  487. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/rest/factory.py +0 -0
  488. {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
  489. {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
  490. {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
  491. {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
  492. {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
  493. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/clients/http/rest/protocols.py +0 -0
  494. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/__init__.py +0 -0
  495. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/async_database.py +0 -0
  496. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/database.py +0 -0
  497. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/factory.py +0 -0
  498. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/query_builder.py +0 -0
  499. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/redis/__init__.py +0 -0
  500. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/redis/async_redis.py +0 -0
  501. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/redis/redis_client.py +0 -0
  502. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/repositories/__init__.py +0 -0
  503. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/repositories/base.py +0 -0
  504. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/repositories/query_spec.py +0 -0
  505. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/databases/uow.py +0 -0
  506. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/__init__.py +0 -0
  507. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/__init__.py +0 -0
  508. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/app_actions.py +0 -0
  509. {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
  510. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/factory.py +0 -0
  511. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/playwright/__init__.py +0 -0
  512. {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
  513. {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
  514. {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
  515. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/playwright/browser.py +0 -0
  516. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/playwright/component.py +0 -0
  517. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/playwright/locator.py +0 -0
  518. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/playwright/page.py +0 -0
  519. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/drivers/web/protocols.py +0 -0
  520. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/engines/__init__.py +0 -0
  521. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/engines/batch/__init__.py +0 -0
  522. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/engines/batch/spark/__init__.py +0 -0
  523. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/engines/olap/__init__.py +0 -0
  524. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/engines/stream/__init__.py +0 -0
  525. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/engines/stream/flink/__init__.py +0 -0
  526. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/__init__.py +0 -0
  527. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/pubsub/__init__.py +0 -0
  528. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/__init__.py +0 -0
  529. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/kafka/__init__.py +0 -0
  530. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/kafka/client.py +0 -0
  531. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/kafka/config.py +0 -0
  532. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/__init__.py +0 -0
  533. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/client.py +0 -0
  534. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/rabbitmq/config.py +0 -0
  535. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/__init__.py +0 -0
  536. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/client.py +0 -0
  537. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/messengers/queue/rocketmq/config.py +0 -0
  538. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/__init__.py +0 -0
  539. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/blob/__init__.py +0 -0
  540. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/file/__init__.py +0 -0
  541. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/file/local/__init__.py +0 -0
  542. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/file/local/client.py +0 -0
  543. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/file/local/config.py +0 -0
  544. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/object/__init__.py +0 -0
  545. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/object/oss/__init__.py +0 -0
  546. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/object/oss/config.py +0 -0
  547. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/object/s3/__init__.py +0 -0
  548. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/object/s3/client.py +0 -0
  549. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/capabilities/storages/object/s3/config.py +0 -0
  550. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/__init__.py +0 -0
  551. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/__main__.py +0 -0
  552. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/commands/__init__.py +0 -0
  553. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/commands/cicd.py +0 -0
  554. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/commands/env.py +0 -0
  555. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/commands/generate_cmd.py +0 -0
  556. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/commands/init_cmd.py +0 -0
  557. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/commands/interactive.py +0 -0
  558. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/generators/__init__.py +0 -0
  559. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/generators/json_to_model.py +0 -0
  560. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/generators/openapi_generator.py +0 -0
  561. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/generators/openapi_parser.py +0 -0
  562. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/main.py +0 -0
  563. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/__init__.py +0 -0
  564. {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
  565. {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
  566. {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
  567. {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
  568. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/cicd/.gitlab-ci.yml +0 -0
  569. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/cicd/Jenkinsfile +0 -0
  570. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/cicd/docker/.dockerignore +0 -0
  571. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/cicd/docker/Dockerfile +0 -0
  572. {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
  573. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/__init__.py +0 -0
  574. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/actions.py +0 -0
  575. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/api_client.py +0 -0
  576. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/builder.py +0 -0
  577. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/env_files.py +0 -0
  578. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/graphql_client.py +0 -0
  579. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/redis_example.py +0 -0
  580. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/repository.py +0 -0
  581. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/settings_enhanced.py +0 -0
  582. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/test.py +0 -0
  583. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/test_complete.py +0 -0
  584. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/generators/test_graphql.py +0 -0
  585. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/__init__.py +0 -0
  586. {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
  587. {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
  588. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/base_api.py +0 -0
  589. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/conftest.py +0 -0
  590. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/constants.py +0 -0
  591. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/data_cleaners.py +0 -0
  592. {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
  593. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/docs_api.py +0 -0
  594. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/editorconfig.py +0 -0
  595. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/enhanced_gitignore.py +0 -0
  596. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/env.py +0 -0
  597. {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
  598. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/fixtures_init.py +0 -0
  599. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/full_conftest.py +0 -0
  600. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/full_settings.py +0 -0
  601. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/gitattributes.py +0 -0
  602. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/gitignore.py +0 -0
  603. {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
  604. {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
  605. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/pyproject_toml.py +0 -0
  606. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/readme.py +0 -0
  607. {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
  608. {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
  609. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/settings.py +0 -0
  610. {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
  611. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/test_example.py +0 -0
  612. {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
  613. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/ui_clients.py +0 -0
  614. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/ui_conftest.py +0 -0
  615. {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
  616. {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
  617. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/ui_settings.py +0 -0
  618. {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
  619. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/uow.py +0 -0
  620. {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
  621. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/utils_converters.py +0 -0
  622. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/utils_validators.py +0 -0
  623. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/templates/project/vscode_settings.py +0 -0
  624. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/cli/utils.py +0 -0
  625. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/__init__.py +0 -0
  626. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/context/__init__.py +0 -0
  627. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/context/execution.py +0 -0
  628. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/context/propagation.py +0 -0
  629. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/decorators.py +0 -0
  630. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/events/__init__.py +0 -0
  631. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/events/types.py +0 -0
  632. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/exceptions.py +0 -0
  633. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/middleware/__init__.py +0 -0
  634. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/middleware/base.py +0 -0
  635. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/middleware/chain.py +0 -0
  636. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/middleware/decorator.py +0 -0
  637. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/middleware/protocol.py +0 -0
  638. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/models/__init__.py +0 -0
  639. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/models/base.py +0 -0
  640. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/protocols/__init__.py +0 -0
  641. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/protocols/client.py +0 -0
  642. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/protocols/event.py +0 -0
  643. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/protocols/plugin.py +0 -0
  644. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/protocols/repository.py +0 -0
  645. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/protocols/telemetry.py +0 -0
  646. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/core/types.py +0 -0
  647. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/__init__.py +0 -0
  648. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/config/__init__.py +0 -0
  649. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/config/loader.py +0 -0
  650. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/config/middleware_schema.py +0 -0
  651. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/config/pipeline.py +0 -0
  652. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/config/schema.py +0 -0
  653. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/config/settings.py +0 -0
  654. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/config/sources.py +0 -0
  655. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/context/__init__.py +0 -0
  656. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/context/carriers/__init__.py +0 -0
  657. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/context/carriers/grpc.py +0 -0
  658. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/context/carriers/http.py +0 -0
  659. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/context/carriers/mq.py +0 -0
  660. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/events/__init__.py +0 -0
  661. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/events/bus.py +0 -0
  662. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/events/handlers/__init__.py +0 -0
  663. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/helpers/crypto.py +0 -0
  664. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/helpers/network.py +0 -0
  665. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/logging/__init__.py +0 -0
  666. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/logging/config.py +0 -0
  667. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/logging/interface.py +0 -0
  668. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/logging/logger.py +0 -0
  669. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/logging/observability.py +0 -0
  670. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/metrics/__init__.py +0 -0
  671. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/metrics/decorators.py +0 -0
  672. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/metrics/manager.py +0 -0
  673. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/metrics/observer.py +0 -0
  674. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/metrics/performance.py +0 -0
  675. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/metrics/registry.py +0 -0
  676. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/metrics/types.py +0 -0
  677. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/plugins/__init__.py +0 -0
  678. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/plugins/hooks.py +0 -0
  679. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/plugins/manager.py +0 -0
  680. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/resilience/__init__.py +0 -0
  681. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/resilience/circuit_breaker.py +0 -0
  682. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/sanitize/__init__.py +0 -0
  683. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/sanitize/service.py +0 -0
  684. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/telemetry/__init__.py +0 -0
  685. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/telemetry/exporters/__init__.py +0 -0
  686. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/telemetry/facade.py +0 -0
  687. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/telemetry/noop.py +0 -0
  688. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/__init__.py +0 -0
  689. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/context.py +0 -0
  690. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/decorators.py +0 -0
  691. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/exporters.py +0 -0
  692. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/integrations/__init__.py +0 -0
  693. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/integrations/database.py +0 -0
  694. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/integrations/sqlalchemy_instrumentation.py +0 -0
  695. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/interceptors/__init__.py +0 -0
  696. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/interceptors/grpc.py +0 -0
  697. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/interceptors/http.py +0 -0
  698. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/infrastructure/tracing/manager.py +0 -0
  699. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/plugins/__init__.py +0 -0
  700. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/plugins/builtin/__init__.py +0 -0
  701. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/plugins/builtin/monitoring/__init__.py +0 -0
  702. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/plugins/builtin/monitoring/plugin.py +0 -0
  703. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/plugins/builtin/reporting/__init__.py +0 -0
  704. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/plugins/builtin/reporting/allure_plugin.py +0 -0
  705. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/__init__.py +0 -0
  706. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/assertions/__init__.py +0 -0
  707. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/assertions/helper.py +0 -0
  708. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/assertions/json_schema.py +0 -0
  709. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/assertions/matchers.py +0 -0
  710. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/assertions/response.py +0 -0
  711. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/__init__.py +0 -0
  712. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/builders/__init__.py +0 -0
  713. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/builders/base.py +0 -0
  714. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/factories/__init__.py +0 -0
  715. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/factories/base.py +0 -0
  716. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/factories/examples.py +0 -0
  717. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/generators/__init__.py +0 -0
  718. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/generators/data_generator.py +0 -0
  719. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/loaders/__init__.py +0 -0
  720. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/loaders/base.py +0 -0
  721. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/loaders/csv_loader.py +0 -0
  722. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/loaders/json_loader.py +0 -0
  723. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/loaders/yaml_loader.py +0 -0
  724. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/pipeline/__init__.py +0 -0
  725. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/pipeline/_registry.py +0 -0
  726. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/pipeline/context.py +0 -0
  727. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/pipeline/dataset.py +0 -0
  728. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/pipeline/loader.py +0 -0
  729. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/pipeline/reporter.py +0 -0
  730. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/data/pipeline/resolver.py +0 -0
  731. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/debugging/__init__.py +0 -0
  732. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/debugging/console.py +0 -0
  733. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/decorators/__init__.py +0 -0
  734. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/decorators/actions_class.py +0 -0
  735. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/decorators/api_class.py +0 -0
  736. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/decorators/service_client.py +0 -0
  737. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/decorators/ui_client.py +0 -0
  738. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/__init__.py +0 -0
  739. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/allure.py +0 -0
  740. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/auth.py +0 -0
  741. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/cleanup.py +0 -0
  742. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/core.py +0 -0
  743. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/debugging.py +0 -0
  744. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/http_recorder.py +0 -0
  745. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/message_queue.py +0 -0
  746. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/metrics.py +0 -0
  747. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/monitoring.py +0 -0
  748. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/fixtures/ui.py +0 -0
  749. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/mocking/__init__.py +0 -0
  750. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/mocking/database_mock.py +0 -0
  751. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/mocking/http_mock.py +0 -0
  752. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/mocking/redis_mock.py +0 -0
  753. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/mocking/time_mock.py +0 -0
  754. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/plugins/__init__.py +0 -0
  755. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/plugins/api_autodiscovery.py +0 -0
  756. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/plugins/data_pipeline.py +0 -0
  757. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/plugins/debug.py +0 -0
  758. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/plugins/env_plugin.py +0 -0
  759. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/plugins/logging_plugin.py +0 -0
  760. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/plugins/markers.py +0 -0
  761. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/reporting/__init__.py +0 -0
  762. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/reporting/allure/__init__.py +0 -0
  763. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/reporting/allure/helper.py +0 -0
  764. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/src/df_test_framework/testing/reporting/allure/observer.py +0 -0
  765. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/README.md +0 -0
  766. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/bootstrap/__init__.py +0 -0
  767. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/bootstrap/test_bootstrap.py +0 -0
  768. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/bootstrap/test_plugin_middlewares.py +0 -0
  769. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/bootstrap/test_providers.py +0 -0
  770. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/bootstrap/test_runtime.py +0 -0
  771. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/__init__.py +0 -0
  772. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/graphql/__init__.py +0 -0
  773. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/graphql/test_client.py +0 -0
  774. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/graphql/test_middleware.py +0 -0
  775. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/graphql/test_models.py +0 -0
  776. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/graphql/test_query_builder.py +0 -0
  777. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/grpc/__init__.py +0 -0
  778. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/grpc/test_client.py +0 -0
  779. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/grpc/test_middleware.py +0 -0
  780. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/grpc/test_models.py +0 -0
  781. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/core/__init__.py +0 -0
  782. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/core/test_multipart.py +0 -0
  783. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/core/test_request.py +0 -0
  784. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/core/test_response.py +0 -0
  785. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/middleware/__init__.py +0 -0
  786. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/middleware/test_event_publisher.py +0 -0
  787. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/middleware/test_factory.py +0 -0
  788. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/middleware/test_logging.py +0 -0
  789. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/rest/test_async_base_api.py +0 -0
  790. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/rest/test_async_client.py +0 -0
  791. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/rest/test_auth_control.py +0 -0
  792. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/rest/test_base_api.py +0 -0
  793. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/rest/test_factory.py +0 -0
  794. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/clients/http/rest/test_http_client.py +0 -0
  795. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/redis/test_async_redis.py +0 -0
  796. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/redis/test_redis_client.py +0 -0
  797. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/test_async_database.py +0 -0
  798. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/test_database.py +0 -0
  799. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/test_database_factory.py +0 -0
  800. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/test_query_builder.py +0 -0
  801. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/test_repositories.py +0 -0
  802. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/databases/test_uow.py +0 -0
  803. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/drivers/web/playwright/test_async_browser_pool.py +0 -0
  804. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/drivers/web/test_async_ui.py +0 -0
  805. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/drivers/web/test_modern_ui.py +0 -0
  806. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/messengers/__init__.py +0 -0
  807. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/messengers/test_kafka_client.py +0 -0
  808. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/messengers/test_rabbitmq_client.py +0 -0
  809. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/messengers/test_rocketmq_client.py +0 -0
  810. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/storages/__init__.py +0 -0
  811. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/storages/test_local_file.py +0 -0
  812. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/capabilities/storages/test_s3.py +0 -0
  813. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/cli/__init__.py +0 -0
  814. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/cli/test_env_cmd.py +0 -0
  815. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/cli/test_generate_cmd.py +0 -0
  816. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/cli/test_init_cmd.py +0 -0
  817. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/cli/test_interactive_cmd.py +0 -0
  818. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/cli/test_main.py +0 -0
  819. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/cli/test_utils.py +0 -0
  820. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/conftest.py +0 -0
  821. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/protocols/test_client.py +0 -0
  822. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/protocols/test_event.py +0 -0
  823. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/protocols/test_plugin.py +0 -0
  824. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/protocols/test_repository.py +0 -0
  825. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/protocols/test_telemetry.py +0 -0
  826. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/test_context.py +0 -0
  827. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/test_decorators.py +0 -0
  828. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/test_event_types.py +0 -0
  829. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/test_events.py +0 -0
  830. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/test_middleware.py +0 -0
  831. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/core/test_types.py +0 -0
  832. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/__init__.py +0 -0
  833. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/config/test_loader.py +0 -0
  834. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/config/test_middleware_schema.py +0 -0
  835. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/context/test_carriers.py +0 -0
  836. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/events/__init__.py +0 -0
  837. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/events/test_bus.py +0 -0
  838. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/metrics/__init__.py +0 -0
  839. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/metrics/test_decorators.py +0 -0
  840. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/metrics/test_manager.py +0 -0
  841. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/metrics/test_observer.py +0 -0
  842. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/metrics/test_performance.py +0 -0
  843. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/metrics/test_registry.py +0 -0
  844. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/metrics/test_types.py +0 -0
  845. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/plugins/test_manager.py +0 -0
  846. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/resilience/__init__.py +0 -0
  847. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/resilience/test_circuit_breaker.py +0 -0
  848. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/sanitize/__init__.py +0 -0
  849. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/sanitize/test_service.py +0 -0
  850. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/telemetry/__init__.py +0 -0
  851. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/telemetry/test_facade.py +0 -0
  852. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/telemetry/test_noop.py +0 -0
  853. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/test_bootstrap.py +0 -0
  854. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/test_logging.py +0 -0
  855. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/test_pipeline.py +0 -0
  856. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/test_runtime.py +0 -0
  857. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/test_settings.py +0 -0
  858. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/test_sources.py +0 -0
  859. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/tracing/__init__.py +0 -0
  860. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/tracing/test_context.py +0 -0
  861. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/tracing/test_decorators.py +0 -0
  862. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/tracing/test_exporters.py +0 -0
  863. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/tracing/test_integrations.py +0 -0
  864. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/tracing/test_interceptors.py +0 -0
  865. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/infrastructure/tracing/test_manager.py +0 -0
  866. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/integration/__init__.py +0 -0
  867. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/integration/test_config_environment.py +0 -0
  868. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/integration/test_event_observability.py +0 -0
  869. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/integration/test_factory_assertions.py +0 -0
  870. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/integration/test_middleware_chain.py +0 -0
  871. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/migration/__init__.py +0 -0
  872. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/migration/test_v3_13_to_v3_14_examples.py +0 -0
  873. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/plugins/__init__.py +0 -0
  874. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/plugins/builtin/__init__.py +0 -0
  875. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/plugins/builtin/monitoring/__init__.py +0 -0
  876. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/plugins/builtin/monitoring/test_plugin.py +0 -0
  877. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/test_json_to_model_generator.py +0 -0
  878. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/assertions/__init__.py +0 -0
  879. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/assertions/test_json_schema.py +0 -0
  880. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/assertions/test_matchers.py +0 -0
  881. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/data/__init__.py +0 -0
  882. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/data/pipeline/__init__.py +0 -0
  883. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/data/pipeline/test_pipeline.py +0 -0
  884. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/data/pipeline/test_pipeline_plugin.py +0 -0
  885. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/data/test_builders.py +0 -0
  886. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/data/test_data_generator.py +0 -0
  887. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/data/test_factories.py +0 -0
  888. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/debugging/__init__.py +0 -0
  889. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/debugging/test_console_debug_observer.py +0 -0
  890. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/decorators/__init__.py +0 -0
  891. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/decorators/test_actions_class.py +0 -0
  892. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/decorators/test_api_class.py +0 -0
  893. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/decorators/test_service_client.py +0 -0
  894. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/decorators/test_ui_client.py +0 -0
  895. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/__init__.py +0 -0
  896. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_allure_fixture.py +0 -0
  897. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_cleanup.py +0 -0
  898. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_fixtures_core.py +0 -0
  899. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_fixtures_debugging.py +0 -0
  900. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_fixtures_message_queue.py +0 -0
  901. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_fixtures_monitoring.py +0 -0
  902. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_http_recorder.py +0 -0
  903. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_lifecycle_hooks.py +0 -0
  904. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_monitoring_metrics.py +0 -0
  905. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_plugin_lifecycle_integration.py +0 -0
  906. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/fixtures/test_ui_fixtures.py +0 -0
  907. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/mocking/__init__.py +0 -0
  908. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/mocking/test_database_mock.py +0 -0
  909. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/mocking/test_http_mock.py +0 -0
  910. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/mocking/test_redis_mock.py +0 -0
  911. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/mocking/test_time_mock.py +0 -0
  912. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/plugins/test_api_autodiscovery.py +0 -0
  913. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/plugins/test_debug_plugin.py +0 -0
  914. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/plugins/test_env_plugin.py +0 -0
  915. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/plugins/test_logging_plugin.py +0 -0
  916. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/plugins/test_markers.py +0 -0
  917. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/reporting/test_allure_observer.py +0 -0
  918. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/test_allure_helper.py +0 -0
  919. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/test_assertions.py +0 -0
  920. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/test_data_loaders.py +0 -0
  921. {df_test_framework-4.7.5 → df_test_framework-4.8.0}/tests/testing/test_factories_presets.py +0 -0
  922. {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.7.4
12
- - **更新时间**: 2026-06-29
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.7.4
12
- - **更新时间**: 2026-06-29
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.7.5
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,7 +1,7 @@
1
1
  # DF Test Framework
2
2
 
3
- > **版本**: v4.7.4
4
- > **更新时间**: 2026-06-29
3
+ > **版本**: v4.8.0
4
+ > **更新时间**: 2026-08-10
5
5
  > 简单、强大、可扩展的现代化 Python 测试自动化框架
6
6
 
7
7
  [![PyPI version](https://img.shields.io/pypi/v/df-test-framework.svg)](https://pypi.org/project/df-test-framework/)
@@ -1,8 +1,8 @@
1
1
  # 核心文档导航 - 真正有价值的文档清单
2
2
 
3
3
  > **目标读者**: 测试开发人员、框架使用者、新团队成员
4
- > **更新日期**: 2026-06-29
5
- > **框架版本**: v4.7.4
4
+ > **更新日期**: 2026-08-10
5
+ > **框架版本**: v4.8.0
6
6
 
7
7
  ---
8
8
 
@@ -1,6 +1,6 @@
1
1
  # DF Test Framework 文档中心
2
2
 
3
- > 版本:v4.7.4 · 最近更新:2026-06-29
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) | 加解密、哈希、签名、公网 IP |
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.7.4** · 最近更新:2026-06-29
3
+ > 当前版本:**v4.8.0** · 最近更新:2026-08-10
4
4
 
5
5
  完整变更摘要见 [CHANGELOG.md](../../CHANGELOG.md)。
6
6
 
7
7
  ---
8
8
 
9
- ## v4.7.x(当前系列)
9
+ ## v4.8.x(当前系列)
10
10
 
11
11
  | 版本 | 发布日期 | 核心特性 |
12
12
  |------|----------|----------|
13
- | **[v4.7.4](v4.7.4.md)** ⭐ 当前 | 2026-06-29 | `OmsReporterPlugin` 嵌入式 scope 路由:一次 Bootstrap 多次执行复用,`bind_execution` / `unbind_execution` |
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 重复记录 |