schemathesis 3.25.5__py3-none-any.whl → 4.0.0a1__py3-none-any.whl

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 (221) hide show
  1. schemathesis/__init__.py +27 -65
  2. schemathesis/auths.py +102 -82
  3. schemathesis/checks.py +126 -46
  4. schemathesis/cli/__init__.py +11 -1766
  5. schemathesis/cli/__main__.py +4 -0
  6. schemathesis/cli/commands/__init__.py +37 -0
  7. schemathesis/cli/commands/run/__init__.py +662 -0
  8. schemathesis/cli/commands/run/checks.py +80 -0
  9. schemathesis/cli/commands/run/context.py +117 -0
  10. schemathesis/cli/commands/run/events.py +35 -0
  11. schemathesis/cli/commands/run/executor.py +138 -0
  12. schemathesis/cli/commands/run/filters.py +194 -0
  13. schemathesis/cli/commands/run/handlers/__init__.py +46 -0
  14. schemathesis/cli/commands/run/handlers/base.py +18 -0
  15. schemathesis/cli/commands/run/handlers/cassettes.py +494 -0
  16. schemathesis/cli/commands/run/handlers/junitxml.py +54 -0
  17. schemathesis/cli/commands/run/handlers/output.py +746 -0
  18. schemathesis/cli/commands/run/hypothesis.py +105 -0
  19. schemathesis/cli/commands/run/loaders.py +129 -0
  20. schemathesis/cli/{callbacks.py → commands/run/validation.py} +103 -174
  21. schemathesis/cli/constants.py +5 -52
  22. schemathesis/cli/core.py +17 -0
  23. schemathesis/cli/ext/fs.py +14 -0
  24. schemathesis/cli/ext/groups.py +55 -0
  25. schemathesis/cli/{options.py → ext/options.py} +39 -10
  26. schemathesis/cli/hooks.py +36 -0
  27. schemathesis/contrib/__init__.py +1 -3
  28. schemathesis/contrib/openapi/__init__.py +1 -3
  29. schemathesis/contrib/openapi/fill_missing_examples.py +3 -5
  30. schemathesis/core/__init__.py +58 -0
  31. schemathesis/core/compat.py +25 -0
  32. schemathesis/core/control.py +2 -0
  33. schemathesis/core/curl.py +58 -0
  34. schemathesis/core/deserialization.py +65 -0
  35. schemathesis/core/errors.py +370 -0
  36. schemathesis/core/failures.py +285 -0
  37. schemathesis/core/fs.py +19 -0
  38. schemathesis/{_lazy_import.py → core/lazy_import.py} +1 -0
  39. schemathesis/core/loaders.py +104 -0
  40. schemathesis/core/marks.py +66 -0
  41. schemathesis/{transports/content_types.py → core/media_types.py} +17 -13
  42. schemathesis/core/output/__init__.py +69 -0
  43. schemathesis/core/output/sanitization.py +197 -0
  44. schemathesis/core/rate_limit.py +60 -0
  45. schemathesis/core/registries.py +31 -0
  46. schemathesis/{internal → core}/result.py +1 -1
  47. schemathesis/core/transforms.py +113 -0
  48. schemathesis/core/transport.py +108 -0
  49. schemathesis/core/validation.py +38 -0
  50. schemathesis/core/version.py +7 -0
  51. schemathesis/engine/__init__.py +30 -0
  52. schemathesis/engine/config.py +59 -0
  53. schemathesis/engine/context.py +119 -0
  54. schemathesis/engine/control.py +36 -0
  55. schemathesis/engine/core.py +157 -0
  56. schemathesis/engine/errors.py +394 -0
  57. schemathesis/engine/events.py +337 -0
  58. schemathesis/engine/phases/__init__.py +66 -0
  59. schemathesis/{cli → engine/phases}/probes.py +63 -70
  60. schemathesis/engine/phases/stateful/__init__.py +65 -0
  61. schemathesis/engine/phases/stateful/_executor.py +326 -0
  62. schemathesis/engine/phases/stateful/context.py +85 -0
  63. schemathesis/engine/phases/unit/__init__.py +174 -0
  64. schemathesis/engine/phases/unit/_executor.py +321 -0
  65. schemathesis/engine/phases/unit/_pool.py +74 -0
  66. schemathesis/engine/recorder.py +241 -0
  67. schemathesis/errors.py +31 -0
  68. schemathesis/experimental/__init__.py +18 -14
  69. schemathesis/filters.py +103 -14
  70. schemathesis/generation/__init__.py +21 -37
  71. schemathesis/generation/case.py +190 -0
  72. schemathesis/generation/coverage.py +931 -0
  73. schemathesis/generation/hypothesis/__init__.py +30 -0
  74. schemathesis/generation/hypothesis/builder.py +585 -0
  75. schemathesis/generation/hypothesis/examples.py +50 -0
  76. schemathesis/generation/hypothesis/given.py +66 -0
  77. schemathesis/generation/hypothesis/reporting.py +14 -0
  78. schemathesis/generation/hypothesis/strategies.py +16 -0
  79. schemathesis/generation/meta.py +115 -0
  80. schemathesis/generation/modes.py +28 -0
  81. schemathesis/generation/overrides.py +96 -0
  82. schemathesis/generation/stateful/__init__.py +20 -0
  83. schemathesis/{stateful → generation/stateful}/state_machine.py +68 -81
  84. schemathesis/generation/targets.py +69 -0
  85. schemathesis/graphql/__init__.py +15 -0
  86. schemathesis/graphql/checks.py +115 -0
  87. schemathesis/graphql/loaders.py +131 -0
  88. schemathesis/hooks.py +99 -67
  89. schemathesis/openapi/__init__.py +13 -0
  90. schemathesis/openapi/checks.py +412 -0
  91. schemathesis/openapi/generation/__init__.py +0 -0
  92. schemathesis/openapi/generation/filters.py +63 -0
  93. schemathesis/openapi/loaders.py +178 -0
  94. schemathesis/pytest/__init__.py +5 -0
  95. schemathesis/pytest/control_flow.py +7 -0
  96. schemathesis/pytest/lazy.py +273 -0
  97. schemathesis/pytest/loaders.py +12 -0
  98. schemathesis/{extra/pytest_plugin.py → pytest/plugin.py} +106 -127
  99. schemathesis/python/__init__.py +0 -0
  100. schemathesis/python/asgi.py +12 -0
  101. schemathesis/python/wsgi.py +12 -0
  102. schemathesis/schemas.py +537 -261
  103. schemathesis/specs/graphql/__init__.py +0 -1
  104. schemathesis/specs/graphql/_cache.py +25 -0
  105. schemathesis/specs/graphql/nodes.py +1 -0
  106. schemathesis/specs/graphql/scalars.py +7 -5
  107. schemathesis/specs/graphql/schemas.py +215 -187
  108. schemathesis/specs/graphql/validation.py +11 -18
  109. schemathesis/specs/openapi/__init__.py +7 -1
  110. schemathesis/specs/openapi/_cache.py +122 -0
  111. schemathesis/specs/openapi/_hypothesis.py +146 -165
  112. schemathesis/specs/openapi/checks.py +565 -67
  113. schemathesis/specs/openapi/converter.py +33 -6
  114. schemathesis/specs/openapi/definitions.py +11 -18
  115. schemathesis/specs/openapi/examples.py +153 -39
  116. schemathesis/specs/openapi/expressions/__init__.py +37 -2
  117. schemathesis/specs/openapi/expressions/context.py +4 -6
  118. schemathesis/specs/openapi/expressions/extractors.py +23 -0
  119. schemathesis/specs/openapi/expressions/lexer.py +20 -18
  120. schemathesis/specs/openapi/expressions/nodes.py +38 -14
  121. schemathesis/specs/openapi/expressions/parser.py +26 -5
  122. schemathesis/specs/openapi/formats.py +45 -0
  123. schemathesis/specs/openapi/links.py +65 -165
  124. schemathesis/specs/openapi/media_types.py +32 -0
  125. schemathesis/specs/openapi/negative/__init__.py +7 -3
  126. schemathesis/specs/openapi/negative/mutations.py +24 -8
  127. schemathesis/specs/openapi/parameters.py +46 -30
  128. schemathesis/specs/openapi/patterns.py +137 -0
  129. schemathesis/specs/openapi/references.py +47 -57
  130. schemathesis/specs/openapi/schemas.py +483 -367
  131. schemathesis/specs/openapi/security.py +25 -7
  132. schemathesis/specs/openapi/serialization.py +11 -6
  133. schemathesis/specs/openapi/stateful/__init__.py +185 -73
  134. schemathesis/specs/openapi/utils.py +6 -1
  135. schemathesis/transport/__init__.py +104 -0
  136. schemathesis/transport/asgi.py +26 -0
  137. schemathesis/transport/prepare.py +99 -0
  138. schemathesis/transport/requests.py +221 -0
  139. schemathesis/{_xml.py → transport/serialization.py} +143 -28
  140. schemathesis/transport/wsgi.py +165 -0
  141. schemathesis-4.0.0a1.dist-info/METADATA +297 -0
  142. schemathesis-4.0.0a1.dist-info/RECORD +152 -0
  143. {schemathesis-3.25.5.dist-info → schemathesis-4.0.0a1.dist-info}/WHEEL +1 -1
  144. {schemathesis-3.25.5.dist-info → schemathesis-4.0.0a1.dist-info}/entry_points.txt +1 -1
  145. schemathesis/_compat.py +0 -74
  146. schemathesis/_dependency_versions.py +0 -17
  147. schemathesis/_hypothesis.py +0 -246
  148. schemathesis/_override.py +0 -49
  149. schemathesis/cli/cassettes.py +0 -375
  150. schemathesis/cli/context.py +0 -55
  151. schemathesis/cli/debug.py +0 -26
  152. schemathesis/cli/handlers.py +0 -16
  153. schemathesis/cli/junitxml.py +0 -43
  154. schemathesis/cli/output/__init__.py +0 -1
  155. schemathesis/cli/output/default.py +0 -765
  156. schemathesis/cli/output/short.py +0 -40
  157. schemathesis/cli/sanitization.py +0 -20
  158. schemathesis/code_samples.py +0 -149
  159. schemathesis/constants.py +0 -55
  160. schemathesis/contrib/openapi/formats/__init__.py +0 -9
  161. schemathesis/contrib/openapi/formats/uuid.py +0 -15
  162. schemathesis/contrib/unique_data.py +0 -41
  163. schemathesis/exceptions.py +0 -560
  164. schemathesis/extra/_aiohttp.py +0 -27
  165. schemathesis/extra/_flask.py +0 -10
  166. schemathesis/extra/_server.py +0 -17
  167. schemathesis/failures.py +0 -209
  168. schemathesis/fixups/__init__.py +0 -36
  169. schemathesis/fixups/fast_api.py +0 -41
  170. schemathesis/fixups/utf8_bom.py +0 -29
  171. schemathesis/graphql.py +0 -4
  172. schemathesis/internal/__init__.py +0 -7
  173. schemathesis/internal/copy.py +0 -13
  174. schemathesis/internal/datetime.py +0 -5
  175. schemathesis/internal/deprecation.py +0 -34
  176. schemathesis/internal/jsonschema.py +0 -35
  177. schemathesis/internal/transformation.py +0 -15
  178. schemathesis/internal/validation.py +0 -34
  179. schemathesis/lazy.py +0 -361
  180. schemathesis/loaders.py +0 -120
  181. schemathesis/models.py +0 -1231
  182. schemathesis/parameters.py +0 -86
  183. schemathesis/runner/__init__.py +0 -555
  184. schemathesis/runner/events.py +0 -309
  185. schemathesis/runner/impl/__init__.py +0 -3
  186. schemathesis/runner/impl/core.py +0 -986
  187. schemathesis/runner/impl/solo.py +0 -90
  188. schemathesis/runner/impl/threadpool.py +0 -400
  189. schemathesis/runner/serialization.py +0 -411
  190. schemathesis/sanitization.py +0 -248
  191. schemathesis/serializers.py +0 -315
  192. schemathesis/service/__init__.py +0 -18
  193. schemathesis/service/auth.py +0 -11
  194. schemathesis/service/ci.py +0 -201
  195. schemathesis/service/client.py +0 -100
  196. schemathesis/service/constants.py +0 -38
  197. schemathesis/service/events.py +0 -57
  198. schemathesis/service/hosts.py +0 -107
  199. schemathesis/service/metadata.py +0 -46
  200. schemathesis/service/models.py +0 -49
  201. schemathesis/service/report.py +0 -255
  202. schemathesis/service/serialization.py +0 -184
  203. schemathesis/service/usage.py +0 -65
  204. schemathesis/specs/graphql/loaders.py +0 -344
  205. schemathesis/specs/openapi/filters.py +0 -49
  206. schemathesis/specs/openapi/loaders.py +0 -667
  207. schemathesis/specs/openapi/stateful/links.py +0 -92
  208. schemathesis/specs/openapi/validation.py +0 -25
  209. schemathesis/stateful/__init__.py +0 -133
  210. schemathesis/targets.py +0 -45
  211. schemathesis/throttling.py +0 -41
  212. schemathesis/transports/__init__.py +0 -5
  213. schemathesis/transports/auth.py +0 -15
  214. schemathesis/transports/headers.py +0 -35
  215. schemathesis/transports/responses.py +0 -52
  216. schemathesis/types.py +0 -35
  217. schemathesis/utils.py +0 -169
  218. schemathesis-3.25.5.dist-info/METADATA +0 -356
  219. schemathesis-3.25.5.dist-info/RECORD +0 -134
  220. /schemathesis/{extra → cli/ext}/__init__.py +0 -0
  221. {schemathesis-3.25.5.dist-info → schemathesis-4.0.0a1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,297 @@
1
+ Metadata-Version: 2.4
2
+ Name: schemathesis
3
+ Version: 4.0.0a1
4
+ Summary: Property-based testing framework for Open API and GraphQL based apps
5
+ Project-URL: Documentation, https://schemathesis.readthedocs.io/en/stable/
6
+ Project-URL: Changelog, https://schemathesis.readthedocs.io/en/stable/changelog.html
7
+ Project-URL: Bug Tracker, https://github.com/schemathesis/schemathesis
8
+ Project-URL: Funding, https://github.com/sponsors/Stranger6667
9
+ Project-URL: Source Code, https://github.com/schemathesis/schemathesis
10
+ Author-email: Dmitry Dygalo <dmitry@dygalo.dev>
11
+ Maintainer-email: Dmitry Dygalo <dmitry@dygalo.dev>
12
+ License-Expression: MIT
13
+ License-File: LICENSE
14
+ Keywords: graphql,hypothesis,openapi,pytest,testing
15
+ Classifier: Development Status :: 5 - Production/Stable
16
+ Classifier: Environment :: Console
17
+ Classifier: Framework :: Hypothesis
18
+ Classifier: Framework :: Pytest
19
+ Classifier: Intended Audience :: Developers
20
+ Classifier: License :: OSI Approved :: MIT License
21
+ Classifier: Operating System :: OS Independent
22
+ Classifier: Programming Language :: Python :: 3 :: Only
23
+ Classifier: Programming Language :: Python :: 3.9
24
+ Classifier: Programming Language :: Python :: 3.10
25
+ Classifier: Programming Language :: Python :: 3.11
26
+ Classifier: Programming Language :: Python :: 3.12
27
+ Classifier: Programming Language :: Python :: 3.13
28
+ Classifier: Programming Language :: Python :: Implementation :: CPython
29
+ Classifier: Topic :: Software Development :: Testing
30
+ Requires-Python: >=3.9
31
+ Requires-Dist: backoff<3.0,>=2.1.2
32
+ Requires-Dist: click<9.0,>=8.0
33
+ Requires-Dist: colorama<1.0,>=0.4
34
+ Requires-Dist: harfile<1.0,>=0.3.0
35
+ Requires-Dist: httpx<1.0,>=0.22.0
36
+ Requires-Dist: hypothesis-graphql<1,>=0.11.1
37
+ Requires-Dist: hypothesis-jsonschema<0.24,>=0.23.1
38
+ Requires-Dist: hypothesis<7,>=6.108.0
39
+ Requires-Dist: jsonschema[format]<5.0,>=4.18.0
40
+ Requires-Dist: junit-xml<2.0,>=1.9
41
+ Requires-Dist: pyrate-limiter<4.0,>=3.0
42
+ Requires-Dist: pytest-subtests<0.15.0,>=0.11
43
+ Requires-Dist: pytest<9,>=8
44
+ Requires-Dist: pyyaml<7.0,>=5.1
45
+ Requires-Dist: requests<3,>=2.22
46
+ Requires-Dist: rich>=13.9.4
47
+ Requires-Dist: starlette-testclient<1,>=0.4.1
48
+ Requires-Dist: typing-extensions>=4.12.2
49
+ Requires-Dist: werkzeug<4,>=0.16.0
50
+ Provides-Extra: bench
51
+ Requires-Dist: pytest-codspeed==2.2.1; extra == 'bench'
52
+ Provides-Extra: cov
53
+ Requires-Dist: coverage-enable-subprocess; extra == 'cov'
54
+ Requires-Dist: coverage[toml]>=5.3; extra == 'cov'
55
+ Provides-Extra: dev
56
+ Requires-Dist: aiohttp<4.0,>=3.9.1; extra == 'dev'
57
+ Requires-Dist: coverage-enable-subprocess; extra == 'dev'
58
+ Requires-Dist: coverage>=6; extra == 'dev'
59
+ Requires-Dist: coverage[toml]>=5.3; extra == 'dev'
60
+ Requires-Dist: fastapi>=0.86.0; extra == 'dev'
61
+ Requires-Dist: flask<3.0,>=2.1.1; extra == 'dev'
62
+ Requires-Dist: hypothesis-openapi<1,>=0.2; (python_version >= '3.10') and extra == 'dev'
63
+ Requires-Dist: pydantic>=1.10.2; extra == 'dev'
64
+ Requires-Dist: pytest-asyncio<1.0,>=0.18.0; extra == 'dev'
65
+ Requires-Dist: pytest-codspeed==2.2.1; extra == 'dev'
66
+ Requires-Dist: pytest-httpserver<2.0,>=1.0; extra == 'dev'
67
+ Requires-Dist: pytest-mock<4.0,>=3.7.0; extra == 'dev'
68
+ Requires-Dist: pytest-trio<1.0,>=0.8; extra == 'dev'
69
+ Requires-Dist: pytest-xdist<4.0,>=3; extra == 'dev'
70
+ Requires-Dist: sphinx; extra == 'dev'
71
+ Requires-Dist: sphinx-click; extra == 'dev'
72
+ Requires-Dist: sphinx-rtd-theme; extra == 'dev'
73
+ Requires-Dist: strawberry-graphql[fastapi]>=0.109.0; extra == 'dev'
74
+ Requires-Dist: syrupy<5.0,>=2; extra == 'dev'
75
+ Requires-Dist: trustme<1.0,>=0.9.0; extra == 'dev'
76
+ Provides-Extra: docs
77
+ Requires-Dist: sphinx; extra == 'docs'
78
+ Requires-Dist: sphinx-click; extra == 'docs'
79
+ Requires-Dist: sphinx-rtd-theme; extra == 'docs'
80
+ Provides-Extra: tests
81
+ Requires-Dist: aiohttp<4.0,>=3.9.1; extra == 'tests'
82
+ Requires-Dist: coverage>=6; extra == 'tests'
83
+ Requires-Dist: fastapi>=0.86.0; extra == 'tests'
84
+ Requires-Dist: flask<3.0,>=2.1.1; extra == 'tests'
85
+ Requires-Dist: hypothesis-openapi<1,>=0.2; (python_version >= '3.10') and extra == 'tests'
86
+ Requires-Dist: pydantic>=1.10.2; extra == 'tests'
87
+ Requires-Dist: pytest-asyncio<1.0,>=0.18.0; extra == 'tests'
88
+ Requires-Dist: pytest-httpserver<2.0,>=1.0; extra == 'tests'
89
+ Requires-Dist: pytest-mock<4.0,>=3.7.0; extra == 'tests'
90
+ Requires-Dist: pytest-trio<1.0,>=0.8; extra == 'tests'
91
+ Requires-Dist: pytest-xdist<4.0,>=3; extra == 'tests'
92
+ Requires-Dist: strawberry-graphql[fastapi]>=0.109.0; extra == 'tests'
93
+ Requires-Dist: syrupy<5.0,>=2; extra == 'tests'
94
+ Requires-Dist: trustme<1.0,>=0.9.0; extra == 'tests'
95
+ Description-Content-Type: text/markdown
96
+
97
+ <p align="center">
98
+ <a href="https://github.com/schemathesis/schemathesis/actions" target="_blank">
99
+ <img src="https://github.com/schemathesis/schemathesis/actions/workflows/build.yml/badge.svg" alt="Build">
100
+ </a>
101
+ <a href="https://codecov.io/gh/schemathesis/schemathesis/branch/master" target="_blank">
102
+ <img src="https://codecov.io/gh/schemathesis/schemathesis/branch/master/graph/badge.svg" alt="Coverage">
103
+ </a>
104
+ <a href="https://pypi.org/project/schemathesis/" target="_blank">
105
+ <img src="https://img.shields.io/pypi/v/schemathesis.svg" alt="Version">
106
+ </a>
107
+ <a href="https://pypi.org/project/schemathesis/" target="_blank">
108
+ <img src="https://img.shields.io/pypi/pyversions/schemathesis.svg" alt="Python versions">
109
+ </a>
110
+ <a href="https://discord.gg/R9ASRAmHnA" target="_blank">
111
+ <img src="https://img.shields.io/discord/938139740912369755" alt="Discord">
112
+ </a>
113
+ <a href="https://opensource.org/licenses/MIT" target="_blank">
114
+ <img src="https://img.shields.io/pypi/l/schemathesis.svg" alt="License">
115
+ </a>
116
+ </p>
117
+
118
+ ## Schemathesis
119
+
120
+ > ⚠️ You are viewing the Schemathesis V4 README (Work in Progress) ⚠️
121
+
122
+ > This branch is under active development, with substantial changes expected before stabilization. While V4 is fully functional and passing tests, some features are missing, and the documentation may be outdated.
123
+
124
+ > For the stable release, see the [V3 branch](https://github.com/schemathesis/schemathesis/tree/v3).
125
+
126
+ > 💡 Have feedback? Share your thoughts in [this discussion](https://github.com/schemathesis/schemathesis/discussions/2677)!
127
+
128
+ Schemathesis is an API testing tool that automatically finds crashes and validates spec compliance.
129
+
130
+ <p align="center">
131
+ <img src="https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/demo.gif" alt="Schemathesis Demo"/>
132
+ </p>
133
+
134
+ <p align="center">
135
+ <i>Finding server crashes in the Demo API.</i>
136
+ </p>
137
+
138
+ ### Highlights
139
+
140
+ 🎯 **Catches Hard-to-Find Bugs**
141
+
142
+ - Uncover hidden crashes and edge cases that manual testing might miss
143
+ - Identify spec violations and ensure your API adheres to its contract
144
+
145
+ ⚡ **Accelerates Testing Cycles**
146
+
147
+ - Automatically generate a wide range of test cases based on your API schema
148
+ - Save time by reducing the need for manual test case creation
149
+
150
+ 🧩 **Integrates Seamlessly**
151
+
152
+ - Works with popular API formats such as OpenAPI, GraphQL.
153
+ - Easily integrate into your existing CI/CD workflows.
154
+
155
+ 🔧 **Customizable and Extendable**
156
+
157
+ - Tune the testing process using Python extensions.
158
+ - Adjust the testing flow to suit your needs with rich configuration options.
159
+
160
+ 🐞 **Simplifies Debugging**
161
+
162
+ - Get detailed reports to identify and fix issues quickly.
163
+ - Reproduce failing test cases with cURL commands.
164
+
165
+ 🔬 **Proven by Research**
166
+
167
+ - Validated through academic studies on API testing automation
168
+ - Featured in [ICSE 2022 paper](https://ieeexplore.ieee.org/document/9793781) on semantics-aware fuzzing
169
+ - Recognized in [ACM survey](https://dl.acm.org/doi/10.1145/3617175) as state-of-the-art RESTful API testing tool
170
+
171
+ ## Installation
172
+
173
+ Use Schemathesis via Docker, or install it from [PyPI](https://pypi.org/project/schemathesis/)
174
+
175
+ ```console
176
+ # Via Docker.
177
+ $ docker pull schemathesis/schemathesis:stable
178
+
179
+ # With pip.
180
+ $ pip install schemathesis
181
+ ```
182
+
183
+ ## Getting Started
184
+
185
+ Schemathesis works as a standalone CLI:
186
+
187
+ ```console
188
+ docker run schemathesis/schemathesis:stable
189
+ run --checks all https://example.schemathesis.io/openapi.json
190
+ # Or when installed with pip
191
+ schemathesis run --checks all https://example.schemathesis.io/openapi.json
192
+ ```
193
+
194
+ Or a Python library:
195
+
196
+ ```python
197
+ import schemathesis
198
+
199
+ schema = schemathesis.openapi.from_url("https://example.schemathesis.io/openapi.json")
200
+
201
+
202
+ @schema.parametrize()
203
+ def test_api(case):
204
+ case.call_and_validate()
205
+ ```
206
+
207
+ See a complete working example project in the [/example](https://github.com/schemathesis/schemathesis/tree/master/example) directory.
208
+
209
+ Schemathesis can be easily integrated into your CI/CD pipeline using GitHub Actions. Add this block to your GitHub Actions to run Schemathesis against your API:
210
+
211
+ ```yaml
212
+ api-tests:
213
+ runs-on: ubuntu-latest
214
+ steps:
215
+ - uses: schemathesis/action@v1
216
+ with:
217
+ schema: "https://example.schemathesis.io/openapi.json"
218
+ ```
219
+
220
+ For more details, check out our [GitHub Action](https://github.com/schemathesis/action) repository or see our [GitHub Tutorial](https://docs.schemathesis.io/tutorials/github).
221
+
222
+ ## Who's Using Schemathesis?
223
+
224
+ Schemathesis is used by a number of projects and companies, including direct usage or integration into other tools:
225
+
226
+ - Abstract Machines ([Magistrala](https://github.com/absmach/magistrala))
227
+ - Bundesstelle für Open Data ([smard-api](https://github.com/bundesAPI/smard-api))
228
+ - [CheckMK](https://github.com/Checkmk/checkmk)
229
+ - Chronosphere.io ([Calyptia](https://github.com/chronosphereio/calyptia-api))
230
+ - HXSecurity ([DongTai](https://github.com/HXSecurity/DongTai))
231
+ - Netflix ([Dispatch](https://github.com/Netflix/dispatch))
232
+ - [Pixie](https://github.com/pixie-io/pixie)
233
+ - [Qdrant](https://github.com/qdrant/qdrant)
234
+ - Spotify ([Backstage](https://github.com/backstage/backstage))
235
+ - [Weechat](https://github.com/weechat/weechat)
236
+ - WordPress ([OpenVerse](https://github.com/WordPress/openverse))
237
+
238
+ ## Testimonials
239
+
240
+ "_The world needs modern, spec-based API tests, so we can deliver APIs as-designed. Schemathesis is the right tool for that job._"
241
+
242
+ <div>Emmanuel Paraskakis - <strong>Level 250</strong></div>
243
+
244
+ ---
245
+
246
+ "_Schemathesis is the only sane way to thoroughly test an API._"
247
+
248
+ <div>Zdenek Nemec - <strong>superface.ai</strong></div>
249
+
250
+ ---
251
+
252
+ "_The tool is absolutely amazing as it can do the negative scenario testing instead of me and much faster! Before I was doing the same tests in Postman client. But it's much slower and brings maintenance burden._"
253
+
254
+ <div>Luděk Nový - <strong>JetBrains</strong></div>
255
+
256
+ ---
257
+
258
+ "_Schemathesis is the best tool for fuzz testing of REST API on the market. We are at Red Hat use it for examining our applications in functional and integrations testing levels._"
259
+
260
+ <div>Dmitry Misharov - <strong>RedHat</strong></div>
261
+
262
+ ---
263
+
264
+ "_There are different levels of usability and documentation quality among these tools which have been reported, where Schemathesis clearly stands out among the most user-friendly and industry-strength tools._"
265
+
266
+ <div>Testing RESTful APIs: A Survey - <strong>a research paper by Golmohammadi, at al</strong></div>
267
+
268
+ ---
269
+
270
+ ## Contributing
271
+
272
+ We welcome contributions in code and are especially interested in learning about your use cases. Your input is essential for improving Schemathesis and directly influences future updates.
273
+
274
+ ### How to Contribute
275
+
276
+ 1. Discuss ideas and questions through [GitHub issues](https://github.com/schemathesis/schemathesis/issues) or on our [Discord channel](https://discord.gg/R9ASRAmHnA).
277
+ 2. For code contributions, see our [contributing guidelines](https://github.com/schemathesis/schemathesis/blob/master/CONTRIBUTING.rst).
278
+ 3. Share your experience and thoughts using [this feedback form](https://forms.gle/kJ4hSxc1Yp6Ga96t5).
279
+
280
+ ### Why Your Input Matters
281
+
282
+ - Enables us to develop useful features and fix bugs faster
283
+ - Improves our test suite and documentation
284
+
285
+ Thank you for contributing to making Schemathesis better! 👍
286
+
287
+ ## Get in Touch
288
+
289
+ If you need assistance with integrating Schemathesis into your workflows or have specific questions, feel free to reach out at <a href="mailto:support@schemathesis.io">support@schemathesis.io</a>.
290
+
291
+ ## Acknowledgements
292
+
293
+ Schemathesis is built on top of <a href="https://hypothesis.works/" target="_blank">Hypothesis</a>, a powerful property-based testing library for Python.
294
+
295
+ ## License
296
+
297
+ This project is licensed under the terms of the [MIT license](https://opensource.org/licenses/MIT).
@@ -0,0 +1,152 @@
1
+ schemathesis/__init__.py,sha256=ggp1CxctLo__wwFwlDhvtrexxDXGSbRjFKzXw_Twi7k,1139
2
+ schemathesis/auths.py,sha256=t-YuPyoLqL7jlRUH-45JxO7Ir3pYxpe31CRmNIJh7rI,15423
3
+ schemathesis/checks.py,sha256=PfEdX9xoyk70dAcqvBhXZhUlwXcMMik9PiAC7LrTIMQ,4988
4
+ schemathesis/errors.py,sha256=v5LpP5Yv78E96HoMJCsiKT_epDjkzLYMT0TtkarqomY,1336
5
+ schemathesis/filters.py,sha256=6kffe_Xbi7-xThsUciWfmy1IU-LBgSYkXROUJJONJ48,13311
6
+ schemathesis/hooks.py,sha256=jTdN5GJbxHRMshxgcuI_th9ouuL32CN4m2Jt0pmT_bs,13148
7
+ schemathesis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ schemathesis/schemas.py,sha256=h_ByEEBcw3mZ0OKYwbsuzpw3JTlMi8ZPHYHDwm8agWg,27200
9
+ schemathesis/cli/__init__.py,sha256=Fxsopap2Mw6mYh27l6xMRJ5PhUsCJ19pDxDj2hCc2wg,582
10
+ schemathesis/cli/__main__.py,sha256=MWaenjaUTZIfNPFzKmnkTiawUri7DVldtg3mirLwzU8,92
11
+ schemathesis/cli/constants.py,sha256=rUixnqorraUFDtOu3Nmm1x_k0qbgmW9xW96kQB_fBCQ,338
12
+ schemathesis/cli/core.py,sha256=Qm5xvpIIMwJDTeR3N3TjKhMCHV5d5Rp0UstVS2GjWgw,459
13
+ schemathesis/cli/hooks.py,sha256=vTrA8EN99whRns5K5AnExViQ6WL9cak5RGsC-ZBEiJM,1458
14
+ schemathesis/cli/commands/__init__.py,sha256=FFalEss3D7mnCRO0udtYb65onXSjQCCOv8sOSjqvTTM,1059
15
+ schemathesis/cli/commands/run/__init__.py,sha256=Y3V0I0EtzLDeIJqUjrjqyhfYit4_piqnfzcac-hJQLg,22635
16
+ schemathesis/cli/commands/run/checks.py,sha256=-p6bzuc98kNR1VhkTI2s4xaJx-b5zYSMwdlhONwUhRM,3337
17
+ schemathesis/cli/commands/run/context.py,sha256=o_lUkR2bpsxO4oMB7eJVCMIR9jmfS0nLZCd_LdOluF4,3906
18
+ schemathesis/cli/commands/run/events.py,sha256=iYE8h625GgNOv28qzxCpc2odrdVejVdhyhUMvucVl0Y,1041
19
+ schemathesis/cli/commands/run/executor.py,sha256=Zh04Po_Hh0YuUPoR2omlZHtO3rPrRA56a-bCvY3uog4,4616
20
+ schemathesis/cli/commands/run/filters.py,sha256=0ytY9kdfe8neiXcHoom6twZSmckRYEXyfT5cgOrhY-0,6755
21
+ schemathesis/cli/commands/run/hypothesis.py,sha256=3PkcUSe-P6zgkhPJbN8RstjGNzgcY76AVlJ7ayu44Eg,3582
22
+ schemathesis/cli/commands/run/loaders.py,sha256=VedoeIE1tgFBqVokWxOoUReAjBl-Zhx87RjCEBtCVfs,4840
23
+ schemathesis/cli/commands/run/validation.py,sha256=LT8Phfaw8-Xvui639QIHJfTSjEak1qoZ7Abpnv8E2s8,12670
24
+ schemathesis/cli/commands/run/handlers/__init__.py,sha256=TPZ3KdGi8m0fjlN0GjA31MAXXn1qI7uU4FtiDwroXZI,1915
25
+ schemathesis/cli/commands/run/handlers/base.py,sha256=tVfXxZqtc_NnPLchVbs8bjMforwbeBm-bxJMCVLY9wQ,507
26
+ schemathesis/cli/commands/run/handlers/cassettes.py,sha256=VKM-XK8-uQMKlytlcSIVlAaPfsnACls6HfgvnF3Ha5E,19061
27
+ schemathesis/cli/commands/run/handlers/junitxml.py,sha256=MkFq_DyMWves4Ytj72-4secMTlBOt7Gs9W3nfBzknIA,2316
28
+ schemathesis/cli/commands/run/handlers/output.py,sha256=G9vjmCKYIAzsnLC12Hwp_4kWoNPIVkrG49FdWspMhvY,29998
29
+ schemathesis/cli/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ schemathesis/cli/ext/fs.py,sha256=OA3mRzra4rq3NyDTcBvlRh0WJrh4ByN-QQ8loI04m88,408
31
+ schemathesis/cli/ext/groups.py,sha256=9mIZUnQasUxGz6gZA0IoGVGKtSQuVNl8w2pwX_a1nBk,1796
32
+ schemathesis/cli/ext/options.py,sha256=id7IIxJkVnOOOK3VA2S5iV2mgxASHMw0sQGK3rtGNEE,3519
33
+ schemathesis/contrib/__init__.py,sha256=wxpX86xrEGRAS3f7eugQfKVbnqV6ZfOqFBS_DmWxOok,120
34
+ schemathesis/contrib/openapi/__init__.py,sha256=-7mBZ9RQj0EGzzmC-HKiT5ZslwHcoWFqCVpRG0GHO_o,162
35
+ schemathesis/contrib/openapi/fill_missing_examples.py,sha256=BfBpuy3vCKbE_uILqPXnm7kxEDopAr5tNQwP5E9xX8A,585
36
+ schemathesis/core/__init__.py,sha256=Lag-8jUqWpcRdiTUtKS3v9HJZgwRy_JS854ZA7wh0W4,1573
37
+ schemathesis/core/compat.py,sha256=Lflo6z-nQ6S4uKZINc4Fr90pd3LTN6cIG9HJJmmaHeY,754
38
+ schemathesis/core/control.py,sha256=IzwIc8HIAEMtZWW0Q0iXI7T1niBpjvcLlbuwOSmy5O8,130
39
+ schemathesis/core/curl.py,sha256=yuaCe_zHLGwUjEeloQi6W3tOA3cGdnHDNI17-5jia0o,1723
40
+ schemathesis/core/deserialization.py,sha256=ygIj4fNaOd0mJ2IvTsn6bsabBt_2AbSLCz-z9UqfpdQ,2406
41
+ schemathesis/core/errors.py,sha256=Euy3YfF49dAH70KgMz4uFO5eRRX485RkT8v4go0TxOc,13423
42
+ schemathesis/core/failures.py,sha256=vw3DKDkvRdHqwTRRqagoSxUFK1N-lSWrEf6TycjmbI4,7880
43
+ schemathesis/core/fs.py,sha256=ItQT0_cVwjDdJX9IiI7EnU75NI2H3_DCEyyUjzg_BgI,472
44
+ schemathesis/core/lazy_import.py,sha256=aMhWYgbU2JOltyWBb32vnWBb6kykOghucEzI_F70yVE,470
45
+ schemathesis/core/loaders.py,sha256=SQQ-8m64-D2FaOgvwKZLyTtLJuzP3RPo7Ud2BERK1c0,3404
46
+ schemathesis/core/marks.py,sha256=SH7jsVuNRJjx2gZN9Ze5MY01u7FJiHeO0iruzKi5rm4,2135
47
+ schemathesis/core/media_types.py,sha256=vV0CEu34sDoZWXvu4R1Y1HosxVS4YXZV8iTov8fU3X0,2148
48
+ schemathesis/core/rate_limit.py,sha256=7tg9Znk11erTfw8-ANutjEmu7hbfUHZx_iEdkoaP174,1757
49
+ schemathesis/core/registries.py,sha256=T4jZB4y3zBHdeSgQc0pRbgSeMblvO-6z4I3zmzIfTi0,811
50
+ schemathesis/core/result.py,sha256=d449YvyONjqjDs-A5DAPgtAI96iT753K8sU6_1HLo2Q,461
51
+ schemathesis/core/transforms.py,sha256=oFyUcGILC_bUrPShKKS0C2KyROJLWQnCirbdElHuQSI,3521
52
+ schemathesis/core/transport.py,sha256=VqtVF4JxMuPXSBORzS8SOSLUnCEZL6gPOr0kuymMCAk,3249
53
+ schemathesis/core/validation.py,sha256=JJbSymYUKKcbkY2L3nECKrbIVUb9PRyUsTqa-aeDEAw,1153
54
+ schemathesis/core/version.py,sha256=O-6yFbNocbD4RDwiBZLborxTp54htyKxBWTqpZDnPvg,202
55
+ schemathesis/core/output/__init__.py,sha256=lhVc4OzzxCsmvEPPvg1k8x19iPf_HF-9YonTaqsxvx8,2015
56
+ schemathesis/core/output/sanitization.py,sha256=EODHJMHD8gqlIA0Yqs1OnElZ2JyNxjvQ0WWErZV1K3s,6210
57
+ schemathesis/engine/__init__.py,sha256=xncZMXY8S-v4mrfnW4CK6-RQ0S0bigfLDJScpQysblE,831
58
+ schemathesis/engine/config.py,sha256=vWwtaWuSLvE-w0S9n4_MlJADjN58zlgSp84ZQS2z0ls,1919
59
+ schemathesis/engine/context.py,sha256=HeLX-0aqSAbXJe_ZlkqVfg3QlhmbCrazbb9-ZPbi0h0,3723
60
+ schemathesis/engine/control.py,sha256=QKUOs5VMphe7EcAIro_DDo9ZqdOU6ZVwTU1gMNndHWw,1006
61
+ schemathesis/engine/core.py,sha256=hvmY4WEtFtfiPoLm-juO3HIGKdEAjtUcVOErAnXQ4_s,5075
62
+ schemathesis/engine/errors.py,sha256=nvl-2DKQSBAbas1MpEveUGLb_DL-LtMkcg9LijmctPM,16179
63
+ schemathesis/engine/events.py,sha256=K626Kw8Eo4h5mAwY8RAGD3SSm3v1j2o0hWFSESqmg2c,7940
64
+ schemathesis/engine/recorder.py,sha256=nkms_L6mwz-SuXsYX4MnGUOJHX8n-b_jlUu0PzYmzVI,8070
65
+ schemathesis/engine/phases/__init__.py,sha256=HZmlOjGvtDkfTwAw2rJFcfsJ2qg2h973l4zDy3AzsQg,2034
66
+ schemathesis/engine/phases/probes.py,sha256=3M9g3E7CXbDDK_8inuvkRZibCCcoO2Ce5U3lnyTeWXQ,5131
67
+ schemathesis/engine/phases/stateful/__init__.py,sha256=8y_vfqtXP-JjMM9p9f6nCUAOA_PrkzVhe9noOwENmnI,2264
68
+ schemathesis/engine/phases/stateful/_executor.py,sha256=qj2tDhih8066mJvzwnR_88mg_lwAxMJxCE617ZOZZ8A,13777
69
+ schemathesis/engine/phases/stateful/context.py,sha256=SKWsok-tlWbUDagiUmP7cLNW6DsgFDc_Afv0vQfWv6c,2964
70
+ schemathesis/engine/phases/unit/__init__.py,sha256=h2bDQ1arYZc3oU70ipP0IjQs_g1z887vz__7PpVuuOk,7492
71
+ schemathesis/engine/phases/unit/_executor.py,sha256=GwXDvcluDutpWsR6HRMHUw896XRl_KFKQDokfwVOJlg,12883
72
+ schemathesis/engine/phases/unit/_pool.py,sha256=1mcoqXOQhTr1Rhk49NOHivVleihTEHqI8uNSTKHOl8w,2199
73
+ schemathesis/experimental/__init__.py,sha256=36H1vLQhrw4SMD_jx76Wt07PHneELRDY1jfBSh7VxU0,2257
74
+ schemathesis/generation/__init__.py,sha256=2htA0TlQee6AvQmLl1VNxEptRDqvPjksXKJLMVLAJng,1580
75
+ schemathesis/generation/case.py,sha256=Rt5MCUtPVYVQzNyjUx8magocPJpHV1svyuqQSTwUE-I,7306
76
+ schemathesis/generation/coverage.py,sha256=u6VjUUQq3nNFOaJingO8CR-e_qL5BqQrUJRU5MZNzDQ,39149
77
+ schemathesis/generation/meta.py,sha256=36h6m4E7jzLGa8TCvl7eBl_xUWLiRul3qxzexl5cB58,2515
78
+ schemathesis/generation/modes.py,sha256=t_EvKr2aOXYMsEfdMu4lLF4KCGcX1LVVyvzTkcpJqhk,663
79
+ schemathesis/generation/overrides.py,sha256=FhqcFoliEvgW6MZyFPYemfLgzKt3Miy8Cud7OMOCb7g,3045
80
+ schemathesis/generation/targets.py,sha256=_rN2qgxTE2EfvygiN-Fy3WmDnRH0ERohdx3sKRDaYhU,2120
81
+ schemathesis/generation/hypothesis/__init__.py,sha256=Rl7QwvMBMJI7pBqTydplX6bXC420n0EGQHVm-vZgaYQ,1204
82
+ schemathesis/generation/hypothesis/builder.py,sha256=s1JHSL0ATNk8u-dli1a-LQzjhyiIgUBfUuJCwp-rt8g,24401
83
+ schemathesis/generation/hypothesis/examples.py,sha256=6eGaKUEC3elmKsaqfKj1sLvM8EHc-PWT4NRBq4NI0Rs,1409
84
+ schemathesis/generation/hypothesis/given.py,sha256=sTZR1of6XaHAPWtHx2_WLlZ50M8D5Rjux0GmWkWjDq4,2337
85
+ schemathesis/generation/hypothesis/reporting.py,sha256=uDVow6Ya8YFkqQuOqRsjbzsbyP4KKfr3jA7ZaY4FuKY,279
86
+ schemathesis/generation/hypothesis/strategies.py,sha256=RurE81E06d99YKG48dizy9346ayfNswYTt38zewmGgw,483
87
+ schemathesis/generation/stateful/__init__.py,sha256=kXpCGbo1-QqfR2N0Z07tLw0Z5_tvbuG3Tk-WI_I1doI,653
88
+ schemathesis/generation/stateful/state_machine.py,sha256=6G8Bw_pV8AYMaJLYV00QULIbszXwKG1aPJkB0ozA3lg,11163
89
+ schemathesis/graphql/__init__.py,sha256=_eO6MAPHGgiADVGRntnwtPxmuvk666sAh-FAU4cG9-0,326
90
+ schemathesis/graphql/checks.py,sha256=3xBjNCwa8-M5-yzkuL8i_p5xGQTTRscSE9JbGGl_QeY,3424
91
+ schemathesis/graphql/loaders.py,sha256=96R_On1jFvsNuLwqXnO3_TTpsYhdCv0LAmR5jWRXXnY,4756
92
+ schemathesis/openapi/__init__.py,sha256=-KcsSAM19uOM0N5J4s-yTnQ1BFsptYhW1E51cEf6kVM,311
93
+ schemathesis/openapi/checks.py,sha256=rBYqqkYaJbflkLbj9tupTBbkSLP8I2bMRsEKxhrCZNA,11618
94
+ schemathesis/openapi/loaders.py,sha256=jskoCnMgpjg_cpn17FRI4oDUpMdsMYjxfXdRPHYnPqs,6472
95
+ schemathesis/openapi/generation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
+ schemathesis/openapi/generation/filters.py,sha256=MB2t_k6OVc2Rt6qXUrV-u-3sDg5wX6c0Mli9WgfMUF4,2001
97
+ schemathesis/pytest/__init__.py,sha256=7W0q-Thcw03IAQfXE_Mo8JPZpUdHJzfu85fjK1ZdfQM,88
98
+ schemathesis/pytest/control_flow.py,sha256=F8rAPsPeNv_sJiJgbZYtTpwKWjauZmqFUaKroY2GmQI,217
99
+ schemathesis/pytest/lazy.py,sha256=FK_fVndvGn02wuVDMwaGfl2NlbVbQWEmCgMjRxeOmRk,10541
100
+ schemathesis/pytest/loaders.py,sha256=oQJ78yyuIm3Ye9X7giVjDB1vYfaW5UY5YuhaTLm_ZFU,266
101
+ schemathesis/pytest/plugin.py,sha256=ZIF75b4G81IGtGle0c8PHYeWcR_pHGC2NoSlijsznCQ,12372
102
+ schemathesis/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
+ schemathesis/python/asgi.py,sha256=5PyvuTBaivvyPUEi3pwJni91K1kX5Zc0u9c6c1D8a1Q,287
104
+ schemathesis/python/wsgi.py,sha256=uShAgo_NChbfYaV1117e6UHp0MTg7jaR0Sy_to3Jmf8,219
105
+ schemathesis/specs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
+ schemathesis/specs/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
+ schemathesis/specs/graphql/_cache.py,sha256=QIcEFy2Koy5K0-u1nB-iab52LDlYsTm_9N5t42GplkM,770
108
+ schemathesis/specs/graphql/nodes.py,sha256=bE3G1kNmqJ8OV4igBvIK-UORrkQA6Nofduf87O3TD9I,541
109
+ schemathesis/specs/graphql/scalars.py,sha256=ERUECtwWuEe4_T_fpM6DQJKLrkvahbnaswM7oEOcC0M,1850
110
+ schemathesis/specs/graphql/schemas.py,sha256=thRl5WDAr-8P8r5PRKCTI8k3ITu828b8yo7leNo9cFY,14362
111
+ schemathesis/specs/graphql/validation.py,sha256=-W1Noc1MQmTb4RX-gNXMeU2qkgso4mzVfHxtdLkCPKM,1422
112
+ schemathesis/specs/openapi/__init__.py,sha256=C5HOsfuDJGq_3mv8CRBvRvb0Diy1p0BFdqyEXMS-loE,238
113
+ schemathesis/specs/openapi/_cache.py,sha256=HpglmETmZU0RCHxp3DO_sg5_B_nzi54Zuw9vGzzYCxY,4295
114
+ schemathesis/specs/openapi/_hypothesis.py,sha256=n_39iyz1rt2EdSe-Lyr-3sOIEyJIthnCVR4tGUUvH1c,21328
115
+ schemathesis/specs/openapi/checks.py,sha256=bgThVKGwmxDLnAxH8B96t0Qn-hNkpE0DrZ1B7GvTXJM,26236
116
+ schemathesis/specs/openapi/constants.py,sha256=JqM_FHOenqS_MuUE9sxVQ8Hnw0DNM8cnKDwCwPLhID4,783
117
+ schemathesis/specs/openapi/converter.py,sha256=lil8IewM5j8tvt4lpA9g_KITvIwx1M96i45DNSHNjoc,3505
118
+ schemathesis/specs/openapi/definitions.py,sha256=8htclglV3fW6JPBqs59lgM4LnA25Mm9IptXBPb_qUT0,93949
119
+ schemathesis/specs/openapi/examples.py,sha256=Uy6naFBq-m1vo_18j4KuZBUYc9qKrBk19jBCWT7tnRg,20464
120
+ schemathesis/specs/openapi/formats.py,sha256=ViVF3aFeFI1ctwGQbiRDXhU3so82P0BCaF2aDDbUUm8,2816
121
+ schemathesis/specs/openapi/links.py,sha256=EaAnr7exuwSeOMIUuDr4TCn_72ExXMbBh53uRORf81Y,8617
122
+ schemathesis/specs/openapi/media_types.py,sha256=ADedOaNWjbAtAekyaKmNj9fY6zBTeqcNqBEjN0EWNhI,1014
123
+ schemathesis/specs/openapi/parameters.py,sha256=fmOkH-KhMVzWmE6eSw2pw2hernril5MDL7DwwEG4344,14655
124
+ schemathesis/specs/openapi/patterns.py,sha256=RpvsAfpcm2dAcFYj-N6w0iQ1VdCT9h8BLdS1mrso6II,5518
125
+ schemathesis/specs/openapi/references.py,sha256=YjD1xMlaYS7xLt6PrrVS20R72ZWHuFZFTa8Llzf54Rg,8808
126
+ schemathesis/specs/openapi/schemas.py,sha256=dYC3KsyKP1GNKhMHyqrbrhpVci_BeC2JY-LKkoRp3j8,53626
127
+ schemathesis/specs/openapi/security.py,sha256=6UWYMhL-dPtkTineqqBFNKca1i4EuoTduw-EOLeE0aQ,7149
128
+ schemathesis/specs/openapi/serialization.py,sha256=JFxMqCr8YWwPT4BVrbvVytcAmkzGXyL1_Q1xR1JKBPs,11464
129
+ schemathesis/specs/openapi/utils.py,sha256=ER4vJkdFVDIE7aKyxyYatuuHVRNutytezgE52pqZNE8,900
130
+ schemathesis/specs/openapi/expressions/__init__.py,sha256=hFpJrIWbPi55GcIVjNFRDDUL8xmDu3mdbdldoHBoFJ0,1729
131
+ schemathesis/specs/openapi/expressions/context.py,sha256=mSgY-8qMCuYKbDYmHP2GaVhq7laHgnR196EwdNi7gc4,298
132
+ schemathesis/specs/openapi/expressions/errors.py,sha256=YLVhps-sYcslgVaahfcUYxUSHlIfWL-rQMeT5PZSMZ8,219
133
+ schemathesis/specs/openapi/expressions/extractors.py,sha256=Py3of3_vBACP4ljiZIcgd-xQCrWIpcMsfQFc0EtAUoA,470
134
+ schemathesis/specs/openapi/expressions/lexer.py,sha256=LeVE6fgYT9-fIsXrv0-YrRHnI4VPisbwsexyh9Q5YU0,3982
135
+ schemathesis/specs/openapi/expressions/nodes.py,sha256=hDmo_K7gxUyRMaeEtrvGAD-Vw1rImrFxNo1MDSPqYtg,4131
136
+ schemathesis/specs/openapi/expressions/parser.py,sha256=gM_Ob-TlTGxpgjZGRHNyPhBj1YAvRgRoSlNCrE7-djk,4452
137
+ schemathesis/specs/openapi/negative/__init__.py,sha256=60QqVBTXPTsAojcf7GDs7v8WbOE_k3g_VC_DBeQUqBw,3749
138
+ schemathesis/specs/openapi/negative/mutations.py,sha256=7jTjD9rt5vxWSVBL5Hx8Avj4WhTA63frDQiFMKysrUU,19248
139
+ schemathesis/specs/openapi/negative/types.py,sha256=a7buCcVxNBG6ILBM3A7oNTAX0lyDseEtZndBuej8MbI,174
140
+ schemathesis/specs/openapi/negative/utils.py,sha256=ozcOIuASufLqZSgnKUACjX-EOZrrkuNdXX0SDnLoGYA,168
141
+ schemathesis/specs/openapi/stateful/__init__.py,sha256=oZ-FtK9-EtQvZb4HdBVidyD4FaYwqmDSZONVCsMRNtw,8484
142
+ schemathesis/transport/__init__.py,sha256=z-mRNSOlMBKwQyaEIhpmYv0plWTmK5dJqc9UmQOry80,3949
143
+ schemathesis/transport/asgi.py,sha256=qTClt6oT_xUEWnRHokACN_uqCNNUZrRPT6YG0PjbElY,926
144
+ schemathesis/transport/prepare.py,sha256=qQ6zXBw5NN2AIM0bzLAc5Ryc3dmMb0R6xN14lnR49pU,3826
145
+ schemathesis/transport/requests.py,sha256=OObRvcTL72-BZ7AfuDUrZZU9nZtfBqr22oF8nkzaOLE,8389
146
+ schemathesis/transport/serialization.py,sha256=jIMra1LqRGav0OX3Hx7mvORt38ll4cd2DKit2D58FN0,10531
147
+ schemathesis/transport/wsgi.py,sha256=RWSuUXPrl91GxAy8a4jyNNozOWVMRBxKx_tljlWA_Lo,5697
148
+ schemathesis-4.0.0a1.dist-info/METADATA,sha256=CnWHlCwfgGHDScB9iFwIsMlGl0gEA7sznHB2u9IXB5M,12292
149
+ schemathesis-4.0.0a1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
150
+ schemathesis-4.0.0a1.dist-info/entry_points.txt,sha256=hiK3un-xfgPdwj9uj16YVDtTNpO128bmk0U82SMv8ZQ,152
151
+ schemathesis-4.0.0a1.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
152
+ schemathesis-4.0.0a1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.12.2
2
+ Generator: hatchling 1.27.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -3,4 +3,4 @@ schemathesis = schemathesis.cli:schemathesis
3
3
  st = schemathesis.cli:schemathesis
4
4
 
5
5
  [pytest11]
6
- schemathesis = schemathesis.extra.pytest_plugin
6
+ schemathesis = schemathesis.pytest.plugin
schemathesis/_compat.py DELETED
@@ -1,74 +0,0 @@
1
- from typing import Any, Type, Callable
2
- from ._lazy_import import lazy_import
3
-
4
-
5
- __all__ = [ # noqa: F822
6
- "JSONMixin",
7
- "InferType",
8
- "MultipleFailures",
9
- "get_signature",
10
- "get_interesting_origin",
11
- "_install_hypothesis_jsonschema_compatibility_shim",
12
- ]
13
-
14
-
15
- def _load_json_mixin() -> Type:
16
- from ._dependency_versions import IS_WERKZEUG_BELOW_2_1
17
-
18
- if IS_WERKZEUG_BELOW_2_1:
19
- from werkzeug.wrappers.json import JSONMixin
20
- else:
21
-
22
- class JSONMixin: # type: ignore
23
- pass
24
-
25
- return JSONMixin
26
-
27
-
28
- def _load_infer_type() -> Type:
29
- try:
30
- from hypothesis.utils.conventions import InferType
31
-
32
- return InferType
33
- except ImportError:
34
- return type(...)
35
-
36
-
37
- def _load_get_interesting_origin() -> Callable:
38
- try:
39
- from hypothesis.internal.escalation import get_interesting_origin
40
-
41
- return get_interesting_origin
42
- except ImportError:
43
- from hypothesis.internal.escalation import InterestingOrigin
44
-
45
- return InterestingOrigin.from_exception
46
-
47
-
48
- def _load_multiple_failures() -> Type:
49
- try:
50
- return BaseExceptionGroup # type: ignore
51
- except NameError:
52
- from exceptiongroup import BaseExceptionGroup as MultipleFailures # type: ignore
53
-
54
- return MultipleFailures
55
-
56
-
57
- def _load_get_signature() -> Callable:
58
- from hypothesis.internal.reflection import get_signature
59
-
60
- return get_signature
61
-
62
-
63
- _imports = {
64
- "JSONMixin": _load_json_mixin,
65
- "InferType": _load_infer_type,
66
- "MultipleFailures": _load_multiple_failures,
67
- "get_signature": _load_get_signature,
68
- "get_interesting_origin": _load_get_interesting_origin,
69
- }
70
-
71
-
72
- def __getattr__(name: str) -> Any:
73
- # Some modules are relatively heavy, hence load them lazily to improve startup time for CLI
74
- return lazy_import(__name__, name, _imports, globals())
@@ -1,17 +0,0 @@
1
- """Compatibility flags based on installed dependency versions."""
2
- from packaging import version
3
-
4
- from importlib import metadata
5
-
6
-
7
- WERKZEUG_VERSION = version.parse(metadata.version("werkzeug"))
8
- IS_WERKZEUG_ABOVE_3 = WERKZEUG_VERSION >= version.parse("3.0")
9
- IS_WERKZEUG_BELOW_2_1 = WERKZEUG_VERSION < version.parse("2.1.0")
10
-
11
- PYTEST_VERSION = version.parse(metadata.version("pytest"))
12
- IS_PYTEST_ABOVE_54 = PYTEST_VERSION >= version.parse("5.4.0")
13
- IS_PYTEST_ABOVE_7 = PYTEST_VERSION >= version.parse("7.0.0")
14
- IS_PYTEST_ABOVE_8 = PYTEST_VERSION >= version.parse("8.0.0")
15
-
16
- HYPOTHESIS_VERSION = version.parse(metadata.version("hypothesis"))
17
- HYPOTHESIS_HAS_STATEFUL_NAMING_IMPROVEMENTS = HYPOTHESIS_VERSION >= version.parse("6.98.14")