schemathesis 3.27.1__tar.gz → 3.28.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 (578) hide show
  1. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/workflows/build.yml +1 -1
  2. {schemathesis-3.27.1 → schemathesis-3.28.0}/.pre-commit-config.yaml +2 -2
  3. {schemathesis-3.27.1 → schemathesis-3.28.0}/PKG-INFO +37 -14
  4. {schemathesis-3.27.1 → schemathesis-3.28.0}/README.md +36 -13
  5. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/auth.rst +6 -4
  6. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/changelog.rst +23 -1
  7. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/cli.rst +12 -8
  8. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/extending.rst +23 -6
  9. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/index.rst +29 -7
  10. {schemathesis-3.27.1 → schemathesis-3.28.0}/example/requirements-app.txt +2 -2
  11. {schemathesis-3.27.1 → schemathesis-3.28.0}/example/requirements-pytest.txt +1 -1
  12. {schemathesis-3.27.1 → schemathesis-3.28.0}/pyproject.toml +1 -1
  13. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/context.py +2 -0
  14. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/junitxml.py +8 -8
  15. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/output/default.py +34 -8
  16. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/reporting.py +1 -3
  17. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/exceptions.py +8 -0
  18. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/models.py +18 -2
  19. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/runner/impl/core.py +17 -13
  20. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/runner/serialization.py +16 -1
  21. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/serializers.py +1 -1
  22. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/references.py +1 -1
  23. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/schemas.py +1 -1
  24. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/transports/__init__.py +6 -0
  25. schemathesis-3.28.0/test/cli/__snapshots__/test_commands/test_recursive_reference_error_message.raw +32 -0
  26. schemathesis-3.28.0/test/cli/__snapshots__/test_commands/test_unknown_schema_error[Open API 3.0].raw +35 -0
  27. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[real-Open API 2.0-1].raw +1 -2
  28. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[real-Open API 2.0-2].raw +1 -2
  29. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[real-Open API 3.0-1].raw +1 -2
  30. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[real-Open API 3.0-2].raw +1 -2
  31. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[wsgi-Open API 2.0-1].raw +1 -2
  32. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[wsgi-Open API 2.0-2].raw +1 -2
  33. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[wsgi-Open API 3.0-1].raw +1 -2
  34. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_unsatisfiable[wsgi-Open API 3.0-2].raw +1 -2
  35. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/test_commands.py +32 -20
  36. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/test_junitxml.py +1 -1
  37. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/runner/test_runner.py +1 -9
  38. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_dereferencing.py +61 -0
  39. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_models.py +12 -10
  40. {schemathesis-3.27.1 → schemathesis-3.28.0}/.dockerignore +0 -0
  41. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/FUNDING.yml +0 -0
  42. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  43. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  44. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  45. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/dependabot.yml +0 -0
  46. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/workflows/codeql-analysis.yml +0 -0
  47. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/workflows/codspeed.yml +0 -0
  48. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/workflows/commit.yml +0 -0
  49. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/workflows/example-build.yml +0 -0
  50. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/workflows/example-no-build.yml +0 -0
  51. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/workflows/master_update.yml +0 -0
  52. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/workflows/release.yml +0 -0
  53. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/workflows/test-corpus.yml +0 -0
  54. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/workflows/test-hypothesis.yml +0 -0
  55. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/workflows/update-corpus.yml +0 -0
  56. {schemathesis-3.27.1 → schemathesis-3.28.0}/.github/workflows/update-pre-commit.yml +0 -0
  57. {schemathesis-3.27.1 → schemathesis-3.28.0}/.gitignore +0 -0
  58. {schemathesis-3.27.1 → schemathesis-3.28.0}/.gitmodules +0 -0
  59. {schemathesis-3.27.1 → schemathesis-3.28.0}/.readthedocs.yml +0 -0
  60. {schemathesis-3.27.1 → schemathesis-3.28.0}/.relint.yml +0 -0
  61. {schemathesis-3.27.1 → schemathesis-3.28.0}/.rstcheck.cfg +0 -0
  62. {schemathesis-3.27.1 → schemathesis-3.28.0}/.yamllint +0 -0
  63. {schemathesis-3.27.1 → schemathesis-3.28.0}/CITATION.cff +0 -0
  64. {schemathesis-3.27.1 → schemathesis-3.28.0}/CODE_OF_CONDUCT.md +0 -0
  65. {schemathesis-3.27.1 → schemathesis-3.28.0}/CONTRIBUTING.rst +0 -0
  66. {schemathesis-3.27.1 → schemathesis-3.28.0}/Dockerfile +0 -0
  67. {schemathesis-3.27.1 → schemathesis-3.28.0}/Dockerfile.bookworm +0 -0
  68. {schemathesis-3.27.1 → schemathesis-3.28.0}/LICENSE +0 -0
  69. {schemathesis-3.27.1 → schemathesis-3.28.0}/benches/cli.py +0 -0
  70. {schemathesis-3.27.1 → schemathesis-3.28.0}/benches/references.py +0 -0
  71. {schemathesis-3.27.1 → schemathesis-3.28.0}/changelog.py +0 -0
  72. {schemathesis-3.27.1 → schemathesis-3.28.0}/codecov.yml +0 -0
  73. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/Makefile +0 -0
  74. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/additional-content.rst +0 -0
  75. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/api.rst +0 -0
  76. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/compatibility.rst +0 -0
  77. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/conf.py +0 -0
  78. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/continuous_integration.rst +0 -0
  79. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/contrib.rst +0 -0
  80. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/data-generation.rst +0 -0
  81. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/examples.rst +0 -0
  82. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/experimental.rst +0 -0
  83. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/faq.rst +0 -0
  84. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/getting-started.rst +0 -0
  85. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/graphql.rst +0 -0
  86. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/python.rst +0 -0
  87. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/recipes.rst +0 -0
  88. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/requirements.txt +0 -0
  89. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/sanitizing.rst +0 -0
  90. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/service.rst +0 -0
  91. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/stateful.rst +0 -0
  92. {schemathesis-3.27.1 → schemathesis-3.28.0}/docs/targeted.rst +0 -0
  93. {schemathesis-3.27.1 → schemathesis-3.28.0}/example/Dockerfile +0 -0
  94. {schemathesis-3.27.1 → schemathesis-3.28.0}/example/README.md +0 -0
  95. {schemathesis-3.27.1 → schemathesis-3.28.0}/example/app.py +0 -0
  96. {schemathesis-3.27.1 → schemathesis-3.28.0}/example/compose.yml +0 -0
  97. {schemathesis-3.27.1 → schemathesis-3.28.0}/example/openapi.json +0 -0
  98. {schemathesis-3.27.1 → schemathesis-3.28.0}/example/requirements-app.in +0 -0
  99. {schemathesis-3.27.1 → schemathesis-3.28.0}/example/requirements-pytest.in +0 -0
  100. {schemathesis-3.27.1 → schemathesis-3.28.0}/example/tests/__init__.py +0 -0
  101. {schemathesis-3.27.1 → schemathesis-3.28.0}/example/tests/conftest.py +0 -0
  102. {schemathesis-3.27.1 → schemathesis-3.28.0}/example/tests/extensions.py +0 -0
  103. {schemathesis-3.27.1 → schemathesis-3.28.0}/example/tests/test_app.py +0 -0
  104. {schemathesis-3.27.1 → schemathesis-3.28.0}/img/demo.gif +0 -0
  105. {schemathesis-3.27.1 → schemathesis-3.28.0}/img/service_github_report.png +0 -0
  106. {schemathesis-3.27.1 → schemathesis-3.28.0}/mypy.ini +0 -0
  107. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/__init__.py +0 -0
  108. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/_compat.py +0 -0
  109. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/_dependency_versions.py +0 -0
  110. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/_hypothesis.py +0 -0
  111. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/_lazy_import.py +0 -0
  112. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/_override.py +0 -0
  113. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/_rate_limiter.py +0 -0
  114. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/_xml.py +0 -0
  115. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/auths.py +0 -0
  116. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/checks.py +0 -0
  117. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/__init__.py +0 -0
  118. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/__main__.py +0 -0
  119. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/callbacks.py +0 -0
  120. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/cassettes.py +0 -0
  121. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/constants.py +0 -0
  122. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/debug.py +0 -0
  123. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/handlers.py +0 -0
  124. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/options.py +0 -0
  125. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/output/__init__.py +0 -0
  126. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/output/short.py +0 -0
  127. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/cli/sanitization.py +0 -0
  128. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/code_samples.py +0 -0
  129. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/constants.py +0 -0
  130. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/contrib/__init__.py +0 -0
  131. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/contrib/openapi/__init__.py +0 -0
  132. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/contrib/openapi/fill_missing_examples.py +0 -0
  133. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/contrib/openapi/formats/__init__.py +0 -0
  134. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/contrib/openapi/formats/uuid.py +0 -0
  135. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/contrib/unique_data.py +0 -0
  136. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/experimental/__init__.py +0 -0
  137. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/extra/__init__.py +0 -0
  138. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/extra/_aiohttp.py +0 -0
  139. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/extra/_flask.py +0 -0
  140. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/extra/_server.py +0 -0
  141. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/extra/pytest_plugin.py +0 -0
  142. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/failures.py +0 -0
  143. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/filters.py +0 -0
  144. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/fixups/__init__.py +0 -0
  145. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/fixups/fast_api.py +0 -0
  146. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/fixups/utf8_bom.py +0 -0
  147. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/generation/__init__.py +0 -0
  148. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/graphql.py +0 -0
  149. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/hooks.py +0 -0
  150. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/internal/__init__.py +0 -0
  151. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/internal/copy.py +0 -0
  152. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/internal/datetime.py +0 -0
  153. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/internal/deprecation.py +0 -0
  154. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/internal/jsonschema.py +0 -0
  155. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/internal/result.py +0 -0
  156. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/internal/transformation.py +0 -0
  157. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/internal/validation.py +0 -0
  158. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/lazy.py +0 -0
  159. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/loaders.py +0 -0
  160. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/parameters.py +0 -0
  161. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/py.typed +0 -0
  162. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/runner/__init__.py +0 -0
  163. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/runner/events.py +0 -0
  164. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/runner/impl/__init__.py +0 -0
  165. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/runner/impl/solo.py +0 -0
  166. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/runner/impl/threadpool.py +0 -0
  167. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/runner/probes.py +0 -0
  168. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/sanitization.py +0 -0
  169. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/schemas.py +0 -0
  170. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/service/__init__.py +0 -0
  171. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/service/auth.py +0 -0
  172. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/service/ci.py +0 -0
  173. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/service/client.py +0 -0
  174. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/service/constants.py +0 -0
  175. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/service/events.py +0 -0
  176. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/service/extensions.py +0 -0
  177. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/service/hosts.py +0 -0
  178. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/service/metadata.py +0 -0
  179. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/service/models.py +0 -0
  180. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/service/report.py +0 -0
  181. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/service/serialization.py +0 -0
  182. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/service/usage.py +0 -0
  183. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/__init__.py +0 -0
  184. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/graphql/__init__.py +0 -0
  185. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/graphql/loaders.py +0 -0
  186. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/graphql/nodes.py +0 -0
  187. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/graphql/scalars.py +0 -0
  188. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/graphql/schemas.py +0 -0
  189. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/graphql/validation.py +0 -0
  190. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/__init__.py +0 -0
  191. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/_hypothesis.py +0 -0
  192. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/checks.py +0 -0
  193. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/constants.py +0 -0
  194. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/converter.py +0 -0
  195. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/definitions.py +0 -0
  196. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/examples.py +0 -0
  197. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/expressions/__init__.py +0 -0
  198. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/expressions/context.py +0 -0
  199. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/expressions/errors.py +0 -0
  200. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/expressions/lexer.py +0 -0
  201. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/expressions/nodes.py +0 -0
  202. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/expressions/parser.py +0 -0
  203. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/filters.py +0 -0
  204. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/formats.py +0 -0
  205. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/links.py +0 -0
  206. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/loaders.py +0 -0
  207. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/media_types.py +0 -0
  208. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/negative/__init__.py +0 -0
  209. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/negative/mutations.py +0 -0
  210. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/negative/types.py +0 -0
  211. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/negative/utils.py +0 -0
  212. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/parameters.py +0 -0
  213. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/security.py +0 -0
  214. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/serialization.py +0 -0
  215. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/stateful/__init__.py +0 -0
  216. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/stateful/links.py +0 -0
  217. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/utils.py +0 -0
  218. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/specs/openapi/validation.py +0 -0
  219. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/stateful/__init__.py +0 -0
  220. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/stateful/state_machine.py +0 -0
  221. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/targets.py +0 -0
  222. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/throttling.py +0 -0
  223. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/transports/auth.py +0 -0
  224. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/transports/content_types.py +0 -0
  225. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/transports/headers.py +0 -0
  226. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/transports/responses.py +0 -0
  227. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/types.py +0 -0
  228. {schemathesis-3.27.1 → schemathesis-3.28.0}/src/schemathesis/utils.py +0 -0
  229. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/__init__.py +0 -0
  230. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/__snapshots__/test_hypothesis/test_health_check_failed_large_base_example.raw +0 -0
  231. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/__snapshots__/test_recoverable_errors/test_in_cli[1].raw +0 -0
  232. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/__snapshots__/test_recoverable_errors/test_in_cli[2].raw +0 -0
  233. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/__snapshots__/test_serialization/test_in_cli[Open API 3.0].raw +0 -0
  234. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/__init__.py +0 -0
  235. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/_graphql/__init__.py +0 -0
  236. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/_graphql/_fastapi/__init__.py +0 -0
  237. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/_graphql/_fastapi/app.py +0 -0
  238. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/_graphql/_flask/__init__.py +0 -0
  239. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/_graphql/_flask/app.py +0 -0
  240. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/_graphql/schema.py +0 -0
  241. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/openapi/__init__.py +0 -0
  242. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/openapi/_aiohttp/__init__.py +0 -0
  243. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/openapi/_aiohttp/app.py +0 -0
  244. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/openapi/_aiohttp/handlers.py +0 -0
  245. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/openapi/_fastapi/__init__.py +0 -0
  246. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/openapi/_fastapi/app.py +0 -0
  247. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/openapi/_flask/__init__.py +0 -0
  248. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/openapi/_flask/app.py +0 -0
  249. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/apps/openapi/schema.py +0 -0
  250. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/auth/__init__.py +0 -0
  251. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/auth/__snapshots__/test_cli/test_conditional[Open API 3.0].raw +0 -0
  252. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/auth/__snapshots__/test_cli/test_custom_auth[Open API 3.0].raw +0 -0
  253. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/auth/__snapshots__/test_cli/test_explicit_auth_precedence[Open API 3.0-args0-Basic dXNlcjpwYXNz].raw +0 -0
  254. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/auth/__snapshots__/test_cli/test_explicit_auth_precedence[Open API 3.0-args1-Bearer EXPLICIT].raw +0 -0
  255. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/auth/__snapshots__/test_cli/test_multiple_auth_mechanisms_with_explicit_auth.raw +0 -0
  256. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/auth/__snapshots__/test_cli/test_multiple_threads[Open API 3.0].raw +0 -0
  257. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/auth/__snapshots__/test_cli/test_requests_auth[Open API 3.0].raw +0 -0
  258. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/auth/conftest.py +0 -0
  259. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/auth/test_cli.py +0 -0
  260. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/auth/test_provider.py +0 -0
  261. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/auth/test_pytest.py +0 -0
  262. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__init__.py +0 -0
  263. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_cassettes/test_forbid_preserve_exact_bytes_without_cassette_path[Open API 3.0].raw +0 -0
  264. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_cassettes/test_forbid_simultaneous_use_of_deprecated_and_new_options[Open API 3.0].raw +0 -0
  265. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_add_case_output[Open API 2.0].raw +0 -0
  266. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_add_case_output[Open API 3.0].raw +0 -0
  267. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_auth_and_authorization_header_are_disallowed[Open API 3.0-Authorization].raw +0 -0
  268. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_auth_and_authorization_header_are_disallowed[Open API 3.0-authorization].raw +0 -0
  269. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 2.0---auth='testwrong'].raw +0 -0
  270. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 2.0--H Authorization Basic J3Rlc3Q6d3Jvbmcn].raw +0 -0
  271. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 3.0---auth='testwrong'].raw +0 -0
  272. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_auth_override_on_protected_operation[Open API 3.0--H Authorization Basic J3Rlc3Q6d3Jvbmcn].raw +0 -0
  273. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_binary_payload.raw +0 -0
  274. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_certificate_only_key.raw +0 -0
  275. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_chunked_encoding_error[Open API 3.0].raw +0 -0
  276. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[real-Open API 2.0-1].raw +0 -0
  277. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[real-Open API 2.0-2].raw +0 -0
  278. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[real-Open API 3.0-1].raw +0 -0
  279. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[real-Open API 3.0-2].raw +0 -0
  280. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[wsgi-Open API 2.0-1].raw +0 -0
  281. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[wsgi-Open API 2.0-2].raw +0 -0
  282. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[wsgi-Open API 3.0-1].raw +0 -0
  283. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_cli_run_only_failure[wsgi-Open API 3.0-2].raw +0 -0
  284. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_commands_help.raw +0 -0
  285. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_complex_urlencoded_example.raw +0 -0
  286. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 2.0-1].raw +0 -0
  287. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 2.0-2].raw +0 -0
  288. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 3.0-1].raw +0 -0
  289. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_connection_error[Open API 3.0-2].raw +0 -0
  290. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 2.0-1].raw +0 -0
  291. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 2.0-2].raw +0 -0
  292. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 3.0-1].raw +0 -0
  293. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_connection_timeout[Open API 3.0-2].raw +0 -0
  294. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_empty_schema_file[args0].raw +0 -0
  295. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_empty_schema_file[args1].raw +0 -0
  296. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_explicit_example_failure_output.raw +0 -0
  297. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_explicit_headers_in_output_on_errors[Open API 3.0].raw +0 -0
  298. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_force_color_nocolor[Open API 3.0].raw +0 -0
  299. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_get_request_with_body[Open API 2.0].raw +0 -0
  300. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_get_request_with_body[Open API 3.0].raw +0 -0
  301. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_graphql_asgi.raw +0 -0
  302. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_graphql_url[foo-args0].raw +0 -0
  303. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_graphql_url[foo-args1].raw +0 -0
  304. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_graphql_url[graphql-args0].raw +0 -0
  305. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_graphql_url[graphql-args1].raw +0 -0
  306. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_group_errors.raw +0 -0
  307. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_hooks_module_not_found.raw +0 -0
  308. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_hooks_with_inner_import_error.raw +0 -0
  309. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_hypothesis_database_with_derandomize[Open API 3.0].raw +0 -0
  310. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[real-Open API 2.0-1].raw +0 -0
  311. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[real-Open API 2.0-2].raw +0 -0
  312. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[real-Open API 3.0-1].raw +0 -0
  313. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[real-Open API 3.0-2].raw +0 -0
  314. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[wsgi-Open API 2.0-1].raw +0 -0
  315. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[wsgi-Open API 2.0-2].raw +0 -0
  316. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[wsgi-Open API 3.0-1].raw +0 -0
  317. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_hypothesis_failed_event[wsgi-Open API 3.0-2].raw +0 -0
  318. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_invalid_operation_suggestion[real-Open API 2.0].raw +0 -0
  319. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_invalid_operation_suggestion[real-Open API 3.0].raw +0 -0
  320. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_invalid_operation_suggestion[wsgi-Open API 2.0].raw +0 -0
  321. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_invalid_operation_suggestion[wsgi-Open API 3.0].raw +0 -0
  322. /schemathesis-3.27.1/test/cli/__snapshots__/test_commands/test_invalid_schema_with_disabled_validation[3.0.2-The provided definition doesn't match any of the expected formats or types.].raw → /schemathesis-3.28.0/test/cli/__snapshots__/test_commands/test_invalid_schema_with_disabled_validation[3.0.2].raw +0 -0
  323. /schemathesis-3.27.1/test/cli/__snapshots__/test_commands/test_invalid_schema_with_disabled_validation[3.1.0-'type' is a required property].raw → /schemathesis-3.28.0/test/cli/__snapshots__/test_commands/test_invalid_schema_with_disabled_validation[3.1.0].raw +0 -0
  324. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_invalid_yaml.raw +0 -0
  325. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_long_payload.raw +0 -0
  326. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_malformed_json_deduplication[real-Open API 3.0].raw +0 -0
  327. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_malformed_json_deduplication[wsgi-Open API 3.0].raw +0 -0
  328. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 2.0-1].raw +0 -0
  329. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 2.0-2].raw +0 -0
  330. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 3.0-1].raw +0 -0
  331. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_max_response_time_invalid[Open API 3.0-2].raw +0 -0
  332. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[cookie-None].raw +0 -0
  333. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[cookie-http127.0.0.1apiv2].raw +0 -0
  334. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[header-None].raw +0 -0
  335. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[header-http127.0.0.1apiv2].raw +0 -0
  336. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[path-None].raw +0 -0
  337. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[path-http127.0.0.1apiv2].raw +0 -0
  338. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[query-None].raw +0 -0
  339. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_missing_content_and_schema[query-http127.0.0.1apiv2].raw +0 -0
  340. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_multiple_errors.raw +0 -0
  341. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_multiple_failures_different_check[Open API 2.0].raw +0 -0
  342. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_multiple_failures_different_check[Open API 3.0].raw +0 -0
  343. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_multiple_failures_in_single_check.raw +0 -0
  344. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_multiple_failures_single_check[Open API 2.0].raw +0 -0
  345. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_multiple_failures_single_check[Open API 3.0].raw +0 -0
  346. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_nested_binary_in_yaml.raw +0 -0
  347. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_no_useless_traceback.raw +0 -0
  348. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_null_byte_in_header_probe.raw +0 -0
  349. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_openapi_links[real-Open API 2.0].raw +0 -0
  350. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_openapi_links[real-Open API 3.0].raw +0 -0
  351. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_openapi_links[wsgi-Open API 2.0].raw +0 -0
  352. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_openapi_links[wsgi-Open API 3.0].raw +0 -0
  353. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_openapi_links_disabled[Open API 2.0].raw +0 -0
  354. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_openapi_links_disabled[Open API 3.0].raw +0 -0
  355. /schemathesis-3.27.1/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 2.0-1-.....].raw → /schemathesis-3.28.0/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 2.0-1].raw +0 -0
  356. /schemathesis-3.27.1/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 2.0-5-......].raw → /schemathesis-3.28.0/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 2.0-5].raw +0 -0
  357. /schemathesis-3.27.1/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 3.0-1-.....].raw → /schemathesis-3.28.0/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 3.0-1].raw +0 -0
  358. /schemathesis-3.27.1/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 3.0-5-......].raw → /schemathesis-3.28.0/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[real-Open API 3.0-5].raw +0 -0
  359. /schemathesis-3.27.1/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 2.0-1-.....].raw → /schemathesis-3.28.0/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 2.0-1].raw +0 -0
  360. /schemathesis-3.27.1/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 2.0-5-......].raw → /schemathesis-3.28.0/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 2.0-5].raw +0 -0
  361. /schemathesis-3.27.1/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 3.0-1-.....].raw → /schemathesis-3.28.0/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 3.0-1].raw +0 -0
  362. /schemathesis-3.27.1/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 3.0-5-......].raw → /schemathesis-3.28.0/test/cli/__snapshots__/test_commands/test_openapi_links_multiple_threads[wsgi-Open API 3.0-5].raw +0 -0
  363. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_proxy_error[Open API 3.0].raw +0 -0
  364. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_read_content_timeout[Open API 3.0].raw +0 -0
  365. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError(Custom check failed!)-Open API 2.0].raw +0 -0
  366. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError(Custom check failed!)-Open API 3.0].raw +0 -0
  367. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError-Open API 2.0].raw +0 -0
  368. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_register_check[AssertionError-Open API 3.0].raw +0 -0
  369. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_remote_disconnected_error[Open API 3.0].raw +0 -0
  370. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[real-Open API 2.0].raw +0 -0
  371. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[real-Open API 3.0].raw +0 -0
  372. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[wsgi-Open API 2.0].raw +0 -0
  373. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_response_payload_encoding[wsgi-Open API 3.0].raw +0 -0
  374. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[real-Open API 2.0].raw +0 -0
  375. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[real-Open API 3.0].raw +0 -0
  376. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[wsgi-Open API 2.0].raw +0 -0
  377. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_response_schema_conformance_deduplication[wsgi-Open API 3.0].raw +0 -0
  378. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args0].raw +0 -0
  379. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args10].raw +0 -0
  380. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args11].raw +0 -0
  381. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args12].raw +0 -0
  382. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args13].raw +0 -0
  383. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args14].raw +0 -0
  384. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args15].raw +0 -0
  385. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args16].raw +0 -0
  386. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args17].raw +0 -0
  387. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args18].raw +0 -0
  388. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args19].raw +0 -0
  389. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args1].raw +0 -0
  390. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args20].raw +0 -0
  391. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args21].raw +0 -0
  392. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args22].raw +0 -0
  393. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args23].raw +0 -0
  394. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args24].raw +0 -0
  395. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args25].raw +0 -0
  396. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args26].raw +0 -0
  397. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args27].raw +0 -0
  398. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args28].raw +0 -0
  399. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args29].raw +0 -0
  400. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args2].raw +0 -0
  401. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args30].raw +0 -0
  402. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args31].raw +0 -0
  403. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args32].raw +0 -0
  404. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args33].raw +0 -0
  405. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args34].raw +0 -0
  406. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args35].raw +0 -0
  407. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args36].raw +0 -0
  408. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args3].raw +0 -0
  409. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args4].raw +0 -0
  410. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args5].raw +0 -0
  411. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args6].raw +0 -0
  412. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args7].raw +0 -0
  413. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args8].raw +0 -0
  414. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_run_output[args9].raw +0 -0
  415. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_schema_not_available[1].raw +0 -0
  416. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_schema_not_available[2].raw +0 -0
  417. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_schema_not_available_wsgi.raw +0 -0
  418. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[real-Open API 2.0-1].raw +0 -0
  419. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[real-Open API 2.0-2].raw +0 -0
  420. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[real-Open API 3.0-1].raw +0 -0
  421. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[real-Open API 3.0-2].raw +0 -0
  422. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[wsgi-Open API 2.0-1].raw +0 -0
  423. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[wsgi-Open API 2.0-2].raw +0 -0
  424. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[wsgi-Open API 3.0-1].raw +0 -0
  425. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_status_code_conformance[wsgi-Open API 3.0-2].raw +0 -0
  426. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_unresolvable_reference_with_disabled_validation.raw +0 -0
  427. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_unsupported_regex.raw +0 -0
  428. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_useful_traceback[Open API 3.0].raw +0 -0
  429. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_wait_for_schema_not_enough.raw +0 -0
  430. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_commands/test_yaml_parsing_of_floats[Open API 3.0].raw +0 -0
  431. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_hooks/test_after_call[real-Open API 3.0].raw +0 -0
  432. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/__snapshots__/test_hooks/test_after_call[wsgi-Open API 3.0].raw +0 -0
  433. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/cert.pem +0 -0
  434. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/conftest.py +0 -0
  435. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/output/__init__.py +0 -0
  436. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/output/test_default.py +0 -0
  437. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/test_asgi.py +0 -0
  438. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/test_callbacks.py +0 -0
  439. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/test_cassettes.py +0 -0
  440. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/test_checks.py +0 -0
  441. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/test_crashes.py +0 -0
  442. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/test_hooks.py +0 -0
  443. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/test_options.py +0 -0
  444. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/cli/test_targeted.py +0 -0
  445. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/code_samples/__snapshots__/test_python/test_cli_output[Open API 2.0].raw +0 -0
  446. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/code_samples/__snapshots__/test_python/test_cli_output[Open API 3.0].raw +0 -0
  447. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/code_samples/conftest.py +0 -0
  448. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/code_samples/test_curl.py +0 -0
  449. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/code_samples/test_python.py +0 -0
  450. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/conftest.py +0 -0
  451. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/contrib/__snapshots__/test_unique_data/test_cli[None].raw +0 -0
  452. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema0].raw +0 -0
  453. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema1].raw +0 -0
  454. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/contrib/__snapshots__/test_unique_data/test_cli[raw_schema2].raw +0 -0
  455. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/contrib/__snapshots__/test_unique_data/test_explicit_headers[1].raw +0 -0
  456. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/contrib/__snapshots__/test_unique_data/test_explicit_headers[2].raw +0 -0
  457. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/contrib/openapi/__snapshots__/test_fill_missing_examples/test_fills_missing_examples.raw +0 -0
  458. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/contrib/openapi/formats/test_uuid.py +0 -0
  459. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/contrib/openapi/test_fill_missing_examples.py +0 -0
  460. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/contrib/test_install.py +0 -0
  461. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/contrib/test_unique_data.py +0 -0
  462. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/data/petstore_v2.yaml +0 -0
  463. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/data/petstore_v3.yaml +0 -0
  464. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/data/simple_openapi.yaml +0 -0
  465. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/data/simple_swagger.yaml +0 -0
  466. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/experimental/__snapshots__/test_experiments/test_not_enabled.raw +0 -0
  467. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/experimental/conftest.py +0 -0
  468. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/experimental/test_experiments.py +0 -0
  469. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/experimental/test_openapi_3_1.py +0 -0
  470. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/extra/__init__.py +0 -0
  471. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/extra/test_aiohttp.py +0 -0
  472. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/filters/test_matching.py +0 -0
  473. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/hooks/test_filter_operations.py +0 -0
  474. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/hooks/test_hooks.py +0 -0
  475. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/loaders/conftest.py +0 -0
  476. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/loaders/test_app.py +0 -0
  477. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/loaders/test_common.py +0 -0
  478. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/loaders/test_graphql.py +0 -0
  479. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/loaders/test_openapi.py +0 -0
  480. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/loaders/test_yaml.py +0 -0
  481. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/runner/test_checks.py +0 -0
  482. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/runner/test_events.py +0 -0
  483. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/runner/test_probes.py +0 -0
  484. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__init__.py +0 -0
  485. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_cli/test_client_error_on_project_details[Open API 3.0].raw +0 -0
  486. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_cli/test_client_error_on_upload[Open API 3.0].raw +0 -0
  487. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_cli/test_error_in_another_handler[Open API 3.0].raw +0 -0
  488. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_cli/test_github_suggestion[Open API 3.0].raw +0 -0
  489. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_cli/test_not_authenticated_with_name.raw +0 -0
  490. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_cli/test_two_names.raw +0 -0
  491. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_cli/test_unauthorized[Open API 3.0].raw +0 -0
  492. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_cli/test_unknown_error_on_upload[Open API 3.0].raw +0 -0
  493. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_cli/test_upload_failure[Open API 3.0].raw +0 -0
  494. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_cli/test_upload_success[Open API 3.0].raw +0 -0
  495. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_connection_error[Open API 3.0].raw +0 -0
  496. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_custom_format.raw +0 -0
  497. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_dry_run[Open API 3.0].raw +0 -0
  498. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_forbidden[Open API 3.0].raw +0 -0
  499. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_graphql_scalars.raw +0 -0
  500. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_internal_server_error[Open API 3.0].raw +0 -0
  501. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_invalid_extension[Open API 3.0-42].raw +0 -0
  502. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_invalid_extension[Open API 3.0-extension1].raw +0 -0
  503. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_invalid_payload[Open API 3.0].raw +0 -0
  504. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_media_type_extension[strategy0].raw +0 -0
  505. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_media_type_extension[strategy1].raw +0 -0
  506. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_oversize_text[Open API 3.0].raw +0 -0
  507. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_schema_patches[patch0-expected0].raw +0 -0
  508. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_schema_patches[patch1-expected1].raw +0 -0
  509. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_schema_patches[patch2-expected2].raw +0 -0
  510. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/__snapshots__/test_extensions/test_unknown_extension_in_cli[Open API 3.0].raw +0 -0
  511. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/conftest.py +0 -0
  512. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/test_auth.py +0 -0
  513. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/test_ci.py +0 -0
  514. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/test_cli.py +0 -0
  515. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/test_extensions.py +0 -0
  516. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/test_report.py +0 -0
  517. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/test_serialization.py +0 -0
  518. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/service/test_usage.py +0 -0
  519. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/graphql/__snapshots__/test_basic/test_schema_error[ntype Query {n 123(created Int!) Int!n}-.whatever].raw +0 -0
  520. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/graphql/__snapshots__/test_basic/test_schema_error[ntype Query {n func(created Unknown!) Int!n}-.gql].raw +0 -0
  521. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/graphql/__snapshots__/test_custom_scalars/test_built_in_scalars_in_cli.raw +0 -0
  522. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/graphql/__snapshots__/test_custom_scalars/test_custom_scalar_in_cli.raw +0 -0
  523. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/graphql/test_basic.py +0 -0
  524. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/graphql/test_custom_scalars.py +0 -0
  525. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/graphql/test_pytest.py +0 -0
  526. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/__snapshots__/test_examples/test_network_error_with_flaky_generation.raw +0 -0
  527. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/__snapshots__/test_media_types/test_explicit_example_with_custom_media_type.raw +0 -0
  528. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/blank.pdf +0 -0
  529. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/conftest.py +0 -0
  530. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/parameters/test_forms.py +0 -0
  531. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/parameters/test_non_payload.py +0 -0
  532. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/parameters/test_simple_payloads.py +0 -0
  533. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/test_examples.py +0 -0
  534. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/test_expressions.py +0 -0
  535. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/test_hypothesis.py +0 -0
  536. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/test_links.py +0 -0
  537. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/test_media_types.py +0 -0
  538. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/test_negative.py +0 -0
  539. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/test_parameters.py +0 -0
  540. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/test_schemas.py +0 -0
  541. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/test_security.py +0 -0
  542. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/test_serializing.py +0 -0
  543. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/test_stateful.py +0 -0
  544. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/test_utils.py +0 -0
  545. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/specs/openapi/test_validation.py +0 -0
  546. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_app.py +0 -0
  547. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_asgi.py +0 -0
  548. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_async.py +0 -0
  549. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_common_parameters.py +0 -0
  550. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_converter.py +0 -0
  551. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_direct_access.py +0 -0
  552. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_errors.py +0 -0
  553. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_examples.py +0 -0
  554. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_filters.py +0 -0
  555. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_fixups.py +0 -0
  556. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_hypothesis.py +0 -0
  557. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_internal.py +0 -0
  558. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_lazy.py +0 -0
  559. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_package.py +0 -0
  560. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_parameters.py +0 -0
  561. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_parametrization.py +0 -0
  562. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_petstore.py +0 -0
  563. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_pytest.py +0 -0
  564. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_rate_limit.py +0 -0
  565. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_recoverable_errors.py +0 -0
  566. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_required.py +0 -0
  567. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_sanitizing_output.py +0 -0
  568. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_schemas.py +0 -0
  569. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_serialization.py +0 -0
  570. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_stateful.py +0 -0
  571. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_unittest.py +0 -0
  572. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_utils.py +0 -0
  573. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/test_wsgi.py +0 -0
  574. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/transports/test_content_types.py +0 -0
  575. {schemathesis-3.27.1 → schemathesis-3.28.0}/test/utils.py +0 -0
  576. {schemathesis-3.27.1 → schemathesis-3.28.0}/test-corpus/test_corpus.py +0 -0
  577. {schemathesis-3.27.1 → schemathesis-3.28.0}/test_server.sh +0 -0
  578. {schemathesis-3.27.1 → schemathesis-3.28.0}/tox.ini +0 -0
@@ -83,6 +83,6 @@ jobs:
83
83
  run: python -m tox
84
84
 
85
85
  - name: Upload coverage to Codecov
86
- uses: codecov/codecov-action@v4.3.0
86
+ uses: codecov/codecov-action@v4.3.1
87
87
  with:
88
88
  token: ${{ secrets.CODECOV_TOKEN }}
@@ -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.2
41
+ rev: v0.4.3
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.2
46
+ rev: v0.4.3
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.27.1
3
+ Version: 3.28.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
@@ -77,7 +77,7 @@ Requires-Dist: trustme<1.0,>=0.9.0; extra == 'tests'
77
77
  Description-Content-Type: text/markdown
78
78
 
79
79
  <p align="center">
80
- <em>Schemathesis: catch crashes, validate specs, and save time</em>
80
+ <em>Schemathesis: Supercharge your API testing, catch bugs, and ensure compliance</em>
81
81
  </p>
82
82
 
83
83
  <p align="center">
@@ -109,29 +109,34 @@ Description-Content-Type: text/markdown
109
109
 
110
110
  ---
111
111
 
112
- ## Why Schemathesis?
112
+ ## What is Schemathesis?
113
113
 
114
- Schemathesis is a tool that automates your API testing to catch crashes and spec violations. Built on top of the widely-used <a href="https://hypothesis.works/" target="_blank">Hypothesis</a> framework for property-based testing, it offers the following advantages:
114
+ Schemathesis is a tool that levels-up your API testing by automating the process of finding crashes, uncovering bugs, and validating spec compliance. With Schemathesis, you can:
115
115
 
116
- 🕒 **Time-Saving**
116
+ 🎯 **Catch Hard-to-Find Bugs**
117
117
 
118
- Automatically generates test cases, freeing you from manual test writing.
118
+ - Uncover hidden crashes and edge cases that manual testing might miss
119
+ - Identify spec violations and ensure your API adheres to its defined contract
119
120
 
120
- 🔍 **Comprehensive**
121
+ **Accelerate Testing Cycles**
121
122
 
122
- Utilizes fuzzing techniques to probe both common and edge-case scenarios, including those you might overlook.
123
+ - Automatically generate a wide range of test cases based on your API schema
124
+ - Save time and effort by eliminating the need for manual test case creation
123
125
 
124
- 🛠️ **Flexible**
126
+ 🧩 **Integrate Seamlessly**
125
127
 
126
- Supports OpenAPI, GraphQL, and can work even with partially complete schemas. Only the parts describing data generation or responses are required.
128
+ - Works with popular API formats such as OpenAPI, GraphQL.
129
+ - Easily integrate into your existing testing pipeline and CI/CD workflows
127
130
 
128
- 🎛️ **Customizable**
131
+ 🔧 **Customize and Extend**
129
132
 
130
- Customize the framework by writing Python extensions to modify almost any aspect of the testing process.
133
+ - Tune the testing process to your specific requirements using Python extensions
134
+ - Modify and enhance various aspects of the testing flow to suit your needs with rich configuration options
131
135
 
132
- 🔄 **Reproducible**
136
+ 📊 **Gain Valuable Insights**
133
137
 
134
- Generates code samples to help you quickly replicate and investigate any failing test cases.
138
+ - Get detailed reports and actionable insights to help you identify and fix issues quickly
139
+ - Reproduce failing test cases effortlessly with generated code samples and cURL commands
135
140
 
136
141
  ## Quick Demo
137
142
 
@@ -309,6 +314,24 @@ This includes:
309
314
 
310
315
  To discuss a custom support arrangement that best suits your organization, please contact our support team at <a href="mailto:support@schemathesis.io">support@schemathesis.io</a>.
311
316
 
317
+ ## Acknowledgements
318
+
319
+ Schemathesis is built on top of <a href="https://hypothesis.works/" target="_blank">Hypothesis</a>, a powerful property-based testing library for Python.
320
+
321
+ ## Who's Using Schemathesis?
322
+
323
+ Schemathesis is used by a number of project and companies, including direct usage or integration into other tools:
324
+
325
+ - Abstract Machines ([Magistrala](https://github.com/absmach/magistrala))
326
+ - Bundesstelle für Open Data ([smard-api](https://github.com/bundesAPI/smard-api))
327
+ - [CheckMK](https://github.com/Checkmk/checkmk)
328
+ - HXSecurity ([DongTai](https://github.com/HXSecurity/DongTai))
329
+ - Netflix ([Dispatch](https://github.com/Netflix/dispatch))
330
+ - [Pixie](https://github.com/pixie-io/pixie)
331
+ - [Qdrant](https://github.com/qdrant/qdrant)
332
+ - Spotify ([Backstage](https://github.com/backstage/backstage))
333
+ - WordPress ([OpenVerse](https://github.com/WordPress/openverse))
334
+
312
335
  ## Additional content
313
336
 
314
337
  ### Papers
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <em>Schemathesis: catch crashes, validate specs, and save time</em>
2
+ <em>Schemathesis: Supercharge your API testing, catch bugs, and ensure compliance</em>
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -31,29 +31,34 @@
31
31
 
32
32
  ---
33
33
 
34
- ## Why Schemathesis?
34
+ ## What is Schemathesis?
35
35
 
36
- Schemathesis is a tool that automates your API testing to catch crashes and spec violations. Built on top of the widely-used <a href="https://hypothesis.works/" target="_blank">Hypothesis</a> framework for property-based testing, it offers the following advantages:
36
+ Schemathesis is a tool that levels-up your API testing by automating the process of finding crashes, uncovering bugs, and validating spec compliance. With Schemathesis, you can:
37
37
 
38
- 🕒 **Time-Saving**
38
+ 🎯 **Catch Hard-to-Find Bugs**
39
39
 
40
- Automatically generates test cases, freeing you from manual test writing.
40
+ - Uncover hidden crashes and edge cases that manual testing might miss
41
+ - Identify spec violations and ensure your API adheres to its defined contract
41
42
 
42
- 🔍 **Comprehensive**
43
+ **Accelerate Testing Cycles**
43
44
 
44
- Utilizes fuzzing techniques to probe both common and edge-case scenarios, including those you might overlook.
45
+ - Automatically generate a wide range of test cases based on your API schema
46
+ - Save time and effort by eliminating the need for manual test case creation
45
47
 
46
- 🛠️ **Flexible**
48
+ 🧩 **Integrate Seamlessly**
47
49
 
48
- Supports OpenAPI, GraphQL, and can work even with partially complete schemas. Only the parts describing data generation or responses are required.
50
+ - Works with popular API formats such as OpenAPI, GraphQL.
51
+ - Easily integrate into your existing testing pipeline and CI/CD workflows
49
52
 
50
- 🎛️ **Customizable**
53
+ 🔧 **Customize and Extend**
51
54
 
52
- Customize the framework by writing Python extensions to modify almost any aspect of the testing process.
55
+ - Tune the testing process to your specific requirements using Python extensions
56
+ - Modify and enhance various aspects of the testing flow to suit your needs with rich configuration options
53
57
 
54
- 🔄 **Reproducible**
58
+ 📊 **Gain Valuable Insights**
55
59
 
56
- Generates code samples to help you quickly replicate and investigate any failing test cases.
60
+ - Get detailed reports and actionable insights to help you identify and fix issues quickly
61
+ - Reproduce failing test cases effortlessly with generated code samples and cURL commands
57
62
 
58
63
  ## Quick Demo
59
64
 
@@ -231,6 +236,24 @@ This includes:
231
236
 
232
237
  To discuss a custom support arrangement that best suits your organization, please contact our support team at <a href="mailto:support@schemathesis.io">support@schemathesis.io</a>.
233
238
 
239
+ ## Acknowledgements
240
+
241
+ Schemathesis is built on top of <a href="https://hypothesis.works/" target="_blank">Hypothesis</a>, a powerful property-based testing library for Python.
242
+
243
+ ## Who's Using Schemathesis?
244
+
245
+ Schemathesis is used by a number of project and companies, including direct usage or integration into other tools:
246
+
247
+ - Abstract Machines ([Magistrala](https://github.com/absmach/magistrala))
248
+ - Bundesstelle für Open Data ([smard-api](https://github.com/bundesAPI/smard-api))
249
+ - [CheckMK](https://github.com/Checkmk/checkmk)
250
+ - HXSecurity ([DongTai](https://github.com/HXSecurity/DongTai))
251
+ - Netflix ([Dispatch](https://github.com/Netflix/dispatch))
252
+ - [Pixie](https://github.com/pixie-io/pixie)
253
+ - [Qdrant](https://github.com/qdrant/qdrant)
254
+ - Spotify ([Backstage](https://github.com/backstage/backstage))
255
+ - WordPress ([OpenVerse](https://github.com/WordPress/openverse))
256
+
234
257
  ## Additional content
235
258
 
236
259
  ### Papers
@@ -139,16 +139,18 @@ To use your custom authentication mechanism in the Schemathesis CLI, you need to
139
139
  # Here goes your implementation
140
140
  ...
141
141
 
142
- Put the code above to the ``hooks.py`` file and extend your command via the ``SCHEMATHESIS_HOOKS`` environment variable:
142
+ Then put your code into a Python file (for example, ``my_file.py``) and set the ``SCHEMATHESIS_HOOKS`` environment variable to point to it:
143
143
 
144
144
  .. code:: bash
145
145
 
146
- $ SCHEMATHESIS_HOOKS=hooks
147
- $ st run ...
146
+ SCHEMATHESIS_HOOKS=my_file
147
+ st run http://127.0.0.1/openapi.yaml
148
+
149
+ That is it! Now Schemathesis will use your custom authentication mechanism for all tests.
148
150
 
149
151
  .. note::
150
152
 
151
- You can take a look at how to extend CLI :ref:`here <extend-cli>`
153
+ The registration process is the same as for any other extension, and you can find more details on how to extend Schemathesis in the :ref:`Extending Schemathesis <enabling-extensions>` section.
152
154
 
153
155
  Using in Python tests
154
156
  ~~~~~~~~~~~~~~~~~~~~~
@@ -1,9 +1,31 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
- :version:`Unreleased <v3.27.1...HEAD>` - TBD
4
+ :version:`Unreleased <v3.28.0...HEAD>` - TBD
5
5
  --------------------------------------------
6
6
 
7
+ .. _v3.28.0:
8
+
9
+ :version:`3.28.0 <v3.27.1...v3.28.0>` - 2024-05-10
10
+ --------------------------------------------------
11
+
12
+ **Added**
13
+
14
+ - ``Request.deserialize_body`` and ``Response.deserialize_body`` helper methods to deserialize payloads to bytes from Base 64.
15
+ - Support for ``multipart/mixed`` media type.
16
+
17
+ **Changed**
18
+
19
+ - Do not show suggestion to show a traceback on Hypothesis' ``Unsatisfiable`` error.
20
+ - Clarify error message on unsupported recursive references.
21
+ - Report more details on some internal errors instead of "Unknown Schema Error".
22
+ - Update error message on why Schemathesis can't generate test cases for some API operations.
23
+
24
+ **Fixed**
25
+
26
+ - Internal error on Windows when the CLI output is redirected to a file and code samples contain non CP1252 characters.
27
+ - Properly check for nested recursive references inside combinators. This makes Schemathesis work with more schemas with recursive references.
28
+
7
29
  .. _v3.27.1:
8
30
 
9
31
  :version:`3.27.1 <v3.27.0...v3.27.1>` - 2024-04-29
@@ -531,25 +531,29 @@ Extending CLI
531
531
  -------------
532
532
 
533
533
  To fit Schemathesis to your workflows, you might want to extend it with your custom checks or setup environment before the test run.
534
- Schemathesis can load your Python code via the ``SCHEMATHESIS_HOOKS`` environment variable:
535
534
 
536
- .. code:: bash
535
+ Extensions should be placed in a separate Python module.
536
+ Then, Schemathesis should be informed about this module via the ``SCHEMATHESIS_HOOKS`` environment variable:
537
537
 
538
- $ SCHEMATHESIS_HOOKS=test.setup
539
- $ st run https://example.com/api/swagger.json
538
+ .. code:: bash
540
539
 
541
- **NOTE**. This option should be passed before the ``run`` subcommand.
540
+ export SCHEMATHESIS_HOOKS=myproject.tests.hooks
541
+ st run http://127.0.0.1/openapi.yaml
542
542
 
543
543
  Also, depending on your setup, you might need to run this command with a custom ``PYTHONPATH`` environment variable like this:
544
544
 
545
545
  .. code:: bash
546
546
 
547
- $ PYTHONPATH=$(pwd)
548
- $ SCHEMATHESIS_HOOKS=test.setup
549
- $ st run https://example.com/api/swagger.json
547
+ export PYTHONPATH=$(pwd)
548
+ export SCHEMATHESIS_HOOKS=myproject.tests.hooks
549
+ st run https://example.com/api/swagger.json
550
550
 
551
551
  The passed value will be treated as an importable Python path and imported before the test run.
552
552
 
553
+ .. note::
554
+
555
+ You can find more details on how to extend Schemathesis in the :ref:`Extending Schemathesis <enabling-extensions>` section.
556
+
553
557
  Registering custom checks
554
558
  ~~~~~~~~~~~~~~~~~~~~~~~~~
555
559
 
@@ -97,19 +97,36 @@ They execute in the order they are defined, with globally defined hooks executin
97
97
  Be mindful of the sequence in which hooks are applied. The order can significantly impact the generated test data and subsequent API calls during testing.
98
98
  Always validate the test data and requests to ensure that hooks are applied in the intended order and manner.
99
99
 
100
- Enabling and Organizing Hooks
101
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
100
+ .. _enabling-extensions:
102
101
 
103
- For Schemathesis to utilize your custom hooks, they need to be properly organized and enabled.
102
+ Enabling Extensions
103
+ ~~~~~~~~~~~~~~~~~~~
104
104
 
105
- For **CLI** usage, hooks should be placed in a separate module.
106
- Schemathesis should be directed to this module through the ``SCHEMATHESIS_HOOKS`` environment variable:
105
+ For Schemathesis to utilize your custom hooks or other extensions, they need to be properly enabled.
106
+
107
+ For **CLI** usage, extensions should be placed in a separate Python module.
108
+ Then, Schemathesis should be informed about this module via the ``SCHEMATHESIS_HOOKS`` environment variable:
107
109
 
108
110
  .. code:: bash
109
111
 
110
- SCHEMATHESIS_HOOKS=myproject.tests.hooks
112
+ export SCHEMATHESIS_HOOKS=myproject.tests.hooks
111
113
  st run http://127.0.0.1/openapi.yaml
112
114
 
115
+ Also, depending on your setup, you might need to run this command with a custom ``PYTHONPATH`` environment variable like this:
116
+
117
+ .. code:: bash
118
+
119
+ export PYTHONPATH=$(pwd)
120
+ export SCHEMATHESIS_HOOKS=myproject.tests.hooks
121
+ st run https://example.com/api/swagger.json
122
+
123
+ In the example above, the module is located at ``myproject/tests/hooks.py`` and the environment variable contains
124
+ a path that could be used as an import in Python.
125
+
126
+ .. note::
127
+
128
+ The name of the module is arbitrary but make sure it is a valid Python module name. Usually it is sufficient to put all your extensions in the ``hooks.py`` file in the current directory.
129
+
113
130
  If you're using Schemathesis in Python tests, ensure to define your hooks in the test setup code.
114
131
 
115
132
  Filtering Data
@@ -1,18 +1,40 @@
1
1
  Welcome to Schemathesis!
2
2
  ========================
3
3
 
4
- Schemathesis is a tool that automates API testing by leveraging API specs as a blueprints for generating test cases.
4
+ Schemathesis is a tool that levels-up your API testing by leveraging API specs as a blueprints for generating test cases.
5
5
  It focuses on testing for general properties — such as ensuring no input leads to server errors and all responses adhere to the API spec — rather than just checking specific input-output combinations.
6
6
 
7
7
  This approach broadens your testing suite's capability to detect a wide range of potential issues, from trivial bugs to critical vulnerabilities.
8
8
 
9
- Built on top of the widely-used `Hypothesis <http://hypothesis.works/>`_ framework for property-based testing, it offers the following advantages:
9
+ With Schemathesis, you can:
10
10
 
11
- - 🕒 **Time-Saving**: Automatically generates test cases, freeing you from manual test writing.
12
- - 🔍 **Comprehensive**: Utilizes fuzzing techniques for both common and edge-case scenarios.
13
- - 🛠️ **Flexible**: Supports OpenAPI and GraphQL. Operates even with partially complete schemas.
14
- - 🎛️ **Customizable**: Extend almost any aspect of the testing process through Python.
15
- - 🔄 **Reproducible**: Generates code samples for quick replication of any failing test cases.
11
+ 🎯 **Catch Hard-to-Find Bugs**
12
+
13
+ - Uncover hidden crashes and edge cases that manual testing might miss
14
+ - Identify spec violations and ensure your API adheres to its defined contract
15
+
16
+ ⚡ **Accelerate Testing Cycles**
17
+
18
+ - Automatically generate a wide range of test cases based on your API schema
19
+ - Save time and effort by eliminating the need for manual test case creation
20
+
21
+ 🧩 **Integrate Seamlessly**
22
+
23
+ - Works with popular API formats such as OpenAPI, GraphQL.
24
+ - Easily integrate into your existing testing pipeline and CI/CD workflows
25
+
26
+ 🔧 **Customize and Extend**
27
+
28
+ - Tune the testing process to your specific requirements using Python extensions
29
+ - Modify and enhance various aspects of the testing flow to suit your needs with rich configuration options
30
+
31
+ 📊 **Gain Valuable Insights**
32
+
33
+ - Get detailed reports and actionable insights to help you identify and fix issues quickly
34
+ - Reproduce failing test cases effortlessly with generated code samples and cURL commands
35
+
36
+ How it works?
37
+ -------------
16
38
 
17
39
  Here’s a simplified overview of how Schemathesis works:
18
40
 
@@ -18,7 +18,7 @@ greenlet==3.0.1
18
18
  # via sqlalchemy
19
19
  itsdangerous==2.1.2
20
20
  # via flask
21
- jinja2==3.1.3
21
+ jinja2==3.1.4
22
22
  # via flask
23
23
  markupsafe==2.1.3
24
24
  # via
@@ -28,5 +28,5 @@ sqlalchemy==1.4.50
28
28
  # via
29
29
  # -r requirements-app.in
30
30
  # flask-sqlalchemy
31
- werkzeug==3.0.1
31
+ werkzeug==3.0.3
32
32
  # via flask
@@ -114,7 +114,7 @@ typing-extensions==4.8.0
114
114
  # via schemathesis
115
115
  urllib3==2.1.0
116
116
  # via requests
117
- werkzeug==3.0.1
117
+ werkzeug==3.0.3
118
118
  # via schemathesis
119
119
  yarl==1.9.3
120
120
  # via schemathesis
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "schemathesis"
7
- version = "3.27.1"
7
+ version = "3.28.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" }]
@@ -55,6 +55,8 @@ class ExecutionContext:
55
55
  report: ServiceReportContext | FileReportContext | None = None
56
56
  probes: list[ProbeRun] | None = None
57
57
  analysis: Result[AnalysisResult, Exception] | None = None
58
+ # Special flag to display a warning about Windows-specific encoding issue
59
+ encountered_windows_encoding_issue: bool = False
58
60
 
59
61
  @deprecated_property(removed_in="4.0", replacement="show_trace")
60
62
  def show_errors_tracebacks(self) -> bool:
@@ -1,19 +1,18 @@
1
1
  from __future__ import annotations
2
2
 
3
- import base64
4
3
  import platform
5
4
  import textwrap
6
5
  from dataclasses import dataclass, field
7
- from typing import TYPE_CHECKING
6
+ from typing import TYPE_CHECKING, cast
8
7
 
9
8
  from junit_xml import TestCase, TestSuite, to_xml_report_file
10
9
 
10
+ from ..exceptions import RuntimeErrorType, prepare_response_payload
11
11
  from ..models import Status
12
12
  from ..runner import events
13
13
  from ..runner.serialization import SerializedCheck, SerializedError
14
- from ..exceptions import prepare_response_payload, RuntimeErrorType
15
14
  from .handlers import EventHandler
16
- from .reporting import group_by_case, TEST_CASE_ID_TITLE, split_traceback, get_runtime_error_suggestion
15
+ from .reporting import TEST_CASE_ID_TITLE, get_runtime_error_suggestion, group_by_case, split_traceback
17
16
 
18
17
  if TYPE_CHECKING:
19
18
  from click.utils import LazyFile
@@ -65,14 +64,15 @@ def build_failure_message(idx: int, code_sample: str, checks: list[SerializedChe
65
64
  status_code = check.response.status_code
66
65
  reason = get_reason(status_code)
67
66
  message += f"\n[{check.response.status_code}] {reason}:\n"
68
- response_body = check.response.body
69
- if response_body is not None:
70
- if not response_body:
67
+ if check.response.body is not None:
68
+ if not check.response.body:
71
69
  message += "\n <EMPTY>\n"
72
70
  else:
73
71
  encoding = check.response.encoding or "utf8"
74
72
  try:
75
- payload = base64.b64decode(response_body).decode(encoding)
73
+ # Checked that is not None
74
+ body = cast(bytes, check.response.deserialize_body())
75
+ payload = body.decode(encoding)
76
76
  payload = prepare_response_payload(payload)
77
77
  payload = textwrap.indent(f"\n`{payload}`\n", prefix=" ")
78
78
  message += payload
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- import base64
4
3
  import os
5
4
  import platform
6
5
  import shutil
@@ -200,6 +199,7 @@ def display_full_traceback_message(error: SerializedError) -> bool:
200
199
  "hypothesis.errors.FailedHealthCheck",
201
200
  "hypothesis.errors.InvalidArgument: Scalar ",
202
201
  "hypothesis.errors.InvalidArgument: min_size=",
202
+ "hypothesis.errors.Unsatisfiable",
203
203
  )
204
204
  )
205
205
  and "can never generate an example, because min_size is larger than Hypothesis supports." not in error.exception
@@ -303,23 +303,38 @@ def display_failures_for_single_test(context: ExecutionContext, result: Serializ
303
303
  reason = get_reason(status_code)
304
304
  response = bold(f"[{check.response.status_code}] {reason}")
305
305
  click.echo(f"\n{response}:")
306
- response_body = check.response.body
307
- if response_body is not None:
308
- if not response_body:
306
+ if check.response.body is not None:
307
+ if not check.response.body:
309
308
  click.echo("\n <EMPTY>")
310
309
  else:
311
310
  encoding = check.response.encoding or "utf8"
312
311
  try:
313
- payload = base64.b64decode(response_body).decode(encoding)
312
+ # Checked that is not None
313
+ body = cast(bytes, check.response.deserialize_body())
314
+ payload = body.decode(encoding)
314
315
  payload = prepare_response_payload(payload)
315
316
  payload = textwrap.indent(f"\n`{payload}`", prefix=" ")
316
317
  click.echo(payload)
317
318
  except UnicodeDecodeError:
318
319
  click.echo("\n <BINARY>")
319
320
 
320
- click.echo(
321
- f"\n{bold('Reproduce with')}: \n\n {code_sample}\n",
322
- )
321
+ try:
322
+ click.echo(
323
+ f"\n{bold('Reproduce with')}: \n\n {code_sample}\n",
324
+ )
325
+ except UnicodeEncodeError:
326
+ # On Windows it may fail when redirecting the output to a file
327
+ # because it uses a different encoding than the console encoding and the default
328
+ # is cp1252, which doesn't support some Unicode characters.
329
+ # In this case, display a stub message and set a flag to display a warning at the end
330
+ if platform.system() != "Windows":
331
+ raise
332
+ click.echo(
333
+ f"\n{bold('Reproduce with')}: \n\n"
334
+ " CAN NOT DISPLAY THIS CODE SAMPLE DUE TO TERMINAL LIMITATIONS.\n"
335
+ " SEE DETAILS AT THE END OF THE OUTPUT\n",
336
+ )
337
+ context.encountered_windows_encoding_issue = True
323
338
 
324
339
 
325
340
  def display_application_logs(context: ExecutionContext, event: events.Finished) -> None:
@@ -465,6 +480,17 @@ def display_statistic(context: ExecutionContext, event: events.Finished) -> None
465
480
  seed_option = f"`--hypothesis-seed={context.seed}`"
466
481
  click.secho(f"\n{bold('Note')}: To replicate these test failures, rerun with {bold(seed_option)}")
467
482
 
483
+ if context.encountered_windows_encoding_issue:
484
+ click.echo()
485
+ title = click.style("WARNING:", bold=True, fg="yellow")
486
+ name = click.style("PYTHONIOENCODING", bold=True)
487
+ value = click.style("utf8", bold=True)
488
+ warning = (
489
+ "Some code samples could not be displayed due to terminal limitations on Windows.\n"
490
+ f"To resolve this set the '{name}' environment variable to '{value}' and rerun your command."
491
+ )
492
+ click.secho(f"{title} {warning}")
493
+
468
494
  if context.report is not None and not context.is_interrupted:
469
495
  if isinstance(context.report, FileReportContext):
470
496
  click.echo()
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- import base64
4
3
  from itertools import groupby
5
4
  from typing import Callable, Generator
6
5
 
@@ -22,11 +21,10 @@ def group_by_case(
22
21
 
23
22
 
24
23
  def _by_unique_code_sample(check: SerializedCheck, code_sample_style: CodeSampleStyle) -> str:
25
- request_body = base64.b64decode(check.example.body).decode() if check.example.body is not None else None
26
24
  return code_sample_style.generate(
27
25
  method=check.example.method,
28
26
  url=check.example.url,
29
- body=request_body,
27
+ body=check.example.deserialize_body(),
30
28
  headers=check.example.headers,
31
29
  verify=check.example.verify,
32
30
  extra_headers=check.example.extra_headers,
@@ -336,6 +336,12 @@ class DeadlineExceeded(Exception):
336
336
  )
337
337
 
338
338
 
339
+ class RecursiveReferenceError(Exception):
340
+ """Recursive reference is impossible to resolve due to current limitations."""
341
+
342
+ __module__ = "builtins"
343
+
344
+
339
345
  @enum.unique
340
346
  class RuntimeErrorType(str, enum.Enum):
341
347
  # Connection related issues
@@ -354,6 +360,7 @@ class RuntimeErrorType(str, enum.Enum):
354
360
 
355
361
  SCHEMA_BODY_IN_GET_REQUEST = "schema_body_in_get_request"
356
362
  SCHEMA_INVALID_REGULAR_EXPRESSION = "schema_invalid_regular_expression"
363
+ SCHEMA_UNSUPPORTED = "schema_unsupported"
357
364
  SCHEMA_GENERIC = "schema_generic"
358
365
 
359
366
  SERIALIZATION_NOT_POSSIBLE = "serialization_not_possible"
@@ -367,6 +374,7 @@ class RuntimeErrorType(str, enum.Enum):
367
374
  return self not in (
368
375
  RuntimeErrorType.SCHEMA_BODY_IN_GET_REQUEST,
369
376
  RuntimeErrorType.SCHEMA_INVALID_REGULAR_EXPRESSION,
377
+ RuntimeErrorType.SCHEMA_UNSUPPORTED,
370
378
  RuntimeErrorType.SCHEMA_GENERIC,
371
379
  RuntimeErrorType.SERIALIZATION_NOT_POSSIBLE,
372
380
  )
@@ -50,11 +50,11 @@ from .exceptions import (
50
50
  from .generation import DataGenerationMethod, GenerationConfig, generate_random_case_id
51
51
  from .hooks import GLOBAL_HOOK_DISPATCHER, HookContext, HookDispatcher, dispatch
52
52
  from .internal.copy import fast_deepcopy
53
- from .internal.deprecation import deprecated_property, deprecated_function
53
+ from .internal.deprecation import deprecated_function, deprecated_property
54
54
  from .parameters import Parameter, ParameterSet, PayloadAlternatives
55
55
  from .sanitization import sanitize_request, sanitize_response
56
56
  from .serializers import Serializer
57
- from .transports import ASGITransport, RequestsTransport, WSGITransport, serialize_payload
57
+ from .transports import ASGITransport, RequestsTransport, WSGITransport, serialize_payload, deserialize_payload
58
58
  from .types import Body, Cookies, FormData, Headers, NotSet, PathParameters, Query
59
59
 
60
60
  if TYPE_CHECKING:
@@ -854,6 +854,14 @@ class Request:
854
854
  body=serialize_payload(body) if body is not None else body,
855
855
  )
856
856
 
857
+ def deserialize_body(self) -> bytes | None:
858
+ """Deserialize the request body.
859
+
860
+ `Request` should be serializable to JSON, therefore body is encoded as base64 string
861
+ to support arbitrary binary data.
862
+ """
863
+ return deserialize_payload(self.body)
864
+
857
865
 
858
866
  @dataclass(repr=False)
859
867
  class Response:
@@ -923,6 +931,14 @@ class Response:
923
931
  verify=True,
924
932
  )
925
933
 
934
+ def deserialize_body(self) -> bytes | None:
935
+ """Deserialize the response body.
936
+
937
+ `Response` should be serializable to JSON, therefore body is encoded as base64 string
938
+ to support arbitrary binary data.
939
+ """
940
+ return deserialize_payload(self.body)
941
+
926
942
 
927
943
  @dataclass
928
944
  class Interaction: