schemathesis 4.0.0a1__tar.gz → 4.0.0a2__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 (595) hide show
  1. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/workflows/build.yml +1 -1
  2. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/workflows/codeql-analysis.yml +3 -3
  3. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/workflows/release.yml +10 -1
  4. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.pre-commit-config.yaml +2 -2
  5. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.readthedocs.yml +3 -0
  6. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/PKG-INFO +1 -1
  7. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/benches/schema.py +1 -1
  8. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/changelog.rst +22 -2
  9. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/continuous_integration.rst +0 -7
  10. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/getting-started.rst +0 -10
  11. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/example/tests/extensions.py +1 -3
  12. schemathesis-4.0.0a2/img/demo.gif +0 -0
  13. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/pyproject.toml +1 -1
  14. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/checks.py +6 -4
  15. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/commands/run/__init__.py +4 -4
  16. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/commands/run/events.py +4 -9
  17. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/commands/run/executor.py +6 -3
  18. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/commands/run/filters.py +27 -19
  19. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/commands/run/handlers/base.py +1 -1
  20. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/commands/run/handlers/cassettes.py +1 -3
  21. schemathesis-4.0.0a2/src/schemathesis/cli/commands/run/handlers/output.py +1368 -0
  22. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/commands/run/validation.py +1 -1
  23. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/ext/options.py +4 -1
  24. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/failures.py +54 -24
  25. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/core.py +1 -1
  26. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/events.py +3 -97
  27. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/phases/stateful/__init__.py +1 -0
  28. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/phases/stateful/_executor.py +19 -44
  29. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/phases/unit/__init__.py +1 -0
  30. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/phases/unit/_executor.py +2 -1
  31. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/phases/unit/_pool.py +1 -1
  32. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/recorder.py +8 -3
  33. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/stateful/state_machine.py +53 -36
  34. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/graphql/checks.py +3 -9
  35. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/openapi/checks.py +8 -33
  36. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/schemas.py +34 -14
  37. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/graphql/schemas.py +16 -15
  38. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/expressions/__init__.py +11 -15
  39. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/expressions/nodes.py +20 -20
  40. schemathesis-4.0.0a2/src/schemathesis/specs/openapi/links.py +213 -0
  41. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/schemas.py +18 -22
  42. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/stateful/__init__.py +77 -55
  43. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/__snapshots__/test_dereferencing/test_global_security_schemes_with_custom_scope.raw +3 -1
  44. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/__snapshots__/test_dereferencing/test_missing_file_in_resolution.raw +3 -0
  45. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/__snapshots__/test_hypothesis/test_health_check_failed_large_base_example.raw +3 -1
  46. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/__snapshots__/test_recoverable_errors/test_in_cli[1].raw +3 -2
  47. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/__snapshots__/test_recoverable_errors/test_in_cli[2].raw +3 -1
  48. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/__snapshots__/test_serialization/test_in_cli[Open API 3.0].raw +3 -1
  49. schemathesis-4.0.0a2/test/auth/__snapshots__/test_cli/test_conditional[Open API 3.0].raw +37 -0
  50. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/auth/__snapshots__/test_cli/test_custom_auth[Open API 3.0].raw +3 -3
  51. schemathesis-4.0.0a2/test/auth/__snapshots__/test_cli/test_explicit_auth_precedence[Open API 3.0-args0-Basic dXNlcjpwYXNz].raw +37 -0
  52. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/auth/__snapshots__/test_cli/test_explicit_auth_precedence[Open API 3.0-args1-Bearer EXPLICIT].raw +3 -3
  53. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/auth/__snapshots__/test_cli/test_multiple_auth_mechanisms_with_explicit_auth.raw +3 -1
  54. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/auth/__snapshots__/test_cli/test_multiple_threads[Open API 3.0].raw +3 -1
  55. schemathesis-4.0.0a2/test/auth/__snapshots__/test_cli/test_requests_auth[Open API 3.0].raw +37 -0
  56. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/auth/test_cli.py +0 -10
  57. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_cassettes/test_run_subprocess[Open API 2.0].raw +3 -1
  58. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_cassettes/test_run_subprocess[Open API 3.0].raw +3 -1
  59. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args0].raw +3 -1
  60. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args10].raw +3 -1
  61. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args1].raw +3 -1
  62. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args2].raw +3 -1
  63. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args3].raw +3 -1
  64. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args4].raw +3 -1
  65. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args5].raw +3 -1
  66. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args6].raw +3 -1
  67. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args7].raw +3 -1
  68. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance_with_env_vars.raw +3 -1
  69. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 2.0---auth='testwrong'].raw +3 -1
  70. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 2.0--H Authorization Basic J3Rlc3Q6d3Jvbmcn].raw +3 -1
  71. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 3.0---auth='testwrong'].raw +3 -1
  72. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 3.0--H Authorization Basic J3Rlc3Q6d3Jvbmcn].raw +3 -1
  73. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_binary_payload.raw +3 -1
  74. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_chunked_encoding_error[Open API 3.0].raw +3 -1
  75. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_cli_run_changed_base_url[Open API 3.0].raw +3 -2
  76. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[Open API 2.0-1].raw +3 -1
  77. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[Open API 2.0-2].raw +3 -1
  78. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[Open API 3.0-1].raw +3 -1
  79. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[Open API 3.0-2].raw +3 -1
  80. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_complex_urlencoded_example.raw +3 -1
  81. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 2.0-1].raw +3 -2
  82. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 2.0-2].raw +3 -1
  83. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 3.0-1].raw +3 -2
  84. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 3.0-2].raw +3 -1
  85. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 2.0-1].raw +3 -2
  86. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 2.0-2].raw +3 -1
  87. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 3.0-1].raw +3 -2
  88. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 3.0-2].raw +3 -1
  89. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_custom_cli_option[Open API 3.0].raw +3 -1
  90. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_dont_skip_when_generation_is_possible[Open API 3.0].raw +3 -1
  91. schemathesis-4.0.0a2/test/cli/__snapshots__/test_commands/test_empty_schema_file.raw +14 -0
  92. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_exit_first[Open API 3.0].raw +3 -1
  93. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_explicit_example_failure_output.raw +3 -1
  94. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_explicit_headers_in_output_on_errors[Open API 3.0].raw +3 -1
  95. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_explicit_query_token_sanitization[Open API 3.0].raw +3 -1
  96. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_filter_by[Open API 3.0---exclude-by=x-property != 42].raw +3 -1
  97. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_filter_by[Open API 3.0---include-by=x-property == 42].raw +3 -1
  98. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_graphql_url[foo-args0].raw +3 -4
  99. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_graphql_url[foo-args1].raw +3 -4
  100. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_graphql_url[graphql-args0].raw +3 -4
  101. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_graphql_url[graphql-args1].raw +3 -4
  102. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_group_errors.raw +3 -1
  103. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_invalid_operation[Open API 2.0-1].raw +3 -1
  104. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_invalid_operation[Open API 3.0-1].raw +3 -1
  105. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_invalid_schema_with_disabled_validation[3.0.2].raw +3 -1
  106. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_invalid_schema_with_disabled_validation[3.1.0].raw +3 -1
  107. schemathesis-4.0.0a2/test/cli/__snapshots__/test_commands/test_invalid_yaml.raw +15 -0
  108. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_keyboard_interrupt[Open API 2.0-1].raw +2 -3
  109. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_keyboard_interrupt[Open API 3.0-1].raw +2 -3
  110. schemathesis-4.0.0a2/test/cli/__snapshots__/test_commands/test_keyboard_interrupt_during_schema_loading.raw +8 -0
  111. schemathesis-4.0.0a2/test/cli/__snapshots__/test_commands/test_keyboard_interrupt_threaded[Open API 2.0].raw +37 -0
  112. schemathesis-4.0.0a2/test/cli/__snapshots__/test_commands/test_keyboard_interrupt_threaded[Open API 3.0].raw +37 -0
  113. schemathesis-4.0.0a2/test/cli/__snapshots__/test_commands/test_long_operation_output.raw +37 -0
  114. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_long_payload.raw +3 -1
  115. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_malformed_json_deduplication[Open API 3.0].raw +3 -1
  116. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 2.0-1].raw +3 -1
  117. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 2.0-2].raw +3 -1
  118. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 3.0-1].raw +3 -1
  119. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 3.0-2].raw +3 -1
  120. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[cookie].raw +3 -1
  121. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[header].raw +3 -1
  122. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[path].raw +3 -1
  123. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[query].raw +3 -1
  124. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_multiple_errors.raw +3 -1
  125. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_multiple_failures_different_check[Open API 2.0].raw +3 -1
  126. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_multiple_failures_different_check[Open API 3.0].raw +3 -1
  127. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_multiple_failures_in_single_check.raw +3 -1
  128. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_multiple_failures_single_check[Open API 2.0].raw +3 -1
  129. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_multiple_failures_single_check[Open API 3.0].raw +3 -1
  130. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_nested_binary_in_yaml.raw +3 -1
  131. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_no_schema_in_media_type[Open API 3.0].raw +3 -1
  132. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_no_useless_traceback.raw +3 -1
  133. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_null_byte_in_header_probe.raw +3 -1
  134. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_proxy_error[Open API 3.0].raw +3 -1
  135. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_read_content_timeout[Open API 3.0].raw +3 -1
  136. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_recursive_reference_error_message.raw +3 -1
  137. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError(Custom check failed!)-Open API 2.0].raw +3 -1
  138. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError(Custom check failed!)-Open API 3.0].raw +3 -1
  139. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError-Open API 2.0].raw +3 -1
  140. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError-Open API 3.0].raw +3 -1
  141. schemathesis-4.0.0a2/test/cli/__snapshots__/test_commands/test_remote_disconnected_error[Open API 3.0].raw +16 -0
  142. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_reserved_characters_in_operation_name.raw +3 -1
  143. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[Open API 2.0].raw +3 -1
  144. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[Open API 3.0].raw +3 -1
  145. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[Open API 2.0].raw +3 -1
  146. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[Open API 3.0].raw +3 -1
  147. schemathesis-4.0.0a2/test/cli/__snapshots__/test_commands/test_schema_not_available[1].raw +16 -0
  148. schemathesis-4.0.0a2/test/cli/__snapshots__/test_commands/test_schema_not_available[2].raw +16 -0
  149. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_skip_not_negated_tests[Open API 3.0].raw +3 -1
  150. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_skipped_on_no_explicit_examples.raw +3 -1
  151. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_status_code_conformance[Open API 2.0-1].raw +3 -1
  152. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_status_code_conformance[Open API 2.0-2].raw +3 -1
  153. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_status_code_conformance[Open API 3.0-1].raw +3 -1
  154. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_status_code_conformance[Open API 3.0-2].raw +3 -1
  155. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_unknown_schema_error[Open API 3.0].raw +3 -1
  156. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_unresolvable_reference_with_disabled_validation.raw +3 -2
  157. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_unsatisfiable[Open API 2.0-1].raw +3 -1
  158. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_unsatisfiable[Open API 2.0-2].raw +3 -1
  159. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_unsatisfiable[Open API 3.0-1].raw +3 -1
  160. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_unsatisfiable[Open API 3.0-2].raw +3 -1
  161. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_unsupported_regex.raw +3 -2
  162. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_useful_traceback[Open API 3.0].raw +3 -1
  163. schemathesis-4.0.0a2/test/cli/__snapshots__/test_commands/test_wait_for_schema_not_enough.raw +14 -0
  164. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_warning_on_all_not_found.raw +3 -2
  165. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_warning_on_unauthorized.raw +3 -1
  166. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_hooks/test_after_call[Open API 3.0].raw +3 -1
  167. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/test_commands.py +8 -20
  168. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/test_crashes.py +84 -25
  169. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/test_hooks.py +3 -4
  170. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/conftest.py +87 -14
  171. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/contrib/__snapshots__/test_unique_data/test_cli[None].raw +3 -1
  172. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema0].raw +3 -1
  173. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema1].raw +3 -1
  174. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema2].raw +3 -1
  175. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/contrib/__snapshots__/test_unique_data/test_cli_failure.raw +3 -1
  176. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/contrib/__snapshots__/test_unique_data/test_explicit_headers[1].raw +3 -1
  177. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/contrib/__snapshots__/test_unique_data/test_explicit_headers[2].raw +3 -1
  178. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/contrib/__snapshots__/test_unique_data/test_graphql_url.raw +3 -4
  179. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/contrib/openapi/__snapshots__/test_fill_missing_examples/test_fills_missing_examples.raw +3 -1
  180. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/coverage/__snapshots__/test_phase/test_unspecified_http_methods.raw +3 -1
  181. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/engine/test_checks.py +1 -1
  182. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/hooks/test_hooks.py +0 -35
  183. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/graphql/__snapshots__/test_basic/test_disallow_null.raw +3 -1
  184. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/graphql/__snapshots__/test_basic/test_filter_operations[--exclude-name=Query.getBooks].raw +3 -3
  185. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/graphql/__snapshots__/test_basic/test_filter_operations[--include-name=Query.getBooks].raw +3 -1
  186. schemathesis-4.0.0a2/test/specs/graphql/__snapshots__/test_basic/test_schema_error[ntype Query {n 123(created Int!) Int!n}-.whatever].raw +19 -0
  187. schemathesis-4.0.0a2/test/specs/graphql/__snapshots__/test_basic/test_schema_error[ntype Query {n func(created Unknown!) Int!n}-.gql].raw +14 -0
  188. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/graphql/__snapshots__/test_custom_scalars/test_custom_scalar_in_cli.raw +3 -1
  189. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/graphql/test_basic.py +3 -3
  190. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/__snapshots__/test_checks/test_method_not_allowed[basic-post].raw +3 -1
  191. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/__snapshots__/test_checks/test_method_not_allowed[success-get].raw +3 -1
  192. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/__snapshots__/test_checks/test_missing_required_header[basic-Authorization-406].raw +3 -1
  193. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/__snapshots__/test_checks/test_missing_required_header[success-Authorization-200].raw +3 -1
  194. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/__snapshots__/test_checks/test_missing_required_header[success-X-API-Key-1-200].raw +3 -1
  195. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/__snapshots__/test_checks/test_missing_required_header[success-X-API-Key-1-406].raw +3 -1
  196. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/__snapshots__/test_examples/test_network_error_with_flaky_generation.raw +3 -1
  197. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/__snapshots__/test_examples/test_parameter_override.raw +3 -1
  198. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/__snapshots__/test_ignored_auth/test_explicit_auth_cli[Open API 3.0].raw +3 -1
  199. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/__snapshots__/test_ignored_auth/test_stateful_in_cli_no_error[Open API 3.0-False].raw +5 -2
  200. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/__snapshots__/test_ignored_auth/test_stateful_in_cli_no_error[Open API 3.0-True].raw +5 -2
  201. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/__snapshots__/test_media_types/test_explicit_example_with_custom_media_type.raw +3 -1
  202. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/stateful/__snapshots__/test_cli/test_default[Open API 3.0-1].raw +8 -5
  203. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/stateful/__snapshots__/test_cli/test_default[Open API 3.0-2].raw +8 -3
  204. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/stateful/__snapshots__/test_cli/test_filtered_out[Open API 3.0].raw +3 -1
  205. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/stateful/__snapshots__/test_cli/test_generation_config[Open API 3.0].raw +6 -4
  206. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/stateful/__snapshots__/test_cli/test_keyboard_interrupt[Open API 3.0].raw +4 -2
  207. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/stateful/__snapshots__/test_cli/test_max_failures[Open API 3.0].raw +8 -6
  208. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/stateful/__snapshots__/test_cli/test_proxy_error[Open API 3.0].raw +5 -2
  209. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/stateful/__snapshots__/test_cli/test_stateful_only[Open API 3.0].raw +5 -2
  210. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/stateful/__snapshots__/test_cli/test_stateful_only_with_error[Open API 3.0].raw +5 -2
  211. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/stateful/test_engine.py +19 -16
  212. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/stateful/test_stateful.py +3 -3
  213. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/test_expressions.py +13 -12
  214. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_stateful.py +0 -24
  215. schemathesis-4.0.0a1/img/demo.gif +0 -0
  216. schemathesis-4.0.0a1/img/service_github_report.png +0 -0
  217. schemathesis-4.0.0a1/src/schemathesis/cli/commands/run/handlers/output.py +0 -746
  218. schemathesis-4.0.0a1/src/schemathesis/specs/openapi/expressions/context.py +0 -14
  219. schemathesis-4.0.0a1/src/schemathesis/specs/openapi/links.py +0 -206
  220. schemathesis-4.0.0a1/test/auth/__snapshots__/test_cli/test_conditional[Open API 3.0].raw +0 -36
  221. schemathesis-4.0.0a1/test/auth/__snapshots__/test_cli/test_explicit_auth_precedence[Open API 3.0-args0-Basic dXNlcjpwYXNz].raw +0 -37
  222. schemathesis-4.0.0a1/test/auth/__snapshots__/test_cli/test_requests_auth[Open API 3.0].raw +0 -38
  223. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_empty_schema_file.raw +0 -11
  224. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_invalid_yaml.raw +0 -12
  225. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_long_operation_output.raw +0 -36
  226. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_remote_disconnected_error[Open API 3.0].raw +0 -13
  227. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_schema_not_available[1].raw +0 -13
  228. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_schema_not_available[2].raw +0 -13
  229. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_wait_for_schema_not_enough.raw +0 -11
  230. schemathesis-4.0.0a1/test/specs/graphql/__snapshots__/test_basic/test_schema_error[ntype Query {n 123(created Int!) Int!n}-.whatever].raw +0 -16
  231. schemathesis-4.0.0a1/test/specs/graphql/__snapshots__/test_basic/test_schema_error[ntype Query {n func(created Unknown!) Int!n}-.gql].raw +0 -11
  232. schemathesis-4.0.0a1/test/specs/openapi/test_links.py +0 -39
  233. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.dockerignore +0 -0
  234. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/FUNDING.yml +0 -0
  235. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  236. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  237. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  238. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/dependabot.yml +0 -0
  239. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/workflows/codspeed.yml +0 -0
  240. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/workflows/commit.yml +0 -0
  241. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/workflows/example-build.yml +0 -0
  242. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/workflows/example-no-build.yml +0 -0
  243. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/workflows/master_update.yml +0 -0
  244. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/workflows/test-corpus.yml +0 -0
  245. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/workflows/test-hypothesis.yml +0 -0
  246. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.github/workflows/update-pre-commit.yml +0 -0
  247. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.gitignore +0 -0
  248. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.rstcheck.cfg +0 -0
  249. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/.yamllint +0 -0
  250. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/ARCHITECTURE.md +0 -0
  251. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/CITATION.cff +0 -0
  252. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/CODE_OF_CONDUCT.md +0 -0
  253. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/CONTRIBUTING.rst +0 -0
  254. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/Dockerfile +0 -0
  255. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/Dockerfile.bookworm +0 -0
  256. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/LICENSE +0 -0
  257. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/README.md +0 -0
  258. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/SECURITY.md +0 -0
  259. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/benches/cli.py +0 -0
  260. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/benches/coverage_phase.py +0 -0
  261. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/benches/references.py +0 -0
  262. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/changelog.py +0 -0
  263. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/codecov.yml +0 -0
  264. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/corpus/data/graphql.tar.gz +0 -0
  265. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/corpus/data/openapi-3.0.tar.gz +0 -0
  266. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/corpus/data/openapi-3.1.tar.gz +0 -0
  267. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/corpus/data/swagger-2.0.tar.gz +0 -0
  268. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/corpus/tools.py +0 -0
  269. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/Makefile +0 -0
  270. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/additional-content.rst +0 -0
  271. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/api.rst +0 -0
  272. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/auth.rst +0 -0
  273. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/cli.rst +0 -0
  274. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/conf.py +0 -0
  275. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/contrib.rst +0 -0
  276. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/data-generation.rst +0 -0
  277. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/examples.rst +0 -0
  278. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/experimental.rst +0 -0
  279. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/extending.rst +0 -0
  280. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/faq.rst +0 -0
  281. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/graphql.rst +0 -0
  282. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/index.rst +0 -0
  283. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/python.rst +0 -0
  284. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/recipes.rst +0 -0
  285. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/requirements.txt +0 -0
  286. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/sanitizing.rst +0 -0
  287. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/service.rst +0 -0
  288. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/stateful.rst +0 -0
  289. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/docs/targeted.rst +0 -0
  290. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/example/Dockerfile +0 -0
  291. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/example/README.md +0 -0
  292. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/example/app.py +0 -0
  293. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/example/compose.yml +0 -0
  294. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/example/openapi.json +0 -0
  295. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/example/requirements-app.in +0 -0
  296. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/example/requirements-app.txt +0 -0
  297. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/example/requirements-pytest.in +0 -0
  298. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/example/requirements-pytest.txt +0 -0
  299. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/example/tests/__init__.py +0 -0
  300. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/example/tests/conftest.py +0 -0
  301. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/example/tests/test_app.py +0 -0
  302. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/mypy.ini +0 -0
  303. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/__init__.py +0 -0
  304. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/auths.py +0 -0
  305. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/__init__.py +0 -0
  306. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/__main__.py +0 -0
  307. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/commands/__init__.py +0 -0
  308. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/commands/run/checks.py +0 -0
  309. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/commands/run/context.py +0 -0
  310. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/commands/run/handlers/__init__.py +0 -0
  311. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/commands/run/handlers/junitxml.py +0 -0
  312. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/commands/run/hypothesis.py +0 -0
  313. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/commands/run/loaders.py +0 -0
  314. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/constants.py +0 -0
  315. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/core.py +0 -0
  316. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/ext/__init__.py +0 -0
  317. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/ext/fs.py +0 -0
  318. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/ext/groups.py +0 -0
  319. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/cli/hooks.py +0 -0
  320. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/contrib/__init__.py +0 -0
  321. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/contrib/openapi/__init__.py +0 -0
  322. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/contrib/openapi/fill_missing_examples.py +0 -0
  323. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/__init__.py +0 -0
  324. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/compat.py +0 -0
  325. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/control.py +0 -0
  326. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/curl.py +0 -0
  327. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/deserialization.py +0 -0
  328. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/errors.py +0 -0
  329. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/fs.py +0 -0
  330. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/lazy_import.py +0 -0
  331. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/loaders.py +0 -0
  332. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/marks.py +0 -0
  333. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/media_types.py +0 -0
  334. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/output/__init__.py +0 -0
  335. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/output/sanitization.py +0 -0
  336. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/rate_limit.py +0 -0
  337. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/registries.py +0 -0
  338. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/result.py +0 -0
  339. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/transforms.py +0 -0
  340. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/transport.py +0 -0
  341. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/validation.py +0 -0
  342. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/core/version.py +0 -0
  343. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/__init__.py +0 -0
  344. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/config.py +0 -0
  345. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/context.py +0 -0
  346. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/control.py +0 -0
  347. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/errors.py +0 -0
  348. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/phases/__init__.py +0 -0
  349. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/phases/probes.py +0 -0
  350. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/engine/phases/stateful/context.py +0 -0
  351. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/errors.py +0 -0
  352. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/experimental/__init__.py +0 -0
  353. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/filters.py +0 -0
  354. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/__init__.py +0 -0
  355. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/case.py +0 -0
  356. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/coverage.py +0 -0
  357. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/hypothesis/__init__.py +0 -0
  358. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/hypothesis/builder.py +0 -0
  359. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/hypothesis/examples.py +0 -0
  360. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/hypothesis/given.py +0 -0
  361. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/hypothesis/reporting.py +0 -0
  362. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/hypothesis/strategies.py +0 -0
  363. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/meta.py +0 -0
  364. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/modes.py +0 -0
  365. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/overrides.py +0 -0
  366. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/stateful/__init__.py +0 -0
  367. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/generation/targets.py +0 -0
  368. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/graphql/__init__.py +0 -0
  369. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/graphql/loaders.py +0 -0
  370. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/hooks.py +0 -0
  371. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/openapi/__init__.py +0 -0
  372. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/openapi/generation/__init__.py +0 -0
  373. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/openapi/generation/filters.py +0 -0
  374. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/openapi/loaders.py +0 -0
  375. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/py.typed +0 -0
  376. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/pytest/__init__.py +0 -0
  377. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/pytest/control_flow.py +0 -0
  378. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/pytest/lazy.py +0 -0
  379. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/pytest/loaders.py +0 -0
  380. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/pytest/plugin.py +0 -0
  381. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/python/__init__.py +0 -0
  382. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/python/asgi.py +0 -0
  383. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/python/wsgi.py +0 -0
  384. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/__init__.py +0 -0
  385. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/graphql/__init__.py +0 -0
  386. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/graphql/_cache.py +0 -0
  387. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/graphql/nodes.py +0 -0
  388. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/graphql/scalars.py +0 -0
  389. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/graphql/validation.py +0 -0
  390. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/__init__.py +0 -0
  391. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/_cache.py +0 -0
  392. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/_hypothesis.py +0 -0
  393. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/checks.py +0 -0
  394. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/constants.py +0 -0
  395. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/converter.py +0 -0
  396. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/definitions.py +0 -0
  397. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/examples.py +0 -0
  398. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/expressions/errors.py +0 -0
  399. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/expressions/extractors.py +0 -0
  400. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/expressions/lexer.py +0 -0
  401. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/expressions/parser.py +0 -0
  402. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/formats.py +0 -0
  403. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/media_types.py +0 -0
  404. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/negative/__init__.py +0 -0
  405. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/negative/mutations.py +0 -0
  406. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/negative/types.py +0 -0
  407. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/negative/utils.py +0 -0
  408. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/parameters.py +0 -0
  409. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/patterns.py +0 -0
  410. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/references.py +0 -0
  411. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/security.py +0 -0
  412. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/serialization.py +0 -0
  413. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/specs/openapi/utils.py +0 -0
  414. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/transport/__init__.py +0 -0
  415. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/transport/asgi.py +0 -0
  416. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/transport/prepare.py +0 -0
  417. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/transport/requests.py +0 -0
  418. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/transport/serialization.py +0 -0
  419. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/src/schemathesis/transport/wsgi.py +0 -0
  420. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/__init__.py +0 -0
  421. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/_pytest/__init__.py +0 -0
  422. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/_pytest/test_markers.py +0 -0
  423. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/__init__.py +0 -0
  424. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/_graphql/__init__.py +0 -0
  425. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/_graphql/_fastapi/__init__.py +0 -0
  426. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/_graphql/_fastapi/app.py +0 -0
  427. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/_graphql/_flask/__init__.py +0 -0
  428. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/_graphql/_flask/app.py +0 -0
  429. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/_graphql/schema.py +0 -0
  430. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/cp1252_app.py +0 -0
  431. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/hooks.py +0 -0
  432. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/openapi/__init__.py +0 -0
  433. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/openapi/_aiohttp/__init__.py +0 -0
  434. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/openapi/_aiohttp/app.py +0 -0
  435. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/openapi/_aiohttp/handlers.py +0 -0
  436. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/openapi/_fastapi/__init__.py +0 -0
  437. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/openapi/_fastapi/app.py +0 -0
  438. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/openapi/_flask/__init__.py +0 -0
  439. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/openapi/_flask/app.py +0 -0
  440. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/apps/openapi/schema.py +0 -0
  441. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/auth/__init__.py +0 -0
  442. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/auth/conftest.py +0 -0
  443. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/auth/test_provider.py +0 -0
  444. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/auth/test_pytest.py +0 -0
  445. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__init__.py +0 -0
  446. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_cassettes/test_forbid_preserve_exact_bytes_without_cassette_path[Open API 3.0].raw +0 -0
  447. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args8].raw +0 -0
  448. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args9].raw +0 -0
  449. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_auth_and_authorization_header_are_disallowed[Open API 3.0-Authorization].raw +0 -0
  450. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_auth_and_authorization_header_are_disallowed[Open API 3.0-authorization].raw +0 -0
  451. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_certificate_only_key.raw +0 -0
  452. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_commands_help.raw +0 -0
  453. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_duplicated_filters[Open API 3.0].raw +0 -0
  454. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_force_color_nocolor[Open API 3.0].raw +0 -0
  455. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_hooks_module_not_found.raw +0 -0
  456. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_hooks_with_inner_import_error.raw +0 -0
  457. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_hypothesis_database_with_derandomize[Open API 3.0].raw +0 -0
  458. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_invalid_filter[Open API 3.0].raw +0 -0
  459. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args0].raw +0 -0
  460. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args10].raw +0 -0
  461. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args11].raw +0 -0
  462. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args12].raw +0 -0
  463. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args13].raw +0 -0
  464. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args14].raw +0 -0
  465. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args15].raw +0 -0
  466. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args16].raw +0 -0
  467. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args17].raw +0 -0
  468. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args18].raw +0 -0
  469. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args19].raw +0 -0
  470. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args1].raw +0 -0
  471. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args20].raw +0 -0
  472. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args21].raw +0 -0
  473. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args22].raw +0 -0
  474. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args23].raw +0 -0
  475. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args24].raw +0 -0
  476. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args25].raw +0 -0
  477. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args26].raw +0 -0
  478. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args27].raw +0 -0
  479. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args28].raw +0 -0
  480. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args29].raw +0 -0
  481. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args2].raw +0 -0
  482. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args30].raw +0 -0
  483. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args31].raw +0 -0
  484. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args32].raw +0 -0
  485. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args33].raw +0 -0
  486. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args3].raw +0 -0
  487. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args4].raw +0 -0
  488. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args5].raw +0 -0
  489. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args6].raw +0 -0
  490. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args7].raw +0 -0
  491. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args8].raw +0 -0
  492. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/__snapshots__/test_commands/test_run_output[args9].raw +0 -0
  493. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/cert.pem +0 -0
  494. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/test_cassettes.py +0 -0
  495. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/test_checks.py +0 -0
  496. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/test_junitxml.py +0 -0
  497. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/test_options.py +0 -0
  498. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/test_targeted.py +0 -0
  499. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/cli/test_validation.py +0 -0
  500. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/code_samples/test_curl.py +0 -0
  501. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/contrib/openapi/test_fill_missing_examples.py +0 -0
  502. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/contrib/test_unique_data.py +0 -0
  503. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/core/__init__.py +0 -0
  504. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/core/test_deserialization.py +0 -0
  505. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/core/test_media_types.py +0 -0
  506. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/coverage/__init__.py +0 -0
  507. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/coverage/test_combinations.py +0 -0
  508. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/coverage/test_examples.py +0 -0
  509. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/coverage/test_phase.py +0 -0
  510. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/data/petstore_v2.yaml +0 -0
  511. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/data/petstore_v3.yaml +0 -0
  512. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/data/relative_files/components/parameters.yaml +0 -0
  513. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/data/relative_files/components/responses.yaml +0 -0
  514. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/data/relative_files/components/schemas.yaml +0 -0
  515. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/data/relative_files/main.yaml +0 -0
  516. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/data/relative_files/paths/user-account.yaml +0 -0
  517. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/data/simple_openapi.yaml +0 -0
  518. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/data/simple_swagger.yaml +0 -0
  519. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/engine/__init__.py +0 -0
  520. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/engine/test_engine.py +0 -0
  521. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/engine/test_errors.py +0 -0
  522. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/engine/test_probes.py +0 -0
  523. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/engine/test_simulation.py +0 -0
  524. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/experimental/__snapshots__/test_experiments/test_not_enabled.raw +0 -0
  525. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/experimental/conftest.py +0 -0
  526. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/experimental/test_experiments.py +0 -0
  527. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/experimental/test_openapi_3_1.py +0 -0
  528. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/filters/__init__.py +0 -0
  529. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/filters/test_expressions.py +0 -0
  530. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/filters/test_matching.py +0 -0
  531. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/fixtures/__init__.py +0 -0
  532. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/fixtures/app_runner.py +0 -0
  533. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/fixtures/ctx.py +0 -0
  534. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/hooks/test_filters.py +0 -0
  535. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/loaders/conftest.py +0 -0
  536. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/loaders/test_common.py +0 -0
  537. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/loaders/test_graphql.py +0 -0
  538. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/loaders/test_openapi.py +0 -0
  539. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/openapi/__init__.py +0 -0
  540. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/openapi/test_filters.py +0 -0
  541. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/graphql/test_custom_scalars.py +0 -0
  542. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/graphql/test_pytest.py +0 -0
  543. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/blank.pdf +0 -0
  544. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/conftest.py +0 -0
  545. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/parameters/test_forms.py +0 -0
  546. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/parameters/test_non_payload.py +0 -0
  547. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/parameters/test_simple_payloads.py +0 -0
  548. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/stateful/__init__.py +0 -0
  549. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/stateful/conftest.py +0 -0
  550. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/stateful/test_cli.py +0 -0
  551. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/test_checks.py +0 -0
  552. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/test_examples.py +0 -0
  553. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/test_hypothesis.py +0 -0
  554. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/test_ignored_auth.py +0 -0
  555. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/test_media_types.py +0 -0
  556. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/test_negative.py +0 -0
  557. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/test_parameters.py +0 -0
  558. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/test_patterns.py +0 -0
  559. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/test_randomized.py +0 -0
  560. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/test_schemas.py +0 -0
  561. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/test_security.py +0 -0
  562. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/test_serializing.py +0 -0
  563. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/specs/openapi/test_utils.py +0 -0
  564. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_app.py +0 -0
  565. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_asgi.py +0 -0
  566. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_async.py +0 -0
  567. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_common_parameters.py +0 -0
  568. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_converter.py +0 -0
  569. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_dereferencing.py +0 -0
  570. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_direct_access.py +0 -0
  571. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_examples.py +0 -0
  572. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_filters.py +0 -0
  573. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_hypothesis.py +0 -0
  574. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_lazy.py +0 -0
  575. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_models.py +0 -0
  576. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_output.py +0 -0
  577. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_package.py +0 -0
  578. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_parameters.py +0 -0
  579. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_parametrization.py +0 -0
  580. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_petstore.py +0 -0
  581. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_pytest.py +0 -0
  582. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_rate_limit.py +0 -0
  583. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_recoverable_errors.py +0 -0
  584. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_required.py +0 -0
  585. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_sanitizing_output.py +0 -0
  586. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_schemas.py +0 -0
  587. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_serialization.py +0 -0
  588. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_unittest.py +0 -0
  589. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/test_wsgi.py +0 -0
  590. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test/utils.py +0 -0
  591. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test-corpus/conftest.py +0 -0
  592. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test-corpus/test_corpus.py +0 -0
  593. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/test_server.sh +0 -0
  594. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/tox.ini +0 -0
  595. {schemathesis-4.0.0a1 → schemathesis-4.0.0a2}/typos.toml +0 -0
@@ -44,7 +44,7 @@ jobs:
44
44
  - uses: actions/checkout@v4.2.1
45
45
  with:
46
46
  fetch-depth: 1
47
- - uses: ammaraskar/sphinx-action@7.0.0
47
+ - uses: ammaraskar/sphinx-action@8.1.3
48
48
  with:
49
49
  docs-folder: "docs/"
50
50
 
@@ -38,7 +38,7 @@ jobs:
38
38
 
39
39
  # Initializes the CodeQL tools for scanning.
40
40
  - name: Initialize CodeQL
41
- uses: github/codeql-action/init@v3.28.0
41
+ uses: github/codeql-action/init@v3.28.1
42
42
  with:
43
43
  languages: ${{ matrix.language }}
44
44
  # If you wish to specify custom queries, you can do so here or in a config file.
@@ -49,7 +49,7 @@ jobs:
49
49
  # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
50
50
  # If this step fails, then you should remove it and run the build manually (see below)
51
51
  - name: Autobuild
52
- uses: github/codeql-action/autobuild@v3.28.0
52
+ uses: github/codeql-action/autobuild@v3.28.1
53
53
 
54
54
  # ℹ️ Command-line programs to run using the OS shell.
55
55
  # 📚 https://git.io/JvXDl
@@ -63,4 +63,4 @@ jobs:
63
63
  # make release
64
64
 
65
65
  - name: Perform CodeQL Analysis
66
- uses: github/codeql-action/analyze@v3.28.0
66
+ uses: github/codeql-action/analyze@v3.28.1
@@ -21,6 +21,15 @@ jobs:
21
21
  steps:
22
22
  - uses: actions/checkout@v4.2.1
23
23
 
24
+ - name: Detect pre-release
25
+ id: detect-prerelease
26
+ run: |
27
+ TAG_NAME="${{ github.event.release.tag_name }}"
28
+ if [ "${{ github.event.release.prerelease }}" == "true" ] || [[ "$TAG_NAME" =~ -(alpha|beta|rc)[0-9]*$ ]]; then
29
+ echo "is_prerelease=true" >> $GITHUB_ENV
30
+ else
31
+ echo "is_prerelease=false" >> $GITHUB_ENV
32
+
24
33
  - name: Docker meta
25
34
  id: meta
26
35
  uses: docker/metadata-action@v5
@@ -33,7 +42,7 @@ jobs:
33
42
  tags: |
34
43
  type=semver,pattern={{raw}}${{ matrix.tag-suffix }}
35
44
  type=semver,pattern={{version}}${{ matrix.tag-suffix }}
36
- type=raw,value=stable${{ matrix.tag-suffix }}
45
+ ${{ env.is_prerelease == 'false' && 'type=raw,value=stable${{ matrix.tag-suffix }}' || '' }}
37
46
 
38
47
  - name: Set up QEMU
39
48
  uses: docker/setup-qemu-action@v3
@@ -33,12 +33,12 @@ repos:
33
33
  additional_dependencies: [types-requests, types-PyYAML]
34
34
 
35
35
  - repo: https://github.com/astral-sh/ruff-pre-commit
36
- rev: v0.9.1
36
+ rev: v0.9.2
37
37
  hooks:
38
38
  - id: ruff-format
39
39
 
40
40
  - repo: https://github.com/astral-sh/ruff-pre-commit
41
- rev: v0.9.1
41
+ rev: v0.9.2
42
42
  hooks:
43
43
  - id: ruff
44
44
 
@@ -9,3 +9,6 @@ python:
9
9
  - method: pip
10
10
  path: .
11
11
  - requirements: docs/requirements.txt
12
+
13
+ sphinx:
14
+ configuration: docs/conf.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: schemathesis
3
- Version: 4.0.0a1
3
+ Version: 4.0.0a2
4
4
  Summary: Property-based testing framework for Open API and GraphQL based apps
5
5
  Project-URL: Documentation, https://schemathesis.readthedocs.io/en/stable/
6
6
  Project-URL: Changelog, https://schemathesis.readthedocs.io/en/stable/changelog.html
@@ -225,7 +225,7 @@ def test_rewritten_components(raw_schema):
225
225
  def test_links_count(raw_schema):
226
226
  schema = schemathesis.openapi.from_dict(raw_schema)
227
227
 
228
- _ = schema.links_count
228
+ _ = schema.statistic.links.total
229
229
 
230
230
 
231
231
  @pytest.mark.benchmark
@@ -1,8 +1,28 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
- :version:`Unreleased <v4.0.0a1...HEAD>` - TBD
5
- ---------------------------------------------
4
+ :version:`Unreleased <v4.0.0-alpha.2...HEAD>` - TBD
5
+ ---------------------------------------------------
6
+
7
+ .. _v4.0.0-alpha.2:
8
+
9
+ :version:`4.0.0-alpha.2 <v4.0.0a1...v4.0.0-alpha.2>` - 2025-01-20
10
+ -----------------------------------------------------------------
11
+
12
+ **Added**
13
+
14
+ - Improved visibility into Open API link extraction success/failure status :issue:`823`
15
+
16
+ **Changed**
17
+
18
+ - Unified test progress display with multi-spinner interface and single progress bar :issue:`2372`
19
+ - Optimized stateful testing by generating only required test data for Open API links.
20
+ - Cleaner display of schema loading errors.
21
+
22
+ **Fixed**
23
+
24
+ - More accurate exception deduplication based on source location instead of messages.
25
+ - Stricter validation of ``--include-*`` and ``--exclude-*`` CLI options.
6
26
 
7
27
  .. _v4.0.0a1:
8
28
 
@@ -20,13 +20,6 @@ For initial setup in a GitHub Actions workflow:
20
20
  - uses: schemathesis/action@v1
21
21
  with:
22
22
  schema: 'http://127.0.0.1:5000/api/openapi.json'
23
- # Optional, for PR comments
24
- token: ${{ secrets.SCHEMATHESIS_TOKEN }}
25
-
26
- To get test results as comments in your GitHub pull requests, both the ``token`` and the `GitHub app`_ are required.
27
- Obtain the token by signing up on `Schemathesis.io <https://app.schemathesis.io/auth/sign-up/?utm_source=oss_docs&utm_content=ci>`_.
28
-
29
- .. image:: https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/service_github_report.png
30
23
 
31
24
  To add headers like ``Authorization``:
32
25
 
@@ -77,16 +77,6 @@ Run Schemathesis tests as a part of your CI/CD pipeline. Add this YAML configura
77
77
 
78
78
  For more details, check out our `GitHub Action <https://github.com/schemathesis/action>`_ repository.
79
79
 
80
- GitHub App
81
- ^^^^^^^^^^
82
-
83
- Receive automatic comments in your pull requests and updates on GitHub checks status. Requires usage of our `SaaS platform <https://app.schemathesis.io/auth/sign-up/?utm_source=oss_docs&utm_content=index_note>`_.
84
-
85
- 1. Install the `GitHub app <https://github.com/apps/schemathesis>`_.
86
- 2. Enable in your repository settings.
87
-
88
- .. image:: https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/service_github_report.png
89
-
90
80
  Service
91
81
  -------
92
82
 
@@ -1,5 +1,3 @@
1
- from datetime import timedelta
2
-
3
1
  from hypothesis import strategies as st
4
2
 
5
3
  import schemathesis
@@ -25,7 +23,7 @@ def filter_body(ctx, body):
25
23
  @schemathesis.check
26
24
  def not_so_slow(ctx, response, case):
27
25
  """Custom response check."""
28
- assert response.elapsed < timedelta(milliseconds=100), "Response is slow!"
26
+ assert response.elapsed < 100, "Response is slow!"
29
27
 
30
28
 
31
29
  @schemathesis.target
Binary file
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "schemathesis"
7
- version = "4.0.0a1"
7
+ version = "4.0.0-alpha.2"
8
8
  description = "Property-based testing framework for Open API and GraphQL based apps"
9
9
  keywords = ["pytest", "hypothesis", "openapi", "graphql", "testing"]
10
10
  authors = [{ name = "Dmitry Dygalo", email = "dmitry@dygalo.dev" }]
@@ -4,6 +4,7 @@ import json
4
4
  from typing import TYPE_CHECKING, Any, Callable, Iterable, Iterator, Optional
5
5
 
6
6
  from schemathesis.core.failures import (
7
+ CustomFailure,
7
8
  Failure,
8
9
  FailureGroup,
9
10
  MalformedJson,
@@ -72,7 +73,7 @@ class CheckContext:
72
73
 
73
74
  def record_case(self, *, parent_id: str, case: Case) -> None:
74
75
  if self.recorder is not None:
75
- self.recorder.record_case(parent_id=parent_id, case=case)
76
+ self.recorder.record_case(parent_id=parent_id, transition=None, case=case)
76
77
 
77
78
  def record_response(self, *, case_id: str, response: Response) -> None:
78
79
  if self.recorder is not None:
@@ -135,10 +136,11 @@ def run_checks(
135
136
  except Failure as failure:
136
137
  on_failure(name, collected, failure.with_traceback(None))
137
138
  except AssertionError as exc:
138
- custom_failure = Failure.from_assertion(
139
- name=name,
139
+ custom_failure = CustomFailure(
140
140
  operation=case.operation.label,
141
- exc=exc,
141
+ title=f"Custom check failed: `{name}`",
142
+ message=str(exc),
143
+ exception=exc,
142
144
  )
143
145
  on_failure(name, collected, custom_failure)
144
146
  except FailureGroup as group:
@@ -91,7 +91,7 @@ DEFAULT_PHASES = ("unit", "stateful")
91
91
  help="Comma-separated list of checks to run against API responses",
92
92
  type=RegistryChoice(CHECKS, with_all=True),
93
93
  default=("not_a_server_error",),
94
- callback=validation.convert_checks,
94
+ callback=validation.reduce_list,
95
95
  show_default=True,
96
96
  metavar="",
97
97
  )
@@ -102,7 +102,7 @@ DEFAULT_PHASES = ("unit", "stateful")
102
102
  help="Comma-separated list of checks to skip during testing",
103
103
  type=RegistryChoice(CHECKS, with_all=True),
104
104
  default=(),
105
- callback=validation.convert_checks,
105
+ callback=validation.reduce_list,
106
106
  show_default=True,
107
107
  metavar="",
108
108
  )
@@ -356,7 +356,7 @@ DEFAULT_PHASES = ("unit", "stateful")
356
356
  help="Guide input generation to values more likely to expose bugs via targeted property-based testing",
357
357
  type=RegistryChoice(TARGETS),
358
358
  default=None,
359
- callback=validation.convert_checks,
359
+ callback=validation.reduce_list,
360
360
  show_default=True,
361
361
  metavar="TARGET",
362
362
  )
@@ -588,7 +588,7 @@ def run(
588
588
  max_response_time=max_response_time,
589
589
  ).into()
590
590
 
591
- if exit_first:
591
+ if exit_first and max_failures is None:
592
592
  max_failures = 1
593
593
 
594
594
  cassette_config = None
@@ -3,7 +3,7 @@ import uuid
3
3
 
4
4
  from schemathesis.core import Specification
5
5
  from schemathesis.engine import events
6
- from schemathesis.schemas import ApiOperationsCount
6
+ from schemathesis.schemas import ApiStatistic
7
7
 
8
8
 
9
9
  class LoadingStarted(events.EngineEvent):
@@ -16,15 +16,10 @@ class LoadingStarted(events.EngineEvent):
16
16
 
17
17
 
18
18
  class LoadingFinished(events.EngineEvent):
19
- __slots__ = ("id", "timestamp", "location", "duration", "base_url", "specification", "operations_count")
19
+ __slots__ = ("id", "timestamp", "location", "duration", "base_url", "specification", "statistic")
20
20
 
21
21
  def __init__(
22
- self,
23
- location: str,
24
- start_time: float,
25
- base_url: str,
26
- specification: Specification,
27
- operations_count: ApiOperationsCount,
22
+ self, location: str, start_time: float, base_url: str, specification: Specification, statistic: ApiStatistic
28
23
  ) -> None:
29
24
  self.id = uuid.uuid4()
30
25
  self.timestamp = time.time()
@@ -32,4 +27,4 @@ class LoadingFinished(events.EngineEvent):
32
27
  self.duration = self.timestamp - start_time
33
28
  self.base_url = base_url
34
29
  self.specification = specification
35
- self.operations_count = operations_count
30
+ self.statistic = statistic
@@ -19,7 +19,7 @@ from schemathesis.core.errors import LoaderError
19
19
  from schemathesis.core.output import OutputConfig
20
20
  from schemathesis.engine import from_schema
21
21
  from schemathesis.engine.config import EngineConfig
22
- from schemathesis.engine.events import EventGenerator, FatalError
22
+ from schemathesis.engine.events import EventGenerator, FatalError, Interrupted
23
23
  from schemathesis.filters import FilterSet
24
24
 
25
25
  CUSTOM_HANDLERS: list[type[EventHandler]] = []
@@ -70,6 +70,9 @@ def into_event_stream(config: RunConfig) -> EventGenerator:
70
70
  try:
71
71
  schema = load_schema(loader_config)
72
72
  schema.filter_set = config.filter_set
73
+ except KeyboardInterrupt:
74
+ yield Interrupted(phase=None)
75
+ return
73
76
  except LoaderError as exc:
74
77
  yield FatalError(exception=exc)
75
78
  return
@@ -79,7 +82,7 @@ def into_event_stream(config: RunConfig) -> EventGenerator:
79
82
  start_time=loading_started.timestamp,
80
83
  base_url=schema.get_base_url(),
81
84
  specification=schema.specification,
82
- operations_count=schema.count_operations(),
85
+ statistic=schema.statistic,
83
86
  )
84
87
 
85
88
  try:
@@ -112,7 +115,7 @@ def _execute(event_stream: EventGenerator, config: RunConfig) -> None:
112
115
 
113
116
  def shutdown() -> None:
114
117
  for _handler in handlers:
115
- _handler.shutdown()
118
+ _handler.shutdown(ctx)
116
119
 
117
120
  for handler in handlers:
118
121
  handler.start(ctx)
@@ -1,11 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Callable, Literal, Sequence
4
+ from typing import Any, Callable, Literal, Sequence
5
5
 
6
6
  import click
7
7
 
8
8
  from schemathesis.cli.ext.groups import grouped_option
9
+ from schemathesis.core.errors import IncorrectUsage
9
10
  from schemathesis.filters import FilterSet, expression_to_filter_function, is_deprecated
10
11
 
11
12
 
@@ -148,29 +149,24 @@ class FilterArguments:
148
149
  if exclude_by_function:
149
150
  filter_set.exclude(exclude_by_function)
150
151
  for name_ in self.exclude_name:
151
- filter_set.exclude(name=name_)
152
+ apply_exclude_filter(filter_set, "name", name=name_)
152
153
  for method in self.exclude_method:
153
- filter_set.exclude(method=method)
154
+ apply_exclude_filter(filter_set, "method", method=method)
154
155
  for path in self.exclude_path:
155
- filter_set.exclude(path=path)
156
+ apply_exclude_filter(filter_set, "path", path=path)
156
157
  for tag in self.exclude_tag:
157
- filter_set.exclude(tag=tag)
158
+ apply_exclude_filter(filter_set, "tag", tag=tag)
158
159
  for operation_id in self.exclude_operation_id:
159
- filter_set.exclude(operation_id=operation_id)
160
- if (
161
- self.exclude_name_regex
162
- or self.exclude_method_regex
163
- or self.exclude_path_regex
164
- or self.exclude_tag_regex
165
- or self.exclude_operation_id_regex
160
+ apply_exclude_filter(filter_set, "operation-id", operation_id=operation_id)
161
+ for key, value, name in (
162
+ ("name_regex", self.exclude_name_regex, "name-regex"),
163
+ ("method_regex", self.exclude_method_regex, "method-regex"),
164
+ ("path_regex", self.exclude_path_regex, "path-regex"),
165
+ ("tag_regex", self.exclude_tag_regex, "tag-regex"),
166
+ ("operation_id_regex", self.exclude_operation_id_regex, "operation-id-regex"),
166
167
  ):
167
- filter_set.exclude(
168
- name_regex=self.exclude_name_regex,
169
- method_regex=self.exclude_method_regex,
170
- path_regex=self.exclude_path_regex,
171
- tag_regex=self.exclude_tag_regex,
172
- operation_id_regex=self.exclude_operation_id_regex,
173
- )
168
+ if value:
169
+ apply_exclude_filter(filter_set, name, **{key: value})
174
170
 
175
171
  # Exclude deprecated operations
176
172
  if self.exclude_deprecated:
@@ -179,6 +175,18 @@ class FilterArguments:
179
175
  return filter_set
180
176
 
181
177
 
178
+ def apply_exclude_filter(filter_set: FilterSet, option_name: str, **kwargs: Any) -> None:
179
+ """Apply an exclude filter with proper error handling."""
180
+ try:
181
+ filter_set.exclude(**kwargs)
182
+ except IncorrectUsage as e:
183
+ if str(e) == "Filter already exists":
184
+ raise click.UsageError(
185
+ f"Filter for {option_name} already exists. You can't simultaneously include and exclude the same thing."
186
+ ) from None
187
+ raise click.UsageError(str(e)) from None
188
+
189
+
182
190
  def validate_unique_filter(values: Sequence[str], arg_name: str) -> None:
183
191
  if len(values) != len(set(values)):
184
192
  duplicates = ",".join(sorted({value for value in values if values.count(value) > 1}))
@@ -15,4 +15,4 @@ class EventHandler:
15
15
 
16
16
  def start(self, ctx: ExecutionContext) -> None: ...
17
17
 
18
- def shutdown(self) -> None: ...
18
+ def shutdown(self, ctx: ExecutionContext) -> None: ...
@@ -77,10 +77,8 @@ class CassetteWriter(EventHandler):
77
77
  def handle_event(self, ctx: ExecutionContext, event: events.EngineEvent) -> None:
78
78
  if isinstance(event, events.ScenarioFinished):
79
79
  self.queue.put(Process(recorder=event.recorder))
80
- elif isinstance(event, events.EngineFinished):
81
- self.shutdown()
82
80
 
83
- def shutdown(self) -> None:
81
+ def shutdown(self, ctx: ExecutionContext) -> None:
84
82
  self.queue.put(Finalize())
85
83
  self._stop_worker()
86
84