schemathesis 3.39.7__tar.gz → 3.39.9__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-3.39.7 → schemathesis-3.39.9}/PKG-INFO +1 -1
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/changelog.rst +25 -2
- {schemathesis-3.39.7 → schemathesis-3.39.9}/pyproject.toml +1 -1
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/_hypothesis.py +13 -10
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/output/default.py +2 -2
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/failures.py +2 -1
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/generation/coverage.py +10 -5
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/internal/deprecation.py +1 -2
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/models.py +1 -1
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/checks.py +15 -10
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/loaders.py +1 -2
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/parameters.py +1 -1
- schemathesis-3.39.9/src/schemathesis/specs/openapi/patterns.py +305 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/stateful/state_machine.py +2 -1
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/__init__.py +1 -2
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_malformed_json_deduplication[real-Open API 3.0].raw +3 -1
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_malformed_json_deduplication[wsgi-Open API 3.0].raw +3 -1
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/test_cassettes.py +1 -2
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/coverage/test_combinations.py +9 -1
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/coverage/test_phase.py +166 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/stateful/test_stateful.py +31 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_checks.py +41 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_patterns.py +40 -9
- schemathesis-3.39.7/.github/workflows/master_update.yml +0 -53
- schemathesis-3.39.7/src/schemathesis/specs/openapi/patterns.py +0 -137
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.dockerignore +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/FUNDING.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/dependabot.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/workflows/build.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/workflows/codeql-analysis.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/workflows/codspeed.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/workflows/commit.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/workflows/example-build.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/workflows/example-no-build.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/workflows/release.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/workflows/test-corpus.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/workflows/test-hypothesis.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.github/workflows/update-pre-commit.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.gitignore +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.pre-commit-config.yaml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.readthedocs.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.relint.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.rstcheck.cfg +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/.yamllint +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/CITATION.cff +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/CODE_OF_CONDUCT.md +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/CONTRIBUTING.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/Dockerfile +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/Dockerfile.bookworm +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/LICENSE +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/README.md +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/SECURITY.md +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/benches/cli.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/benches/coverage_phase.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/benches/references.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/benches/schema.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/changelog.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/codecov.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/corpus/data/graphql.tar.gz +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/corpus/data/openapi-3.0.tar.gz +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/corpus/data/openapi-3.1.tar.gz +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/corpus/data/swagger-2.0.tar.gz +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/corpus/tools.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/Makefile +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/additional-content.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/api.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/auth.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/cli.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/compatibility.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/conf.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/continuous_integration.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/contrib.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/data-generation.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/examples.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/experimental.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/extending.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/faq.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/getting-started.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/graphql.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/index.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/python.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/recipes.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/requirements.txt +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/sanitizing.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/service.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/stateful.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/docs/targeted.rst +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/example/Dockerfile +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/example/README.md +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/example/app.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/example/compose.yml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/example/openapi.json +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/example/requirements-app.in +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/example/requirements-app.txt +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/example/requirements-pytest.in +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/example/requirements-pytest.txt +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/example/tests/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/example/tests/conftest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/example/tests/extensions.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/example/tests/test_app.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/img/demo.gif +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/img/service_github_report.png +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/mypy.ini +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/_compat.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/_dependency_versions.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/_lazy_import.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/_override.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/_patches.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/_rate_limiter.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/_xml.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/auths.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/checks.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/__main__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/callbacks.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/cassettes.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/constants.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/context.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/debug.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/handlers.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/junitxml.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/options.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/output/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/output/short.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/reporting.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/cli/sanitization.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/code_samples.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/constants.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/contrib/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/contrib/openapi/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/contrib/openapi/fill_missing_examples.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/contrib/openapi/formats/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/contrib/openapi/formats/uuid.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/contrib/unique_data.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/exceptions.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/experimental/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/extra/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/extra/_aiohttp.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/extra/_flask.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/extra/_server.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/extra/pytest_plugin.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/filters.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/fixups/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/fixups/fast_api.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/fixups/utf8_bom.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/generation/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/generation/_hypothesis.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/generation/_methods.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/graphql.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/hooks.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/internal/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/internal/checks.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/internal/copy.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/internal/datetime.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/internal/diff.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/internal/extensions.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/internal/jsonschema.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/internal/output.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/internal/result.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/internal/transformation.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/internal/validation.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/lazy.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/loaders.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/parameters.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/py.typed +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/runner/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/runner/events.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/runner/impl/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/runner/impl/context.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/runner/impl/core.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/runner/impl/solo.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/runner/impl/threadpool.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/runner/probes.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/runner/serialization.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/sanitization.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/schemas.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/serializers.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/service/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/service/auth.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/service/ci.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/service/client.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/service/constants.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/service/events.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/service/extensions.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/service/hosts.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/service/metadata.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/service/models.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/service/report.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/service/serialization.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/service/usage.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/graphql/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/graphql/_cache.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/graphql/loaders.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/graphql/nodes.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/graphql/scalars.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/graphql/schemas.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/graphql/validation.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/_cache.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/_hypothesis.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/constants.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/converter.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/definitions.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/examples.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/expressions/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/expressions/context.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/expressions/errors.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/expressions/extractors.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/expressions/lexer.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/expressions/nodes.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/expressions/parser.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/formats.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/links.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/media_types.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/negative/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/negative/mutations.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/negative/types.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/negative/utils.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/references.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/schemas.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/security.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/serialization.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/stateful/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/stateful/statistic.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/stateful/types.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/utils.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/specs/openapi/validation.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/stateful/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/stateful/config.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/stateful/context.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/stateful/events.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/stateful/runner.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/stateful/sink.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/stateful/statistic.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/stateful/validation.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/targets.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/throttling.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/transports/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/transports/asgi.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/transports/auth.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/transports/content_types.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/transports/headers.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/transports/responses.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/types.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/src/schemathesis/utils.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/__snapshots__/test_dereferencing/test_global_security_schemes_with_custom_scope.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/__snapshots__/test_dereferencing/test_missing_file_in_resolution.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/__snapshots__/test_hypothesis/test_health_check_failed_large_base_example.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/__snapshots__/test_recoverable_errors/test_in_cli[1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/__snapshots__/test_recoverable_errors/test_in_cli[2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/__snapshots__/test_serialization/test_in_cli[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/_graphql/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/_graphql/_fastapi/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/_graphql/_fastapi/app.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/_graphql/_flask/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/_graphql/_flask/app.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/_graphql/schema.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/cp1252_app.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/hooks.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/openapi/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/openapi/_aiohttp/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/openapi/_aiohttp/app.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/openapi/_aiohttp/handlers.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/openapi/_fastapi/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/openapi/_fastapi/app.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/openapi/_flask/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/openapi/_flask/app.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/apps/openapi/schema.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/auth/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/auth/__snapshots__/test_cli/test_conditional[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/auth/__snapshots__/test_cli/test_custom_auth[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/auth/__snapshots__/test_cli/test_explicit_auth_precedence[Open API 3.0-args0-Basic dXNlcjpwYXNz].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/auth/__snapshots__/test_cli/test_explicit_auth_precedence[Open API 3.0-args1-Bearer EXPLICIT].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/auth/__snapshots__/test_cli/test_multiple_auth_mechanisms_with_explicit_auth.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/auth/__snapshots__/test_cli/test_multiple_threads[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/auth/__snapshots__/test_cli/test_requests_auth[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/auth/conftest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/auth/test_cli.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/auth/test_provider.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/auth/test_pytest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/checks/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/checks/test_checks.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_cassettes/test_forbid_preserve_exact_bytes_without_cassette_path[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_cassettes/test_forbid_simultaneous_use_of_deprecated_and_new_options[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_checks/test_deduplication_on_sanitized_header.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args10].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args3].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args4].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args5].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args6].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args7].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args8].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance[args9].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_checks/test_positive_data_acceptance_with_env_vars.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_add_case_output[Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_add_case_output[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_auth_and_authorization_header_are_disallowed[Open API 3.0-Authorization].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_auth_and_authorization_header_are_disallowed[Open API 3.0-authorization].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 2.0---auth='testwrong'].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 2.0--H Authorization Basic J3Rlc3Q6d3Jvbmcn].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 3.0---auth='testwrong'].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 3.0--H Authorization Basic J3Rlc3Q6d3Jvbmcn].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_binary_payload.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_certificate_only_key.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_chunked_encoding_error[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[real-Open API 2.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[real-Open API 2.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[real-Open API 3.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[real-Open API 3.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[wsgi-Open API 2.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[wsgi-Open API 2.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[wsgi-Open API 3.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[wsgi-Open API 3.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_commands_help.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_complex_urlencoded_example.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 2.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 2.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 3.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 3.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 2.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 2.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 3.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 3.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_custom_cli_option[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_deprecated_filters[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_duplicated_filters[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_empty_schema_file[args0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_empty_schema_file[args1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_explicit_example_failure_output.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_explicit_headers_in_output_on_errors[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_explicit_query_token_sanitization[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_filter_by[Open API 3.0---exclude-by=x-property != 42].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_filter_by[Open API 3.0---include-by=x-property == 42].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_force_color_nocolor[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_get_request_with_body[Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_get_request_with_body[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_graphql_asgi.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_graphql_url[foo-args0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_graphql_url[foo-args1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_graphql_url[graphql-args0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_graphql_url[graphql-args1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_group_errors.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_hooks_module_not_found.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_hooks_with_inner_import_error.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_hypothesis_database_with_derandomize[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[real-Open API 2.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[real-Open API 2.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[real-Open API 3.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[real-Open API 3.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[wsgi-Open API 2.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[wsgi-Open API 2.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[wsgi-Open API 3.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[wsgi-Open API 3.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_invalid_filter[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_invalid_operation_suggestion[real-Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_invalid_operation_suggestion[real-Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_invalid_operation_suggestion[wsgi-Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_invalid_operation_suggestion[wsgi-Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_invalid_schema_with_disabled_validation[3.0.2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_invalid_schema_with_disabled_validation[3.1.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_invalid_yaml.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_long_payload.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 2.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 2.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 3.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 3.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[cookie-None].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[cookie-http127.0.0.1apiv2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[header-None].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[header-http127.0.0.1apiv2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[path-None].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[path-http127.0.0.1apiv2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[query-None].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[query-http127.0.0.1apiv2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_multiple_errors.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_multiple_failures_different_check[Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_multiple_failures_different_check[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_multiple_failures_in_single_check.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_multiple_failures_single_check[Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_multiple_failures_single_check[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_nested_binary_in_yaml.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_new_stateful_runner[Open API 3.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_new_stateful_runner[Open API 3.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_new_stateful_runner_filtered_out[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_new_stateful_runner_generation_config[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_new_stateful_runner_keyboard_interrupt[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_new_stateful_runner_max_failures[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_new_stateful_runner_proxy_error[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_new_stateful_runner_stateful_only[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_new_stateful_runner_stateful_only_with_error[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_no_schema_in_media_type[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_no_useless_traceback.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_null_byte_in_header_probe.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_openapi_links[real-Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_openapi_links[real-Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_openapi_links[wsgi-Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_openapi_links[wsgi-Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_openapi_links_disabled[Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_openapi_links_disabled[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 2.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 2.0-5].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 3.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 3.0-5].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 2.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 2.0-5].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 3.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 3.0-5].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_proxy_error[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_read_content_timeout[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_recursive_reference_error_message.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError(Custom check failed!)-Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError(Custom check failed!)-Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError-Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError-Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_remote_disconnected_error[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[real-Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[real-Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[wsgi-Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[wsgi-Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[real-Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[real-Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[wsgi-Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[wsgi-Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args10].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args11].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args12].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args13].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args14].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args15].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args16].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args17].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args18].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args19].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args20].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args21].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args22].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args23].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args24].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args25].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args26].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args27].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args28].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args29].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args30].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args31].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args32].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args33].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args34].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args35].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args36].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args37].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args3].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args4].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args5].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args6].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args7].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args8].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_run_output[args9].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_schema_not_available[1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_schema_not_available[2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_schema_not_available_wsgi.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_stateful_explicit_examples_with_filters[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_status_code_conformance[real-Open API 2.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_status_code_conformance[real-Open API 2.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_status_code_conformance[real-Open API 3.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_status_code_conformance[real-Open API 3.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_status_code_conformance[wsgi-Open API 2.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_status_code_conformance[wsgi-Open API 2.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_status_code_conformance[wsgi-Open API 3.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_status_code_conformance[wsgi-Open API 3.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_unknown_schema_error[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_unresolvable_links[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_unresolvable_reference_with_disabled_validation.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_unsatisfiable[real-Open API 2.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_unsatisfiable[real-Open API 2.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_unsatisfiable[real-Open API 3.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_unsatisfiable[real-Open API 3.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_unsatisfiable[wsgi-Open API 2.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_unsatisfiable[wsgi-Open API 2.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_unsatisfiable[wsgi-Open API 3.0-1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_unsatisfiable[wsgi-Open API 3.0-2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_unsupported_regex.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_useful_traceback[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_wait_for_schema_not_enough.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_commands/test_yaml_parsing_of_floats[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_hooks/test_after_call[real-Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/__snapshots__/test_hooks/test_after_call[wsgi-Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/cert.pem +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/conftest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/output/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/output/test_default.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/test_asgi.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/test_callbacks.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/test_checks.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/test_commands.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/test_crashes.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/test_hooks.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/test_junitxml.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/test_options.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/test_reporting.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/cli/test_targeted.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/code_samples/__snapshots__/test_python/test_cli_output[Open API 2.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/code_samples/__snapshots__/test_python/test_cli_output[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/code_samples/conftest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/code_samples/test_curl.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/code_samples/test_python.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/conftest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/contrib/__snapshots__/test_unique_data/test_cli[None].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/contrib/__snapshots__/test_unique_data/test_cli_failure.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/contrib/__snapshots__/test_unique_data/test_explicit_headers[1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/contrib/__snapshots__/test_unique_data/test_explicit_headers[2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/contrib/__snapshots__/test_unique_data/test_graphql_url.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/contrib/openapi/__snapshots__/test_fill_missing_examples/test_fills_missing_examples.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/contrib/openapi/formats/test_uuid.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/contrib/openapi/test_fill_missing_examples.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/contrib/test_install.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/contrib/test_unique_data.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/coverage/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/coverage/__snapshots__/test_phase/test_unspecified_http_methods.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/coverage/test_examples.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/data/petstore_v2.yaml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/data/petstore_v3.yaml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/data/relative_files/components/parameters.yaml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/data/relative_files/components/responses.yaml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/data/relative_files/components/schemas.yaml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/data/relative_files/main.yaml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/data/relative_files/paths/user-account.yaml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/data/simple_openapi.yaml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/data/simple_swagger.yaml +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/experimental/__snapshots__/test_experiments/test_not_enabled.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/experimental/conftest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/experimental/test_experiments.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/experimental/test_openapi_3_1.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/extra/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/extra/test_aiohttp.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/filters/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/filters/test_expressions.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/filters/test_matching.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/fixtures/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/fixtures/ctx.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/hooks/test_filter_operations.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/hooks/test_filters.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/hooks/test_hooks.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/loaders/conftest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/loaders/test_app.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/loaders/test_common.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/loaders/test_graphql.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/loaders/test_openapi.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/loaders/test_yaml.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/runner/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/runner/test_checks.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/runner/test_events.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/runner/test_probes.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/runner/test_runner.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_cli/test_client_error_on_project_details.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_cli/test_client_error_on_upload[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_cli/test_error_in_another_handler[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_cli/test_github_suggestion[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_cli/test_not_authenticated_with_name.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_cli/test_two_names.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_cli/test_unauthorized.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_cli/test_unknown_error_on_upload[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_cli/test_upload_failure[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_cli/test_upload_success[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_connection_error[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_custom_format.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_dry_run[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_forbidden[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_graphql_scalars.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_internal_server_error[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_invalid_extension[Open API 3.0-42].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_invalid_extension[Open API 3.0-extension1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_invalid_payload[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_media_type_extension[strategy0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_media_type_extension[strategy1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_oversize_text[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_schema_patches[patch0-expected0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_schema_patches[patch1-expected1].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_schema_patches[patch2-expected2].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/__snapshots__/test_extensions/test_unknown_extension_in_cli[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/conftest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/test_auth.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/test_ci.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/test_cli.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/test_extensions.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/test_report.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/test_serialization.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/service/test_usage.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/graphql/__snapshots__/test_basic/test_disallow_null.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/graphql/__snapshots__/test_basic/test_filter_operations[--exclude-name=Query.getBooks].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/graphql/__snapshots__/test_basic/test_filter_operations[--include-name=Query.getBooks].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/graphql/__snapshots__/test_basic/test_schema_error[ntype Query {n 123(created Int!) Int!n}-.whatever].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/graphql/__snapshots__/test_basic/test_schema_error[ntype Query {n func(created Unknown!) Int!n}-.gql].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/graphql/__snapshots__/test_custom_scalars/test_built_in_scalars_in_cli.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/graphql/__snapshots__/test_custom_scalars/test_custom_scalar_in_cli.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/graphql/test_basic.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/graphql/test_custom_scalars.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/graphql/test_pytest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/__snapshots__/test_checks/test_method_not_allowed[basic-post].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/__snapshots__/test_checks/test_method_not_allowed[success-get].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/__snapshots__/test_checks/test_missing_required_header[basic-Authorization-406].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/__snapshots__/test_checks/test_missing_required_header[success-Authorization-200].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/__snapshots__/test_checks/test_missing_required_header[success-X-API-Key-1-200].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/__snapshots__/test_checks/test_missing_required_header[success-X-API-Key-1-406].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/__snapshots__/test_examples/test_network_error_with_flaky_generation.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/__snapshots__/test_examples/test_parameter_override.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/__snapshots__/test_ignored_auth/test_auth_via_override_cli[cookie].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/__snapshots__/test_ignored_auth/test_auth_via_override_cli[query].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/__snapshots__/test_ignored_auth/test_explicit_auth_cli[Open API 3.0].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/__snapshots__/test_ignored_auth/test_stateful_in_cli_no_error[Open API 3.0-False].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/__snapshots__/test_ignored_auth/test_stateful_in_cli_no_error[Open API 3.0-True].raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/__snapshots__/test_media_types/test_explicit_example_with_custom_media_type.raw +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/blank.pdf +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/conftest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/parameters/test_forms.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/parameters/test_non_payload.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/parameters/test_simple_payloads.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/stateful/__init__.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/stateful/conftest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/stateful/test_config.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/stateful/test_runner.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_examples.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_expressions.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_hypothesis.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_ignored_auth.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_links.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_media_types.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_negative.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_parameters.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_randomized.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_schemas.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_security.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_serializing.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_utils.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/specs/openapi/test_validation.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_app.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_asgi.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_async.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_common_parameters.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_converter.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_dereferencing.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_direct_access.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_examples.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_filters.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_fixups.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_hypothesis.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_internal.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_lazy.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_models.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_output.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_package.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_parameters.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_parametrization.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_petstore.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_pytest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_rate_limit.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_recoverable_errors.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_required.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_sanitizing_output.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_schemas.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_serialization.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_stateful.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_unittest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_utils.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/test_wsgi.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/transports/test_content_types.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test/utils.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test-corpus/conftest.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test-corpus/test_corpus.py +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/test_server.sh +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/tox.ini +0 -0
- {schemathesis-3.39.7 → schemathesis-3.39.9}/typos.toml +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: schemathesis
|
3
|
-
Version: 3.39.
|
3
|
+
Version: 3.39.9
|
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,10 +1,33 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
-
:version:`Unreleased <v3.39.
|
4
|
+
:version:`Unreleased <v3.39.9...HEAD>` - TBD
|
5
5
|
--------------------------------------------
|
6
6
|
|
7
|
-
.. _v3.39.
|
7
|
+
.. _v3.39.9:
|
8
|
+
|
9
|
+
:version:`3.39.9 <v3.39.8...v3.39.9>` - 2025-02-01
|
10
|
+
--------------------------------------------------
|
11
|
+
|
12
|
+
**Fixed**
|
13
|
+
|
14
|
+
- Internal error in coverage phase when a parameter is mixing keywords for different types.
|
15
|
+
- Do not run irrelevant checks on "Unspecified HTTP method" type of coverage scenarios.
|
16
|
+
- Ignoring ``verify=False`` when specified via ``get_call_kwargs`` on a state machine. :issue:`2713`
|
17
|
+
|
18
|
+
**Changed**
|
19
|
+
|
20
|
+
- Slightly improve the error message on malformed JSON.
|
21
|
+
|
22
|
+
.. _v3.39.8:
|
23
|
+
|
24
|
+
:version:`3.39.8 <v3.39.7...v3.39.8>` - 2025-01-25
|
25
|
+
--------------------------------------------------
|
26
|
+
|
27
|
+
**Fixed**
|
28
|
+
|
29
|
+
- Handling of complex regex patterns with multiple quantifiers to respect length constraints during test generation.
|
30
|
+
- Internal error during the coverage phase if negated parameter has no ``type``.
|
8
31
|
|
9
32
|
:version:`3.39.7 <v3.39.6...v3.39.7>` - 2025-01-16
|
10
33
|
--------------------------------------------------
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "schemathesis"
|
7
|
-
version = "3.39.
|
7
|
+
version = "3.39.9"
|
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" }]
|
@@ -332,16 +332,19 @@ def _iter_coverage_cases(
|
|
332
332
|
if operation.query:
|
333
333
|
container = template["query"]
|
334
334
|
for parameter in operation.query:
|
335
|
-
value
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
335
|
+
# Could be absent if value schema can't be negated
|
336
|
+
# I.e. contains just `default` value without any other keywords
|
337
|
+
value = container.get(parameter.name, NOT_SET)
|
338
|
+
if value is not NOT_SET:
|
339
|
+
case = operation.make_case(**{**template, "query": {**container, parameter.name: [value, value]}})
|
340
|
+
case.data_generation_method = DataGenerationMethod.negative
|
341
|
+
case.meta = _make_meta(
|
342
|
+
description=f"Duplicate `{parameter.name}` query parameter",
|
343
|
+
location=None,
|
344
|
+
parameter=parameter.name,
|
345
|
+
parameter_location="query",
|
346
|
+
)
|
347
|
+
yield case
|
345
348
|
# Generate missing required parameters
|
346
349
|
for parameter in operation.iter_parameters():
|
347
350
|
if parameter.is_required and parameter.location != "path":
|
@@ -125,7 +125,7 @@ def get_summary_output(event: events.Finished) -> tuple[str, str]:
|
|
125
125
|
message = "Empty test suite"
|
126
126
|
color = "yellow"
|
127
127
|
else:
|
128
|
-
message = f'
|
128
|
+
message = f"{', '.join(parts)} in {event.running_time:.2f}s"
|
129
129
|
if event.has_failures or event.has_errors:
|
130
130
|
color = "red"
|
131
131
|
elif event.skipped_count > 0:
|
@@ -176,7 +176,7 @@ def display_errors(context: ExecutionContext, event: events.Finished) -> None:
|
|
176
176
|
fg="red",
|
177
177
|
)
|
178
178
|
click.secho(
|
179
|
-
f"\nNeed more help?\n
|
179
|
+
f"\nNeed more help?\n Join our Discord server: {DISCORD_LINK}",
|
180
180
|
fg="red",
|
181
181
|
)
|
182
182
|
|
@@ -93,8 +93,9 @@ class JSONDecodeErrorContext(FailureContext):
|
|
93
93
|
|
94
94
|
@classmethod
|
95
95
|
def from_exception(cls, exc: JSONDecodeError) -> JSONDecodeErrorContext:
|
96
|
+
message = f"Response must be valid JSON with 'Content-Type: application/json' header:\n\n {exc}"
|
96
97
|
return cls(
|
97
|
-
message=
|
98
|
+
message=message,
|
98
99
|
validation_message=exc.msg,
|
99
100
|
document=exc.doc,
|
100
101
|
position=exc.pos,
|
@@ -194,6 +194,10 @@ class CoverageContext:
|
|
194
194
|
re.compile(pattern)
|
195
195
|
except re.error:
|
196
196
|
raise Unsatisfiable from None
|
197
|
+
if "minLength" in schema or "maxLength" in schema:
|
198
|
+
min_length = schema.get("minLength")
|
199
|
+
max_length = schema.get("maxLength")
|
200
|
+
pattern = update_quantifier(pattern, min_length, max_length)
|
197
201
|
return cached_draw(st.from_regex(pattern))
|
198
202
|
if (keys == ["items", "type"] or keys == ["items", "minItems", "type"]) and isinstance(schema["items"], dict):
|
199
203
|
items = schema["items"]
|
@@ -433,7 +437,12 @@ def cover_schema_iter(
|
|
433
437
|
elif key == "required":
|
434
438
|
template = template or ctx.generate_from_schema(_get_template_schema(schema, "object"))
|
435
439
|
yield from _negative_required(ctx, template, value)
|
436
|
-
elif
|
440
|
+
elif (
|
441
|
+
key == "additionalProperties"
|
442
|
+
and not value
|
443
|
+
and "pattern" not in schema
|
444
|
+
and schema.get("type") in ["object", None]
|
445
|
+
):
|
437
446
|
template = template or ctx.generate_from_schema(_get_template_schema(schema, "object"))
|
438
447
|
yield NegativeValue(
|
439
448
|
{**template, UNKNOWN_PROPERTY_KEY: UNKNOWN_PROPERTY_VALUE},
|
@@ -514,11 +523,7 @@ def _positive_string(ctx: CoverageContext, schema: dict) -> Generator[GeneratedV
|
|
514
523
|
# Default positive value
|
515
524
|
yield PositiveValue(ctx.generate_from_schema(schema), description="Valid string")
|
516
525
|
elif "pattern" in schema:
|
517
|
-
# Without merging `maxLength` & `minLength` into a regex it is problematic
|
518
|
-
# to generate a valid value as the unredlying machinery will resort to filtering
|
519
|
-
# and it is unlikely that it will generate a string of that length
|
520
526
|
yield PositiveValue(ctx.generate_from_schema(schema), description="Valid string")
|
521
|
-
return
|
522
527
|
|
523
528
|
seen = set()
|
524
529
|
|
@@ -4,8 +4,7 @@ from typing import Any, Callable
|
|
4
4
|
|
5
5
|
def _warn_deprecation(*, kind: str, thing: str, removed_in: str, replacement: str) -> None:
|
6
6
|
warnings.warn(
|
7
|
-
f"{kind} `{thing}` is deprecated and will be removed in Schemathesis {removed_in}. "
|
8
|
-
f"Use {replacement} instead.",
|
7
|
+
f"{kind} `{thing}` is deprecated and will be removed in Schemathesis {removed_in}. Use {replacement} instead.",
|
9
8
|
DeprecationWarning,
|
10
9
|
stacklevel=1,
|
11
10
|
)
|
@@ -560,7 +560,7 @@ class Case:
|
|
560
560
|
sanitize_response(response)
|
561
561
|
code_message = self._get_code_message(code_sample_style, response.request, verify=verify)
|
562
562
|
raise exception_cls(
|
563
|
-
f"{formatted}\n\n
|
563
|
+
f"{formatted}\n\n{code_message}",
|
564
564
|
causes=tuple(failed_checks),
|
565
565
|
)
|
566
566
|
|
@@ -32,10 +32,15 @@ if TYPE_CHECKING:
|
|
32
32
|
from ...transports.responses import GenericResponse
|
33
33
|
|
34
34
|
|
35
|
+
def is_unexpected_http_status_case(case: Case) -> bool:
|
36
|
+
# Skip checks for requests using HTTP methods not defined in the API spec
|
37
|
+
return bool(case.meta and case.meta.description and case.meta.description.startswith("Unspecified HTTP method"))
|
38
|
+
|
39
|
+
|
35
40
|
def status_code_conformance(ctx: CheckContext, response: GenericResponse, case: Case) -> bool | None:
|
36
41
|
from .schemas import BaseOpenAPISchema
|
37
42
|
|
38
|
-
if not isinstance(case.operation.schema, BaseOpenAPISchema):
|
43
|
+
if not isinstance(case.operation.schema, BaseOpenAPISchema) or is_unexpected_http_status_case(case):
|
39
44
|
return True
|
40
45
|
responses = case.operation.definition.raw.get("responses", {})
|
41
46
|
# "default" can be used as the default response object for all HTTP codes that are not covered individually
|
@@ -66,7 +71,7 @@ def _expand_responses(responses: dict[str | int, Any]) -> Generator[int, None, N
|
|
66
71
|
def content_type_conformance(ctx: CheckContext, response: GenericResponse, case: Case) -> bool | None:
|
67
72
|
from .schemas import BaseOpenAPISchema
|
68
73
|
|
69
|
-
if not isinstance(case.operation.schema, BaseOpenAPISchema):
|
74
|
+
if not isinstance(case.operation.schema, BaseOpenAPISchema) or is_unexpected_http_status_case(case):
|
70
75
|
return True
|
71
76
|
documented_content_types = case.operation.schema.get_content_types(case.operation, response)
|
72
77
|
if not documented_content_types:
|
@@ -124,7 +129,7 @@ def response_headers_conformance(ctx: CheckContext, response: GenericResponse, c
|
|
124
129
|
from .parameters import OpenAPI20Parameter, OpenAPI30Parameter
|
125
130
|
from .schemas import BaseOpenAPISchema, OpenApi30, _maybe_raise_one_or_more
|
126
131
|
|
127
|
-
if not isinstance(case.operation.schema, BaseOpenAPISchema):
|
132
|
+
if not isinstance(case.operation.schema, BaseOpenAPISchema) or is_unexpected_http_status_case(case):
|
128
133
|
return True
|
129
134
|
resolved = case.operation.schema.get_headers(case.operation, response)
|
130
135
|
if not resolved:
|
@@ -209,7 +214,7 @@ def _coerce_header_value(value: str, schema: dict[str, Any]) -> str | int | floa
|
|
209
214
|
def response_schema_conformance(ctx: CheckContext, response: GenericResponse, case: Case) -> bool | None:
|
210
215
|
from .schemas import BaseOpenAPISchema
|
211
216
|
|
212
|
-
if not isinstance(case.operation.schema, BaseOpenAPISchema):
|
217
|
+
if not isinstance(case.operation.schema, BaseOpenAPISchema) or is_unexpected_http_status_case(case):
|
213
218
|
return True
|
214
219
|
return case.operation.validate_response(response)
|
215
220
|
|
@@ -217,7 +222,7 @@ def response_schema_conformance(ctx: CheckContext, response: GenericResponse, ca
|
|
217
222
|
def negative_data_rejection(ctx: CheckContext, response: GenericResponse, case: Case) -> bool | None:
|
218
223
|
from .schemas import BaseOpenAPISchema
|
219
224
|
|
220
|
-
if not isinstance(case.operation.schema, BaseOpenAPISchema):
|
225
|
+
if not isinstance(case.operation.schema, BaseOpenAPISchema) or is_unexpected_http_status_case(case):
|
221
226
|
return True
|
222
227
|
|
223
228
|
config = ctx.config.negative_data_rejection
|
@@ -245,7 +250,7 @@ def negative_data_rejection(ctx: CheckContext, response: GenericResponse, case:
|
|
245
250
|
def positive_data_acceptance(ctx: CheckContext, response: GenericResponse, case: Case) -> bool | None:
|
246
251
|
from .schemas import BaseOpenAPISchema
|
247
252
|
|
248
|
-
if not isinstance(case.operation.schema, BaseOpenAPISchema):
|
253
|
+
if not isinstance(case.operation.schema, BaseOpenAPISchema) or is_unexpected_http_status_case(case):
|
249
254
|
return True
|
250
255
|
|
251
256
|
config = ctx.config.positive_data_acceptance
|
@@ -283,7 +288,7 @@ def missing_required_header(ctx: CheckContext, response: GenericResponse, case:
|
|
283
288
|
config = ctx.config.missing_required_header
|
284
289
|
allowed_statuses = expand_status_codes(config.allowed_statuses or [])
|
285
290
|
if response.status_code not in allowed_statuses:
|
286
|
-
allowed = f"Allowed statuses: {', '.join(map(str,allowed_statuses))}"
|
291
|
+
allowed = f"Allowed statuses: {', '.join(map(str, allowed_statuses))}"
|
287
292
|
raise AssertionError(f"Unexpected response status for a missing header: {response.status_code}\n{allowed}")
|
288
293
|
return None
|
289
294
|
|
@@ -333,7 +338,7 @@ def use_after_free(ctx: CheckContext, response: GenericResponse, original: Case)
|
|
333
338
|
from ...transports.responses import get_reason
|
334
339
|
from .schemas import BaseOpenAPISchema
|
335
340
|
|
336
|
-
if not isinstance(original.operation.schema, BaseOpenAPISchema):
|
341
|
+
if not isinstance(original.operation.schema, BaseOpenAPISchema) or is_unexpected_http_status_case(original):
|
337
342
|
return True
|
338
343
|
if response.status_code == 404 or not original.source or response.status_code >= 500:
|
339
344
|
return None
|
@@ -373,7 +378,7 @@ def ensure_resource_availability(ctx: CheckContext, response: GenericResponse, o
|
|
373
378
|
from ...transports.responses import get_reason
|
374
379
|
from .schemas import BaseOpenAPISchema
|
375
380
|
|
376
|
-
if not isinstance(original.operation.schema, BaseOpenAPISchema):
|
381
|
+
if not isinstance(original.operation.schema, BaseOpenAPISchema) or is_unexpected_http_status_case(original):
|
377
382
|
return True
|
378
383
|
if (
|
379
384
|
# Response indicates a client error, even though all available parameters were taken from links
|
@@ -416,7 +421,7 @@ def ignored_auth(ctx: CheckContext, response: GenericResponse, case: Case) -> bo
|
|
416
421
|
"""Check if an operation declares authentication as a requirement but does not actually enforce it."""
|
417
422
|
from .schemas import BaseOpenAPISchema
|
418
423
|
|
419
|
-
if not isinstance(case.operation.schema, BaseOpenAPISchema):
|
424
|
+
if not isinstance(case.operation.schema, BaseOpenAPISchema) or is_unexpected_http_status_case(case):
|
420
425
|
return True
|
421
426
|
security_parameters = _get_security_parameters(case.operation)
|
422
427
|
# Authentication is required for this API operation and response is successful
|
@@ -432,8 +432,7 @@ For more details, check the Open API documentation: {DOC_ENTRY}
|
|
432
432
|
|
433
433
|
Please, stringify the following status codes:"""
|
434
434
|
NON_STRING_OBJECT_KEY_MESSAGE = (
|
435
|
-
"The Open API specification requires all keys in the schema to be strings. "
|
436
|
-
"You have some keys that are not strings."
|
435
|
+
"The Open API specification requires all keys in the schema to be strings. You have some keys that are not strings."
|
437
436
|
)
|
438
437
|
|
439
438
|
|
@@ -359,7 +359,7 @@ MISSING_SCHEMA_OR_CONTENT_MESSAGE = (
|
|
359
359
|
)
|
360
360
|
|
361
361
|
INVALID_SCHEMA_MESSAGE = (
|
362
|
-
'Can not generate data for {location} parameter "{name}"!
|
362
|
+
'Can not generate data for {location} parameter "{name}"! Its schema should be an object, got {schema}'
|
363
363
|
)
|
364
364
|
|
365
365
|
|
@@ -0,0 +1,305 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
import re
|
4
|
+
from functools import lru_cache
|
5
|
+
|
6
|
+
try: # pragma: no cover
|
7
|
+
import re._constants as sre
|
8
|
+
import re._parser as sre_parse
|
9
|
+
except ImportError:
|
10
|
+
import sre_constants as sre
|
11
|
+
import sre_parse
|
12
|
+
|
13
|
+
ANCHOR = sre.AT
|
14
|
+
REPEATS: tuple
|
15
|
+
if hasattr(sre, "POSSESSIVE_REPEAT"):
|
16
|
+
REPEATS = (sre.MIN_REPEAT, sre.MAX_REPEAT, sre.POSSESSIVE_REPEAT)
|
17
|
+
else:
|
18
|
+
REPEATS = (sre.MIN_REPEAT, sre.MAX_REPEAT)
|
19
|
+
LITERAL = sre.LITERAL
|
20
|
+
IN = sre.IN
|
21
|
+
MAXREPEAT = sre_parse.MAXREPEAT
|
22
|
+
|
23
|
+
|
24
|
+
@lru_cache()
|
25
|
+
def update_quantifier(pattern: str, min_length: int | None, max_length: int | None) -> str:
|
26
|
+
"""Update the quantifier of a regular expression based on given min and max lengths."""
|
27
|
+
if not pattern or (min_length in (None, 0) and max_length is None):
|
28
|
+
return pattern
|
29
|
+
|
30
|
+
try:
|
31
|
+
parsed = sre_parse.parse(pattern)
|
32
|
+
return _handle_parsed_pattern(parsed, pattern, min_length, max_length)
|
33
|
+
except re.error:
|
34
|
+
# Invalid pattern
|
35
|
+
return pattern
|
36
|
+
|
37
|
+
|
38
|
+
def _handle_parsed_pattern(parsed: list, pattern: str, min_length: int | None, max_length: int | None) -> str:
|
39
|
+
"""Handle the parsed pattern and update quantifiers based on different cases."""
|
40
|
+
if len(parsed) == 1:
|
41
|
+
op, value = parsed[0]
|
42
|
+
return _update_quantifier(op, value, pattern, min_length, max_length)
|
43
|
+
elif len(parsed) == 2:
|
44
|
+
if parsed[0][0] == ANCHOR:
|
45
|
+
# Starts with an anchor
|
46
|
+
op, value = parsed[1]
|
47
|
+
anchor_length = _get_anchor_length(parsed[0][1])
|
48
|
+
leading_anchor = pattern[:anchor_length]
|
49
|
+
return leading_anchor + _update_quantifier(op, value, pattern[anchor_length:], min_length, max_length)
|
50
|
+
if parsed[1][0] == ANCHOR:
|
51
|
+
# Ends with an anchor
|
52
|
+
op, value = parsed[0]
|
53
|
+
anchor_length = _get_anchor_length(parsed[1][1])
|
54
|
+
trailing_anchor = pattern[-anchor_length:]
|
55
|
+
return _update_quantifier(op, value, pattern[:-anchor_length], min_length, max_length) + trailing_anchor
|
56
|
+
elif len(parsed) == 3 and parsed[0][0] == ANCHOR and parsed[2][0] == ANCHOR:
|
57
|
+
op, value = parsed[1]
|
58
|
+
leading_anchor_length = _get_anchor_length(parsed[0][1])
|
59
|
+
trailing_anchor_length = _get_anchor_length(parsed[2][1])
|
60
|
+
leading_anchor = pattern[:leading_anchor_length]
|
61
|
+
trailing_anchor = pattern[-trailing_anchor_length:]
|
62
|
+
return (
|
63
|
+
leading_anchor
|
64
|
+
+ _update_quantifier(
|
65
|
+
op, value, pattern[leading_anchor_length:-trailing_anchor_length], min_length, max_length
|
66
|
+
)
|
67
|
+
+ trailing_anchor
|
68
|
+
)
|
69
|
+
elif (
|
70
|
+
len(parsed) > 3
|
71
|
+
and parsed[0][0] == ANCHOR
|
72
|
+
and parsed[-1][0] == ANCHOR
|
73
|
+
and all(op == LITERAL or op in REPEATS for op, _ in parsed[1:-1])
|
74
|
+
):
|
75
|
+
return _handle_anchored_pattern(parsed, pattern, min_length, max_length)
|
76
|
+
return pattern
|
77
|
+
|
78
|
+
|
79
|
+
def _handle_anchored_pattern(parsed: list, pattern: str, min_length: int | None, max_length: int | None) -> str:
|
80
|
+
"""Update regex pattern with multiple quantified patterns to satisfy length constraints."""
|
81
|
+
# Extract anchors
|
82
|
+
leading_anchor_length = _get_anchor_length(parsed[0][1])
|
83
|
+
trailing_anchor_length = _get_anchor_length(parsed[-1][1])
|
84
|
+
leading_anchor = pattern[:leading_anchor_length]
|
85
|
+
trailing_anchor = pattern[-trailing_anchor_length:]
|
86
|
+
|
87
|
+
pattern_parts = parsed[1:-1]
|
88
|
+
|
89
|
+
# Adjust length constraints by subtracting fixed literals length
|
90
|
+
fixed_length = sum(1 for op, _ in pattern_parts if op == LITERAL)
|
91
|
+
if min_length is not None:
|
92
|
+
min_length -= fixed_length
|
93
|
+
if min_length < 0:
|
94
|
+
return pattern
|
95
|
+
if max_length is not None:
|
96
|
+
max_length -= fixed_length
|
97
|
+
if max_length < 0:
|
98
|
+
return pattern
|
99
|
+
|
100
|
+
# Extract only min/max bounds from quantified parts
|
101
|
+
quantifier_bounds = [value[:2] for op, value in pattern_parts if op in REPEATS]
|
102
|
+
|
103
|
+
if not quantifier_bounds:
|
104
|
+
return pattern
|
105
|
+
|
106
|
+
length_distribution = _distribute_length_constraints(quantifier_bounds, min_length, max_length)
|
107
|
+
if not length_distribution:
|
108
|
+
return pattern
|
109
|
+
|
110
|
+
# Rebuild pattern with updated quantifiers
|
111
|
+
result = leading_anchor
|
112
|
+
current_position = leading_anchor_length
|
113
|
+
distribution_idx = 0
|
114
|
+
|
115
|
+
for op, value in pattern_parts:
|
116
|
+
if op == LITERAL:
|
117
|
+
if pattern[current_position] == "\\":
|
118
|
+
# Escaped value
|
119
|
+
current_position += 2
|
120
|
+
result += "\\"
|
121
|
+
else:
|
122
|
+
current_position += 1
|
123
|
+
result += chr(value)
|
124
|
+
else:
|
125
|
+
new_min, new_max = length_distribution[distribution_idx]
|
126
|
+
next_position = _find_quantified_end(pattern, current_position)
|
127
|
+
quantified_segment = pattern[current_position:next_position]
|
128
|
+
_, _, subpattern = value
|
129
|
+
new_value = (new_min, new_max, subpattern)
|
130
|
+
|
131
|
+
result += _update_quantifier(op, new_value, quantified_segment, new_min, new_max)
|
132
|
+
current_position = next_position
|
133
|
+
distribution_idx += 1
|
134
|
+
|
135
|
+
return result + trailing_anchor
|
136
|
+
|
137
|
+
|
138
|
+
def _find_quantified_end(pattern: str, start: int) -> int:
|
139
|
+
"""Find the end position of current quantified part."""
|
140
|
+
char_class_level = 0
|
141
|
+
group_level = 0
|
142
|
+
|
143
|
+
for i in range(start, len(pattern)):
|
144
|
+
char = pattern[i]
|
145
|
+
|
146
|
+
# Handle character class nesting
|
147
|
+
if char == "[":
|
148
|
+
char_class_level += 1
|
149
|
+
elif char == "]":
|
150
|
+
char_class_level -= 1
|
151
|
+
|
152
|
+
# Handle group nesting
|
153
|
+
elif char == "(":
|
154
|
+
group_level += 1
|
155
|
+
elif char == ")":
|
156
|
+
group_level -= 1
|
157
|
+
|
158
|
+
# Only process quantifiers when we're not inside any nested structure
|
159
|
+
elif char_class_level == 0 and group_level == 0:
|
160
|
+
if char in "*+?":
|
161
|
+
return i + 1
|
162
|
+
elif char == "{":
|
163
|
+
# Find matching }
|
164
|
+
while i < len(pattern) and pattern[i] != "}":
|
165
|
+
i += 1
|
166
|
+
return i + 1
|
167
|
+
|
168
|
+
return len(pattern)
|
169
|
+
|
170
|
+
|
171
|
+
def _distribute_length_constraints(
|
172
|
+
bounds: list[tuple[int, int]], min_length: int | None, max_length: int | None
|
173
|
+
) -> list[tuple[int, int]] | None:
|
174
|
+
"""Distribute length constraints among quantified pattern parts."""
|
175
|
+
# Handle exact length case with dynamic programming
|
176
|
+
if min_length == max_length:
|
177
|
+
assert min_length is not None
|
178
|
+
target = min_length
|
179
|
+
dp: dict[tuple[int, int], list[tuple[int, ...]] | None] = {}
|
180
|
+
|
181
|
+
def find_valid_combination(pos: int, remaining: int) -> list[tuple[int, ...]] | None:
|
182
|
+
if (pos, remaining) in dp:
|
183
|
+
return dp[(pos, remaining)]
|
184
|
+
|
185
|
+
if pos == len(bounds):
|
186
|
+
return [()] if remaining == 0 else None
|
187
|
+
|
188
|
+
max_len: int
|
189
|
+
min_len, max_len = bounds[pos]
|
190
|
+
if max_len == MAXREPEAT:
|
191
|
+
max_len = remaining + 1
|
192
|
+
else:
|
193
|
+
max_len += 1
|
194
|
+
|
195
|
+
# Try each possible length for current quantifier
|
196
|
+
for length in range(min_len, max_len):
|
197
|
+
rest = find_valid_combination(pos + 1, remaining - length)
|
198
|
+
if rest is not None:
|
199
|
+
dp[(pos, remaining)] = [(length,) + r for r in rest]
|
200
|
+
return dp[(pos, remaining)]
|
201
|
+
|
202
|
+
dp[(pos, remaining)] = None
|
203
|
+
return None
|
204
|
+
|
205
|
+
distribution = find_valid_combination(0, target)
|
206
|
+
if distribution:
|
207
|
+
return [(length, length) for length in distribution[0]]
|
208
|
+
return None
|
209
|
+
|
210
|
+
# Handle range case by distributing min/max bounds
|
211
|
+
result = []
|
212
|
+
remaining_min = min_length or 0
|
213
|
+
remaining_max = max_length or MAXREPEAT
|
214
|
+
|
215
|
+
for min_repeat, max_repeat in bounds:
|
216
|
+
if remaining_min > 0:
|
217
|
+
part_min = min(max_repeat, max(min_repeat, remaining_min))
|
218
|
+
else:
|
219
|
+
part_min = min_repeat
|
220
|
+
|
221
|
+
if remaining_max < MAXREPEAT:
|
222
|
+
part_max = min(max_repeat, remaining_max)
|
223
|
+
else:
|
224
|
+
part_max = max_repeat
|
225
|
+
|
226
|
+
if part_min > part_max:
|
227
|
+
return None
|
228
|
+
|
229
|
+
result.append((part_min, part_max))
|
230
|
+
|
231
|
+
remaining_min = max(0, remaining_min - part_min)
|
232
|
+
remaining_max -= part_max if part_max != MAXREPEAT else 0
|
233
|
+
|
234
|
+
if remaining_min > 0 or remaining_max < 0:
|
235
|
+
return None
|
236
|
+
|
237
|
+
return result
|
238
|
+
|
239
|
+
|
240
|
+
def _get_anchor_length(node_type: int) -> int:
|
241
|
+
"""Determine the length of the anchor based on its type."""
|
242
|
+
if node_type in {sre.AT_BEGINNING_STRING, sre.AT_END_STRING, sre.AT_BOUNDARY, sre.AT_NON_BOUNDARY}:
|
243
|
+
return 2 # \A, \Z, \b, or \B
|
244
|
+
return 1 # ^ or $ or their multiline/locale/unicode variants
|
245
|
+
|
246
|
+
|
247
|
+
def _update_quantifier(op: int, value: tuple, pattern: str, min_length: int | None, max_length: int | None) -> str:
|
248
|
+
"""Update the quantifier based on the operation type and given constraints."""
|
249
|
+
if op in REPEATS:
|
250
|
+
return _handle_repeat_quantifier(value, pattern, min_length, max_length)
|
251
|
+
if op in (LITERAL, IN) and max_length != 0:
|
252
|
+
return _handle_literal_or_in_quantifier(pattern, min_length, max_length)
|
253
|
+
return pattern
|
254
|
+
|
255
|
+
|
256
|
+
def _handle_repeat_quantifier(
|
257
|
+
value: tuple[int, int, tuple], pattern: str, min_length: int | None, max_length: int | None
|
258
|
+
) -> str:
|
259
|
+
"""Handle repeat quantifiers (e.g., '+', '*', '?')."""
|
260
|
+
min_repeat, max_repeat, _ = value
|
261
|
+
min_length, max_length = _build_size(min_repeat, max_repeat, min_length, max_length)
|
262
|
+
if min_length > max_length:
|
263
|
+
return pattern
|
264
|
+
return f"({_strip_quantifier(pattern).strip(')(')})" + _build_quantifier(min_length, max_length)
|
265
|
+
|
266
|
+
|
267
|
+
def _handle_literal_or_in_quantifier(pattern: str, min_length: int | None, max_length: int | None) -> str:
|
268
|
+
"""Handle literal or character class quantifiers."""
|
269
|
+
min_length = 1 if min_length is None else max(min_length, 1)
|
270
|
+
return f"({pattern.strip(')(')})" + _build_quantifier(min_length, max_length)
|
271
|
+
|
272
|
+
|
273
|
+
def _build_quantifier(minimum: int | None, maximum: int | None) -> str:
|
274
|
+
"""Construct a quantifier string based on min and max values."""
|
275
|
+
if maximum == MAXREPEAT or maximum is None:
|
276
|
+
return f"{{{minimum or 0},}}"
|
277
|
+
if minimum == maximum:
|
278
|
+
return f"{{{minimum}}}"
|
279
|
+
return f"{{{minimum or 0},{maximum}}}"
|
280
|
+
|
281
|
+
|
282
|
+
def _build_size(min_repeat: int, max_repeat: int, min_length: int | None, max_length: int | None) -> tuple[int, int]:
|
283
|
+
"""Merge the current repetition constraints with the provided min and max lengths."""
|
284
|
+
if min_length is not None:
|
285
|
+
min_repeat = max(min_repeat, min_length)
|
286
|
+
if max_length is not None:
|
287
|
+
if max_repeat == MAXREPEAT:
|
288
|
+
max_repeat = max_length
|
289
|
+
else:
|
290
|
+
max_repeat = min(max_repeat, max_length)
|
291
|
+
return min_repeat, max_repeat
|
292
|
+
|
293
|
+
|
294
|
+
def _strip_quantifier(pattern: str) -> str:
|
295
|
+
"""Remove quantifier from the pattern."""
|
296
|
+
# Lazy & posessive quantifiers
|
297
|
+
if pattern.endswith(("*?", "+?", "??", "*+", "?+", "++")):
|
298
|
+
return pattern[:-2]
|
299
|
+
if pattern.endswith(("?", "*", "+")):
|
300
|
+
pattern = pattern[:-1]
|
301
|
+
if pattern.endswith("}") and "{" in pattern:
|
302
|
+
# Find the start of the exact quantifier and drop everything since that index
|
303
|
+
idx = pattern.rfind("{")
|
304
|
+
pattern = pattern[:idx]
|
305
|
+
return pattern
|
@@ -169,6 +169,7 @@ class APIStateMachine(RuleBasedStateMachine):
|
|
169
169
|
kwargs = self.get_call_kwargs(case)
|
170
170
|
start = time.monotonic()
|
171
171
|
response = self.call(case, **kwargs)
|
172
|
+
self._transport_kwargs = kwargs
|
172
173
|
elapsed = time.monotonic() - start
|
173
174
|
self.after_call(response, case)
|
174
175
|
self.validate_response(response, case, additional_checks=(use_after_free,))
|
@@ -297,7 +298,7 @@ class APIStateMachine(RuleBasedStateMachine):
|
|
297
298
|
all provided checks rather than only the first encountered exception.
|
298
299
|
"""
|
299
300
|
__tracebackhide__ = True
|
300
|
-
case.validate_response(response, additional_checks=additional_checks)
|
301
|
+
case.validate_response(response, additional_checks=additional_checks, transport_kwargs=self._transport_kwargs)
|
301
302
|
|
302
303
|
def store_result(self, response: GenericResponse, case: Case, elapsed: float) -> StepResult:
|
303
304
|
return StepResult(response, case, elapsed)
|
@@ -48,8 +48,7 @@ def run_app(port: int, operations: list[openapi.schema.Operation], spec: str, fr
|
|
48
48
|
spec
|
49
49
|
]
|
50
50
|
click.secho(
|
51
|
-
f"Schemathesis test server is running!\n\n"
|
52
|
-
f"API Schema is available at: http://0.0.0.0:{port}/schema.yaml\n",
|
51
|
+
f"Schemathesis test server is running!\n\nAPI Schema is available at: http://0.0.0.0:{port}/schema.yaml\n",
|
53
52
|
bold=True,
|
54
53
|
)
|
55
54
|
if framework == "aiohttp":
|
@@ -20,7 +20,9 @@ ___________________________ GET /api/malformed_json ____________________________
|
|
20
20
|
|
21
21
|
- JSON deserialization error
|
22
22
|
|
23
|
-
|
23
|
+
Response must be valid JSON with 'Content-Type: application/json' header:
|
24
|
+
|
25
|
+
Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
|
24
26
|
|
25
27
|
[200] OK:
|
26
28
|
|
@@ -20,7 +20,9 @@ ___________________________ GET /api/malformed_json ____________________________
|
|
20
20
|
|
21
21
|
- JSON deserialization error
|
22
22
|
|
23
|
-
|
23
|
+
Response must be valid JSON with 'Content-Type: application/json' header:
|
24
|
+
|
25
|
+
Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
|
24
26
|
|
25
27
|
[200] OK:
|
26
28
|
|
@@ -266,8 +266,7 @@ def test_run_subprocess(testdir, cassette_path, hypothesis_max_examples, schema_
|
|
266
266
|
cassette = load_cassette(cassette_path)
|
267
267
|
assert len(cassette["http_interactions"]) == 1
|
268
268
|
command = (
|
269
|
-
f"st run --cassette-path={cassette_path} "
|
270
|
-
f"--hypothesis-max-examples={hypothesis_max_examples or 2} {schema_url}"
|
269
|
+
f"st run --cassette-path={cassette_path} --hypothesis-max-examples={hypothesis_max_examples or 2} {schema_url}"
|
271
270
|
)
|
272
271
|
assert cassette["command"] == command
|
273
272
|
|