schemathesis 3.30.3__tar.gz → 3.31.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (625) hide show
  1. {schemathesis-3.30.3 → schemathesis-3.31.0}/.pre-commit-config.yaml +3 -3
  2. {schemathesis-3.30.3 → schemathesis-3.31.0}/PKG-INFO +2 -1
  3. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/changelog.rst +27 -1
  4. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/cli.rst +37 -2
  5. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/recipes.rst +41 -0
  6. {schemathesis-3.30.3 → schemathesis-3.31.0}/pyproject.toml +2 -1
  7. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/_hypothesis.py +13 -3
  8. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/__init__.py +27 -2
  9. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/callbacks.py +5 -0
  10. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/cassettes.py +150 -12
  11. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/exceptions.py +3 -1
  12. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/generation/__init__.py +2 -0
  13. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/models.py +14 -3
  14. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/runner/events.py +2 -0
  15. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/runner/impl/core.py +43 -0
  16. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/schemas.py +3 -1
  17. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/service/serialization.py +24 -1
  18. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/graphql/schemas.py +3 -1
  19. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/examples.py +4 -2
  20. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/references.py +19 -0
  21. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/schemas.py +27 -13
  22. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/security.py +16 -3
  23. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/stateful/context.py +7 -2
  24. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/stateful/events.py +16 -4
  25. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/stateful/runner.py +6 -11
  26. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/stateful/sink.py +1 -1
  27. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/stateful/validation.py +24 -12
  28. schemathesis-3.31.0/test/__snapshots__/test_dereferencing/test_global_security_schemes_with_custom_scope.raw +24 -0
  29. schemathesis-3.31.0/test/__snapshots__/test_dereferencing/test_missing_file_in_resolution.raw +36 -0
  30. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/__snapshots__/test_recoverable_errors/test_in_cli[1].raw +2 -2
  31. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/__snapshots__/test_recoverable_errors/test_in_cli[2].raw +2 -2
  32. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/cp1252_app.py +0 -1
  33. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args24].raw +4 -0
  34. schemathesis-3.31.0/test/cli/__snapshots__/test_commands/test_run_output[args37].raw +7 -0
  35. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_unresolvable_reference_with_disabled_validation.raw +2 -2
  36. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/test_cassettes.py +79 -1
  37. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/test_commands.py +21 -0
  38. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/test_crashes.py +1 -0
  39. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/conftest.py +1 -0
  40. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/runner/test_probes.py +4 -0
  41. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/runner/test_runner.py +2 -0
  42. schemathesis-3.31.0/test/specs/openapi/__snapshots__/test_examples/test_parameter_override.raw +25 -0
  43. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/test_examples.py +57 -0
  44. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/test_security.py +31 -1
  45. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_dereferencing.py +45 -0
  46. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_sanitizing_output.py +5 -2
  47. {schemathesis-3.30.3 → schemathesis-3.31.0}/.dockerignore +0 -0
  48. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/FUNDING.yml +0 -0
  49. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  50. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  51. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  52. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/dependabot.yml +0 -0
  53. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/workflows/build.yml +0 -0
  54. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/workflows/codeql-analysis.yml +0 -0
  55. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/workflows/codspeed.yml +0 -0
  56. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/workflows/commit.yml +0 -0
  57. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/workflows/example-build.yml +0 -0
  58. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/workflows/example-no-build.yml +0 -0
  59. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/workflows/master_update.yml +0 -0
  60. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/workflows/release.yml +0 -0
  61. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/workflows/test-corpus.yml +0 -0
  62. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/workflows/test-hypothesis.yml +0 -0
  63. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/workflows/update-corpus.yml +0 -0
  64. {schemathesis-3.30.3 → schemathesis-3.31.0}/.github/workflows/update-pre-commit.yml +0 -0
  65. {schemathesis-3.30.3 → schemathesis-3.31.0}/.gitignore +0 -0
  66. {schemathesis-3.30.3 → schemathesis-3.31.0}/.gitmodules +0 -0
  67. {schemathesis-3.30.3 → schemathesis-3.31.0}/.readthedocs.yml +0 -0
  68. {schemathesis-3.30.3 → schemathesis-3.31.0}/.relint.yml +0 -0
  69. {schemathesis-3.30.3 → schemathesis-3.31.0}/.rstcheck.cfg +0 -0
  70. {schemathesis-3.30.3 → schemathesis-3.31.0}/.yamllint +0 -0
  71. {schemathesis-3.30.3 → schemathesis-3.31.0}/CITATION.cff +0 -0
  72. {schemathesis-3.30.3 → schemathesis-3.31.0}/CODE_OF_CONDUCT.md +0 -0
  73. {schemathesis-3.30.3 → schemathesis-3.31.0}/CONTRIBUTING.rst +0 -0
  74. {schemathesis-3.30.3 → schemathesis-3.31.0}/Dockerfile +0 -0
  75. {schemathesis-3.30.3 → schemathesis-3.31.0}/Dockerfile.bookworm +0 -0
  76. {schemathesis-3.30.3 → schemathesis-3.31.0}/LICENSE +0 -0
  77. {schemathesis-3.30.3 → schemathesis-3.31.0}/README.md +0 -0
  78. {schemathesis-3.30.3 → schemathesis-3.31.0}/benches/cli.py +0 -0
  79. {schemathesis-3.30.3 → schemathesis-3.31.0}/benches/references.py +0 -0
  80. {schemathesis-3.30.3 → schemathesis-3.31.0}/benches/schema.py +0 -0
  81. {schemathesis-3.30.3 → schemathesis-3.31.0}/changelog.py +0 -0
  82. {schemathesis-3.30.3 → schemathesis-3.31.0}/codecov.yml +0 -0
  83. {schemathesis-3.30.3 → schemathesis-3.31.0}/corpus/data/graphql.tar.gz +0 -0
  84. {schemathesis-3.30.3 → schemathesis-3.31.0}/corpus/data/openapi-3.0.tar.gz +0 -0
  85. {schemathesis-3.30.3 → schemathesis-3.31.0}/corpus/data/openapi-3.1.tar.gz +0 -0
  86. {schemathesis-3.30.3 → schemathesis-3.31.0}/corpus/data/swagger-2.0.tar.gz +0 -0
  87. {schemathesis-3.30.3 → schemathesis-3.31.0}/corpus/tools.py +0 -0
  88. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/Makefile +0 -0
  89. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/additional-content.rst +0 -0
  90. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/api.rst +0 -0
  91. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/auth.rst +0 -0
  92. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/compatibility.rst +0 -0
  93. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/conf.py +0 -0
  94. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/continuous_integration.rst +0 -0
  95. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/contrib.rst +0 -0
  96. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/data-generation.rst +0 -0
  97. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/examples.rst +0 -0
  98. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/experimental.rst +0 -0
  99. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/extending.rst +0 -0
  100. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/faq.rst +0 -0
  101. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/getting-started.rst +0 -0
  102. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/graphql.rst +0 -0
  103. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/index.rst +0 -0
  104. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/python.rst +0 -0
  105. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/requirements.txt +0 -0
  106. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/sanitizing.rst +0 -0
  107. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/service.rst +0 -0
  108. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/stateful.rst +0 -0
  109. {schemathesis-3.30.3 → schemathesis-3.31.0}/docs/targeted.rst +0 -0
  110. {schemathesis-3.30.3 → schemathesis-3.31.0}/example/Dockerfile +0 -0
  111. {schemathesis-3.30.3 → schemathesis-3.31.0}/example/README.md +0 -0
  112. {schemathesis-3.30.3 → schemathesis-3.31.0}/example/app.py +0 -0
  113. {schemathesis-3.30.3 → schemathesis-3.31.0}/example/compose.yml +0 -0
  114. {schemathesis-3.30.3 → schemathesis-3.31.0}/example/openapi.json +0 -0
  115. {schemathesis-3.30.3 → schemathesis-3.31.0}/example/requirements-app.in +0 -0
  116. {schemathesis-3.30.3 → schemathesis-3.31.0}/example/requirements-app.txt +0 -0
  117. {schemathesis-3.30.3 → schemathesis-3.31.0}/example/requirements-pytest.in +0 -0
  118. {schemathesis-3.30.3 → schemathesis-3.31.0}/example/requirements-pytest.txt +0 -0
  119. {schemathesis-3.30.3 → schemathesis-3.31.0}/example/tests/__init__.py +0 -0
  120. {schemathesis-3.30.3 → schemathesis-3.31.0}/example/tests/conftest.py +0 -0
  121. {schemathesis-3.30.3 → schemathesis-3.31.0}/example/tests/extensions.py +0 -0
  122. {schemathesis-3.30.3 → schemathesis-3.31.0}/example/tests/test_app.py +0 -0
  123. {schemathesis-3.30.3 → schemathesis-3.31.0}/img/demo.gif +0 -0
  124. {schemathesis-3.30.3 → schemathesis-3.31.0}/img/service_github_report.png +0 -0
  125. {schemathesis-3.30.3 → schemathesis-3.31.0}/mypy.ini +0 -0
  126. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/__init__.py +0 -0
  127. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/_compat.py +0 -0
  128. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/_dependency_versions.py +0 -0
  129. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/_lazy_import.py +0 -0
  130. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/_override.py +0 -0
  131. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/_rate_limiter.py +0 -0
  132. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/_xml.py +0 -0
  133. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/auths.py +0 -0
  134. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/checks.py +0 -0
  135. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/__main__.py +0 -0
  136. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/constants.py +0 -0
  137. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/context.py +0 -0
  138. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/debug.py +0 -0
  139. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/handlers.py +0 -0
  140. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/junitxml.py +0 -0
  141. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/options.py +0 -0
  142. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/output/__init__.py +0 -0
  143. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/output/default.py +0 -0
  144. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/output/short.py +0 -0
  145. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/reporting.py +0 -0
  146. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/cli/sanitization.py +0 -0
  147. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/code_samples.py +0 -0
  148. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/constants.py +0 -0
  149. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/contrib/__init__.py +0 -0
  150. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/contrib/openapi/__init__.py +0 -0
  151. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/contrib/openapi/fill_missing_examples.py +0 -0
  152. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/contrib/openapi/formats/__init__.py +0 -0
  153. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/contrib/openapi/formats/uuid.py +0 -0
  154. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/contrib/unique_data.py +0 -0
  155. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/experimental/__init__.py +0 -0
  156. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/extra/__init__.py +0 -0
  157. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/extra/_aiohttp.py +0 -0
  158. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/extra/_flask.py +0 -0
  159. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/extra/_server.py +0 -0
  160. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/extra/pytest_plugin.py +0 -0
  161. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/failures.py +0 -0
  162. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/filters.py +0 -0
  163. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/fixups/__init__.py +0 -0
  164. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/fixups/fast_api.py +0 -0
  165. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/fixups/utf8_bom.py +0 -0
  166. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/graphql.py +0 -0
  167. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/hooks.py +0 -0
  168. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/internal/__init__.py +0 -0
  169. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/internal/copy.py +0 -0
  170. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/internal/datetime.py +0 -0
  171. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/internal/deprecation.py +0 -0
  172. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/internal/jsonschema.py +0 -0
  173. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/internal/output.py +0 -0
  174. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/internal/result.py +0 -0
  175. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/internal/transformation.py +0 -0
  176. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/internal/validation.py +0 -0
  177. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/lazy.py +0 -0
  178. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/loaders.py +0 -0
  179. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/parameters.py +0 -0
  180. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/py.typed +0 -0
  181. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/runner/__init__.py +0 -0
  182. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/runner/impl/__init__.py +0 -0
  183. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/runner/impl/solo.py +0 -0
  184. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/runner/impl/threadpool.py +0 -0
  185. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/runner/probes.py +0 -0
  186. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/runner/serialization.py +0 -0
  187. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/sanitization.py +0 -0
  188. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/serializers.py +0 -0
  189. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/service/__init__.py +0 -0
  190. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/service/auth.py +0 -0
  191. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/service/ci.py +0 -0
  192. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/service/client.py +0 -0
  193. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/service/constants.py +0 -0
  194. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/service/events.py +0 -0
  195. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/service/extensions.py +0 -0
  196. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/service/hosts.py +0 -0
  197. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/service/metadata.py +0 -0
  198. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/service/models.py +0 -0
  199. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/service/report.py +0 -0
  200. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/service/usage.py +0 -0
  201. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/__init__.py +0 -0
  202. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/graphql/__init__.py +0 -0
  203. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/graphql/_cache.py +0 -0
  204. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/graphql/loaders.py +0 -0
  205. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/graphql/nodes.py +0 -0
  206. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/graphql/scalars.py +0 -0
  207. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/graphql/validation.py +0 -0
  208. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/__init__.py +0 -0
  209. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/_cache.py +0 -0
  210. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/_hypothesis.py +0 -0
  211. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/checks.py +0 -0
  212. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/constants.py +0 -0
  213. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/converter.py +0 -0
  214. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/definitions.py +0 -0
  215. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/expressions/__init__.py +0 -0
  216. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/expressions/context.py +0 -0
  217. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/expressions/errors.py +0 -0
  218. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/expressions/extractors.py +0 -0
  219. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/expressions/lexer.py +0 -0
  220. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/expressions/nodes.py +0 -0
  221. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/expressions/parser.py +0 -0
  222. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/filters.py +0 -0
  223. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/formats.py +0 -0
  224. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/links.py +0 -0
  225. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/loaders.py +0 -0
  226. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/media_types.py +0 -0
  227. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/negative/__init__.py +0 -0
  228. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/negative/mutations.py +0 -0
  229. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/negative/types.py +0 -0
  230. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/negative/utils.py +0 -0
  231. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/parameters.py +0 -0
  232. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/serialization.py +0 -0
  233. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/stateful/__init__.py +0 -0
  234. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/stateful/statistic.py +0 -0
  235. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/stateful/types.py +0 -0
  236. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/utils.py +0 -0
  237. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/specs/openapi/validation.py +0 -0
  238. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/stateful/__init__.py +0 -0
  239. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/stateful/config.py +0 -0
  240. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/stateful/state_machine.py +0 -0
  241. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/stateful/statistic.py +0 -0
  242. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/targets.py +0 -0
  243. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/throttling.py +0 -0
  244. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/transports/__init__.py +0 -0
  245. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/transports/auth.py +0 -0
  246. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/transports/content_types.py +0 -0
  247. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/transports/headers.py +0 -0
  248. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/transports/responses.py +0 -0
  249. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/types.py +0 -0
  250. {schemathesis-3.30.3 → schemathesis-3.31.0}/src/schemathesis/utils.py +0 -0
  251. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/__init__.py +0 -0
  252. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/__snapshots__/test_hypothesis/test_health_check_failed_large_base_example.raw +0 -0
  253. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/__snapshots__/test_serialization/test_in_cli[Open API 3.0].raw +0 -0
  254. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/__init__.py +0 -0
  255. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/_graphql/__init__.py +0 -0
  256. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/_graphql/_fastapi/__init__.py +0 -0
  257. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/_graphql/_fastapi/app.py +0 -0
  258. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/_graphql/_flask/__init__.py +0 -0
  259. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/_graphql/_flask/app.py +0 -0
  260. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/_graphql/schema.py +0 -0
  261. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/hooks.py +0 -0
  262. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/openapi/__init__.py +0 -0
  263. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/openapi/_aiohttp/__init__.py +0 -0
  264. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/openapi/_aiohttp/app.py +0 -0
  265. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/openapi/_aiohttp/handlers.py +0 -0
  266. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/openapi/_fastapi/__init__.py +0 -0
  267. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/openapi/_fastapi/app.py +0 -0
  268. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/openapi/_flask/__init__.py +0 -0
  269. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/openapi/_flask/app.py +0 -0
  270. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/apps/openapi/schema.py +0 -0
  271. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/auth/__init__.py +0 -0
  272. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/auth/__snapshots__/test_cli/test_conditional[Open API 3.0].raw +0 -0
  273. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/auth/__snapshots__/test_cli/test_custom_auth[Open API 3.0].raw +0 -0
  274. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/auth/__snapshots__/test_cli/test_explicit_auth_precedence[Open API 3.0-args0-Basic dXNlcjpwYXNz].raw +0 -0
  275. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/auth/__snapshots__/test_cli/test_explicit_auth_precedence[Open API 3.0-args1-Bearer EXPLICIT].raw +0 -0
  276. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/auth/__snapshots__/test_cli/test_multiple_auth_mechanisms_with_explicit_auth.raw +0 -0
  277. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/auth/__snapshots__/test_cli/test_multiple_threads[Open API 3.0].raw +0 -0
  278. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/auth/__snapshots__/test_cli/test_requests_auth[Open API 3.0].raw +0 -0
  279. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/auth/conftest.py +0 -0
  280. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/auth/test_cli.py +0 -0
  281. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/auth/test_provider.py +0 -0
  282. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/auth/test_pytest.py +0 -0
  283. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__init__.py +0 -0
  284. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_cassettes/test_forbid_preserve_exact_bytes_without_cassette_path[Open API 3.0].raw +0 -0
  285. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_cassettes/test_forbid_simultaneous_use_of_deprecated_and_new_options[Open API 3.0].raw +0 -0
  286. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_checks/test_deduplication_on_sanitized_header.raw +0 -0
  287. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_add_case_output[Open API 2.0].raw +0 -0
  288. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_add_case_output[Open API 3.0].raw +0 -0
  289. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_auth_and_authorization_header_are_disallowed[Open API 3.0-Authorization].raw +0 -0
  290. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_auth_and_authorization_header_are_disallowed[Open API 3.0-authorization].raw +0 -0
  291. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 2.0---auth='testwrong'].raw +0 -0
  292. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 2.0--H Authorization Basic J3Rlc3Q6d3Jvbmcn].raw +0 -0
  293. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 3.0---auth='testwrong'].raw +0 -0
  294. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 3.0--H Authorization Basic J3Rlc3Q6d3Jvbmcn].raw +0 -0
  295. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_binary_payload.raw +0 -0
  296. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_certificate_only_key.raw +0 -0
  297. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_chunked_encoding_error[Open API 3.0].raw +0 -0
  298. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[real-Open API 2.0-1].raw +0 -0
  299. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[real-Open API 2.0-2].raw +0 -0
  300. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[real-Open API 3.0-1].raw +0 -0
  301. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[real-Open API 3.0-2].raw +0 -0
  302. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[wsgi-Open API 2.0-1].raw +0 -0
  303. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[wsgi-Open API 2.0-2].raw +0 -0
  304. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[wsgi-Open API 3.0-1].raw +0 -0
  305. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[wsgi-Open API 3.0-2].raw +0 -0
  306. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_commands_help.raw +0 -0
  307. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_complex_urlencoded_example.raw +0 -0
  308. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 2.0-1].raw +0 -0
  309. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 2.0-2].raw +0 -0
  310. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 3.0-1].raw +0 -0
  311. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 3.0-2].raw +0 -0
  312. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 2.0-1].raw +0 -0
  313. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 2.0-2].raw +0 -0
  314. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 3.0-1].raw +0 -0
  315. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 3.0-2].raw +0 -0
  316. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_empty_schema_file[args0].raw +0 -0
  317. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_empty_schema_file[args1].raw +0 -0
  318. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_explicit_example_failure_output.raw +0 -0
  319. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_explicit_headers_in_output_on_errors[Open API 3.0].raw +0 -0
  320. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_force_color_nocolor[Open API 3.0].raw +0 -0
  321. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_get_request_with_body[Open API 2.0].raw +0 -0
  322. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_get_request_with_body[Open API 3.0].raw +0 -0
  323. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_graphql_asgi.raw +0 -0
  324. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_graphql_url[foo-args0].raw +0 -0
  325. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_graphql_url[foo-args1].raw +0 -0
  326. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_graphql_url[graphql-args0].raw +0 -0
  327. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_graphql_url[graphql-args1].raw +0 -0
  328. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_group_errors.raw +0 -0
  329. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_hooks_module_not_found.raw +0 -0
  330. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_hooks_with_inner_import_error.raw +0 -0
  331. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_hypothesis_database_with_derandomize[Open API 3.0].raw +0 -0
  332. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[real-Open API 2.0-1].raw +0 -0
  333. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[real-Open API 2.0-2].raw +0 -0
  334. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[real-Open API 3.0-1].raw +0 -0
  335. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[real-Open API 3.0-2].raw +0 -0
  336. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[wsgi-Open API 2.0-1].raw +0 -0
  337. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[wsgi-Open API 2.0-2].raw +0 -0
  338. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[wsgi-Open API 3.0-1].raw +0 -0
  339. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[wsgi-Open API 3.0-2].raw +0 -0
  340. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_invalid_operation_suggestion[real-Open API 2.0].raw +0 -0
  341. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_invalid_operation_suggestion[real-Open API 3.0].raw +0 -0
  342. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_invalid_operation_suggestion[wsgi-Open API 2.0].raw +0 -0
  343. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_invalid_operation_suggestion[wsgi-Open API 3.0].raw +0 -0
  344. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_invalid_schema_with_disabled_validation[3.0.2].raw +0 -0
  345. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_invalid_schema_with_disabled_validation[3.1.0].raw +0 -0
  346. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_invalid_yaml.raw +0 -0
  347. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_long_payload.raw +0 -0
  348. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_malformed_json_deduplication[real-Open API 3.0].raw +0 -0
  349. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_malformed_json_deduplication[wsgi-Open API 3.0].raw +0 -0
  350. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 2.0-1].raw +0 -0
  351. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 2.0-2].raw +0 -0
  352. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 3.0-1].raw +0 -0
  353. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 3.0-2].raw +0 -0
  354. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[cookie-None].raw +0 -0
  355. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[cookie-http127.0.0.1apiv2].raw +0 -0
  356. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[header-None].raw +0 -0
  357. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[header-http127.0.0.1apiv2].raw +0 -0
  358. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[path-None].raw +0 -0
  359. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[path-http127.0.0.1apiv2].raw +0 -0
  360. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[query-None].raw +0 -0
  361. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[query-http127.0.0.1apiv2].raw +0 -0
  362. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_multiple_errors.raw +0 -0
  363. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_multiple_failures_different_check[Open API 2.0].raw +0 -0
  364. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_multiple_failures_different_check[Open API 3.0].raw +0 -0
  365. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_multiple_failures_in_single_check.raw +0 -0
  366. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_multiple_failures_single_check[Open API 2.0].raw +0 -0
  367. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_multiple_failures_single_check[Open API 3.0].raw +0 -0
  368. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_nested_binary_in_yaml.raw +0 -0
  369. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_new_stateful_runner[Open API 3.0-1].raw +0 -0
  370. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_new_stateful_runner[Open API 3.0-2].raw +0 -0
  371. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_new_stateful_runner_filtered_out[Open API 3.0].raw +0 -0
  372. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_new_stateful_runner_stateful_only[Open API 3.0].raw +0 -0
  373. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_no_schema_in_media_type[Open API 3.0].raw +0 -0
  374. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_no_useless_traceback.raw +0 -0
  375. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_null_byte_in_header_probe.raw +0 -0
  376. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_openapi_links[real-Open API 2.0].raw +0 -0
  377. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_openapi_links[real-Open API 3.0].raw +0 -0
  378. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_openapi_links[wsgi-Open API 2.0].raw +0 -0
  379. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_openapi_links[wsgi-Open API 3.0].raw +0 -0
  380. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_openapi_links_disabled[Open API 2.0].raw +0 -0
  381. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_openapi_links_disabled[Open API 3.0].raw +0 -0
  382. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 2.0-1].raw +0 -0
  383. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 2.0-5].raw +0 -0
  384. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 3.0-1].raw +0 -0
  385. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 3.0-5].raw +0 -0
  386. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 2.0-1].raw +0 -0
  387. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 2.0-5].raw +0 -0
  388. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 3.0-1].raw +0 -0
  389. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 3.0-5].raw +0 -0
  390. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_proxy_error[Open API 3.0].raw +0 -0
  391. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_read_content_timeout[Open API 3.0].raw +0 -0
  392. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_recursive_reference_error_message.raw +0 -0
  393. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError(Custom check failed!)-Open API 2.0].raw +0 -0
  394. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError(Custom check failed!)-Open API 3.0].raw +0 -0
  395. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError-Open API 2.0].raw +0 -0
  396. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError-Open API 3.0].raw +0 -0
  397. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_remote_disconnected_error[Open API 3.0].raw +0 -0
  398. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[real-Open API 2.0].raw +0 -0
  399. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[real-Open API 3.0].raw +0 -0
  400. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[wsgi-Open API 2.0].raw +0 -0
  401. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[wsgi-Open API 3.0].raw +0 -0
  402. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[real-Open API 2.0].raw +0 -0
  403. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[real-Open API 3.0].raw +0 -0
  404. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[wsgi-Open API 2.0].raw +0 -0
  405. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[wsgi-Open API 3.0].raw +0 -0
  406. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args0].raw +0 -0
  407. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args10].raw +0 -0
  408. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args11].raw +0 -0
  409. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args12].raw +0 -0
  410. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args13].raw +0 -0
  411. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args14].raw +0 -0
  412. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args15].raw +0 -0
  413. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args16].raw +0 -0
  414. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args17].raw +0 -0
  415. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args18].raw +0 -0
  416. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args19].raw +0 -0
  417. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args1].raw +0 -0
  418. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args20].raw +0 -0
  419. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args21].raw +0 -0
  420. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args22].raw +0 -0
  421. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args23].raw +0 -0
  422. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args25].raw +0 -0
  423. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args26].raw +0 -0
  424. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args27].raw +0 -0
  425. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args28].raw +0 -0
  426. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args29].raw +0 -0
  427. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args2].raw +0 -0
  428. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args30].raw +0 -0
  429. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args31].raw +0 -0
  430. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args32].raw +0 -0
  431. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args33].raw +0 -0
  432. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args34].raw +0 -0
  433. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args35].raw +0 -0
  434. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args36].raw +0 -0
  435. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args3].raw +0 -0
  436. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args4].raw +0 -0
  437. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args5].raw +0 -0
  438. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args6].raw +0 -0
  439. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args7].raw +0 -0
  440. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args8].raw +0 -0
  441. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_run_output[args9].raw +0 -0
  442. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_schema_not_available[1].raw +0 -0
  443. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_schema_not_available[2].raw +0 -0
  444. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_schema_not_available_wsgi.raw +0 -0
  445. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[real-Open API 2.0-1].raw +0 -0
  446. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[real-Open API 2.0-2].raw +0 -0
  447. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[real-Open API 3.0-1].raw +0 -0
  448. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[real-Open API 3.0-2].raw +0 -0
  449. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[wsgi-Open API 2.0-1].raw +0 -0
  450. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[wsgi-Open API 2.0-2].raw +0 -0
  451. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[wsgi-Open API 3.0-1].raw +0 -0
  452. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[wsgi-Open API 3.0-2].raw +0 -0
  453. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_unknown_schema_error[Open API 3.0].raw +0 -0
  454. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_unresolvable_links[Open API 3.0].raw +0 -0
  455. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[real-Open API 2.0-1].raw +0 -0
  456. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[real-Open API 2.0-2].raw +0 -0
  457. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[real-Open API 3.0-1].raw +0 -0
  458. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[real-Open API 3.0-2].raw +0 -0
  459. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[wsgi-Open API 2.0-1].raw +0 -0
  460. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[wsgi-Open API 2.0-2].raw +0 -0
  461. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[wsgi-Open API 3.0-1].raw +0 -0
  462. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[wsgi-Open API 3.0-2].raw +0 -0
  463. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_unsupported_regex.raw +0 -0
  464. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_useful_traceback[Open API 3.0].raw +0 -0
  465. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_wait_for_schema_not_enough.raw +0 -0
  466. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_commands/test_yaml_parsing_of_floats[Open API 3.0].raw +0 -0
  467. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_hooks/test_after_call[real-Open API 3.0].raw +0 -0
  468. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/__snapshots__/test_hooks/test_after_call[wsgi-Open API 3.0].raw +0 -0
  469. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/cert.pem +0 -0
  470. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/conftest.py +0 -0
  471. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/output/__init__.py +0 -0
  472. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/output/test_default.py +0 -0
  473. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/test_asgi.py +0 -0
  474. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/test_callbacks.py +0 -0
  475. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/test_checks.py +0 -0
  476. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/test_hooks.py +0 -0
  477. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/test_junitxml.py +0 -0
  478. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/test_options.py +0 -0
  479. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/cli/test_targeted.py +0 -0
  480. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/code_samples/__snapshots__/test_python/test_cli_output[Open API 2.0].raw +0 -0
  481. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/code_samples/__snapshots__/test_python/test_cli_output[Open API 3.0].raw +0 -0
  482. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/code_samples/conftest.py +0 -0
  483. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/code_samples/test_curl.py +0 -0
  484. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/code_samples/test_python.py +0 -0
  485. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/contrib/__snapshots__/test_unique_data/test_cli[None].raw +0 -0
  486. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema0].raw +0 -0
  487. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema1].raw +0 -0
  488. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema2].raw +0 -0
  489. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/contrib/__snapshots__/test_unique_data/test_explicit_headers[1].raw +0 -0
  490. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/contrib/__snapshots__/test_unique_data/test_explicit_headers[2].raw +0 -0
  491. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/contrib/openapi/__snapshots__/test_fill_missing_examples/test_fills_missing_examples.raw +0 -0
  492. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/contrib/openapi/formats/test_uuid.py +0 -0
  493. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/contrib/openapi/test_fill_missing_examples.py +0 -0
  494. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/contrib/test_install.py +0 -0
  495. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/contrib/test_unique_data.py +0 -0
  496. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/data/petstore_v2.yaml +0 -0
  497. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/data/petstore_v3.yaml +0 -0
  498. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/data/relative_files/components/parameters.yaml +0 -0
  499. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/data/relative_files/components/responses.yaml +0 -0
  500. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/data/relative_files/components/schemas.yaml +0 -0
  501. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/data/relative_files/main.yaml +0 -0
  502. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/data/relative_files/paths/user-account.yaml +0 -0
  503. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/data/simple_openapi.yaml +0 -0
  504. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/data/simple_swagger.yaml +0 -0
  505. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/experimental/__snapshots__/test_experiments/test_not_enabled.raw +0 -0
  506. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/experimental/conftest.py +0 -0
  507. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/experimental/test_experiments.py +0 -0
  508. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/experimental/test_openapi_3_1.py +0 -0
  509. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/extra/__init__.py +0 -0
  510. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/extra/test_aiohttp.py +0 -0
  511. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/filters/test_matching.py +0 -0
  512. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/hooks/test_filter_operations.py +0 -0
  513. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/hooks/test_hooks.py +0 -0
  514. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/loaders/conftest.py +0 -0
  515. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/loaders/test_app.py +0 -0
  516. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/loaders/test_common.py +0 -0
  517. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/loaders/test_graphql.py +0 -0
  518. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/loaders/test_openapi.py +0 -0
  519. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/loaders/test_yaml.py +0 -0
  520. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/runner/__init__.py +0 -0
  521. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/runner/test_checks.py +0 -0
  522. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/runner/test_events.py +0 -0
  523. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__init__.py +0 -0
  524. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_cli/test_client_error_on_project_details[Open API 3.0].raw +0 -0
  525. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_cli/test_client_error_on_upload[Open API 3.0].raw +0 -0
  526. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_cli/test_error_in_another_handler[Open API 3.0].raw +0 -0
  527. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_cli/test_github_suggestion[Open API 3.0].raw +0 -0
  528. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_cli/test_not_authenticated_with_name.raw +0 -0
  529. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_cli/test_two_names.raw +0 -0
  530. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_cli/test_unauthorized[Open API 3.0].raw +0 -0
  531. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_cli/test_unknown_error_on_upload[Open API 3.0].raw +0 -0
  532. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_cli/test_upload_failure[Open API 3.0].raw +0 -0
  533. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_cli/test_upload_success[Open API 3.0].raw +0 -0
  534. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_connection_error[Open API 3.0].raw +0 -0
  535. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_custom_format.raw +0 -0
  536. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_dry_run[Open API 3.0].raw +0 -0
  537. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_forbidden[Open API 3.0].raw +0 -0
  538. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_graphql_scalars.raw +0 -0
  539. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_internal_server_error[Open API 3.0].raw +0 -0
  540. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_invalid_extension[Open API 3.0-42].raw +0 -0
  541. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_invalid_extension[Open API 3.0-extension1].raw +0 -0
  542. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_invalid_payload[Open API 3.0].raw +0 -0
  543. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_media_type_extension[strategy0].raw +0 -0
  544. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_media_type_extension[strategy1].raw +0 -0
  545. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_oversize_text[Open API 3.0].raw +0 -0
  546. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_schema_patches[patch0-expected0].raw +0 -0
  547. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_schema_patches[patch1-expected1].raw +0 -0
  548. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_schema_patches[patch2-expected2].raw +0 -0
  549. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/__snapshots__/test_extensions/test_unknown_extension_in_cli[Open API 3.0].raw +0 -0
  550. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/conftest.py +0 -0
  551. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/test_auth.py +0 -0
  552. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/test_ci.py +0 -0
  553. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/test_cli.py +0 -0
  554. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/test_extensions.py +0 -0
  555. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/test_report.py +0 -0
  556. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/test_serialization.py +0 -0
  557. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/service/test_usage.py +0 -0
  558. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/graphql/__snapshots__/test_basic/test_schema_error[ntype Query {n 123(created Int!) Int!n}-.whatever].raw +0 -0
  559. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/graphql/__snapshots__/test_basic/test_schema_error[ntype Query {n func(created Unknown!) Int!n}-.gql].raw +0 -0
  560. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/graphql/__snapshots__/test_custom_scalars/test_built_in_scalars_in_cli.raw +0 -0
  561. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/graphql/__snapshots__/test_custom_scalars/test_custom_scalar_in_cli.raw +0 -0
  562. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/graphql/test_basic.py +0 -0
  563. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/graphql/test_custom_scalars.py +0 -0
  564. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/graphql/test_pytest.py +0 -0
  565. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/__snapshots__/test_examples/test_network_error_with_flaky_generation.raw +0 -0
  566. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/__snapshots__/test_media_types/test_explicit_example_with_custom_media_type.raw +0 -0
  567. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/blank.pdf +0 -0
  568. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/conftest.py +0 -0
  569. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/parameters/test_forms.py +0 -0
  570. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/parameters/test_non_payload.py +0 -0
  571. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/parameters/test_simple_payloads.py +0 -0
  572. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/randomized/__init__.py +0 -0
  573. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/randomized/factory.py +0 -0
  574. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/randomized/test_randomized.py +0 -0
  575. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/randomized/types.py +0 -0
  576. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/randomized/v2.py +0 -0
  577. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/stateful/__init__.py +0 -0
  578. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/stateful/conftest.py +0 -0
  579. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/stateful/test_config.py +0 -0
  580. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/stateful/test_runner.py +0 -0
  581. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/stateful/test_stateful.py +0 -0
  582. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/test_checks.py +0 -0
  583. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/test_expressions.py +0 -0
  584. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/test_hypothesis.py +0 -0
  585. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/test_links.py +0 -0
  586. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/test_media_types.py +0 -0
  587. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/test_negative.py +0 -0
  588. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/test_parameters.py +0 -0
  589. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/test_schemas.py +0 -0
  590. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/test_serializing.py +0 -0
  591. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/test_utils.py +0 -0
  592. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/specs/openapi/test_validation.py +0 -0
  593. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_app.py +0 -0
  594. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_asgi.py +0 -0
  595. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_async.py +0 -0
  596. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_common_parameters.py +0 -0
  597. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_converter.py +0 -0
  598. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_direct_access.py +0 -0
  599. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_examples.py +0 -0
  600. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_filters.py +0 -0
  601. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_fixups.py +0 -0
  602. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_hypothesis.py +0 -0
  603. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_internal.py +0 -0
  604. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_lazy.py +0 -0
  605. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_models.py +0 -0
  606. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_output.py +0 -0
  607. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_package.py +0 -0
  608. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_parameters.py +0 -0
  609. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_parametrization.py +0 -0
  610. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_petstore.py +0 -0
  611. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_pytest.py +0 -0
  612. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_rate_limit.py +0 -0
  613. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_recoverable_errors.py +0 -0
  614. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_required.py +0 -0
  615. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_schemas.py +0 -0
  616. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_serialization.py +0 -0
  617. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_stateful.py +0 -0
  618. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_unittest.py +0 -0
  619. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_utils.py +0 -0
  620. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/test_wsgi.py +0 -0
  621. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/transports/test_content_types.py +0 -0
  622. {schemathesis-3.30.3 → schemathesis-3.31.0}/test/utils.py +0 -0
  623. {schemathesis-3.30.3 → schemathesis-3.31.0}/test-corpus/test_corpus.py +0 -0
  624. {schemathesis-3.30.3 → schemathesis-3.31.0}/test_server.sh +0 -0
  625. {schemathesis-3.30.3 → schemathesis-3.31.0}/tox.ini +0 -0
@@ -30,7 +30,7 @@ repos:
30
30
  - id: relint
31
31
 
32
32
  - repo: https://github.com/pre-commit/mirrors-mypy
33
- rev: v1.10.0
33
+ rev: v1.10.1
34
34
  hooks:
35
35
  - id: mypy
36
36
  exclude: ^(docs/|test/|test-corpus/|example/|benches/).*$
@@ -38,12 +38,12 @@ repos:
38
38
  additional_dependencies: [types-click, types-requests, types-PyYAML]
39
39
 
40
40
  - repo: https://github.com/astral-sh/ruff-pre-commit
41
- rev: v0.4.10
41
+ rev: v0.5.0
42
42
  hooks:
43
43
  - id: ruff-format
44
44
 
45
45
  - repo: https://github.com/astral-sh/ruff-pre-commit
46
- rev: v0.4.10
46
+ rev: v0.5.0
47
47
  hooks:
48
48
  - id: ruff
49
49
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: schemathesis
3
- Version: 3.30.3
3
+ Version: 3.31.0
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
@@ -31,6 +31,7 @@ Requires-Python: >=3.8
31
31
  Requires-Dist: backoff<3.0,>=2.1.2
32
32
  Requires-Dist: click<9.0,>=7.0
33
33
  Requires-Dist: colorama<1.0,>=0.4
34
+ Requires-Dist: harfile<1.0,>=0.3.0
34
35
  Requires-Dist: httpx<1.0,>=0.22.0
35
36
  Requires-Dist: hypothesis-graphql<1,>=0.11.0
36
37
  Requires-Dist: hypothesis-jsonschema<0.24,>=0.23.1
@@ -1,9 +1,35 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
- :version:`Unreleased <v3.30.3...HEAD>` - TBD
4
+ :version:`Unreleased <v3.31.0...HEAD>` - TBD
5
5
  --------------------------------------------
6
6
 
7
+ .. _v3.31.0:
8
+
9
+ :version:`3.31.0 <v3.30.4...v3.31.0>` - 2024-06-30
10
+ --------------------------------------------------
11
+
12
+ **Added**
13
+
14
+ - Storing cassettes in the HAR format via the ``--cassette-format=har`` CLI option. :issue:`2299`
15
+ - Support for cassettes in the new-style stateful test runner.
16
+ - ``--generation-with-security-parameters=false`` CLI option to disable generation of security parameters (like tokens) in test cases.
17
+
18
+ **Fixed**
19
+
20
+ - Incorrect test case ids stored in VCR cassettes. :issue:`2302`
21
+ - Incorrect reference resolution scope for security schemes if the API operation has a different scope than the global security schemes. :issue:`2300`
22
+ - Properly display unresolvable reference if it comes from a missing file.
23
+
24
+ .. _v3.30.4:
25
+
26
+ :version:`3.30.4 <v3.30.3...v3.30.4>` - 2024-06-28
27
+ --------------------------------------------------
28
+
29
+ **Fixed**
30
+
31
+ - Missing overrides from ``--set-*`` CLI options in tests for explicit examples.
32
+
7
33
  .. _v3.30.3:
8
34
 
9
35
  :version:`3.30.3 <v3.30.2...v3.30.3>` - 2024-06-27
@@ -291,8 +291,43 @@ Schemathesis allows you to do this with the ``--cassette-path`` command-line opt
291
291
 
292
292
  $ st run --cassette-path cassette.yaml http://127.0.0.1/schema.yaml
293
293
 
294
- This command will create a new YAML file that will network interactions in `VCR format <https://relishapp.com/vcr/vcr/v/5-1-0/docs/cassettes/cassette-format>`_.
295
- It might look like this:
294
+ Schemathesis supports `VCR <https://relishapp.com/vcr/vcr/v/5-1-0/docs/cassettes/cassette-format>`_ and `HAR <http://www.softwareishard.com/blog/har-12-spec/>`_ formats and stores all network interactions in a YAML file.
295
+
296
+ HAR format
297
+ ~~~~~~~~~~
298
+
299
+ HTTP Archive (HAR) is a JSON-based format used for tracking HTTP requests and responses. Schemathesis uses a simplified version of this format that does not include page-related information:
300
+
301
+ .. code:: json
302
+
303
+ {
304
+ "log": {
305
+ "version": "1.2",
306
+ "creator": {
307
+ "name": "harfile",
308
+ "version": "0.2.0"
309
+ },
310
+ "browser": {
311
+ "name": "",
312
+ "version": ""
313
+ },
314
+ "entries": [
315
+ {
316
+ "startedDateTime": "2024-06-29T20:10:29.254107+02:00",
317
+ "time": 0.88,
318
+ "request": {"method": "GET", "url": "http://127.0.0.1:8081/api/basic", "httpVersion": "HTTP/1.1", "cookies": [], "headers": [{"name": "User-Agent", "value": "schemathesis/3.30.4"}, {"name": "Accept-Encoding", "value": "gzip, deflate"}, {"name": "Accept", "value": "*/*"}, {"name": "Connection", "value": "keep-alive"}, {"name": "Authorization", "value": "[Filtered]"}, {"name": "X-Schemathesis-TestCaseId", "value": "ScU88H"}], "queryString": [], "headersSize": 164, "bodySize": 0},
319
+ "response": {"status": 401, "statusText": "Unauthorized", "httpVersion": "HTTP/1.1", "cookies": [], "headers": [{"name": "Content-Type", "value": "application/json; charset=utf-8"}, {"name": "Content-Length", "value": "26"}, {"name": "Date", "value": "Sat, 29 Jun 2024 18:10:29 GMT"}, {"name": "Server", "value": "Python/3.11 aiohttp/3.9.3"}], "content": {"size": 26, "mimeType": "application/json; charset=utf-8", "text": "{\"detail\": \"Unauthorized\"}"}, "redirectURL": "", "headersSize": 139, "bodySize": 26},
320
+ "timings": {"send": 0, "wait": 0, "receive": 0.88, "blocked": 0, "dns": 0, "connect": 0, "ssl": 0},
321
+ "cache": {}
322
+ },
323
+ {
324
+
325
+ To view the content of a HAR file, you can use this `HAR viewer <http://www.softwareishard.com/har/viewer/>`_.
326
+
327
+ VCR format
328
+ ~~~~~~~~~~
329
+
330
+ The content of a VCR cassette looks like this:
296
331
 
297
332
  .. code:: yaml
298
333
 
@@ -79,3 +79,44 @@ Different API operations may need different timeouts during testing. You could a
79
79
  case.call_and_validate(timeout=timeout)
80
80
 
81
81
  In the example above, the default timeout is 10 seconds, but for `GET /users` it will be 5 seconds.
82
+
83
+ Generating only required parameters
84
+ -----------------------------------
85
+
86
+ Sometimes you don't need to generate all parameters for your API, and want to limit Schemathesis to only required ones.
87
+ You can do it with the following hook:
88
+
89
+ .. code-block:: python
90
+
91
+ import schemathesis
92
+
93
+
94
+ @schemathesis.hook
95
+ def before_init_operation(context, operation):
96
+ for parameter in operation.iter_parameters():
97
+ schema = parameter.definition.get("schema", {})
98
+ traverse_schema(schema, drop_optional_properties)
99
+ for alternative in operation.body:
100
+ schema = alternative.definition.get("schema", {})
101
+ traverse_schema(schema, drop_optional_properties)
102
+
103
+
104
+ def traverse_schema(schema, callback):
105
+ if isinstance(schema, dict):
106
+ schema = callback(schema)
107
+ for key, sub_item in schema.items():
108
+ schema[key] = traverse_schema(sub_item, callback)
109
+ elif isinstance(schema, list):
110
+ schema = [traverse_schema(sub_item, callback) for sub_item in schema]
111
+ return schema
112
+
113
+
114
+ def drop_optional_properties(schema):
115
+ required = schema.get("required", [])
116
+ properties = schema.get("properties", {})
117
+ for name in list(properties):
118
+ if name not in required:
119
+ del properties[name]
120
+ return schema
121
+
122
+ This hook will remove all optional properties from the parsed API operations.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "schemathesis"
7
- version = "3.30.3"
7
+ version = "3.31.0"
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" }]
@@ -34,6 +34,7 @@ dependencies = [
34
34
  "backoff>=2.1.2,<3.0",
35
35
  "click>=7.0,<9.0",
36
36
  "colorama>=0.4,<1.0",
37
+ "harfile>=0.3.0,<1.0",
37
38
  "httpx>=0.22.0,<1.0",
38
39
  "hypothesis>=6.103.4,<7; python_version > '3.8'",
39
40
  "hypothesis[zoneinfo]>=6.103.4,<7; python_version == '3.8'",
@@ -98,7 +98,9 @@ def create_test(
98
98
  existing_settings = remove_explain_phase(existing_settings)
99
99
  wrapped_test._hypothesis_internal_use_settings = existing_settings # type: ignore
100
100
  if Phase.explicit in existing_settings.phases:
101
- wrapped_test = add_examples(wrapped_test, operation, hook_dispatcher=hook_dispatcher)
101
+ wrapped_test = add_examples(
102
+ wrapped_test, operation, hook_dispatcher=hook_dispatcher, as_strategy_kwargs=as_strategy_kwargs
103
+ )
102
104
  return wrapped_test
103
105
 
104
106
 
@@ -138,12 +140,20 @@ def make_async_test(test: Callable) -> Callable:
138
140
  return async_run
139
141
 
140
142
 
141
- def add_examples(test: Callable, operation: APIOperation, hook_dispatcher: HookDispatcher | None = None) -> Callable:
143
+ def add_examples(
144
+ test: Callable,
145
+ operation: APIOperation,
146
+ hook_dispatcher: HookDispatcher | None = None,
147
+ as_strategy_kwargs: dict[str, Any] | None = None,
148
+ ) -> Callable:
142
149
  """Add examples to the Hypothesis test, if they are specified in the schema."""
143
150
  from hypothesis_jsonschema._canonicalise import HypothesisRefResolutionError
144
151
 
145
152
  try:
146
- examples: list[Case] = [get_single_example(strategy) for strategy in operation.get_strategies_from_examples()]
153
+ examples: list[Case] = [
154
+ get_single_example(strategy)
155
+ for strategy in operation.get_strategies_from_examples(as_strategy_kwargs=as_strategy_kwargs)
156
+ ]
147
157
  except (
148
158
  OperationSchemaError,
149
159
  HypothesisRefResolutionError,
@@ -522,6 +522,13 @@ The report data, consisting of a tar gz file with multiple JSON files, is subjec
522
522
  type=click.File("w", encoding="utf-8"),
523
523
  is_eager=True,
524
524
  )
525
+ @click.option(
526
+ "--cassette-format",
527
+ help="Format of the saved cassettes.",
528
+ type=click.Choice([item.name.lower() for item in cassettes.CassetteFormat]),
529
+ default=cassettes.CassetteFormat.VCR.name.lower(),
530
+ callback=callbacks.convert_cassette_format,
531
+ )
525
532
  @click.option(
526
533
  "--cassette-preserve-exact-body-bytes",
527
534
  help="Retains exact byte sequence of payloads in cassettes, encoded as base64.",
@@ -718,6 +725,14 @@ The report data, consisting of a tar gz file with multiple JSON files, is subjec
718
725
  default="utf-8",
719
726
  callback=callbacks.validate_generation_codec,
720
727
  )
728
+ @click.option(
729
+ "--generation-with-security-parameters",
730
+ help="Whether to generate security parameters.",
731
+ type=str,
732
+ default="true",
733
+ show_default=True,
734
+ callback=callbacks.convert_boolean_string,
735
+ )
721
736
  @click.option(
722
737
  "--schemathesis-io-token",
723
738
  help="Schemathesis.io authentication token.",
@@ -783,6 +798,7 @@ def run(
783
798
  show_trace: bool = False,
784
799
  code_sample_style: CodeSampleStyle = CodeSampleStyle.default(),
785
800
  cassette_path: click.utils.LazyFile | None = None,
801
+ cassette_format: cassettes.CassetteFormat = cassettes.CassetteFormat.VCR,
786
802
  cassette_preserve_exact_body_bytes: bool = False,
787
803
  store_network_log: click.utils.LazyFile | None = None,
788
804
  wait_for_schema: float | None = None,
@@ -810,6 +826,7 @@ def run(
810
826
  no_color: bool = False,
811
827
  report_value: str | None = None,
812
828
  generation_allow_x00: bool = True,
829
+ generation_with_security_parameters: bool = True,
813
830
  generation_codec: str = "utf-8",
814
831
  schemathesis_io_token: str | None = None,
815
832
  schemathesis_io_url: str = service.DEFAULT_URL,
@@ -849,7 +866,11 @@ def run(
849
866
 
850
867
  override = CaseOverride(query=set_query, headers=set_header, cookies=set_cookie, path_parameters=set_path)
851
868
 
852
- generation_config = generation.GenerationConfig(allow_x00=generation_allow_x00, codec=generation_codec)
869
+ generation_config = generation.GenerationConfig(
870
+ allow_x00=generation_allow_x00,
871
+ codec=generation_codec,
872
+ with_security_parameters=generation_with_security_parameters,
873
+ )
853
874
 
854
875
  report: ReportToService | click.utils.LazyFile | None
855
876
  if report_value is None:
@@ -1006,6 +1027,7 @@ def run(
1006
1027
  wait_for_schema=wait_for_schema,
1007
1028
  validate_schema=validate_schema,
1008
1029
  cassette_path=cassette_path,
1030
+ cassette_format=cassette_format,
1009
1031
  cassette_preserve_exact_body_bytes=cassette_preserve_exact_body_bytes,
1010
1032
  junit_xml=junit_xml,
1011
1033
  verbosity=verbosity,
@@ -1387,6 +1409,7 @@ def execute(
1387
1409
  wait_for_schema: float | None,
1388
1410
  validate_schema: bool,
1389
1411
  cassette_path: click.utils.LazyFile | None,
1412
+ cassette_format: cassettes.CassetteFormat,
1390
1413
  cassette_preserve_exact_body_bytes: bool,
1391
1414
  junit_xml: click.utils.LazyFile | None,
1392
1415
  verbosity: int,
@@ -1449,7 +1472,9 @@ def execute(
1449
1472
  # This handler should be first to have logs writing completed when the output handler will display statistic
1450
1473
  _open_file(cassette_path)
1451
1474
  handlers.append(
1452
- cassettes.CassetteWriter(cassette_path, preserve_exact_body_bytes=cassette_preserve_exact_body_bytes)
1475
+ cassettes.CassetteWriter(
1476
+ cassette_path, format=cassette_format, preserve_exact_body_bytes=cassette_preserve_exact_body_bytes
1477
+ )
1453
1478
  )
1454
1479
  handlers.append(get_output_handler(workers_num))
1455
1480
  if sanitize_output:
@@ -24,6 +24,7 @@ from ..service.hosts import get_temporary_hosts_file
24
24
  from ..stateful import Stateful
25
25
  from ..transports.headers import has_invalid_characters, is_latin_1_encodable
26
26
  from ..types import PathLike
27
+ from .cassettes import CassetteFormat
27
28
  from .constants import DEFAULT_WORKERS
28
29
 
29
30
  if TYPE_CHECKING:
@@ -344,6 +345,10 @@ def convert_code_sample_style(ctx: click.core.Context, param: click.core.Paramet
344
345
  return CodeSampleStyle.from_str(value)
345
346
 
346
347
 
348
+ def convert_cassette_format(ctx: click.core.Context, param: click.core.Parameter, value: str) -> CassetteFormat:
349
+ return CassetteFormat.from_str(value)
350
+
351
+
347
352
  def convert_data_generation_method(
348
353
  ctx: click.core.Context, param: click.core.Parameter, value: str
349
354
  ) -> list[DataGenerationMethod]:
@@ -1,13 +1,18 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import base64
4
+ import enum
4
5
  import json
5
6
  import re
6
7
  import sys
7
8
  import threading
8
9
  from dataclasses import dataclass, field
10
+ from http.cookies import SimpleCookie
9
11
  from queue import Queue
10
- from typing import IO, TYPE_CHECKING, Any, Generator, Iterator, cast
12
+ from typing import IO, TYPE_CHECKING, Any, Callable, Generator, Iterator, cast
13
+ from urllib.parse import parse_qsl, urlparse
14
+
15
+ import harfile
11
16
 
12
17
  from ..constants import SCHEMATHESIS_VERSION
13
18
  from ..runner import events
@@ -27,6 +32,23 @@ if TYPE_CHECKING:
27
32
  WRITER_WORKER_JOIN_TIMEOUT = 1
28
33
 
29
34
 
35
+ class CassetteFormat(str, enum.Enum):
36
+ """Type of the cassette."""
37
+
38
+ VCR = "vcr"
39
+ HAR = "har"
40
+
41
+ @classmethod
42
+ def from_str(cls, value: str) -> CassetteFormat:
43
+ try:
44
+ return cls[value.upper()]
45
+ except KeyError:
46
+ available_formats = ", ".join(cls)
47
+ raise ValueError(
48
+ f"Invalid value for cassette format: {value}. Available formats: {available_formats}"
49
+ ) from None
50
+
51
+
30
52
  @dataclass
31
53
  class CassetteWriter(EventHandler):
32
54
  """Write interactions in a YAML cassette.
@@ -36,26 +58,30 @@ class CassetteWriter(EventHandler):
36
58
  """
37
59
 
38
60
  file_handle: click.utils.LazyFile
61
+ format: CassetteFormat
39
62
  preserve_exact_body_bytes: bool
40
63
  queue: Queue = field(default_factory=Queue)
41
64
  worker: threading.Thread = field(init=False)
42
65
 
43
66
  def __post_init__(self) -> None:
44
- self.worker = threading.Thread(
45
- target=worker,
46
- kwargs={
47
- "file_handle": self.file_handle,
48
- "preserve_exact_body_bytes": self.preserve_exact_body_bytes,
49
- "queue": self.queue,
50
- },
51
- )
67
+ kwargs = {
68
+ "file_handle": self.file_handle,
69
+ "queue": self.queue,
70
+ "preserve_exact_body_bytes": self.preserve_exact_body_bytes,
71
+ }
72
+ writer: Callable
73
+ if self.format == CassetteFormat.HAR:
74
+ writer = har_writer
75
+ else:
76
+ writer = vcr_writer
77
+ self.worker = threading.Thread(name="SchemathesisCassetteWriter", target=writer, kwargs=kwargs)
52
78
  self.worker.start()
53
79
 
54
80
  def handle_event(self, context: ExecutionContext, event: events.ExecutionEvent) -> None:
55
81
  if isinstance(event, events.Initialized):
56
82
  # In the beginning we write metadata and start `http_interactions` list
57
83
  self.queue.put(Initialize())
58
- if isinstance(event, events.AfterExecution):
84
+ elif isinstance(event, events.AfterExecution):
59
85
  # Seed is always present at this point, the original Optional[int] type is there because `TestResult`
60
86
  # instance is created before `seed` is generated on the hypothesis side
61
87
  seed = cast(int, event.result.seed)
@@ -71,7 +97,19 @@ class CassetteWriter(EventHandler):
71
97
  interactions=event.result.interactions,
72
98
  )
73
99
  )
74
- if isinstance(event, events.Finished):
100
+ elif isinstance(event, events.AfterStatefulExecution):
101
+ seed = cast(int, event.result.seed)
102
+ self.queue.put(
103
+ Process(
104
+ seed=seed,
105
+ # Correlation ID is not used in stateful testing
106
+ correlation_id="",
107
+ thread_id=event.thread_id,
108
+ data_generation_method=event.data_generation_method[0],
109
+ interactions=event.result.interactions,
110
+ )
111
+ )
112
+ elif isinstance(event, events.Finished):
75
113
  self.shutdown()
76
114
 
77
115
  def shutdown(self) -> None:
@@ -112,7 +150,7 @@ def get_command_representation() -> str:
112
150
  return f"st {args}"
113
151
 
114
152
 
115
- def worker(file_handle: click.utils.LazyFile, preserve_exact_body_bytes: bool, queue: Queue) -> None:
153
+ def vcr_writer(file_handle: click.utils.LazyFile, preserve_exact_body_bytes: bool, queue: Queue) -> None:
116
154
  """Write YAML to a file in an incremental manner.
117
155
 
118
156
  This implementation doesn't use `pyyaml` package and composes YAML manually as string due to the following reasons:
@@ -278,6 +316,106 @@ def write_double_quoted(stream: IO, text: str) -> None:
278
316
  stream.write('"')
279
317
 
280
318
 
319
+ def har_writer(file_handle: click.utils.LazyFile, preserve_exact_body_bytes: bool, queue: Queue) -> None:
320
+ if preserve_exact_body_bytes:
321
+
322
+ def get_body(body: str) -> str:
323
+ return body
324
+ else:
325
+
326
+ def get_body(body: str) -> str:
327
+ return base64.b64decode(body).decode("utf-8", errors="replace")
328
+
329
+ with harfile.open(file_handle) as har:
330
+ while True:
331
+ item = queue.get()
332
+ if isinstance(item, Process):
333
+ for interaction in item.interactions:
334
+ time = round(interaction.response.elapsed * 1000, 2)
335
+ content_type = interaction.response.headers.get("Content-Type", [""])[0]
336
+ content = harfile.Content(
337
+ size=interaction.response.body_size or 0,
338
+ mimeType=content_type,
339
+ text=get_body(interaction.response.body) if interaction.response.body is not None else None,
340
+ encoding="base64"
341
+ if interaction.response.body is not None and preserve_exact_body_bytes
342
+ else None,
343
+ )
344
+ http_version = f"HTTP/{interaction.response.http_version}"
345
+ query_params = urlparse(interaction.request.uri).query
346
+ if interaction.request.body is not None:
347
+ post_data = harfile.PostData(
348
+ mimeType=content_type,
349
+ text=get_body(interaction.request.body),
350
+ )
351
+ else:
352
+ post_data = None
353
+ har.add_entry(
354
+ startedDateTime=interaction.recorded_at,
355
+ time=time,
356
+ request=harfile.Request(
357
+ method=interaction.request.method.upper(),
358
+ url=interaction.request.uri,
359
+ httpVersion=http_version,
360
+ headers=[
361
+ harfile.Record(name=name, value=values[0])
362
+ for name, values in interaction.request.headers.items()
363
+ ],
364
+ queryString=[
365
+ harfile.Record(name=name, value=value)
366
+ for name, value in parse_qsl(query_params, keep_blank_values=True)
367
+ ],
368
+ cookies=_extract_cookies(interaction.request.headers.get("Cookie", [])),
369
+ headersSize=_headers_size(interaction.request.headers),
370
+ bodySize=interaction.request.body_size or 0,
371
+ postData=post_data,
372
+ ),
373
+ response=harfile.Response(
374
+ status=interaction.response.status_code,
375
+ httpVersion=http_version,
376
+ statusText=interaction.response.message,
377
+ headers=[
378
+ harfile.Record(name=name, value=values[0])
379
+ for name, values in interaction.response.headers.items()
380
+ ],
381
+ cookies=_extract_cookies(interaction.response.headers.get("Set-Cookie", [])),
382
+ content=content,
383
+ headersSize=_headers_size(interaction.response.headers),
384
+ bodySize=interaction.response.body_size or 0,
385
+ redirectURL=interaction.response.headers.get("Location", [""])[0],
386
+ ),
387
+ timings=harfile.Timings(send=0, wait=0, receive=time, blocked=0, dns=0, connect=0, ssl=0),
388
+ )
389
+ elif isinstance(item, Finalize):
390
+ break
391
+
392
+
393
+ def _headers_size(headers: dict[str, list[str]]) -> int:
394
+ size = 0
395
+ for name, values in headers.items():
396
+ # 4 is for ": " and "\r\n"
397
+ size += len(name) + 4 + len(values[0])
398
+ return size
399
+
400
+
401
+ def _extract_cookies(headers: list[str]) -> list[harfile.Cookie]:
402
+ return [cookie for items in headers for item in items for cookie in _cookie_to_har(item)]
403
+
404
+
405
+ def _cookie_to_har(cookie: str) -> Iterator[harfile.Cookie]:
406
+ parsed = SimpleCookie(cookie)
407
+ for name, data in parsed.items():
408
+ yield harfile.Cookie(
409
+ name=name,
410
+ value=data.value,
411
+ path=data["path"] or None,
412
+ domain=data["domain"] or None,
413
+ expires=data["expires"] or None,
414
+ httpOnly=data["httponly"] or None,
415
+ secure=data["secure"] or None,
416
+ )
417
+
418
+
281
419
  @dataclass
282
420
  class Replayed:
283
421
  interaction: dict[str, Any]
@@ -222,9 +222,11 @@ class OperationSchemaError(Exception):
222
222
  def from_reference_resolution_error(
223
223
  cls, error: RefResolutionError, path: str | None, method: str | None, full_path: str | None
224
224
  ) -> OperationSchemaError:
225
+ notes = getattr(error, "__notes__", [])
226
+ # Some exceptions don't have the actual reference in them, hence we add it manually via notes
227
+ pointer = f"'{notes[0]}'"
225
228
  message = "Unresolvable JSON pointer in the schema"
226
229
  # Get the pointer value from "Unresolvable JSON pointer: 'components/UnknownParameter'"
227
- pointer = str(error).split(": ", 1)[-1]
228
230
  message += f"\n\nError details:\n JSON pointer: {pointer}"
229
231
  message += "\n This typically means that the schema is referencing a component that doesn't exist."
230
232
  message += f"\n\n{SCHEMA_ERROR_SUGGESTION}"
@@ -77,5 +77,7 @@ class GenerationConfig:
77
77
  allow_x00: bool = True
78
78
  # Generate strings using the given codec
79
79
  codec: str | None = "utf-8"
80
+ # Whether to generate security parameters
81
+ with_security_parameters: bool = True
80
82
  # Header generation configuration
81
83
  headers: HeaderConfig = field(default_factory=HeaderConfig)
@@ -492,6 +492,7 @@ class Case:
492
492
  query=fast_deepcopy(self.query),
493
493
  body=fast_deepcopy(self.body),
494
494
  generation_time=self.generation_time,
495
+ id=self.id,
495
496
  )
496
497
 
497
498
 
@@ -675,9 +676,11 @@ class APIOperation(Generic[P, C]):
675
676
  def get_security_requirements(self) -> list[str]:
676
677
  return self.schema.get_security_requirements(self)
677
678
 
678
- def get_strategies_from_examples(self) -> list[st.SearchStrategy[Case]]:
679
+ def get_strategies_from_examples(
680
+ self, as_strategy_kwargs: dict[str, Any] | None = None
681
+ ) -> list[st.SearchStrategy[Case]]:
679
682
  """Get examples from the API operation."""
680
- return self.schema.get_strategies_from_examples(self)
683
+ return self.schema.get_strategies_from_examples(self, as_strategy_kwargs=as_strategy_kwargs)
681
684
 
682
685
  def get_stateful_tests(self, response: GenericResponse, stateful: Stateful | None) -> Sequence[StatefulTest]:
683
686
  return self.schema.get_stateful_tests(response, self, stateful)
@@ -829,6 +832,7 @@ class Request:
829
832
  method: str
830
833
  uri: str
831
834
  body: str | None
835
+ body_size: int | None
832
836
  headers: Headers
833
837
 
834
838
  @classmethod
@@ -859,6 +863,7 @@ class Request:
859
863
  method=method,
860
864
  headers={key: [value] for (key, value) in prepared.headers.items()},
861
865
  body=serialize_payload(body) if body is not None else body,
866
+ body_size=len(body) if body is not None else None,
862
867
  )
863
868
 
864
869
  def deserialize_body(self) -> bytes | None:
@@ -878,6 +883,7 @@ class Response:
878
883
  message: str
879
884
  headers: dict[str, list[str]]
880
885
  body: str | None
886
+ body_size: int | None
881
887
  encoding: str | None
882
888
  http_version: str
883
889
  elapsed: float
@@ -904,6 +910,7 @@ class Response:
904
910
  status_code=response.status_code,
905
911
  message=response.reason,
906
912
  body=body,
913
+ body_size=len(response.content) if body is not None else None,
907
914
  encoding=response.encoding,
908
915
  headers=headers,
909
916
  http_version=http_version,
@@ -931,6 +938,7 @@ class Response:
931
938
  status_code=response.status_code,
932
939
  message=message,
933
940
  body=body,
941
+ body_size=len(data) if body is not None else None,
934
942
  encoding=encoding,
935
943
  headers=headers,
936
944
  http_version="1.1",
@@ -947,6 +955,9 @@ class Response:
947
955
  return deserialize_payload(self.body)
948
956
 
949
957
 
958
+ TIMEZONE = datetime.datetime.now(datetime.timezone.utc).astimezone().tzinfo
959
+
960
+
950
961
  @dataclass
951
962
  class Interaction:
952
963
  """A single interaction with the target app."""
@@ -956,7 +967,7 @@ class Interaction:
956
967
  checks: list[Check]
957
968
  status: Status
958
969
  data_generation_method: DataGenerationMethod
959
- recorded_at: str = field(default_factory=lambda: datetime.datetime.now().isoformat())
970
+ recorded_at: str = field(default_factory=lambda: datetime.datetime.now(TIMEZONE).isoformat())
960
971
 
961
972
  @classmethod
962
973
  def from_requests(cls, case: Case, response: requests.Response, status: Status, checks: list[Check]) -> Interaction:
@@ -303,6 +303,8 @@ class AfterStatefulExecution(ExecutionEvent):
303
303
 
304
304
  status: Status
305
305
  result: SerializedTestResult
306
+ data_generation_method: list[DataGenerationMethod]
307
+ thread_id: int = field(default_factory=threading.get_ident)
306
308
 
307
309
 
308
310
  @dataclass