schemathesis 4.0.0a11__py3-none-any.whl → 4.0.0a12__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.
- schemathesis/__init__.py +28 -25
- schemathesis/auths.py +65 -24
- schemathesis/checks.py +60 -36
- schemathesis/cli/commands/run/__init__.py +23 -21
- schemathesis/cli/commands/run/context.py +6 -1
- schemathesis/cli/commands/run/events.py +7 -1
- schemathesis/cli/commands/run/executor.py +12 -7
- schemathesis/cli/commands/run/handlers/output.py +175 -80
- schemathesis/cli/commands/run/validation.py +21 -6
- schemathesis/config/__init__.py +2 -1
- schemathesis/config/_generation.py +12 -13
- schemathesis/config/_operations.py +14 -0
- schemathesis/config/_phases.py +41 -5
- schemathesis/config/_projects.py +28 -0
- schemathesis/config/_report.py +6 -2
- schemathesis/config/_warnings.py +25 -0
- schemathesis/config/schema.json +49 -1
- schemathesis/core/errors.py +5 -2
- schemathesis/core/transport.py +36 -1
- schemathesis/engine/context.py +1 -0
- schemathesis/engine/errors.py +60 -1
- schemathesis/engine/events.py +10 -2
- schemathesis/engine/phases/probes.py +3 -0
- schemathesis/engine/phases/stateful/__init__.py +2 -1
- schemathesis/engine/phases/stateful/_executor.py +38 -5
- schemathesis/engine/phases/stateful/context.py +2 -2
- schemathesis/engine/phases/unit/_executor.py +36 -7
- schemathesis/generation/__init__.py +0 -3
- schemathesis/generation/case.py +1 -0
- schemathesis/generation/coverage.py +1 -1
- schemathesis/generation/hypothesis/builder.py +31 -7
- schemathesis/generation/metrics.py +93 -0
- schemathesis/generation/modes.py +0 -8
- schemathesis/generation/stateful/__init__.py +4 -0
- schemathesis/generation/stateful/state_machine.py +1 -0
- schemathesis/graphql/loaders.py +138 -4
- schemathesis/hooks.py +62 -35
- schemathesis/openapi/loaders.py +120 -4
- schemathesis/pytest/loaders.py +24 -0
- schemathesis/pytest/plugin.py +22 -0
- schemathesis/schemas.py +9 -6
- schemathesis/specs/graphql/scalars.py +37 -3
- schemathesis/specs/graphql/schemas.py +12 -3
- schemathesis/specs/openapi/_hypothesis.py +14 -20
- schemathesis/specs/openapi/checks.py +21 -18
- schemathesis/specs/openapi/formats.py +30 -3
- schemathesis/specs/openapi/media_types.py +44 -1
- schemathesis/specs/openapi/schemas.py +8 -2
- schemathesis/specs/openapi/stateful/__init__.py +2 -1
- schemathesis/transport/__init__.py +54 -16
- schemathesis/transport/prepare.py +31 -7
- schemathesis/transport/requests.py +9 -8
- schemathesis/transport/wsgi.py +8 -8
- {schemathesis-4.0.0a11.dist-info → schemathesis-4.0.0a12.dist-info}/METADATA +44 -90
- {schemathesis-4.0.0a11.dist-info → schemathesis-4.0.0a12.dist-info}/RECORD +58 -60
- schemathesis/contrib/__init__.py +0 -9
- schemathesis/contrib/openapi/__init__.py +0 -9
- schemathesis/contrib/openapi/fill_missing_examples.py +0 -20
- schemathesis/generation/targets.py +0 -69
- {schemathesis-4.0.0a11.dist-info → schemathesis-4.0.0a12.dist-info}/WHEEL +0 -0
- {schemathesis-4.0.0a11.dist-info → schemathesis-4.0.0a12.dist-info}/entry_points.txt +0 -0
- {schemathesis-4.0.0a11.dist-info → schemathesis-4.0.0a12.dist-info}/licenses/LICENSE +0 -0
schemathesis/transport/wsgi.py
CHANGED
@@ -19,7 +19,7 @@ if TYPE_CHECKING:
|
|
19
19
|
import werkzeug
|
20
20
|
|
21
21
|
|
22
|
-
class WSGITransport(BaseTransport["
|
22
|
+
class WSGITransport(BaseTransport["werkzeug.Client"]):
|
23
23
|
def serialize_case(self, case: Case, **kwargs: Any) -> dict[str, Any]:
|
24
24
|
headers = kwargs.get("headers")
|
25
25
|
params = kwargs.get("params")
|
@@ -119,24 +119,24 @@ WSGI_TRANSPORT = WSGITransport()
|
|
119
119
|
|
120
120
|
|
121
121
|
@WSGI_TRANSPORT.serializer("application/json", "text/json")
|
122
|
-
def json_serializer(ctx: SerializationContext
|
122
|
+
def json_serializer(ctx: SerializationContext, value: Any) -> dict[str, Any]:
|
123
123
|
return serialize_json(value)
|
124
124
|
|
125
125
|
|
126
126
|
@WSGI_TRANSPORT.serializer(
|
127
127
|
"text/yaml", "text/x-yaml", "text/vnd.yaml", "text/yml", "application/yaml", "application/x-yaml"
|
128
128
|
)
|
129
|
-
def yaml_serializer(ctx: SerializationContext
|
129
|
+
def yaml_serializer(ctx: SerializationContext, value: Any) -> dict[str, Any]:
|
130
130
|
return serialize_yaml(value)
|
131
131
|
|
132
132
|
|
133
133
|
@WSGI_TRANSPORT.serializer("multipart/form-data", "multipart/mixed")
|
134
|
-
def multipart_serializer(ctx: SerializationContext
|
134
|
+
def multipart_serializer(ctx: SerializationContext, value: Any) -> dict[str, Any]:
|
135
135
|
return {"data": value}
|
136
136
|
|
137
137
|
|
138
138
|
@WSGI_TRANSPORT.serializer("application/xml", "text/xml")
|
139
|
-
def xml_serializer(ctx: SerializationContext
|
139
|
+
def xml_serializer(ctx: SerializationContext, value: Any) -> dict[str, Any]:
|
140
140
|
media_type = ctx.case.media_type
|
141
141
|
|
142
142
|
assert media_type is not None
|
@@ -148,17 +148,17 @@ def xml_serializer(ctx: SerializationContext[Case], value: Any) -> dict[str, Any
|
|
148
148
|
|
149
149
|
|
150
150
|
@WSGI_TRANSPORT.serializer("application/x-www-form-urlencoded")
|
151
|
-
def urlencoded_serializer(ctx: SerializationContext
|
151
|
+
def urlencoded_serializer(ctx: SerializationContext, value: Any) -> dict[str, Any]:
|
152
152
|
return {"data": value}
|
153
153
|
|
154
154
|
|
155
155
|
@WSGI_TRANSPORT.serializer("text/plain")
|
156
|
-
def text_serializer(ctx: SerializationContext
|
156
|
+
def text_serializer(ctx: SerializationContext, value: Any) -> dict[str, Any]:
|
157
157
|
if isinstance(value, bytes):
|
158
158
|
return {"data": value}
|
159
159
|
return {"data": str(value)}
|
160
160
|
|
161
161
|
|
162
162
|
@WSGI_TRANSPORT.serializer("application/octet-stream")
|
163
|
-
def binary_serializer(ctx: SerializationContext
|
163
|
+
def binary_serializer(ctx: SerializationContext, value: Any) -> dict[str, Any]:
|
164
164
|
return {"data": serialize_binary(value)}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: schemathesis
|
3
|
-
Version: 4.0.
|
3
|
+
Version: 4.0.0a12
|
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
|
@@ -62,6 +62,7 @@ Requires-Dist: fastapi>=0.86.0; extra == 'dev'
|
|
62
62
|
Requires-Dist: flask<3.0,>=2.1.1; extra == 'dev'
|
63
63
|
Requires-Dist: hypothesis-openapi<1,>=0.2; (python_version >= '3.10') and extra == 'dev'
|
64
64
|
Requires-Dist: mkdocs-material; extra == 'dev'
|
65
|
+
Requires-Dist: mkdocstrings[python]; extra == 'dev'
|
65
66
|
Requires-Dist: pydantic>=1.10.2; extra == 'dev'
|
66
67
|
Requires-Dist: pytest-asyncio<1.0,>=0.18.0; extra == 'dev'
|
67
68
|
Requires-Dist: pytest-codspeed==2.2.1; extra == 'dev'
|
@@ -75,6 +76,7 @@ Requires-Dist: tomli-w>=1.2.0; extra == 'dev'
|
|
75
76
|
Requires-Dist: trustme<1.0,>=0.9.0; extra == 'dev'
|
76
77
|
Provides-Extra: docs
|
77
78
|
Requires-Dist: mkdocs-material; extra == 'docs'
|
79
|
+
Requires-Dist: mkdocstrings[python]; extra == 'docs'
|
78
80
|
Provides-Extra: tests
|
79
81
|
Requires-Dist: aiohttp<4.0,>=3.9.1; extra == 'tests'
|
80
82
|
Requires-Dist: coverage>=6; extra == 'tests'
|
@@ -116,137 +118,89 @@ Description-Content-Type: text/markdown
|
|
116
118
|
|
117
119
|
## Schemathesis
|
118
120
|
|
119
|
-
|
121
|
+
> **Catch API bugs before your users do.**
|
122
|
+
|
123
|
+
Schemathesis automatically generates thousands of test cases from your OpenAPI or GraphQL schema and finds edge cases that break your API.
|
120
124
|
|
121
125
|
<p align="center">
|
122
126
|
<img src="https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/demo.gif" alt="Schemathesis automatically finding a server error"/>
|
123
127
|
<br>
|
124
|
-
<i>
|
128
|
+
<i>Finding bugs that manual testing missed</i>
|
125
129
|
</p>
|
126
130
|
|
127
|
-
|
128
|
-
|
129
|
-
## Why Schemathesis?
|
130
|
-
|
131
|
-
- 📑 **Schema-Based Testing** - Transform API documentation into a comprehensive test suite
|
132
|
-
- 🚀 **Zero Configuration** - Begin testing immediately with a valid OpenAPI or GraphQL schema
|
133
|
-
- ⚙️ **CI-Ready** - Integrate API testing into existing pipelines without complex configuration
|
134
|
-
- 🛡️ **Effective Coverage** - Find edge cases no manual testing could uncover
|
135
|
-
- 🔬 **Research-Backed**: [Recognized](https://dl.acm.org/doi/10.1145/3617175) in [academic research](https://ieeexplore.ieee.org/document/9793781) as a state-of-the-art API testing tool
|
136
|
-
|
137
|
-
## Installation
|
131
|
+
## Try it now
|
138
132
|
|
139
133
|
```console
|
140
|
-
#
|
141
|
-
|
142
|
-
|
143
|
-
# Using pip
|
144
|
-
$ pip install schemathesis
|
134
|
+
# Test a demo API - finds real bugs instantly
|
135
|
+
uvx schemathesis run https://example.schemathesis.io/openapi.json
|
145
136
|
|
146
|
-
#
|
147
|
-
|
137
|
+
# Test your own API
|
138
|
+
uvx schemathesis run https://your-api.com/openapi.json
|
148
139
|
```
|
149
140
|
|
150
|
-
## Usage
|
151
141
|
|
152
|
-
|
142
|
+
## What problems does it solve?
|
153
143
|
|
144
|
+
- 💥 **500 errors** that crash your API on edge case inputs
|
145
|
+
- 📋 **Schema violations** where your API returns different data than documented
|
146
|
+
- 🚪 **Validation bypasses** where invalid data gets accepted
|
147
|
+
- 🔗 **Integration failures** when responses don't match client expectations
|
148
|
+
|
149
|
+
# Installation & Usage
|
150
|
+
|
151
|
+
**Command Line:**
|
154
152
|
```console
|
155
|
-
|
156
|
-
|
153
|
+
uv pip install schemathesis
|
154
|
+
schemathesis run https://your-api.com/openapi.json
|
157
155
|
```
|
158
156
|
|
159
|
-
|
160
|
-
|
157
|
+
**Python Tests:**
|
161
158
|
```python
|
162
159
|
import schemathesis
|
163
160
|
|
164
|
-
schema = schemathesis.openapi.from_url("https://
|
165
|
-
|
161
|
+
schema = schemathesis.openapi.from_url("https://your-api.com/openapi.json")
|
166
162
|
|
167
163
|
@schema.parametrize()
|
168
164
|
def test_api(case):
|
169
|
-
case.call_and_validate()
|
165
|
+
case.call_and_validate() # Finds bugs automatically
|
170
166
|
```
|
171
167
|
|
172
|
-
|
173
|
-
|
168
|
+
**CI/CD:**
|
174
169
|
```yaml
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
with:
|
179
|
-
schema: "https://example.schemathesis.io/openapi.json"
|
170
|
+
- uses: schemathesis/action@v1
|
171
|
+
with:
|
172
|
+
schema: "https://your-api.com/openapi.json"
|
180
173
|
```
|
181
174
|
|
182
|
-
##
|
183
|
-
|
184
|
-
📚 **[Read the full documentation](https://schemathesis.readthedocs.io/)** for guides, examples, and reference material.
|
185
|
-
|
186
|
-
## Who's Using Schemathesis?
|
187
|
-
|
188
|
-
Schemathesis is used by companies and open-source projects including:
|
189
|
-
|
190
|
-
- Netflix ([Dispatch](https://github.com/Netflix/dispatch))
|
191
|
-
- Spotify ([Backstage](https://github.com/backstage/backstage))
|
192
|
-
- WordPress ([OpenVerse](https://github.com/WordPress/openverse))
|
193
|
-
- Chronosphere.io ([Calyptia](https://github.com/chronosphereio/calyptia-api))
|
194
|
-
- [Qdrant](https://github.com/qdrant/qdrant)
|
195
|
-
- [Pixie](https://github.com/pixie-io/pixie)
|
196
|
-
- [CheckMK](https://github.com/Checkmk/checkmk)
|
197
|
-
- [Weechat](https://github.com/weechat/weechat)
|
198
|
-
- HXSecurity ([DongTai](https://github.com/HXSecurity/DongTai))
|
199
|
-
- Abstract Machines ([Magistrala](https://github.com/absmach/magistrala))
|
200
|
-
- Bundesstelle für Open Data ([smard-api](https://github.com/bundesAPI/smard-api))
|
201
|
-
|
202
|
-
## Testimonials
|
203
|
-
|
204
|
-
"_The world needs modern, spec-based API tests, so we can deliver APIs as-designed. Schemathesis is the right tool for that job._"
|
205
|
-
|
206
|
-
<div>Emmanuel Paraskakis - <strong>Level 250</strong></div>
|
175
|
+
## Who uses it
|
207
176
|
|
208
|
-
|
209
|
-
|
210
|
-
"_Schemathesis is the only sane way to thoroughly test an API._"
|
211
|
-
|
212
|
-
<div>Zdenek Nemec - <strong>superface.ai</strong></div>
|
213
|
-
|
214
|
-
---
|
215
|
-
|
216
|
-
"_The tool is amazing as it can test negative scenarios instead of me and much faster!_"
|
217
|
-
|
218
|
-
<div>Luděk Nový - <strong>JetBrains</strong></div>
|
219
|
-
|
220
|
-
---
|
177
|
+
Used by teams at **[Spotify](https://github.com/backstage/backstage)**, **[WordPress](https://github.com/WordPress/openverse)**, **JetBrains**, **Red Hat** and dozens other companies.
|
221
178
|
|
222
|
-
"_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._"
|
223
179
|
|
224
|
-
|
180
|
+
> "_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._" - Dmitry Misharov, RedHat
|
225
181
|
|
226
|
-
|
182
|
+
## Documentation
|
227
183
|
|
228
|
-
|
184
|
+
📚 **[Complete documentation](https://schemathesis.readthedocs.io/)** with guides, examples, and API reference.
|
229
185
|
|
230
|
-
|
186
|
+
## Get Help
|
231
187
|
|
232
|
-
|
188
|
+
- 💬 [Discord community](https://discord.gg/R9ASRAmHnA)
|
189
|
+
- 🐛 [GitHub issues](https://github.com/schemathesis/schemathesis/issues)
|
190
|
+
- ✉️ [Email support](mailto:support@schemathesis.io)
|
233
191
|
|
234
192
|
## Contributing
|
235
193
|
|
236
|
-
We welcome contributions!
|
237
|
-
|
238
|
-
- Discuss ideas in [GitHub issues](https://github.com/schemathesis/schemathesis/issues) or our [Discord server](https://discord.gg/R9ASRAmHnA)
|
239
|
-
- See our [contributing guidelines](https://github.com/schemathesis/schemathesis/blob/master/CONTRIBUTING.rst) for code contributions
|
240
|
-
- Share your experience using [this feedback form](https://forms.gle/kJ4hSxc1Yp6Ga96t5)
|
241
|
-
|
242
|
-
## Get in Touch
|
243
|
-
|
244
|
-
Need assistance with integration or have specific questions? Contact us at <a href="mailto:support@schemathesis.io">support@schemathesis.io</a>.
|
194
|
+
We welcome contributions! See our [contributing guidelines](CONTRIBUTING.rst) and join discussions in [issues](https://github.com/schemathesis/schemathesis/issues) or [Discord](https://discord.gg/R9ASRAmHnA).
|
245
195
|
|
246
196
|
## Acknowledgements
|
247
197
|
|
248
198
|
Schemathesis is built on top of <a href="https://hypothesis.works/" target="_blank">Hypothesis</a>, a powerful property-based testing library for Python.
|
249
199
|
|
200
|
+
---
|
201
|
+
|
202
|
+
> **Note:** This is the V4 development branch. For the stable release, see [V3](https://github.com/schemathesis/schemathesis/tree/v3).
|
203
|
+
|
250
204
|
## License
|
251
205
|
|
252
206
|
This project is licensed under the terms of the [MIT license](https://opensource.org/licenses/MIT).
|
@@ -1,59 +1,57 @@
|
|
1
|
-
schemathesis/__init__.py,sha256=
|
2
|
-
schemathesis/auths.py,sha256=
|
3
|
-
schemathesis/checks.py,sha256=
|
1
|
+
schemathesis/__init__.py,sha256=c-zgYns-v0qpXvTJSc2gxz2medwiQgFRanoTZQiP7BA,1254
|
2
|
+
schemathesis/auths.py,sha256=hoKKM1POr4AeMcopGLK8fHqhH36-FSLpySxXI2xlc2M,16839
|
3
|
+
schemathesis/checks.py,sha256=eDs2WwVNS_T_Q8rKlfUKYbUcR7TURzW8eQ8ts9GsqVk,6382
|
4
4
|
schemathesis/errors.py,sha256=T8nobEi5tQX_SkwaYb8JFoIlF9F_vOQVprZ8EVPAhjA,931
|
5
5
|
schemathesis/filters.py,sha256=OEub50Ob5sf0Tn3iTeuIaxSMtepF7KVoiEM9wtt5GGA,13433
|
6
|
-
schemathesis/hooks.py,sha256=
|
6
|
+
schemathesis/hooks.py,sha256=zhrA32jznnTxzRFWk2rM6gYtfC9tBodUGJygpKyu2pk,13943
|
7
7
|
schemathesis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
|
-
schemathesis/schemas.py,sha256=
|
8
|
+
schemathesis/schemas.py,sha256=GjjcD39k08McIsf62jCp959MDPt-wuE6SvOcrSSMOmM,25935
|
9
9
|
schemathesis/cli/__init__.py,sha256=U9gjzWWpiFhaqevPjZbwyTNjABdpvXETI4HgwdGKnvs,877
|
10
10
|
schemathesis/cli/__main__.py,sha256=MWaenjaUTZIfNPFzKmnkTiawUri7DVldtg3mirLwzU8,92
|
11
11
|
schemathesis/cli/constants.py,sha256=rUixnqorraUFDtOu3Nmm1x_k0qbgmW9xW96kQB_fBCQ,338
|
12
12
|
schemathesis/cli/core.py,sha256=ue7YUdVo3YvuzGL4s6i62NL6YqNDeVPBSnQ1znrvG2w,480
|
13
13
|
schemathesis/cli/commands/__init__.py,sha256=rubTCCRGuMIbNYOl8yQEioiuHtTq__tWjkUtFWYGhqQ,3433
|
14
14
|
schemathesis/cli/commands/data.py,sha256=_ALywjIeCZjuaoDQFy-Kj8RZkEGqXd-Y95O47h8Jszs,171
|
15
|
-
schemathesis/cli/commands/run/__init__.py,sha256=
|
16
|
-
schemathesis/cli/commands/run/context.py,sha256=
|
17
|
-
schemathesis/cli/commands/run/events.py,sha256=
|
18
|
-
schemathesis/cli/commands/run/executor.py,sha256=
|
15
|
+
schemathesis/cli/commands/run/__init__.py,sha256=OzmofeSlyngQAQ1KRmjrQO3kTL-6APCpoG2TfpB34RA,18626
|
16
|
+
schemathesis/cli/commands/run/context.py,sha256=taegOHWc_B-HDwiU1R9Oi4q57mdfLXc-B954QUj8t7A,7984
|
17
|
+
schemathesis/cli/commands/run/events.py,sha256=ew0TQOc9T2YBZynYWv95k9yfAk8-hGuZDLMxjT8EhvY,1595
|
18
|
+
schemathesis/cli/commands/run/executor.py,sha256=kFbZw583SZ-jqjv8goTp2yEJOpZ_bzecyTeZvdc6qTE,5327
|
19
19
|
schemathesis/cli/commands/run/filters.py,sha256=pzkNRcf5vLPSsMfnvt711GNzRSBK5iZIFjPA0fiH1N4,1701
|
20
20
|
schemathesis/cli/commands/run/loaders.py,sha256=6j0ez7wduAUYbUT28ELKxMf-dYEWr_67m_KIuTSyNGk,4358
|
21
|
-
schemathesis/cli/commands/run/validation.py,sha256=
|
21
|
+
schemathesis/cli/commands/run/validation.py,sha256=FzCzYdW1-hn3OgyzPO1p6wHEX5PG7HdewbPRvclV_vc,9002
|
22
22
|
schemathesis/cli/commands/run/handlers/__init__.py,sha256=TPZ3KdGi8m0fjlN0GjA31MAXXn1qI7uU4FtiDwroXZI,1915
|
23
23
|
schemathesis/cli/commands/run/handlers/base.py,sha256=yDsTtCiztLksfk7cRzg8JlaAVOfS-zwK3tsJMOXAFyc,530
|
24
24
|
schemathesis/cli/commands/run/handlers/cassettes.py,sha256=Gu0qcxzvHp1zMY-SVkY96T-Ifwtdh6oj-w0gE1MShnA,19157
|
25
25
|
schemathesis/cli/commands/run/handlers/junitxml.py,sha256=FX_347PcHhGLG7XY3eG8VwhB_8tSX4mOtqjZj_s6yLM,2402
|
26
|
-
schemathesis/cli/commands/run/handlers/output.py,sha256=
|
26
|
+
schemathesis/cli/commands/run/handlers/output.py,sha256=e-mPAomU2yhA44EHBoGOSdT6OZ9bvtZ2rIv1JXtO-qI,61726
|
27
27
|
schemathesis/cli/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
28
|
schemathesis/cli/ext/fs.py,sha256=3lvoAsEDDdih75ITJJNxemd3nwxX55gGWrI7uDxm0cM,447
|
29
29
|
schemathesis/cli/ext/groups.py,sha256=kQ37t6qeArcKaY2y5VxyK3_KwAkBKCVm58IYV8gewds,2720
|
30
30
|
schemathesis/cli/ext/options.py,sha256=6yYwZNJL__FCEEL7kI3r5MbVmbp3ZeQjm7DrZ6J_h7s,3347
|
31
|
-
schemathesis/config/__init__.py,sha256=
|
31
|
+
schemathesis/config/__init__.py,sha256=Ff-mcdwCatFIS_WpJNpSe-gl7ez0-m_s4F2_4Teg2eM,6240
|
32
32
|
schemathesis/config/_auth.py,sha256=83RLVPm97W2thbn-yi01Rt94YwOxLG_a5VoxhEfjUjs,1528
|
33
33
|
schemathesis/config/_checks.py,sha256=F0r16eSSiICvoiTUkNNOE2PH73EGd8bikoeZdME_3Yw,10763
|
34
34
|
schemathesis/config/_diff_base.py,sha256=-XqS6cTzZC5fplz8_2RSZHDMSAPJhBBIEP6H8wcgHmo,4221
|
35
35
|
schemathesis/config/_env.py,sha256=8XfIyrnGNQuCDnfG0lwmKRFbasRUjgeQGBAMupsmtOU,613
|
36
36
|
schemathesis/config/_error.py,sha256=TxuuqQ1olwJc7P7ssfxXb1dB_Xn5uVsoazjvYvRxrxA,5437
|
37
|
-
schemathesis/config/_generation.py,sha256=
|
37
|
+
schemathesis/config/_generation.py,sha256=_THqCfC20i8RRRsO2hAwoJ52FV-CS1xOA6me3Wp3FHw,5087
|
38
38
|
schemathesis/config/_health_check.py,sha256=zC9inla5ibMBlEy5WyM4_TME7ju_KH3Bwfo21RI3Gks,561
|
39
|
-
schemathesis/config/_operations.py,sha256=
|
39
|
+
schemathesis/config/_operations.py,sha256=OZMTcfTLef6M8CR9logi6vyaz3XdmZfEMjIobgxjOHA,12181
|
40
40
|
schemathesis/config/_output.py,sha256=3G9SOi-4oNcQPHeNRG3HggFCwvcKOW1kF28a9m0H-pU,4434
|
41
41
|
schemathesis/config/_parameters.py,sha256=i76Hwaf834fBAMmtKfKTl1SFCicJ-Y-5tZt5QNGW2fA,618
|
42
|
-
schemathesis/config/_phases.py,sha256=
|
43
|
-
schemathesis/config/_projects.py,sha256=
|
42
|
+
schemathesis/config/_phases.py,sha256=NFUhn-xzEQdNtgNVW1t51lMquXbjRNGR_QuiCRLCi28,6454
|
43
|
+
schemathesis/config/_projects.py,sha256=ddAPTE-uEgjp5SXzQhQoliWtP6feT1ApXPXpsyvdo5I,19367
|
44
44
|
schemathesis/config/_rate_limit.py,sha256=ekEW-jP_Ichk_O6hYpj-h2TTTKfp7Fm0nyFUbvlWcbA,456
|
45
|
-
schemathesis/config/_report.py,sha256=
|
45
|
+
schemathesis/config/_report.py,sha256=aYLnPO74B7Wfn_qTwlEp5zY9L74U1XFuYS10yjwKKWY,3885
|
46
46
|
schemathesis/config/_validator.py,sha256=IcE8geFZ0ZwR18rkIRs25i7pTl7Z84XbjYGUB-mqReU,258
|
47
|
-
schemathesis/config/
|
48
|
-
schemathesis/
|
49
|
-
schemathesis/contrib/openapi/__init__.py,sha256=-7mBZ9RQj0EGzzmC-HKiT5ZslwHcoWFqCVpRG0GHO_o,162
|
50
|
-
schemathesis/contrib/openapi/fill_missing_examples.py,sha256=BfBpuy3vCKbE_uILqPXnm7kxEDopAr5tNQwP5E9xX8A,585
|
47
|
+
schemathesis/config/_warnings.py,sha256=sI0VZcTj3dOnphhBwYwU_KTagxr89HGWTtQ99HcY84k,772
|
48
|
+
schemathesis/config/schema.json,sha256=wC1qe9M_fXotfmlBOmW_FCTRw9K5YC814-PipMGKllE,18907
|
51
49
|
schemathesis/core/__init__.py,sha256=5fAAKG6BAA5DP9qOUnMT1cG5LLN3tU7D7VdLyb-MxfM,1880
|
52
50
|
schemathesis/core/compat.py,sha256=9BWCrFoqN2sJIaiht_anxe8kLjYMR7t0iiOkXqLRUZ8,1058
|
53
51
|
schemathesis/core/control.py,sha256=IzwIc8HIAEMtZWW0Q0iXI7T1niBpjvcLlbuwOSmy5O8,130
|
54
52
|
schemathesis/core/curl.py,sha256=yuaCe_zHLGwUjEeloQi6W3tOA3cGdnHDNI17-5jia0o,1723
|
55
53
|
schemathesis/core/deserialization.py,sha256=ygIj4fNaOd0mJ2IvTsn6bsabBt_2AbSLCz-z9UqfpdQ,2406
|
56
|
-
schemathesis/core/errors.py,sha256=
|
54
|
+
schemathesis/core/errors.py,sha256=hOXoPKlMdaoRp1MRHkrpQs-5BmJt7PMecEcYOAelQe4,16404
|
57
55
|
schemathesis/core/failures.py,sha256=MYyRnom-XeUEuBmq2ffdz34xhxmpSHWaQunfHtliVsY,8932
|
58
56
|
schemathesis/core/fs.py,sha256=ItQT0_cVwjDdJX9IiI7EnU75NI2H3_DCEyyUjzg_BgI,472
|
59
57
|
schemathesis/core/hooks.py,sha256=qhbkkRSf8URJ4LKv2wmKRINKpquUOgxQzWBHKWRWo3Q,475
|
@@ -65,54 +63,54 @@ schemathesis/core/rate_limit.py,sha256=7tg9Znk11erTfw8-ANutjEmu7hbfUHZx_iEdkoaP1
|
|
65
63
|
schemathesis/core/registries.py,sha256=T4jZB4y3zBHdeSgQc0pRbgSeMblvO-6z4I3zmzIfTi0,811
|
66
64
|
schemathesis/core/result.py,sha256=d449YvyONjqjDs-A5DAPgtAI96iT753K8sU6_1HLo2Q,461
|
67
65
|
schemathesis/core/transforms.py,sha256=63aeLkR93r3krq4CwYtDcoS_pFBky4L16c9DcFsBHuE,3535
|
68
|
-
schemathesis/core/transport.py,sha256=
|
66
|
+
schemathesis/core/transport.py,sha256=kijYBWjSYoL3EDvfmUwwKS0TsopM_y8MlQ8YK-w0L9U,4534
|
69
67
|
schemathesis/core/validation.py,sha256=rnhzsqWukMWyrc7sRm0kZNHTePoPCQ3A4kLpLxrb0jM,1641
|
70
68
|
schemathesis/core/version.py,sha256=O-6yFbNocbD4RDwiBZLborxTp54htyKxBWTqpZDnPvg,202
|
71
69
|
schemathesis/core/output/__init__.py,sha256=SiHqONFskXl73AtP5dV29L14nZoKo7B-IeG52KZB32M,1446
|
72
70
|
schemathesis/core/output/sanitization.py,sha256=Ev3tae8dVwsYd7yVb2_1VBFYs92WFsQ4Eu1fGaymItE,2013
|
73
71
|
schemathesis/engine/__init__.py,sha256=QaFE-FinaTAaarteADo2RRMJ-Sz6hZB9TzD5KjMinIA,706
|
74
|
-
schemathesis/engine/context.py,sha256=
|
72
|
+
schemathesis/engine/context.py,sha256=x-I9KX6rO6hdCvvN8FEdzIZBqIcNaxdNYHgQjcXbZhM,3931
|
75
73
|
schemathesis/engine/control.py,sha256=QKUOs5VMphe7EcAIro_DDo9ZqdOU6ZVwTU1gMNndHWw,1006
|
76
74
|
schemathesis/engine/core.py,sha256=Pnpf1zNTxruUOnnJ9rQ-MskXj4WuA4A27_fWrf0hXWc,5609
|
77
|
-
schemathesis/engine/errors.py,sha256=
|
78
|
-
schemathesis/engine/events.py,sha256=
|
75
|
+
schemathesis/engine/errors.py,sha256=KK76ScUlV7Ce-Gj61kRs_PpaF8zX-4hrzCw3SKQYI28,18797
|
76
|
+
schemathesis/engine/events.py,sha256=VV6epicFIJnX4c87fVNSd0ibDccX3gryDv52OUGa3FI,6370
|
79
77
|
schemathesis/engine/recorder.py,sha256=K3HfMARrT5mPWXPnYebjjcq5CcsBRhMrtZwEL9_Lvtg,8432
|
80
78
|
schemathesis/engine/phases/__init__.py,sha256=zzILnWjoDJQwNmvEmrj3HXVAKT2q7Vb614svjyt8E-U,2794
|
81
|
-
schemathesis/engine/phases/probes.py,sha256
|
82
|
-
schemathesis/engine/phases/stateful/__init__.py,sha256=
|
83
|
-
schemathesis/engine/phases/stateful/_executor.py,sha256=
|
84
|
-
schemathesis/engine/phases/stateful/context.py,sha256=
|
79
|
+
schemathesis/engine/phases/probes.py,sha256=-8JdQhMwANTkq64s5h8867oojorM5nUU8P0btdfJne4,5141
|
80
|
+
schemathesis/engine/phases/stateful/__init__.py,sha256=Lz1rgNqCfUSIz173XqCGsiMuUI5bh4L-RIFexU1-c_Q,2461
|
81
|
+
schemathesis/engine/phases/stateful/_executor.py,sha256=CV4jUuXpV4uSXVJqDI4btnLR8dpzOQVqbv2qVCgE4_s,15182
|
82
|
+
schemathesis/engine/phases/stateful/context.py,sha256=A7X1SLDOWFpCvFN9IiIeNVZM0emjqatmJL_k9UsO7vM,2946
|
85
83
|
schemathesis/engine/phases/unit/__init__.py,sha256=BvZh39LZmXg90Cy_Tn0cQY5y7eWzYvAEmJ43fGKFAt8,8715
|
86
|
-
schemathesis/engine/phases/unit/_executor.py,sha256=
|
84
|
+
schemathesis/engine/phases/unit/_executor.py,sha256=jay_D7fmmBTjZigifmY30RiVP5Jb0OlK450fknSWZ_I,16471
|
87
85
|
schemathesis/engine/phases/unit/_pool.py,sha256=iU0hdHDmohPnEv7_S1emcabuzbTf-Cznqwn0pGQ5wNQ,2480
|
88
|
-
schemathesis/generation/__init__.py,sha256=
|
89
|
-
schemathesis/generation/case.py,sha256=
|
90
|
-
schemathesis/generation/coverage.py,sha256=
|
86
|
+
schemathesis/generation/__init__.py,sha256=tvNO2FLiY8z3fZ_kL_QJhSgzXfnT4UqwSXMHCwfLI0g,645
|
87
|
+
schemathesis/generation/case.py,sha256=ejglUXCqGYC7IwQkSvpVUPHNYHbYSZWf6kotFNKn-UQ,7516
|
88
|
+
schemathesis/generation/coverage.py,sha256=bKP0idU5-eiK4VwhH4kjxDPtCZzMg81mbN1tEDuT6EA,47913
|
91
89
|
schemathesis/generation/meta.py,sha256=5ikrlhdk424dWcYLekZSMoWJYRl9_IhI80GKZzhByi4,2512
|
92
|
-
schemathesis/generation/
|
90
|
+
schemathesis/generation/metrics.py,sha256=cZU5HdeAMcLFEDnTbNE56NuNq4P0N4ew-g1NEz5-kt4,2836
|
91
|
+
schemathesis/generation/modes.py,sha256=Q1fhjWr3zxabU5qdtLvKfpMFZJAwlW9pnxgenjeXTyU,481
|
93
92
|
schemathesis/generation/overrides.py,sha256=iPxnxPIKKhO9mwPwKszYv40VM4ylxFJvhzWvrC6qkOE,4385
|
94
|
-
schemathesis/generation/targets.py,sha256=_rN2qgxTE2EfvygiN-Fy3WmDnRH0ERohdx3sKRDaYhU,2120
|
95
93
|
schemathesis/generation/hypothesis/__init__.py,sha256=SVwM-rx07jPZzms0idWYACgUtWAxh49HRuTnaQ__zf0,1549
|
96
|
-
schemathesis/generation/hypothesis/builder.py,sha256=
|
94
|
+
schemathesis/generation/hypothesis/builder.py,sha256=0BX_UfVqgLaYEk9sikcSeEzYPB7kJfK0Pb7pbZqw4C8,32374
|
97
95
|
schemathesis/generation/hypothesis/examples.py,sha256=6eGaKUEC3elmKsaqfKj1sLvM8EHc-PWT4NRBq4NI0Rs,1409
|
98
96
|
schemathesis/generation/hypothesis/given.py,sha256=sTZR1of6XaHAPWtHx2_WLlZ50M8D5Rjux0GmWkWjDq4,2337
|
99
97
|
schemathesis/generation/hypothesis/reporting.py,sha256=uDVow6Ya8YFkqQuOqRsjbzsbyP4KKfr3jA7ZaY4FuKY,279
|
100
98
|
schemathesis/generation/hypothesis/strategies.py,sha256=RurE81E06d99YKG48dizy9346ayfNswYTt38zewmGgw,483
|
101
|
-
schemathesis/generation/stateful/__init__.py,sha256=
|
102
|
-
schemathesis/generation/stateful/state_machine.py,sha256=
|
99
|
+
schemathesis/generation/stateful/__init__.py,sha256=0nx0A1G7MmuGMqrLFNl7SWSvRC0H7PBNTM0DwvPuozU,724
|
100
|
+
schemathesis/generation/stateful/state_machine.py,sha256=ScbueD_KRL6wXuAEzdPIVfaV7Hrk2Z_g2cDVKgOgITo,12689
|
103
101
|
schemathesis/graphql/__init__.py,sha256=_eO6MAPHGgiADVGRntnwtPxmuvk666sAh-FAU4cG9-0,326
|
104
102
|
schemathesis/graphql/checks.py,sha256=IADbxiZjgkBWrC5yzHDtohRABX6zKXk5w_zpWNwdzYo,3186
|
105
|
-
schemathesis/graphql/loaders.py,sha256=
|
103
|
+
schemathesis/graphql/loaders.py,sha256=GbUEsF0MbHZIYo_3pFShjeAM-Yjc2iIfcQsmBqjnNJ8,9236
|
106
104
|
schemathesis/openapi/__init__.py,sha256=-KcsSAM19uOM0N5J4s-yTnQ1BFsptYhW1E51cEf6kVM,311
|
107
105
|
schemathesis/openapi/checks.py,sha256=5AP_pjTIJ7GcHNhTtGz-IOeoutZ4HqkxyoANrRKf23M,10825
|
108
|
-
schemathesis/openapi/loaders.py,sha256=
|
106
|
+
schemathesis/openapi/loaders.py,sha256=34j6TTwJiMbSlndOfOgqFbK_6QP4zg-NRCNriolklfk,10537
|
109
107
|
schemathesis/openapi/generation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
110
108
|
schemathesis/openapi/generation/filters.py,sha256=EBbgW9zH3wA4d9FyBWp4koiPrrIpNGFnousBDl9qJso,2079
|
111
109
|
schemathesis/pytest/__init__.py,sha256=7W0q-Thcw03IAQfXE_Mo8JPZpUdHJzfu85fjK1ZdfQM,88
|
112
110
|
schemathesis/pytest/control_flow.py,sha256=F8rAPsPeNv_sJiJgbZYtTpwKWjauZmqFUaKroY2GmQI,217
|
113
111
|
schemathesis/pytest/lazy.py,sha256=Wbyn3fYqcmDL7uOFO0PgVpR7--MP8g3Z8q1yArjmDEo,11824
|
114
|
-
schemathesis/pytest/loaders.py,sha256=
|
115
|
-
schemathesis/pytest/plugin.py,sha256=
|
112
|
+
schemathesis/pytest/loaders.py,sha256=Sbv8e5F77_x4amLP50iwubfm6kpOhx7LhLFGsVXW5Ys,925
|
113
|
+
schemathesis/pytest/plugin.py,sha256=aeICgN9NJ14M-EjEv8SKGORH81Wspb4oR-zq51ayXbo,13305
|
116
114
|
schemathesis/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
117
115
|
schemathesis/python/asgi.py,sha256=5PyvuTBaivvyPUEi3pwJni91K1kX5Zc0u9c6c1D8a1Q,287
|
118
116
|
schemathesis/python/wsgi.py,sha256=uShAgo_NChbfYaV1117e6UHp0MTg7jaR0Sy_to3Jmf8,219
|
@@ -120,23 +118,23 @@ schemathesis/specs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
120
118
|
schemathesis/specs/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
121
119
|
schemathesis/specs/graphql/_cache.py,sha256=QIcEFy2Koy5K0-u1nB-iab52LDlYsTm_9N5t42GplkM,770
|
122
120
|
schemathesis/specs/graphql/nodes.py,sha256=bE3G1kNmqJ8OV4igBvIK-UORrkQA6Nofduf87O3TD9I,541
|
123
|
-
schemathesis/specs/graphql/scalars.py,sha256=
|
124
|
-
schemathesis/specs/graphql/schemas.py,sha256=
|
121
|
+
schemathesis/specs/graphql/scalars.py,sha256=6lew8mnwhrtg23leiEbG43mLGPLlRln8mClCY94XpDA,2680
|
122
|
+
schemathesis/specs/graphql/schemas.py,sha256=3LROUVR81pm5za1VtLTjeb1LF5r8pe_ihXe6Uif2a2Y,14491
|
125
123
|
schemathesis/specs/graphql/validation.py,sha256=-W1Noc1MQmTb4RX-gNXMeU2qkgso4mzVfHxtdLkCPKM,1422
|
126
124
|
schemathesis/specs/openapi/__init__.py,sha256=C5HOsfuDJGq_3mv8CRBvRvb0Diy1p0BFdqyEXMS-loE,238
|
127
125
|
schemathesis/specs/openapi/_cache.py,sha256=HpglmETmZU0RCHxp3DO_sg5_B_nzi54Zuw9vGzzYCxY,4295
|
128
|
-
schemathesis/specs/openapi/_hypothesis.py,sha256=
|
129
|
-
schemathesis/specs/openapi/checks.py,sha256=
|
126
|
+
schemathesis/specs/openapi/_hypothesis.py,sha256=IB39ELO6G58OlRyz5pn7RWKSFfSfGezaXhjVy-T3e2w,21491
|
127
|
+
schemathesis/specs/openapi/checks.py,sha256=M7gFS9wLSWj9h7uTq4aSd1-e-BykV05uiV-lT5l8BYU,27628
|
130
128
|
schemathesis/specs/openapi/constants.py,sha256=JqM_FHOenqS_MuUE9sxVQ8Hnw0DNM8cnKDwCwPLhID4,783
|
131
129
|
schemathesis/specs/openapi/converter.py,sha256=lil8IewM5j8tvt4lpA9g_KITvIwx1M96i45DNSHNjoc,3505
|
132
130
|
schemathesis/specs/openapi/definitions.py,sha256=8htclglV3fW6JPBqs59lgM4LnA25Mm9IptXBPb_qUT0,93949
|
133
131
|
schemathesis/specs/openapi/examples.py,sha256=9dMY4d2WWz32JywKZzyLO5jdbMWcRqjjGHzhMqlqwIs,21129
|
134
|
-
schemathesis/specs/openapi/formats.py,sha256=
|
135
|
-
schemathesis/specs/openapi/media_types.py,sha256=
|
132
|
+
schemathesis/specs/openapi/formats.py,sha256=8AIS7Uey-Z1wm1WYRqnsVqHwG9d316PdqfKLqwUs7us,3516
|
133
|
+
schemathesis/specs/openapi/media_types.py,sha256=F5M6TKl0s6Z5X8mZpPsWDEdPBvxclKRcUOc41eEwKbo,2472
|
136
134
|
schemathesis/specs/openapi/parameters.py,sha256=tVL61gDe9A8_jwoVKZZvpXKPerMyq7vkAvwdMsi44TI,14622
|
137
135
|
schemathesis/specs/openapi/patterns.py,sha256=cBj8W4wn7VLJd4nABaIH5f502-zBDiqljxLgPWUn-50,15609
|
138
136
|
schemathesis/specs/openapi/references.py,sha256=40YcDExPLR2B8EOwt-Csw-5MYFi2xj_DXf91J0Pc9d4,8855
|
139
|
-
schemathesis/specs/openapi/schemas.py,sha256=
|
137
|
+
schemathesis/specs/openapi/schemas.py,sha256=2AcbX2ABkZZGfhrkbN6ZMvParwRFfpCtIZDZbFutBOs,54928
|
140
138
|
schemathesis/specs/openapi/security.py,sha256=6UWYMhL-dPtkTineqqBFNKca1i4EuoTduw-EOLeE0aQ,7149
|
141
139
|
schemathesis/specs/openapi/serialization.py,sha256=VdDLmeHqxlWM4cxQQcCkvrU6XurivolwEEaT13ohelA,11972
|
142
140
|
schemathesis/specs/openapi/utils.py,sha256=ER4vJkdFVDIE7aKyxyYatuuHVRNutytezgE52pqZNE8,900
|
@@ -150,17 +148,17 @@ schemathesis/specs/openapi/negative/__init__.py,sha256=eKiBWsMYjcJ0mNmh07IOnbVMH
|
|
150
148
|
schemathesis/specs/openapi/negative/mutations.py,sha256=MIFVSWbZHW92KhpWruJT3XLisgc-rFnvYasRtwMmExs,19253
|
151
149
|
schemathesis/specs/openapi/negative/types.py,sha256=a7buCcVxNBG6ILBM3A7oNTAX0lyDseEtZndBuej8MbI,174
|
152
150
|
schemathesis/specs/openapi/negative/utils.py,sha256=ozcOIuASufLqZSgnKUACjX-EOZrrkuNdXX0SDnLoGYA,168
|
153
|
-
schemathesis/specs/openapi/stateful/__init__.py,sha256=
|
151
|
+
schemathesis/specs/openapi/stateful/__init__.py,sha256=FSitLbJxjBYU814cqjI_QCkdyoIc-9xfT_1HQcYwsXw,15064
|
154
152
|
schemathesis/specs/openapi/stateful/control.py,sha256=QaXLSbwQWtai5lxvvVtQV3BLJ8n5ePqSKB00XFxp-MA,3695
|
155
153
|
schemathesis/specs/openapi/stateful/links.py,sha256=8oHpmb-yBa3kZKoCv9ytndpOp80dG1vVis2-EpbkeVA,11432
|
156
|
-
schemathesis/transport/__init__.py,sha256=
|
154
|
+
schemathesis/transport/__init__.py,sha256=6yg_RfV_9L0cpA6qpbH-SL9_3ggtHQji9CZrpIkbA6s,5321
|
157
155
|
schemathesis/transport/asgi.py,sha256=qTClt6oT_xUEWnRHokACN_uqCNNUZrRPT6YG0PjbElY,926
|
158
|
-
schemathesis/transport/prepare.py,sha256=
|
159
|
-
schemathesis/transport/requests.py,sha256=
|
156
|
+
schemathesis/transport/prepare.py,sha256=c7__wdblBC4zqnmtcs99zoAeEY8jfXiGbdzh74icj6g,4668
|
157
|
+
schemathesis/transport/requests.py,sha256=MiMa9Y0db50fKFveipgGA8SMSAvH5ajuaY-fywhm1Eo,8804
|
160
158
|
schemathesis/transport/serialization.py,sha256=jIMra1LqRGav0OX3Hx7mvORt38ll4cd2DKit2D58FN0,10531
|
161
|
-
schemathesis/transport/wsgi.py,sha256=
|
162
|
-
schemathesis-4.0.
|
163
|
-
schemathesis-4.0.
|
164
|
-
schemathesis-4.0.
|
165
|
-
schemathesis-4.0.
|
166
|
-
schemathesis-4.0.
|
159
|
+
schemathesis/transport/wsgi.py,sha256=8i_pR_xOc2qiN6BtEYVetkVrNIFhpvSnO1QtJ-qX2JE,5676
|
160
|
+
schemathesis-4.0.0a12.dist-info/METADATA,sha256=W4MVtKBpgG1SsAWaIQPZkhYsamwFln4sW_sbsuJdupU,8494
|
161
|
+
schemathesis-4.0.0a12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
162
|
+
schemathesis-4.0.0a12.dist-info/entry_points.txt,sha256=hiK3un-xfgPdwj9uj16YVDtTNpO128bmk0U82SMv8ZQ,152
|
163
|
+
schemathesis-4.0.0a12.dist-info/licenses/LICENSE,sha256=2Ve4J8v5jMQAWrT7r1nf3bI8Vflk3rZVQefiF2zpxwg,1121
|
164
|
+
schemathesis-4.0.0a12.dist-info/RECORD,,
|
schemathesis/contrib/__init__.py
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
from schemathesis.generation.case import Case
|
4
|
-
from schemathesis.hooks import HookContext, register, unregister
|
5
|
-
|
6
|
-
|
7
|
-
def install() -> None:
|
8
|
-
register(before_add_examples)
|
9
|
-
|
10
|
-
|
11
|
-
def uninstall() -> None:
|
12
|
-
unregister(before_add_examples)
|
13
|
-
|
14
|
-
|
15
|
-
def before_add_examples(context: HookContext, examples: list[Case]) -> None:
|
16
|
-
if not examples and context.operation is not None:
|
17
|
-
from schemathesis.generation.hypothesis.examples import add_single_example
|
18
|
-
|
19
|
-
strategy = context.operation.as_strategy()
|
20
|
-
add_single_example(strategy, examples)
|
@@ -1,69 +0,0 @@
|
|
1
|
-
"""Support for Targeted Property-Based Testing."""
|
2
|
-
|
3
|
-
from __future__ import annotations
|
4
|
-
|
5
|
-
from dataclasses import dataclass
|
6
|
-
from typing import Callable, Sequence
|
7
|
-
|
8
|
-
from schemathesis.core.registries import Registry
|
9
|
-
from schemathesis.core.transport import Response
|
10
|
-
from schemathesis.generation.case import Case
|
11
|
-
|
12
|
-
|
13
|
-
@dataclass
|
14
|
-
class TargetContext:
|
15
|
-
case: Case
|
16
|
-
response: Response
|
17
|
-
|
18
|
-
__slots__ = ("case", "response")
|
19
|
-
|
20
|
-
|
21
|
-
TargetFunction = Callable[[TargetContext], float]
|
22
|
-
|
23
|
-
TARGETS = Registry[TargetFunction]()
|
24
|
-
target = TARGETS.register
|
25
|
-
|
26
|
-
|
27
|
-
@target
|
28
|
-
def response_time(ctx: TargetContext) -> float:
|
29
|
-
"""Response time as a metric to maximize."""
|
30
|
-
return ctx.response.elapsed
|
31
|
-
|
32
|
-
|
33
|
-
class TargetMetricCollector:
|
34
|
-
"""Collect multiple observations for target metrics."""
|
35
|
-
|
36
|
-
__slots__ = ("targets", "observations")
|
37
|
-
|
38
|
-
def __init__(self, targets: list[TargetFunction] | None = None) -> None:
|
39
|
-
self.targets = targets or []
|
40
|
-
self.observations: dict[str, list[float]] = {target.__name__: [] for target in self.targets}
|
41
|
-
|
42
|
-
def reset(self) -> None:
|
43
|
-
"""Reset all collected observations."""
|
44
|
-
for target in self.targets:
|
45
|
-
self.observations[target.__name__].clear()
|
46
|
-
|
47
|
-
def store(self, case: Case, response: Response) -> None:
|
48
|
-
"""Calculate target metrics & store them."""
|
49
|
-
context = TargetContext(case=case, response=response)
|
50
|
-
for target in self.targets:
|
51
|
-
self.observations[target.__name__].append(target(context))
|
52
|
-
|
53
|
-
def maximize(self) -> None:
|
54
|
-
"""Give feedback to the Hypothesis engine, so it maximizes the aggregated metrics."""
|
55
|
-
import hypothesis
|
56
|
-
|
57
|
-
for target in self.targets:
|
58
|
-
# Currently aggregation is just a sum
|
59
|
-
metric = sum(self.observations[target.__name__])
|
60
|
-
hypothesis.target(metric, label=target.__name__)
|
61
|
-
|
62
|
-
|
63
|
-
def run(targets: Sequence[TargetFunction], case: Case, response: Response) -> None:
|
64
|
-
import hypothesis
|
65
|
-
|
66
|
-
context = TargetContext(case=case, response=response)
|
67
|
-
for target in targets:
|
68
|
-
value = target(context)
|
69
|
-
hypothesis.target(value, label=target.__name__)
|
File without changes
|
File without changes
|
File without changes
|