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.
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/build.yml +1 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/codeql-analysis.yml +3 -3
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/release.yml +12 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.pre-commit-config.yaml +2 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.readthedocs.yml +3 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/PKG-INFO +1 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/benches/schema.py +1 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/changelog.rst +53 -3
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/continuous_integration.rst +0 -7
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/getting-started.rst +0 -10
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/tests/extensions.py +1 -3
- schemathesis-4.0.0a3/img/demo.gif +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/pyproject.toml +1 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/checks.py +6 -4
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/__init__.py +12 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/__init__.py +4 -4
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/events.py +19 -4
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/executor.py +9 -3
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/filters.py +27 -19
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/handlers/base.py +1 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/handlers/cassettes.py +1 -3
- schemathesis-4.0.0a3/src/schemathesis/cli/commands/run/handlers/output.py +1405 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/validation.py +1 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/ext/options.py +4 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/errors.py +8 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/failures.py +54 -24
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/core.py +1 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/errors.py +11 -5
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/events.py +3 -97
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/stateful/__init__.py +2 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/stateful/_executor.py +22 -50
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/unit/__init__.py +1 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/unit/_executor.py +2 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/unit/_pool.py +1 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/recorder.py +29 -23
- schemathesis-4.0.0a3/src/schemathesis/errors.py +37 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/coverage.py +4 -4
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/hypothesis/builder.py +15 -12
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/stateful/state_machine.py +61 -45
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/graphql/checks.py +3 -9
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/openapi/checks.py +8 -33
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/schemas.py +34 -14
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/graphql/schemas.py +16 -15
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/checks.py +50 -27
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/expressions/__init__.py +11 -15
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/expressions/nodes.py +20 -20
- schemathesis-4.0.0a3/src/schemathesis/specs/openapi/links.py +227 -0
- schemathesis-4.0.0a3/src/schemathesis/specs/openapi/patterns.py +305 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/schemas.py +60 -36
- schemathesis-4.0.0a3/src/schemathesis/specs/openapi/stateful/__init__.py +292 -0
- schemathesis-4.0.0a3/src/schemathesis/specs/openapi/stateful/control.py +87 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/__snapshots__/test_dereferencing/test_global_security_schemes_with_custom_scope.raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/__snapshots__/test_dereferencing/test_missing_file_in_resolution.raw +6 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/__snapshots__/test_hypothesis/test_health_check_failed_large_base_example.raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/__snapshots__/test_recoverable_errors/test_in_cli[1].raw +5 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/__snapshots__/test_recoverable_errors/test_in_cli[2].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/__snapshots__/test_serialization/test_in_cli[Open API 3.0].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/schema.py +24 -2
- schemathesis-4.0.0a3/test/auth/__snapshots__/test_cli/test_conditional[Open API 3.0].raw +39 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/__snapshots__/test_cli/test_custom_auth[Open API 3.0].raw +5 -3
- schemathesis-4.0.0a3/test/auth/__snapshots__/test_cli/test_explicit_auth_precedence[Open API 3.0-args0-Basic dXNlcjpwYXNz].raw +39 -0
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/__snapshots__/test_cli/test_multiple_auth_mechanisms_with_explicit_auth.raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/__snapshots__/test_cli/test_multiple_threads[Open API 3.0].raw +5 -1
- schemathesis-4.0.0a3/test/auth/__snapshots__/test_cli/test_requests_auth[Open API 3.0].raw +39 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/test_cli.py +0 -10
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_cassettes/test_run_subprocess[Open API 2.0].raw +6 -2
- 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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args0].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args10].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args1].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args2].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args3].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args4].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args5].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args6].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args7].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance_with_env_vars.raw +6 -2
- {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
- {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
- {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
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_binary_payload.raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_chunked_encoding_error[Open API 3.0].raw +6 -2
- schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_cli_run_changed_base_url[Open API 3.0].raw +56 -0
- {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
- {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
- {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
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_complex_urlencoded_example.raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 2.0-1].raw +5 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 2.0-2].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 3.0-1].raw +5 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 3.0-2].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 2.0-1].raw +6 -3
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 2.0-2].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 3.0-1].raw +6 -3
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 3.0-2].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_custom_cli_option[Open API 3.0].raw +5 -1
- {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
- schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_empty_schema_file.raw +14 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_exit_first[Open API 3.0].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_explicit_example_failure_output.raw +6 -2
- {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
- {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
- {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
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_graphql_url[foo-args0].raw +5 -4
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_graphql_url[foo-args1].raw +5 -4
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_graphql_url[graphql-args0].raw +5 -4
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_graphql_url[graphql-args1].raw +5 -4
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_group_errors.raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_invalid_operation[Open API 2.0-1].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_invalid_operation[Open API 3.0-1].raw +6 -2
- {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
- {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
- schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_invalid_yaml.raw +15 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_keyboard_interrupt[Open API 2.0-1].raw +4 -3
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_keyboard_interrupt[Open API 3.0-1].raw +4 -3
- schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_keyboard_interrupt_during_schema_loading.raw +8 -0
- schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_keyboard_interrupt_threaded[Open API 2.0].raw +39 -0
- schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_keyboard_interrupt_threaded[Open API 3.0].raw +39 -0
- schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_long_operation_output.raw +39 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_long_payload.raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_malformed_json_deduplication[Open API 3.0].raw +6 -2
- {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
- {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
- {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
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[cookie].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[header].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[path].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[query].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_multiple_errors.raw +5 -1
- {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
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_multiple_failures_in_single_check.raw +5 -1
- {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
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_nested_binary_in_yaml.raw +5 -1
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_no_useless_traceback.raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_null_byte_in_header_probe.raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_proxy_error[Open API 3.0].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_read_content_timeout[Open API 3.0].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_recursive_reference_error_message.raw +6 -2
- {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
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError-Open API 2.0].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError-Open API 3.0].raw +6 -2
- schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_remote_disconnected_error[Open API 3.0].raw +16 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_reserved_characters_in_operation_name.raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[Open API 2.0].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[Open API 3.0].raw +6 -2
- {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
- {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
- schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_schema_not_available[1].raw +16 -0
- schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_schema_not_available[2].raw +16 -0
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_skipped_on_no_explicit_examples.raw +5 -1
- {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
- {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
- {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
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_unknown_schema_error[Open API 3.0].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_unresolvable_reference_with_disabled_validation.raw +5 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_unsatisfiable[Open API 2.0-1].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_unsatisfiable[Open API 2.0-2].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_unsatisfiable[Open API 3.0-1].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_unsatisfiable[Open API 3.0-2].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_unsupported_regex.raw +6 -3
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_useful_traceback[Open API 3.0].raw +6 -2
- schemathesis-4.0.0a3/test/cli/__snapshots__/test_commands/test_wait_for_schema_not_enough.raw +14 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_warning_on_all_not_found.raw +5 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_warning_on_unauthorized.raw +7 -3
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_hooks/test_after_call[Open API 3.0].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_commands.py +8 -20
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_crashes.py +84 -25
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_hooks.py +3 -4
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/conftest.py +88 -18
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_cli[None].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema0].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema1].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema2].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_cli_failure.raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_explicit_headers[1].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_explicit_headers[2].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/__snapshots__/test_unique_data/test_graphql_url.raw +5 -4
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/openapi/__snapshots__/test_fill_missing_examples/test_fills_missing_examples.raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/coverage/__snapshots__/test_phase/test_unspecified_http_methods.raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/coverage/test_combinations.py +9 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/coverage/test_phase.py +100 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/engine/test_checks.py +1 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/engine/test_engine.py +3 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/hooks/test_hooks.py +0 -35
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/graphql/__snapshots__/test_basic/test_disallow_null.raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/graphql/__snapshots__/test_basic/test_filter_operations[--exclude-name=Query.getBooks].raw +5 -3
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/graphql/__snapshots__/test_basic/test_filter_operations[--include-name=Query.getBooks].raw +5 -1
- 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
- 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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/graphql/__snapshots__/test_custom_scalars/test_custom_scalar_in_cli.raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/graphql/test_basic.py +3 -3
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_checks/test_method_not_allowed[basic-post].raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_checks/test_method_not_allowed[success-get].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_checks/test_missing_required_header[basic-Authorization-406].raw +5 -1
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_checks/test_missing_required_header[success-Authorization-200].raw +6 -2
- {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
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_examples/test_network_error_with_flaky_generation.raw +6 -2
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/__snapshots__/test_examples/test_parameter_override.raw +5 -1
- {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
- {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
- {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
- {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
- {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
- {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
- schemathesis-4.0.0a3/test/specs/openapi/stateful/__snapshots__/test_cli/test_filtered_out[Open API 3.0].raw +59 -0
- schemathesis-4.0.0a3/test/specs/openapi/stateful/__snapshots__/test_cli/test_generation_config[Open API 3.0].raw +61 -0
- {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
- {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
- schemathesis-4.0.0a3/test/specs/openapi/stateful/__snapshots__/test_cli/test_missing_link[Open API 3.0].raw +54 -0
- schemathesis-4.0.0a3/test/specs/openapi/stateful/__snapshots__/test_cli/test_not_enough_links[Open API 3.0].raw +56 -0
- {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
- {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
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/conftest.py +21 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/test_cli.py +24 -10
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/test_engine.py +56 -21
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/test_stateful.py +5 -9
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_expressions.py +13 -12
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_patterns.py +31 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_stateful.py +2 -26
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test-corpus/test_corpus.py +10 -2
- schemathesis-4.0.0a1/img/demo.gif +0 -0
- schemathesis-4.0.0a1/img/service_github_report.png +0 -0
- schemathesis-4.0.0a1/src/schemathesis/cli/commands/run/handlers/output.py +0 -746
- schemathesis-4.0.0a1/src/schemathesis/errors.py +0 -31
- schemathesis-4.0.0a1/src/schemathesis/specs/openapi/expressions/context.py +0 -14
- schemathesis-4.0.0a1/src/schemathesis/specs/openapi/links.py +0 -206
- schemathesis-4.0.0a1/src/schemathesis/specs/openapi/patterns.py +0 -137
- schemathesis-4.0.0a1/src/schemathesis/specs/openapi/stateful/__init__.py +0 -220
- schemathesis-4.0.0a1/test/auth/__snapshots__/test_cli/test_conditional[Open API 3.0].raw +0 -36
- schemathesis-4.0.0a1/test/auth/__snapshots__/test_cli/test_requests_auth[Open API 3.0].raw +0 -38
- schemathesis-4.0.0a1/test/cli/__snapshots__/test_cassettes/test_run_subprocess[Open API 3.0].raw +0 -38
- schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_cli_run_changed_base_url[Open API 3.0].raw +0 -53
- schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_empty_schema_file.raw +0 -11
- schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_invalid_yaml.raw +0 -12
- schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_long_operation_output.raw +0 -36
- schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_remote_disconnected_error[Open API 3.0].raw +0 -13
- schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_schema_not_available[1].raw +0 -13
- schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_schema_not_available[2].raw +0 -13
- schemathesis-4.0.0a1/test/cli/__snapshots__/test_commands/test_wait_for_schema_not_enough.raw +0 -11
- 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
- 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
- schemathesis-4.0.0a1/test/specs/openapi/stateful/__snapshots__/test_cli/test_filtered_out[Open API 3.0].raw +0 -35
- schemathesis-4.0.0a1/test/specs/openapi/stateful/__snapshots__/test_cli/test_generation_config[Open API 3.0].raw +0 -38
- schemathesis-4.0.0a1/test/specs/openapi/test_links.py +0 -39
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.dockerignore +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/FUNDING.yml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/dependabot.yml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/codspeed.yml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/commit.yml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/example-build.yml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/example-no-build.yml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/master_update.yml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/test-corpus.yml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/test-hypothesis.yml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.github/workflows/update-pre-commit.yml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.gitignore +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.rstcheck.cfg +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/.yamllint +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/ARCHITECTURE.md +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/CITATION.cff +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/CODE_OF_CONDUCT.md +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/CONTRIBUTING.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/Dockerfile +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/Dockerfile.bookworm +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/LICENSE +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/README.md +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/SECURITY.md +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/benches/cli.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/benches/coverage_phase.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/benches/references.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/changelog.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/codecov.yml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/corpus/data/graphql.tar.gz +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/corpus/data/openapi-3.0.tar.gz +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/corpus/data/openapi-3.1.tar.gz +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/corpus/data/swagger-2.0.tar.gz +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/corpus/tools.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/Makefile +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/additional-content.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/api.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/auth.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/cli.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/conf.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/contrib.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/data-generation.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/examples.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/experimental.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/extending.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/faq.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/graphql.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/index.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/python.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/recipes.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/requirements.txt +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/sanitizing.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/service.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/stateful.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/docs/targeted.rst +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/Dockerfile +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/README.md +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/app.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/compose.yml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/openapi.json +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/requirements-app.in +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/requirements-app.txt +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/requirements-pytest.in +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/requirements-pytest.txt +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/tests/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/tests/conftest.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/example/tests/test_app.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/mypy.ini +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/auths.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/__main__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/checks.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/context.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/handlers/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/handlers/junitxml.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/hypothesis.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/commands/run/loaders.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/constants.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/core.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/ext/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/ext/fs.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/ext/groups.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/cli/hooks.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/contrib/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/contrib/openapi/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/contrib/openapi/fill_missing_examples.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/compat.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/control.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/curl.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/deserialization.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/fs.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/lazy_import.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/loaders.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/marks.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/media_types.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/output/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/output/sanitization.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/rate_limit.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/registries.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/result.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/transforms.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/transport.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/validation.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/core/version.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/config.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/context.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/control.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/probes.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/engine/phases/stateful/context.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/experimental/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/filters.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/case.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/hypothesis/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/hypothesis/examples.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/hypothesis/given.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/hypothesis/reporting.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/hypothesis/strategies.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/meta.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/modes.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/overrides.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/stateful/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/generation/targets.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/graphql/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/graphql/loaders.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/hooks.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/openapi/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/openapi/generation/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/openapi/generation/filters.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/openapi/loaders.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/py.typed +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/pytest/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/pytest/control_flow.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/pytest/lazy.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/pytest/loaders.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/pytest/plugin.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/python/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/python/asgi.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/python/wsgi.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/graphql/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/graphql/_cache.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/graphql/nodes.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/graphql/scalars.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/graphql/validation.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/_cache.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/_hypothesis.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/constants.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/converter.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/definitions.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/examples.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/expressions/errors.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/expressions/extractors.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/expressions/lexer.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/expressions/parser.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/formats.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/media_types.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/negative/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/negative/mutations.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/negative/types.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/negative/utils.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/parameters.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/references.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/security.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/serialization.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/specs/openapi/utils.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/transport/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/transport/asgi.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/transport/prepare.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/transport/requests.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/transport/serialization.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/src/schemathesis/transport/wsgi.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/_pytest/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/_pytest/test_markers.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/_graphql/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/_graphql/_fastapi/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/_graphql/_fastapi/app.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/_graphql/_flask/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/_graphql/_flask/app.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/_graphql/schema.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/cp1252_app.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/hooks.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/_aiohttp/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/_aiohttp/app.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/_aiohttp/handlers.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/_fastapi/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/_fastapi/app.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/_flask/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/apps/openapi/_flask/app.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/conftest.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/test_provider.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/auth/test_pytest.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__init__.py +0 -0
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args8].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args9].raw +0 -0
- {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
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_certificate_only_key.raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_commands_help.raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_duplicated_filters[Open API 3.0].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_force_color_nocolor[Open API 3.0].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_hooks_module_not_found.raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_hooks_with_inner_import_error.raw +0 -0
- {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
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_invalid_filter[Open API 3.0].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args0].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args10].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args11].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args12].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args13].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args14].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args15].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args16].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args17].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args18].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args19].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args1].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args20].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args21].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args22].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args23].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args24].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args25].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args26].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args27].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args28].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args29].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args2].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args30].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args31].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args32].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args33].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args3].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args4].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args5].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args6].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args7].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args8].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/__snapshots__/test_commands/test_run_output[args9].raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/cert.pem +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_cassettes.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_checks.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_junitxml.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_options.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_targeted.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/cli/test_validation.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/code_samples/test_curl.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/openapi/test_fill_missing_examples.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/contrib/test_unique_data.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/core/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/core/test_deserialization.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/core/test_media_types.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/coverage/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/coverage/test_examples.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/petstore_v2.yaml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/petstore_v3.yaml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/relative_files/components/parameters.yaml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/relative_files/components/responses.yaml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/relative_files/components/schemas.yaml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/relative_files/main.yaml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/relative_files/paths/user-account.yaml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/simple_openapi.yaml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/data/simple_swagger.yaml +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/engine/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/engine/test_errors.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/engine/test_probes.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/engine/test_simulation.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/experimental/__snapshots__/test_experiments/test_not_enabled.raw +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/experimental/conftest.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/experimental/test_experiments.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/experimental/test_openapi_3_1.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/filters/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/filters/test_expressions.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/filters/test_matching.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/fixtures/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/fixtures/app_runner.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/fixtures/ctx.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/hooks/test_filters.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/loaders/conftest.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/loaders/test_common.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/loaders/test_graphql.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/loaders/test_openapi.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/openapi/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/openapi/test_filters.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/graphql/test_custom_scalars.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/graphql/test_pytest.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/blank.pdf +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/conftest.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/parameters/test_forms.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/parameters/test_non_payload.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/parameters/test_simple_payloads.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/stateful/__init__.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_checks.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_examples.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_hypothesis.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_ignored_auth.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_media_types.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_negative.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_parameters.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_randomized.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_schemas.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_security.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_serializing.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/specs/openapi/test_utils.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_app.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_asgi.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_async.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_common_parameters.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_converter.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_dereferencing.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_direct_access.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_examples.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_filters.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_hypothesis.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_lazy.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_models.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_output.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_package.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_parameters.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_parametrization.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_petstore.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_pytest.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_rate_limit.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_recoverable_errors.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_required.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_sanitizing_output.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_schemas.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_serialization.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_unittest.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/test_wsgi.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test/utils.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test-corpus/conftest.py +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/test_server.sh +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/tox.ini +0 -0
- {schemathesis-4.0.0a1 → schemathesis-4.0.0a3}/typos.toml +0 -0
@@ -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.
|
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.
|
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.
|
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.
|
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.
|
41
|
+
rev: v0.9.3
|
42
42
|
hooks:
|
43
43
|
- id: ruff
|
44
44
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: schemathesis
|
3
|
-
Version: 4.0.
|
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
|
@@ -1,8 +1,57 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
-
:version:`Unreleased <v4.0.
|
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 <
|
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.
|
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 =
|
139
|
-
name=name,
|
139
|
+
custom_failure = CustomFailure(
|
140
140
|
operation=case.operation.label,
|
141
|
-
|
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__ = [
|
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.
|
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.
|
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.
|
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
|
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__ = (
|
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
|
-
|
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.
|
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
|
-
|
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
|
152
|
+
apply_exclude_filter(filter_set, "name", name=name_)
|
152
153
|
for method in self.exclude_method:
|
153
|
-
filter_set
|
154
|
+
apply_exclude_filter(filter_set, "method", method=method)
|
154
155
|
for path in self.exclude_path:
|
155
|
-
filter_set
|
156
|
+
apply_exclude_filter(filter_set, "path", path=path)
|
156
157
|
for tag in self.exclude_tag:
|
157
|
-
filter_set
|
158
|
+
apply_exclude_filter(filter_set, "tag", tag=tag)
|
158
159
|
for operation_id in self.exclude_operation_id:
|
159
|
-
filter_set
|
160
|
-
|
161
|
-
self.exclude_name_regex
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
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
|
-
|
168
|
-
|
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}))
|
@@ -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
|
|