schemathesis 4.0.0a1__tar.gz → 4.0.0a3__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 (604) hide show
  1. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/build.yml +1 -1
  2. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/codeql-analysis.yml +3 -3
  3. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/release.yml +12 -1
  4. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.pre-commit-config.yaml +2 -2
  5. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.readthedocs.yml +3 -0
  6. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/PKG-INFO +1 -1
  7. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/benches/schema.py +1 -1
  8. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/changelog.rst +53 -3
  9. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/continuous_integration.rst +0 -7
  10. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/getting-started.rst +0 -10
  11. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/tests/extensions.py +1 -3
  12. schemathesis-4.0.0a3/img/demo.gif +0 -0
  13. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/pyproject.toml +1 -1
  14. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/checks.py +6 -4
  15. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/__init__.py +12 -1
  16. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/__init__.py +4 -4
  17. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/events.py +19 -4
  18. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/executor.py +9 -3
  19. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/filters.py +27 -19
  20. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/handlers/base.py +1 -1
  21. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/handlers/cassettes.py +1 -3
  22. schemathesis-4.0.0a3/src/schemathesis/cli/commands/run/handlers/output.py +1405 -0
  23. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/validation.py +1 -1
  24. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/ext/options.py +4 -1
  25. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/errors.py +8 -0
  26. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/failures.py +54 -24
  27. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/core.py +1 -1
  28. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/errors.py +11 -5
  29. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/events.py +3 -97
  30. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/stateful/__init__.py +2 -0
  31. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/stateful/_executor.py +22 -50
  32. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/unit/__init__.py +1 -0
  33. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/unit/_executor.py +2 -1
  34. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/unit/_pool.py +1 -1
  35. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/recorder.py +29 -23
  36. schemathesis-4.0.0a3/src/schemathesis/errors.py +37 -0
  37. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/coverage.py +4 -4
  38. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/hypothesis/builder.py +15 -12
  39. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/stateful/state_machine.py +61 -45
  40. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/graphql/checks.py +3 -9
  41. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/openapi/checks.py +8 -33
  42. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/schemas.py +34 -14
  43. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/graphql/schemas.py +16 -15
  44. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/checks.py +50 -27
  45. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/expressions/__init__.py +11 -15
  46. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/expressions/nodes.py +20 -20
  47. schemathesis-4.0.0a3/src/schemathesis/specs/openapi/links.py +227 -0
  48. schemathesis-4.0.0a3/src/schemathesis/specs/openapi/patterns.py +305 -0
  49. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/schemas.py +60 -36
  50. schemathesis-4.0.0a3/src/schemathesis/specs/openapi/stateful/__init__.py +292 -0
  51. schemathesis-4.0.0a3/src/schemathesis/specs/openapi/stateful/control.py +87 -0
  52. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/__snapshots__/test_dereferencing/test_global_security_schemes_with_custom_scope.raw +5 -1
  53. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/__snapshots__/test_dereferencing/test_missing_file_in_resolution.raw +6 -1
  54. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/__snapshots__/test_hypothesis/test_health_check_failed_large_base_example.raw +6 -2
  55. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/__snapshots__/test_recoverable_errors/test_in_cli[1].raw +5 -2
  56. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/__snapshots__/test_recoverable_errors/test_in_cli[2].raw +5 -1
  57. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/__snapshots__/test_serialization/test_in_cli[Open API 3.0].raw +6 -2
  58. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/schema.py +24 -2
  59. schemathesis-4.0.0a3/test/auth/__snapshots__/test_cli/test_conditional[Open API 3.0].raw +39 -0
  60. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/__snapshots__/test_cli/test_custom_auth[Open API 3.0].raw +5 -3
  61. schemathesis-4.0.0a3/test/auth/__snapshots__/test_cli/test_explicit_auth_precedence[Open API 3.0-args0-Basic dXNlcjpwYXNz].raw +39 -0
  62. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/__snapshots__/test_cli/test_explicit_auth_precedence[Open API 3.0-args1-Bearer EXPLICIT].raw +5 -3
  63. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/__snapshots__/test_cli/test_multiple_auth_mechanisms_with_explicit_auth.raw +5 -1
  64. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/__snapshots__/test_cli/test_multiple_threads[Open API 3.0].raw +5 -1
  65. schemathesis-4.0.0a3/test/auth/__snapshots__/test_cli/test_requests_auth[Open API 3.0].raw +39 -0
  66. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/test_cli.py +0 -10
  67. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_cassettes/test_run_subprocess[Open API 2.0].raw +6 -2
  68. schemathesis-4.0.0a1/test/auth/__snapshots__/test_cli/test_explicit_auth_precedence[Open API 3.0-args0-Basic dXNlcjpwYXNz].raw → schemathesis-4.0.0a3/test/cli/__snapshots__/test_cassettes/test_run_subprocess[Open API 3.0].raw +8 -3
  69. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args0].raw +5 -1
  70. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args10].raw +6 -2
  71. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args1].raw +5 -1
  72. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args2].raw +6 -2
  73. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args3].raw +5 -1
  74. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args4].raw +6 -2
  75. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args5].raw +5 -1
  76. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args6].raw +6 -2
  77. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args7].raw +5 -1
  78. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance_with_env_vars.raw +6 -2
  79. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 2.0---auth='testwrong'].raw +7 -3
  80. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 2.0--H Authorization Basic J3Rlc3Q6d3Jvbmcn].raw +7 -3
  81. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 3.0---auth='testwrong'].raw +7 -3
  82. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 3.0--H Authorization Basic J3Rlc3Q6d3Jvbmcn].raw +7 -3
  83. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_binary_payload.raw +6 -2
  84. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_chunked_encoding_error[Open API 3.0].raw +6 -2
  85. schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_cli_run_changed_base_url[Open API 3.0].raw +56 -0
  86. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[Open API 2.0-1].raw +6 -2
  87. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[Open API 2.0-2].raw +6 -2
  88. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[Open API 3.0-1].raw +6 -2
  89. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[Open API 3.0-2].raw +6 -2
  90. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_complex_urlencoded_example.raw +6 -2
  91. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 2.0-1].raw +5 -2
  92. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 2.0-2].raw +5 -1
  93. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 3.0-1].raw +5 -2
  94. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 3.0-2].raw +5 -1
  95. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 2.0-1].raw +6 -3
  96. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 2.0-2].raw +6 -2
  97. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 3.0-1].raw +6 -3
  98. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 3.0-2].raw +6 -2
  99. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_custom_cli_option[Open API 3.0].raw +5 -1
  100. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_dont_skip_when_generation_is_possible[Open API 3.0].raw +5 -1
  101. schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_empty_schema_file.raw +14 -0
  102. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_exit_first[Open API 3.0].raw +5 -1
  103. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_explicit_example_failure_output.raw +6 -2
  104. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_explicit_headers_in_output_on_errors[Open API 3.0].raw +5 -1
  105. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_explicit_query_token_sanitization[Open API 3.0].raw +6 -2
  106. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_filter_by[Open API 3.0---exclude-by=x-property != 42].raw +5 -1
  107. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_filter_by[Open API 3.0---include-by=x-property == 42].raw +5 -1
  108. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_graphql_url[foo-args0].raw +5 -4
  109. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_graphql_url[foo-args1].raw +5 -4
  110. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_graphql_url[graphql-args0].raw +5 -4
  111. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_graphql_url[graphql-args1].raw +5 -4
  112. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_group_errors.raw +6 -2
  113. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_invalid_operation[Open API 2.0-1].raw +6 -2
  114. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_invalid_operation[Open API 3.0-1].raw +6 -2
  115. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_invalid_schema_with_disabled_validation[3.0.2].raw +6 -2
  116. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_invalid_schema_with_disabled_validation[3.1.0].raw +6 -2
  117. schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_invalid_yaml.raw +15 -0
  118. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_keyboard_interrupt[Open API 2.0-1].raw +4 -3
  119. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_keyboard_interrupt[Open API 3.0-1].raw +4 -3
  120. schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_keyboard_interrupt_during_schema_loading.raw +8 -0
  121. schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_keyboard_interrupt_threaded[Open API 2.0].raw +39 -0
  122. schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_keyboard_interrupt_threaded[Open API 3.0].raw +39 -0
  123. schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_long_operation_output.raw +39 -0
  124. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_long_payload.raw +6 -2
  125. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_malformed_json_deduplication[Open API 3.0].raw +6 -2
  126. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 2.0-1].raw +6 -2
  127. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 2.0-2].raw +6 -2
  128. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 3.0-1].raw +6 -2
  129. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 3.0-2].raw +6 -2
  130. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[cookie].raw +6 -2
  131. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[header].raw +6 -2
  132. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[path].raw +6 -2
  133. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[query].raw +6 -2
  134. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_multiple_errors.raw +5 -1
  135. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_multiple_failures_different_check[Open API 2.0].raw +5 -1
  136. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_multiple_failures_different_check[Open API 3.0].raw +5 -1
  137. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_multiple_failures_in_single_check.raw +5 -1
  138. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_multiple_failures_single_check[Open API 2.0].raw +6 -2
  139. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_multiple_failures_single_check[Open API 3.0].raw +6 -2
  140. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_nested_binary_in_yaml.raw +5 -1
  141. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_no_schema_in_media_type[Open API 3.0].raw +5 -1
  142. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_no_useless_traceback.raw +6 -2
  143. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_null_byte_in_header_probe.raw +5 -1
  144. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_proxy_error[Open API 3.0].raw +6 -2
  145. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_read_content_timeout[Open API 3.0].raw +6 -2
  146. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_recursive_reference_error_message.raw +6 -2
  147. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError(Custom check failed!)-Open API 2.0].raw +6 -2
  148. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError(Custom check failed!)-Open API 3.0].raw +6 -2
  149. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError-Open API 2.0].raw +6 -2
  150. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError-Open API 3.0].raw +6 -2
  151. schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_remote_disconnected_error[Open API 3.0].raw +16 -0
  152. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_reserved_characters_in_operation_name.raw +5 -1
  153. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[Open API 2.0].raw +6 -2
  154. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[Open API 3.0].raw +6 -2
  155. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[Open API 2.0].raw +6 -2
  156. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[Open API 3.0].raw +6 -2
  157. schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_schema_not_available[1].raw +16 -0
  158. schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_schema_not_available[2].raw +16 -0
  159. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_skip_not_negated_tests[Open API 3.0].raw +5 -1
  160. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_skipped_on_no_explicit_examples.raw +5 -1
  161. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_status_code_conformance[Open API 2.0-1].raw +6 -2
  162. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_status_code_conformance[Open API 2.0-2].raw +6 -2
  163. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_status_code_conformance[Open API 3.0-1].raw +6 -2
  164. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_status_code_conformance[Open API 3.0-2].raw +6 -2
  165. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_unknown_schema_error[Open API 3.0].raw +6 -2
  166. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_unresolvable_reference_with_disabled_validation.raw +5 -2
  167. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_unsatisfiable[Open API 2.0-1].raw +6 -2
  168. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_unsatisfiable[Open API 2.0-2].raw +6 -2
  169. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_unsatisfiable[Open API 3.0-1].raw +6 -2
  170. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_unsatisfiable[Open API 3.0-2].raw +6 -2
  171. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_unsupported_regex.raw +6 -3
  172. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_useful_traceback[Open API 3.0].raw +6 -2
  173. schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_wait_for_schema_not_enough.raw +14 -0
  174. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_warning_on_all_not_found.raw +5 -2
  175. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_warning_on_unauthorized.raw +7 -3
  176. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_hooks/test_after_call[Open API 3.0].raw +6 -2
  177. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_commands.py +8 -20
  178. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_crashes.py +84 -25
  179. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_hooks.py +3 -4
  180. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/conftest.py +88 -18
  181. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_cli[None].raw +5 -1
  182. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema0].raw +5 -1
  183. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema1].raw +5 -1
  184. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema2].raw +5 -1
  185. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_cli_failure.raw +6 -2
  186. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_explicit_headers[1].raw +5 -1
  187. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_explicit_headers[2].raw +5 -1
  188. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_graphql_url.raw +5 -4
  189. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/openapi/__snapshots__/test_fill_missing_examples/test_fills_missing_examples.raw +5 -1
  190. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/coverage/__snapshots__/test_phase/test_unspecified_http_methods.raw +5 -1
  191. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/coverage/test_combinations.py +9 -1
  192. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/coverage/test_phase.py +100 -0
  193. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/engine/test_checks.py +1 -1
  194. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/engine/test_engine.py +3 -1
  195. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/hooks/test_hooks.py +0 -35
  196. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/graphql/__snapshots__/test_basic/test_disallow_null.raw +6 -2
  197. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/graphql/__snapshots__/test_basic/test_filter_operations[--exclude-name=Query.getBooks].raw +5 -3
  198. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/graphql/__snapshots__/test_basic/test_filter_operations[--include-name=Query.getBooks].raw +5 -1
  199. schemathesis-4.0.0a3/test/specs/graphql/__snapshots__/test_basic/test_schema_error[ntype Query {n 123(created Int!) Int!n}-.whatever].raw +19 -0
  200. schemathesis-4.0.0a3/test/specs/graphql/__snapshots__/test_basic/test_schema_error[ntype Query {n func(created Unknown!) Int!n}-.gql].raw +14 -0
  201. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/graphql/__snapshots__/test_custom_scalars/test_custom_scalar_in_cli.raw +6 -2
  202. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/graphql/test_basic.py +3 -3
  203. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_checks/test_method_not_allowed[basic-post].raw +6 -2
  204. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_checks/test_method_not_allowed[success-get].raw +5 -1
  205. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_checks/test_missing_required_header[basic-Authorization-406].raw +5 -1
  206. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_checks/test_missing_required_header[success-Authorization-200].raw +6 -2
  207. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_checks/test_missing_required_header[success-X-API-Key-1-200].raw +5 -1
  208. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_checks/test_missing_required_header[success-X-API-Key-1-406].raw +6 -2
  209. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_examples/test_network_error_with_flaky_generation.raw +6 -2
  210. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_examples/test_parameter_override.raw +5 -1
  211. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_ignored_auth/test_explicit_auth_cli[Open API 3.0].raw +5 -1
  212. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_ignored_auth/test_stateful_in_cli_no_error[Open API 3.0-False].raw +7 -2
  213. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_ignored_auth/test_stateful_in_cli_no_error[Open API 3.0-True].raw +8 -3
  214. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_media_types/test_explicit_example_with_custom_media_type.raw +6 -2
  215. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/__snapshots__/test_cli/test_default[Open API 3.0-1].raw +11 -6
  216. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/__snapshots__/test_cli/test_default[Open API 3.0-2].raw +11 -4
  217. schemathesis-4.0.0a3/test/specs/openapi/stateful/__snapshots__/test_cli/test_filtered_out[Open API 3.0].raw +59 -0
  218. schemathesis-4.0.0a3/test/specs/openapi/stateful/__snapshots__/test_cli/test_generation_config[Open API 3.0].raw +61 -0
  219. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/__snapshots__/test_cli/test_keyboard_interrupt[Open API 3.0].raw +6 -2
  220. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/__snapshots__/test_cli/test_max_failures[Open API 3.0].raw +10 -6
  221. schemathesis-4.0.0a3/test/specs/openapi/stateful/__snapshots__/test_cli/test_missing_link[Open API 3.0].raw +54 -0
  222. schemathesis-4.0.0a3/test/specs/openapi/stateful/__snapshots__/test_cli/test_not_enough_links[Open API 3.0].raw +56 -0
  223. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/__snapshots__/test_cli/test_proxy_error[Open API 3.0].raw +8 -3
  224. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/__snapshots__/test_cli/test_stateful_only[Open API 3.0].raw +8 -3
  225. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/__snapshots__/test_cli/test_stateful_only_with_error[Open API 3.0].raw +8 -3
  226. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/conftest.py +21 -0
  227. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/test_cli.py +24 -10
  228. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/test_engine.py +56 -21
  229. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/test_stateful.py +5 -9
  230. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_expressions.py +13 -12
  231. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_patterns.py +31 -0
  232. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_stateful.py +2 -26
  233. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test-corpus/test_corpus.py +10 -2
  234. schemathesis-4.0.0a1/img/demo.gif +0 -0
  235. schemathesis-4.0.0a1/img/service_github_report.png +0 -0
  236. schemathesis-4.0.0a1/src/schemathesis/cli/commands/run/handlers/output.py +0 -746
  237. schemathesis-4.0.0a1/src/schemathesis/errors.py +0 -31
  238. schemathesis-4.0.0a1/src/schemathesis/specs/openapi/expressions/context.py +0 -14
  239. schemathesis-4.0.0a1/src/schemathesis/specs/openapi/links.py +0 -206
  240. schemathesis-4.0.0a1/src/schemathesis/specs/openapi/patterns.py +0 -137
  241. schemathesis-4.0.0a1/src/schemathesis/specs/openapi/stateful/__init__.py +0 -220
  242. schemathesis-4.0.0a1/test/auth/__snapshots__/test_cli/test_conditional[Open API 3.0].raw +0 -36
  243. schemathesis-4.0.0a1/test/auth/__snapshots__/test_cli/test_requests_auth[Open API 3.0].raw +0 -38
  244. schemathesis-4.0.0a1/test/cli/__snapshots__/test_cassettes/test_run_subprocess[Open API 3.0].raw +0 -38
  245. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_cli_run_changed_base_url[Open API 3.0].raw +0 -53
  246. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_empty_schema_file.raw +0 -11
  247. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_invalid_yaml.raw +0 -12
  248. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_long_operation_output.raw +0 -36
  249. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_remote_disconnected_error[Open API 3.0].raw +0 -13
  250. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_schema_not_available[1].raw +0 -13
  251. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_schema_not_available[2].raw +0 -13
  252. schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_wait_for_schema_not_enough.raw +0 -11
  253. 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
  254. 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
  255. schemathesis-4.0.0a1/test/specs/openapi/stateful/__snapshots__/test_cli/test_filtered_out[Open API 3.0].raw +0 -35
  256. schemathesis-4.0.0a1/test/specs/openapi/stateful/__snapshots__/test_cli/test_generation_config[Open API 3.0].raw +0 -38
  257. schemathesis-4.0.0a1/test/specs/openapi/test_links.py +0 -39
  258. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.dockerignore +0 -0
  259. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/FUNDING.yml +0 -0
  260. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  261. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  262. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  263. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/dependabot.yml +0 -0
  264. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/codspeed.yml +0 -0
  265. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/commit.yml +0 -0
  266. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/example-build.yml +0 -0
  267. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/example-no-build.yml +0 -0
  268. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/master_update.yml +0 -0
  269. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/test-corpus.yml +0 -0
  270. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/test-hypothesis.yml +0 -0
  271. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/update-pre-commit.yml +0 -0
  272. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.gitignore +0 -0
  273. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.rstcheck.cfg +0 -0
  274. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.yamllint +0 -0
  275. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/ARCHITECTURE.md +0 -0
  276. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/CITATION.cff +0 -0
  277. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/CODE_OF_CONDUCT.md +0 -0
  278. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/CONTRIBUTING.rst +0 -0
  279. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/Dockerfile +0 -0
  280. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/Dockerfile.bookworm +0 -0
  281. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/LICENSE +0 -0
  282. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/README.md +0 -0
  283. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/SECURITY.md +0 -0
  284. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/benches/cli.py +0 -0
  285. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/benches/coverage_phase.py +0 -0
  286. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/benches/references.py +0 -0
  287. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/changelog.py +0 -0
  288. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/codecov.yml +0 -0
  289. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/corpus/data/graphql.tar.gz +0 -0
  290. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/corpus/data/openapi-3.0.tar.gz +0 -0
  291. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/corpus/data/openapi-3.1.tar.gz +0 -0
  292. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/corpus/data/swagger-2.0.tar.gz +0 -0
  293. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/corpus/tools.py +0 -0
  294. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/Makefile +0 -0
  295. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/additional-content.rst +0 -0
  296. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/api.rst +0 -0
  297. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/auth.rst +0 -0
  298. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/cli.rst +0 -0
  299. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/conf.py +0 -0
  300. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/contrib.rst +0 -0
  301. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/data-generation.rst +0 -0
  302. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/examples.rst +0 -0
  303. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/experimental.rst +0 -0
  304. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/extending.rst +0 -0
  305. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/faq.rst +0 -0
  306. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/graphql.rst +0 -0
  307. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/index.rst +0 -0
  308. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/python.rst +0 -0
  309. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/recipes.rst +0 -0
  310. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/requirements.txt +0 -0
  311. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/sanitizing.rst +0 -0
  312. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/service.rst +0 -0
  313. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/stateful.rst +0 -0
  314. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/targeted.rst +0 -0
  315. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/Dockerfile +0 -0
  316. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/README.md +0 -0
  317. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/app.py +0 -0
  318. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/compose.yml +0 -0
  319. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/openapi.json +0 -0
  320. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/requirements-app.in +0 -0
  321. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/requirements-app.txt +0 -0
  322. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/requirements-pytest.in +0 -0
  323. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/requirements-pytest.txt +0 -0
  324. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/tests/__init__.py +0 -0
  325. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/tests/conftest.py +0 -0
  326. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/tests/test_app.py +0 -0
  327. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/mypy.ini +0 -0
  328. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/__init__.py +0 -0
  329. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/auths.py +0 -0
  330. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/__main__.py +0 -0
  331. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/__init__.py +0 -0
  332. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/checks.py +0 -0
  333. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/context.py +0 -0
  334. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/handlers/__init__.py +0 -0
  335. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/handlers/junitxml.py +0 -0
  336. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/hypothesis.py +0 -0
  337. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/loaders.py +0 -0
  338. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/constants.py +0 -0
  339. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/core.py +0 -0
  340. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/ext/__init__.py +0 -0
  341. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/ext/fs.py +0 -0
  342. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/ext/groups.py +0 -0
  343. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/hooks.py +0 -0
  344. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/contrib/__init__.py +0 -0
  345. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/contrib/openapi/__init__.py +0 -0
  346. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/contrib/openapi/fill_missing_examples.py +0 -0
  347. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/__init__.py +0 -0
  348. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/compat.py +0 -0
  349. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/control.py +0 -0
  350. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/curl.py +0 -0
  351. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/deserialization.py +0 -0
  352. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/fs.py +0 -0
  353. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/lazy_import.py +0 -0
  354. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/loaders.py +0 -0
  355. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/marks.py +0 -0
  356. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/media_types.py +0 -0
  357. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/output/__init__.py +0 -0
  358. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/output/sanitization.py +0 -0
  359. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/rate_limit.py +0 -0
  360. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/registries.py +0 -0
  361. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/result.py +0 -0
  362. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/transforms.py +0 -0
  363. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/transport.py +0 -0
  364. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/validation.py +0 -0
  365. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/version.py +0 -0
  366. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/__init__.py +0 -0
  367. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/config.py +0 -0
  368. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/context.py +0 -0
  369. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/control.py +0 -0
  370. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/__init__.py +0 -0
  371. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/probes.py +0 -0
  372. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/stateful/context.py +0 -0
  373. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/experimental/__init__.py +0 -0
  374. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/filters.py +0 -0
  375. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/__init__.py +0 -0
  376. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/case.py +0 -0
  377. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/hypothesis/__init__.py +0 -0
  378. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/hypothesis/examples.py +0 -0
  379. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/hypothesis/given.py +0 -0
  380. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/hypothesis/reporting.py +0 -0
  381. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/hypothesis/strategies.py +0 -0
  382. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/meta.py +0 -0
  383. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/modes.py +0 -0
  384. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/overrides.py +0 -0
  385. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/stateful/__init__.py +0 -0
  386. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/targets.py +0 -0
  387. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/graphql/__init__.py +0 -0
  388. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/graphql/loaders.py +0 -0
  389. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/hooks.py +0 -0
  390. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/openapi/__init__.py +0 -0
  391. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/openapi/generation/__init__.py +0 -0
  392. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/openapi/generation/filters.py +0 -0
  393. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/openapi/loaders.py +0 -0
  394. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/py.typed +0 -0
  395. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/pytest/__init__.py +0 -0
  396. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/pytest/control_flow.py +0 -0
  397. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/pytest/lazy.py +0 -0
  398. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/pytest/loaders.py +0 -0
  399. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/pytest/plugin.py +0 -0
  400. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/python/__init__.py +0 -0
  401. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/python/asgi.py +0 -0
  402. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/python/wsgi.py +0 -0
  403. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/__init__.py +0 -0
  404. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/graphql/__init__.py +0 -0
  405. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/graphql/_cache.py +0 -0
  406. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/graphql/nodes.py +0 -0
  407. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/graphql/scalars.py +0 -0
  408. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/graphql/validation.py +0 -0
  409. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/__init__.py +0 -0
  410. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/_cache.py +0 -0
  411. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/_hypothesis.py +0 -0
  412. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/constants.py +0 -0
  413. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/converter.py +0 -0
  414. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/definitions.py +0 -0
  415. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/examples.py +0 -0
  416. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/expressions/errors.py +0 -0
  417. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/expressions/extractors.py +0 -0
  418. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/expressions/lexer.py +0 -0
  419. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/expressions/parser.py +0 -0
  420. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/formats.py +0 -0
  421. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/media_types.py +0 -0
  422. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/negative/__init__.py +0 -0
  423. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/negative/mutations.py +0 -0
  424. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/negative/types.py +0 -0
  425. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/negative/utils.py +0 -0
  426. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/parameters.py +0 -0
  427. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/references.py +0 -0
  428. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/security.py +0 -0
  429. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/serialization.py +0 -0
  430. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/utils.py +0 -0
  431. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/transport/__init__.py +0 -0
  432. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/transport/asgi.py +0 -0
  433. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/transport/prepare.py +0 -0
  434. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/transport/requests.py +0 -0
  435. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/transport/serialization.py +0 -0
  436. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/transport/wsgi.py +0 -0
  437. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/__init__.py +0 -0
  438. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/_pytest/__init__.py +0 -0
  439. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/_pytest/test_markers.py +0 -0
  440. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/__init__.py +0 -0
  441. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/_graphql/__init__.py +0 -0
  442. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/_graphql/_fastapi/__init__.py +0 -0
  443. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/_graphql/_fastapi/app.py +0 -0
  444. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/_graphql/_flask/__init__.py +0 -0
  445. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/_graphql/_flask/app.py +0 -0
  446. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/_graphql/schema.py +0 -0
  447. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/cp1252_app.py +0 -0
  448. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/hooks.py +0 -0
  449. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/__init__.py +0 -0
  450. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/_aiohttp/__init__.py +0 -0
  451. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/_aiohttp/app.py +0 -0
  452. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/_aiohttp/handlers.py +0 -0
  453. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/_fastapi/__init__.py +0 -0
  454. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/_fastapi/app.py +0 -0
  455. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/_flask/__init__.py +0 -0
  456. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/_flask/app.py +0 -0
  457. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/__init__.py +0 -0
  458. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/conftest.py +0 -0
  459. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/test_provider.py +0 -0
  460. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/test_pytest.py +0 -0
  461. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__init__.py +0 -0
  462. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_cassettes/test_forbid_preserve_exact_bytes_without_cassette_path[Open API 3.0].raw +0 -0
  463. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args8].raw +0 -0
  464. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args9].raw +0 -0
  465. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_auth_and_authorization_header_are_disallowed[Open API 3.0-Authorization].raw +0 -0
  466. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_auth_and_authorization_header_are_disallowed[Open API 3.0-authorization].raw +0 -0
  467. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_certificate_only_key.raw +0 -0
  468. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_commands_help.raw +0 -0
  469. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_duplicated_filters[Open API 3.0].raw +0 -0
  470. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_force_color_nocolor[Open API 3.0].raw +0 -0
  471. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_hooks_module_not_found.raw +0 -0
  472. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_hooks_with_inner_import_error.raw +0 -0
  473. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_hypothesis_database_with_derandomize[Open API 3.0].raw +0 -0
  474. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_invalid_filter[Open API 3.0].raw +0 -0
  475. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args0].raw +0 -0
  476. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args10].raw +0 -0
  477. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args11].raw +0 -0
  478. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args12].raw +0 -0
  479. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args13].raw +0 -0
  480. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args14].raw +0 -0
  481. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args15].raw +0 -0
  482. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args16].raw +0 -0
  483. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args17].raw +0 -0
  484. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args18].raw +0 -0
  485. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args19].raw +0 -0
  486. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args1].raw +0 -0
  487. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args20].raw +0 -0
  488. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args21].raw +0 -0
  489. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args22].raw +0 -0
  490. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args23].raw +0 -0
  491. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args24].raw +0 -0
  492. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args25].raw +0 -0
  493. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args26].raw +0 -0
  494. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args27].raw +0 -0
  495. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args28].raw +0 -0
  496. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args29].raw +0 -0
  497. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args2].raw +0 -0
  498. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args30].raw +0 -0
  499. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args31].raw +0 -0
  500. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args32].raw +0 -0
  501. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args33].raw +0 -0
  502. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args3].raw +0 -0
  503. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args4].raw +0 -0
  504. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args5].raw +0 -0
  505. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args6].raw +0 -0
  506. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args7].raw +0 -0
  507. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args8].raw +0 -0
  508. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args9].raw +0 -0
  509. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/cert.pem +0 -0
  510. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_cassettes.py +0 -0
  511. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_checks.py +0 -0
  512. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_junitxml.py +0 -0
  513. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_options.py +0 -0
  514. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_targeted.py +0 -0
  515. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_validation.py +0 -0
  516. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/code_samples/test_curl.py +0 -0
  517. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/openapi/test_fill_missing_examples.py +0 -0
  518. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/test_unique_data.py +0 -0
  519. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/core/__init__.py +0 -0
  520. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/core/test_deserialization.py +0 -0
  521. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/core/test_media_types.py +0 -0
  522. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/coverage/__init__.py +0 -0
  523. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/coverage/test_examples.py +0 -0
  524. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/petstore_v2.yaml +0 -0
  525. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/petstore_v3.yaml +0 -0
  526. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/relative_files/components/parameters.yaml +0 -0
  527. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/relative_files/components/responses.yaml +0 -0
  528. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/relative_files/components/schemas.yaml +0 -0
  529. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/relative_files/main.yaml +0 -0
  530. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/relative_files/paths/user-account.yaml +0 -0
  531. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/simple_openapi.yaml +0 -0
  532. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/simple_swagger.yaml +0 -0
  533. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/engine/__init__.py +0 -0
  534. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/engine/test_errors.py +0 -0
  535. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/engine/test_probes.py +0 -0
  536. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/engine/test_simulation.py +0 -0
  537. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/experimental/__snapshots__/test_experiments/test_not_enabled.raw +0 -0
  538. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/experimental/conftest.py +0 -0
  539. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/experimental/test_experiments.py +0 -0
  540. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/experimental/test_openapi_3_1.py +0 -0
  541. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/filters/__init__.py +0 -0
  542. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/filters/test_expressions.py +0 -0
  543. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/filters/test_matching.py +0 -0
  544. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/fixtures/__init__.py +0 -0
  545. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/fixtures/app_runner.py +0 -0
  546. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/fixtures/ctx.py +0 -0
  547. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/hooks/test_filters.py +0 -0
  548. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/loaders/conftest.py +0 -0
  549. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/loaders/test_common.py +0 -0
  550. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/loaders/test_graphql.py +0 -0
  551. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/loaders/test_openapi.py +0 -0
  552. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/openapi/__init__.py +0 -0
  553. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/openapi/test_filters.py +0 -0
  554. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/graphql/test_custom_scalars.py +0 -0
  555. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/graphql/test_pytest.py +0 -0
  556. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/blank.pdf +0 -0
  557. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/conftest.py +0 -0
  558. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/parameters/test_forms.py +0 -0
  559. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/parameters/test_non_payload.py +0 -0
  560. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/parameters/test_simple_payloads.py +0 -0
  561. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/__init__.py +0 -0
  562. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_checks.py +0 -0
  563. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_examples.py +0 -0
  564. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_hypothesis.py +0 -0
  565. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_ignored_auth.py +0 -0
  566. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_media_types.py +0 -0
  567. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_negative.py +0 -0
  568. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_parameters.py +0 -0
  569. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_randomized.py +0 -0
  570. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_schemas.py +0 -0
  571. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_security.py +0 -0
  572. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_serializing.py +0 -0
  573. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_utils.py +0 -0
  574. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_app.py +0 -0
  575. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_asgi.py +0 -0
  576. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_async.py +0 -0
  577. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_common_parameters.py +0 -0
  578. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_converter.py +0 -0
  579. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_dereferencing.py +0 -0
  580. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_direct_access.py +0 -0
  581. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_examples.py +0 -0
  582. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_filters.py +0 -0
  583. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_hypothesis.py +0 -0
  584. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_lazy.py +0 -0
  585. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_models.py +0 -0
  586. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_output.py +0 -0
  587. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_package.py +0 -0
  588. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_parameters.py +0 -0
  589. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_parametrization.py +0 -0
  590. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_petstore.py +0 -0
  591. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_pytest.py +0 -0
  592. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_rate_limit.py +0 -0
  593. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_recoverable_errors.py +0 -0
  594. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_required.py +0 -0
  595. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_sanitizing_output.py +0 -0
  596. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_schemas.py +0 -0
  597. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_serialization.py +0 -0
  598. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_unittest.py +0 -0
  599. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_wsgi.py +0 -0
  600. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/utils.py +0 -0
  601. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test-corpus/conftest.py +0 -0
  602. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test_server.sh +0 -0
  603. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/tox.ini +0 -0
  604. {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/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,17 @@ 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
+ fi
33
+ shell: bash
34
+
24
35
  - name: Docker meta
25
36
  id: meta
26
37
  uses: docker/metadata-action@v5
@@ -33,7 +44,7 @@ jobs:
33
44
  tags: |
34
45
  type=semver,pattern={{raw}}${{ matrix.tag-suffix }}
35
46
  type=semver,pattern={{version}}${{ matrix.tag-suffix }}
36
- type=raw,value=stable${{ matrix.tag-suffix }}
47
+ ${{ env.is_prerelease == 'false' && 'type=raw,value=stable${{ matrix.tag-suffix }}' || '' }}
37
48
 
38
49
  - name: Set up QEMU
39
50
  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.3
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.3
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.0a3
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,57 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
- :version:`Unreleased <v4.0.0a1...HEAD>` - TBD
5
- ---------------------------------------------
4
+ :version:`Unreleased <v4.0.0-alpha.3...HEAD>` - TBD
5
+ ---------------------------------------------------
6
+
7
+ .. _v4.0.0-alpha.3:
8
+
9
+ :version:`4.0.0-alpha.3 <v4.0.0-alpha.2...v4.0.0-alpha.3>` - 2025-01-27
10
+ -----------------------------------------------------------------------
11
+
12
+ **Added**
13
+
14
+ - Add ``LoadingStarted`` & ``LoadingFinished`` to the public API.
15
+ - Display the random generator seed in CLI output.
16
+
17
+ **Changed**:
18
+
19
+ - Improve control over API calls in stateful testing to make test scenarios more diverse.
20
+ - Improve error message in CLI when the schema has no Open API links.
21
+ - Improve error message in CLI when the schema contains incorrect Open API links.
22
+ - Display the number of covered, selected, and total Open API links in stateful testing output.
23
+ - Vary random seed in subsequent state machine re-runs to avoid repeating all previous sequences.
24
+
25
+ **Fixed**
26
+
27
+ - Handling of complex regex patterns with multiple quantifiers to respect length constraints during test generation.
28
+ - Internal error during the coverage phase if negated parameter has no ``type``.
29
+ - Internal error in CLI if run with ``PYTHONIOENCODING`` environment variable that is not ``utf8``.
30
+ - Overriding of multiple incoming links defined for the same status code in OpenAPI specification.
31
+ - Support for API links where operations can form a cycle (e.g., DELETE -> POST -> DELETE).
32
+ - Incorrect Open API link selection when target operations are filtered out.
33
+ - False positive in the ``ensure_resource_availability`` check.
34
+ - Calculating the number of Open API links selected for testing.
35
+
36
+ .. _v4.0.0-alpha.2:
37
+
38
+ :version:`4.0.0-alpha.2 <v4.0.0a1...v4.0.0-alpha.2>` - 2025-01-20
39
+ -----------------------------------------------------------------
40
+
41
+ **Added**
42
+
43
+ - Improved visibility into Open API link extraction success/failure status :issue:`823`
44
+
45
+ **Changed**
46
+
47
+ - Unified test progress display with multi-spinner interface and single progress bar :issue:`2372`
48
+ - Optimized stateful testing by generating only required test data for Open API links.
49
+ - Cleaner display of schema loading errors.
50
+
51
+ **Fixed**
52
+
53
+ - More accurate exception deduplication based on source location instead of messages.
54
+ - Stricter validation of ``--include-*`` and ``--exclude-*`` CLI options.
6
55
 
7
56
  .. _v4.0.0a1:
8
57
 
@@ -61,7 +110,8 @@ A detailed migration guide and complete changelog will follow.
61
110
  - Support for ``pytest<7.0``.
62
111
  - CLI Options: ``--endpoint``, ``--method``, ``--tag``, ``--operation-id``, ``--skip-deprecated-operations``,
63
112
  ``--show-trace``, ``--debug-output-file``, ``--hypothesis-deadline``, ``--hypothesis-report-multiple-bugs``,
64
- ``--hypothesis-verbosity``, ``--store-network-log``, ``--pre-run``, ``--dry-run``.
113
+ ``--hypothesis-verbosity``, ``--store-network-log``, ``--pre-run``, ``--dry-run``, ``--contrib-openapi-formats-uuid``,
114
+ ``--validate-schema``.
65
115
  - Most loader configuration moved to ``schema.configure`` method.
66
116
  - ``add_case`` hook.
67
117
  - ``schemathesis.contrib.unique_data``.
@@ -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.3"
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:
@@ -1,11 +1,22 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from schemathesis.cli.commands import Group, run, schemathesis
4
+ from schemathesis.cli.commands.run.context import ExecutionContext
5
+ from schemathesis.cli.commands.run.events import LoadingFinished, LoadingStarted
4
6
  from schemathesis.cli.commands.run.executor import handler
5
7
  from schemathesis.cli.commands.run.handlers import EventHandler
6
8
  from schemathesis.cli.ext.groups import GROUPS
7
9
 
8
- __all__ = ["schemathesis", "run", "EventHandler", "add_group", "handler"]
10
+ __all__ = [
11
+ "schemathesis",
12
+ "run",
13
+ "EventHandler",
14
+ "ExecutionContext",
15
+ "LoadingStarted",
16
+ "LoadingFinished",
17
+ "add_group",
18
+ "handler",
19
+ ]
9
20
 
10
21
 
11
22
  def add_group(name: str, *, index: int | None = None) -> 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,28 @@ 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__ = (
20
+ "id",
21
+ "timestamp",
22
+ "location",
23
+ "duration",
24
+ "base_url",
25
+ "base_path",
26
+ "specification",
27
+ "statistic",
28
+ "schema",
29
+ )
20
30
 
21
31
  def __init__(
22
32
  self,
33
+ *,
23
34
  location: str,
24
35
  start_time: float,
25
36
  base_url: str,
37
+ base_path: str,
26
38
  specification: Specification,
27
- operations_count: ApiOperationsCount,
39
+ statistic: ApiStatistic,
40
+ schema: dict,
28
41
  ) -> None:
29
42
  self.id = uuid.uuid4()
30
43
  self.timestamp = time.time()
@@ -32,4 +45,6 @@ class LoadingFinished(events.EngineEvent):
32
45
  self.duration = self.timestamp - start_time
33
46
  self.base_url = base_url
34
47
  self.specification = specification
35
- self.operations_count = operations_count
48
+ self.statistic = statistic
49
+ self.schema = schema
50
+ self.base_path = base_path
@@ -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,9 @@ 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,
86
+ schema=schema.raw_schema,
87
+ base_path=schema.base_path,
83
88
  )
84
89
 
85
90
  try:
@@ -101,6 +106,7 @@ def _execute(event_stream: EventGenerator, config: RunConfig) -> None:
101
106
  handlers.append(
102
107
  OutputHandler(
103
108
  workers_num=config.engine.execution.workers_num,
109
+ seed=config.engine.execution.seed,
104
110
  rate_limit=config.rate_limit,
105
111
  wait_for_schema=config.wait_for_schema,
106
112
  cassette_config=config.cassette,
@@ -112,7 +118,7 @@ def _execute(event_stream: EventGenerator, config: RunConfig) -> None:
112
118
 
113
119
  def shutdown() -> None:
114
120
  for _handler in handlers:
115
- _handler.shutdown()
121
+ _handler.shutdown(ctx)
116
122
 
117
123
  for handler in handlers:
118
124
  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