schemathesis 3.39.16__py3-none-any.whl → 4.0.0__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 +41 -79
- schemathesis/auths.py +111 -122
- schemathesis/checks.py +169 -60
- schemathesis/cli/__init__.py +15 -2117
- schemathesis/cli/commands/__init__.py +85 -0
- schemathesis/cli/commands/data.py +10 -0
- schemathesis/cli/commands/run/__init__.py +590 -0
- schemathesis/cli/commands/run/context.py +204 -0
- schemathesis/cli/commands/run/events.py +60 -0
- schemathesis/cli/commands/run/executor.py +157 -0
- schemathesis/cli/commands/run/filters.py +53 -0
- schemathesis/cli/commands/run/handlers/__init__.py +46 -0
- schemathesis/cli/commands/run/handlers/base.py +18 -0
- schemathesis/cli/commands/run/handlers/cassettes.py +474 -0
- schemathesis/cli/commands/run/handlers/junitxml.py +55 -0
- schemathesis/cli/commands/run/handlers/output.py +1628 -0
- schemathesis/cli/commands/run/loaders.py +114 -0
- schemathesis/cli/commands/run/validation.py +246 -0
- schemathesis/cli/constants.py +5 -58
- schemathesis/cli/core.py +19 -0
- schemathesis/cli/ext/fs.py +16 -0
- schemathesis/cli/ext/groups.py +84 -0
- schemathesis/cli/{options.py → ext/options.py} +36 -34
- schemathesis/config/__init__.py +189 -0
- schemathesis/config/_auth.py +51 -0
- schemathesis/config/_checks.py +268 -0
- schemathesis/config/_diff_base.py +99 -0
- schemathesis/config/_env.py +21 -0
- schemathesis/config/_error.py +156 -0
- schemathesis/config/_generation.py +149 -0
- schemathesis/config/_health_check.py +24 -0
- schemathesis/config/_operations.py +327 -0
- schemathesis/config/_output.py +171 -0
- schemathesis/config/_parameters.py +19 -0
- schemathesis/config/_phases.py +187 -0
- schemathesis/config/_projects.py +527 -0
- schemathesis/config/_rate_limit.py +17 -0
- schemathesis/config/_report.py +120 -0
- schemathesis/config/_validator.py +9 -0
- schemathesis/config/_warnings.py +25 -0
- schemathesis/config/schema.json +885 -0
- schemathesis/core/__init__.py +67 -0
- schemathesis/core/compat.py +32 -0
- schemathesis/core/control.py +2 -0
- schemathesis/core/curl.py +58 -0
- schemathesis/core/deserialization.py +65 -0
- schemathesis/core/errors.py +459 -0
- schemathesis/core/failures.py +315 -0
- schemathesis/core/fs.py +19 -0
- schemathesis/core/hooks.py +20 -0
- schemathesis/core/loaders.py +104 -0
- schemathesis/core/marks.py +66 -0
- schemathesis/{transports/content_types.py → core/media_types.py} +14 -12
- schemathesis/core/output/__init__.py +46 -0
- schemathesis/core/output/sanitization.py +54 -0
- schemathesis/{throttling.py → core/rate_limit.py} +16 -17
- schemathesis/core/registries.py +31 -0
- schemathesis/core/transforms.py +113 -0
- schemathesis/core/transport.py +223 -0
- schemathesis/core/validation.py +54 -0
- schemathesis/core/version.py +7 -0
- schemathesis/engine/__init__.py +28 -0
- schemathesis/engine/context.py +118 -0
- schemathesis/engine/control.py +36 -0
- schemathesis/engine/core.py +169 -0
- schemathesis/engine/errors.py +464 -0
- schemathesis/engine/events.py +258 -0
- schemathesis/engine/phases/__init__.py +88 -0
- schemathesis/{runner → engine/phases}/probes.py +52 -68
- schemathesis/engine/phases/stateful/__init__.py +68 -0
- schemathesis/engine/phases/stateful/_executor.py +356 -0
- schemathesis/engine/phases/stateful/context.py +85 -0
- schemathesis/engine/phases/unit/__init__.py +212 -0
- schemathesis/engine/phases/unit/_executor.py +416 -0
- schemathesis/engine/phases/unit/_pool.py +82 -0
- schemathesis/engine/recorder.py +247 -0
- schemathesis/errors.py +43 -0
- schemathesis/filters.py +17 -98
- schemathesis/generation/__init__.py +5 -33
- schemathesis/generation/case.py +317 -0
- schemathesis/generation/coverage.py +282 -175
- schemathesis/generation/hypothesis/__init__.py +36 -0
- schemathesis/generation/hypothesis/builder.py +800 -0
- schemathesis/generation/{_hypothesis.py → hypothesis/examples.py} +2 -11
- schemathesis/generation/hypothesis/given.py +66 -0
- schemathesis/generation/hypothesis/reporting.py +14 -0
- schemathesis/generation/hypothesis/strategies.py +16 -0
- schemathesis/generation/meta.py +115 -0
- schemathesis/generation/metrics.py +93 -0
- schemathesis/generation/modes.py +20 -0
- schemathesis/generation/overrides.py +116 -0
- schemathesis/generation/stateful/__init__.py +37 -0
- schemathesis/generation/stateful/state_machine.py +278 -0
- schemathesis/graphql/__init__.py +15 -0
- schemathesis/graphql/checks.py +109 -0
- schemathesis/graphql/loaders.py +284 -0
- schemathesis/hooks.py +80 -101
- schemathesis/openapi/__init__.py +13 -0
- schemathesis/openapi/checks.py +455 -0
- schemathesis/openapi/generation/__init__.py +0 -0
- schemathesis/openapi/generation/filters.py +72 -0
- schemathesis/openapi/loaders.py +313 -0
- schemathesis/pytest/__init__.py +5 -0
- schemathesis/pytest/control_flow.py +7 -0
- schemathesis/pytest/lazy.py +281 -0
- schemathesis/pytest/loaders.py +36 -0
- schemathesis/{extra/pytest_plugin.py → pytest/plugin.py} +128 -108
- schemathesis/python/__init__.py +0 -0
- schemathesis/python/asgi.py +12 -0
- schemathesis/python/wsgi.py +12 -0
- schemathesis/schemas.py +537 -273
- schemathesis/specs/graphql/__init__.py +0 -1
- schemathesis/specs/graphql/_cache.py +1 -2
- schemathesis/specs/graphql/scalars.py +42 -6
- schemathesis/specs/graphql/schemas.py +141 -137
- schemathesis/specs/graphql/validation.py +11 -17
- schemathesis/specs/openapi/__init__.py +6 -1
- schemathesis/specs/openapi/_cache.py +1 -2
- schemathesis/specs/openapi/_hypothesis.py +142 -156
- schemathesis/specs/openapi/checks.py +368 -257
- schemathesis/specs/openapi/converter.py +4 -4
- schemathesis/specs/openapi/definitions.py +1 -1
- schemathesis/specs/openapi/examples.py +23 -21
- schemathesis/specs/openapi/expressions/__init__.py +31 -19
- schemathesis/specs/openapi/expressions/extractors.py +1 -4
- schemathesis/specs/openapi/expressions/lexer.py +1 -1
- schemathesis/specs/openapi/expressions/nodes.py +36 -41
- schemathesis/specs/openapi/expressions/parser.py +1 -1
- schemathesis/specs/openapi/formats.py +35 -7
- schemathesis/specs/openapi/media_types.py +53 -12
- schemathesis/specs/openapi/negative/__init__.py +7 -4
- schemathesis/specs/openapi/negative/mutations.py +6 -5
- schemathesis/specs/openapi/parameters.py +7 -10
- schemathesis/specs/openapi/patterns.py +94 -31
- schemathesis/specs/openapi/references.py +12 -53
- schemathesis/specs/openapi/schemas.py +233 -307
- schemathesis/specs/openapi/security.py +1 -1
- schemathesis/specs/openapi/serialization.py +12 -6
- schemathesis/specs/openapi/stateful/__init__.py +268 -133
- schemathesis/specs/openapi/stateful/control.py +87 -0
- schemathesis/specs/openapi/stateful/links.py +209 -0
- schemathesis/transport/__init__.py +142 -0
- schemathesis/transport/asgi.py +26 -0
- schemathesis/transport/prepare.py +124 -0
- schemathesis/transport/requests.py +244 -0
- schemathesis/{_xml.py → transport/serialization.py} +69 -11
- schemathesis/transport/wsgi.py +171 -0
- schemathesis-4.0.0.dist-info/METADATA +204 -0
- schemathesis-4.0.0.dist-info/RECORD +164 -0
- {schemathesis-3.39.16.dist-info → schemathesis-4.0.0.dist-info}/entry_points.txt +1 -1
- {schemathesis-3.39.16.dist-info → schemathesis-4.0.0.dist-info}/licenses/LICENSE +1 -1
- schemathesis/_compat.py +0 -74
- schemathesis/_dependency_versions.py +0 -19
- schemathesis/_hypothesis.py +0 -717
- schemathesis/_override.py +0 -50
- schemathesis/_patches.py +0 -21
- schemathesis/_rate_limiter.py +0 -7
- schemathesis/cli/callbacks.py +0 -466
- schemathesis/cli/cassettes.py +0 -561
- schemathesis/cli/context.py +0 -75
- schemathesis/cli/debug.py +0 -27
- schemathesis/cli/handlers.py +0 -19
- schemathesis/cli/junitxml.py +0 -124
- schemathesis/cli/output/__init__.py +0 -1
- schemathesis/cli/output/default.py +0 -920
- schemathesis/cli/output/short.py +0 -59
- schemathesis/cli/reporting.py +0 -79
- schemathesis/cli/sanitization.py +0 -26
- schemathesis/code_samples.py +0 -151
- schemathesis/constants.py +0 -54
- schemathesis/contrib/__init__.py +0 -11
- schemathesis/contrib/openapi/__init__.py +0 -11
- schemathesis/contrib/openapi/fill_missing_examples.py +0 -24
- schemathesis/contrib/openapi/formats/__init__.py +0 -9
- schemathesis/contrib/openapi/formats/uuid.py +0 -16
- schemathesis/contrib/unique_data.py +0 -41
- schemathesis/exceptions.py +0 -571
- schemathesis/experimental/__init__.py +0 -109
- schemathesis/extra/_aiohttp.py +0 -28
- schemathesis/extra/_flask.py +0 -13
- schemathesis/extra/_server.py +0 -18
- schemathesis/failures.py +0 -284
- schemathesis/fixups/__init__.py +0 -37
- schemathesis/fixups/fast_api.py +0 -41
- schemathesis/fixups/utf8_bom.py +0 -28
- schemathesis/generation/_methods.py +0 -44
- schemathesis/graphql.py +0 -3
- schemathesis/internal/__init__.py +0 -7
- schemathesis/internal/checks.py +0 -86
- schemathesis/internal/copy.py +0 -32
- schemathesis/internal/datetime.py +0 -5
- schemathesis/internal/deprecation.py +0 -37
- schemathesis/internal/diff.py +0 -15
- schemathesis/internal/extensions.py +0 -27
- schemathesis/internal/jsonschema.py +0 -36
- schemathesis/internal/output.py +0 -68
- schemathesis/internal/transformation.py +0 -26
- schemathesis/internal/validation.py +0 -34
- schemathesis/lazy.py +0 -474
- schemathesis/loaders.py +0 -122
- schemathesis/models.py +0 -1341
- schemathesis/parameters.py +0 -90
- schemathesis/runner/__init__.py +0 -605
- schemathesis/runner/events.py +0 -389
- schemathesis/runner/impl/__init__.py +0 -3
- schemathesis/runner/impl/context.py +0 -88
- schemathesis/runner/impl/core.py +0 -1280
- schemathesis/runner/impl/solo.py +0 -80
- schemathesis/runner/impl/threadpool.py +0 -391
- schemathesis/runner/serialization.py +0 -544
- schemathesis/sanitization.py +0 -252
- schemathesis/serializers.py +0 -328
- schemathesis/service/__init__.py +0 -18
- schemathesis/service/auth.py +0 -11
- schemathesis/service/ci.py +0 -202
- schemathesis/service/client.py +0 -133
- schemathesis/service/constants.py +0 -38
- schemathesis/service/events.py +0 -61
- schemathesis/service/extensions.py +0 -224
- schemathesis/service/hosts.py +0 -111
- schemathesis/service/metadata.py +0 -71
- schemathesis/service/models.py +0 -258
- schemathesis/service/report.py +0 -255
- schemathesis/service/serialization.py +0 -173
- schemathesis/service/usage.py +0 -66
- schemathesis/specs/graphql/loaders.py +0 -364
- schemathesis/specs/openapi/expressions/context.py +0 -16
- schemathesis/specs/openapi/links.py +0 -389
- schemathesis/specs/openapi/loaders.py +0 -707
- schemathesis/specs/openapi/stateful/statistic.py +0 -198
- schemathesis/specs/openapi/stateful/types.py +0 -14
- schemathesis/specs/openapi/validation.py +0 -26
- schemathesis/stateful/__init__.py +0 -147
- schemathesis/stateful/config.py +0 -97
- schemathesis/stateful/context.py +0 -135
- schemathesis/stateful/events.py +0 -274
- schemathesis/stateful/runner.py +0 -309
- schemathesis/stateful/sink.py +0 -68
- schemathesis/stateful/state_machine.py +0 -328
- schemathesis/stateful/statistic.py +0 -22
- schemathesis/stateful/validation.py +0 -100
- schemathesis/targets.py +0 -77
- schemathesis/transports/__init__.py +0 -369
- schemathesis/transports/asgi.py +0 -7
- schemathesis/transports/auth.py +0 -38
- schemathesis/transports/headers.py +0 -36
- schemathesis/transports/responses.py +0 -57
- schemathesis/types.py +0 -44
- schemathesis/utils.py +0 -164
- schemathesis-3.39.16.dist-info/METADATA +0 -293
- schemathesis-3.39.16.dist-info/RECORD +0 -160
- /schemathesis/{extra → cli/ext}/__init__.py +0 -0
- /schemathesis/{_lazy_import.py → core/lazy_import.py} +0 -0
- /schemathesis/{internal → core}/result.py +0 -0
- {schemathesis-3.39.16.dist-info → schemathesis-4.0.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,204 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: schemathesis
|
3
|
+
Version: 4.0.0
|
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://github.com/schemathesis/schemathesis/blob/master/CHANGELOG.md
|
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,>=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: tomli>=2.2.1
|
49
|
+
Requires-Dist: typing-extensions>=4.12.2
|
50
|
+
Requires-Dist: werkzeug<4,>=0.16.0
|
51
|
+
Provides-Extra: bench
|
52
|
+
Requires-Dist: pytest-codspeed==2.2.1; extra == 'bench'
|
53
|
+
Provides-Extra: cov
|
54
|
+
Requires-Dist: coverage-enable-subprocess; extra == 'cov'
|
55
|
+
Requires-Dist: coverage[toml]>=5.3; extra == 'cov'
|
56
|
+
Provides-Extra: dev
|
57
|
+
Requires-Dist: aiohttp<4.0,>=3.9.1; extra == 'dev'
|
58
|
+
Requires-Dist: coverage-enable-subprocess; extra == 'dev'
|
59
|
+
Requires-Dist: coverage>=6; extra == 'dev'
|
60
|
+
Requires-Dist: coverage[toml]>=5.3; extra == 'dev'
|
61
|
+
Requires-Dist: fastapi>=0.86.0; extra == 'dev'
|
62
|
+
Requires-Dist: flask<3.0,>=2.1.1; extra == 'dev'
|
63
|
+
Requires-Dist: hypothesis-openapi<1,>=0.2; (python_version >= '3.10') and extra == 'dev'
|
64
|
+
Requires-Dist: mkdocs-material; extra == 'dev'
|
65
|
+
Requires-Dist: mkdocstrings[python]; extra == 'dev'
|
66
|
+
Requires-Dist: pydantic>=1.10.2; extra == 'dev'
|
67
|
+
Requires-Dist: pytest-asyncio<1.0,>=0.18.0; extra == 'dev'
|
68
|
+
Requires-Dist: pytest-codspeed==2.2.1; extra == 'dev'
|
69
|
+
Requires-Dist: pytest-httpserver<2.0,>=1.0; extra == 'dev'
|
70
|
+
Requires-Dist: pytest-mock<4.0,>=3.7.0; extra == 'dev'
|
71
|
+
Requires-Dist: pytest-trio<1.0,>=0.8; extra == 'dev'
|
72
|
+
Requires-Dist: pytest-xdist<4.0,>=3; 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: tomli-w>=1.2.0; extra == 'dev'
|
76
|
+
Requires-Dist: trustme<1.0,>=0.9.0; extra == 'dev'
|
77
|
+
Provides-Extra: docs
|
78
|
+
Requires-Dist: mkdocs-material; extra == 'docs'
|
79
|
+
Requires-Dist: mkdocstrings[python]; 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: tomli-w>=1.2.0; extra == 'tests'
|
95
|
+
Requires-Dist: trustme<1.0,>=0.9.0; extra == 'tests'
|
96
|
+
Description-Content-Type: text/markdown
|
97
|
+
|
98
|
+
<p align="center">
|
99
|
+
<a href="https://github.com/schemathesis/schemathesis/actions" target="_blank">
|
100
|
+
<img src="https://github.com/schemathesis/schemathesis/actions/workflows/build.yml/badge.svg" alt="Build">
|
101
|
+
</a>
|
102
|
+
<a href="https://codecov.io/gh/schemathesis/schemathesis/branch/master" target="_blank">
|
103
|
+
<img src="https://codecov.io/gh/schemathesis/schemathesis/branch/master/graph/badge.svg" alt="Coverage">
|
104
|
+
</a>
|
105
|
+
<a href="https://pypi.org/project/schemathesis/" target="_blank">
|
106
|
+
<img src="https://img.shields.io/pypi/v/schemathesis.svg" alt="Version">
|
107
|
+
</a>
|
108
|
+
<a href="https://pypi.org/project/schemathesis/" target="_blank">
|
109
|
+
<img src="https://img.shields.io/pypi/pyversions/schemathesis.svg" alt="Python versions">
|
110
|
+
</a>
|
111
|
+
<a href="https://discord.gg/R9ASRAmHnA" target="_blank">
|
112
|
+
<img src="https://img.shields.io/discord/938139740912369755" alt="Discord">
|
113
|
+
</a>
|
114
|
+
<a href="https://opensource.org/licenses/MIT" target="_blank">
|
115
|
+
<img src="https://img.shields.io/pypi/l/schemathesis.svg" alt="License">
|
116
|
+
</a>
|
117
|
+
</p>
|
118
|
+
|
119
|
+
## Schemathesis
|
120
|
+
|
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.
|
124
|
+
|
125
|
+
<p align="center">
|
126
|
+
<img src="https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/demo.gif" alt="Schemathesis automatically finding a server error"/>
|
127
|
+
<br>
|
128
|
+
<i>Finding bugs that manual testing missed</i>
|
129
|
+
</p>
|
130
|
+
|
131
|
+
## Try it now
|
132
|
+
|
133
|
+
```console
|
134
|
+
# Test a demo API - finds real bugs instantly
|
135
|
+
uvx schemathesis run https://example.schemathesis.io/openapi.json
|
136
|
+
|
137
|
+
# Test your own API
|
138
|
+
uvx schemathesis run https://your-api.com/openapi.json
|
139
|
+
```
|
140
|
+
|
141
|
+
|
142
|
+
## What problems does it solve?
|
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
|
+
|
150
|
+
> ⚠️ **Upgrading from older versions?** Check our [Migration Guide](https://github.com/schemathesis/schemathesis/blob/master/MIGRATION.md) for key changes.
|
151
|
+
|
152
|
+
# Installation & Usage
|
153
|
+
|
154
|
+
**Command Line:**
|
155
|
+
```console
|
156
|
+
uv pip install schemathesis
|
157
|
+
schemathesis run https://your-api.com/openapi.json
|
158
|
+
```
|
159
|
+
|
160
|
+
**Python Tests:**
|
161
|
+
```python
|
162
|
+
import schemathesis
|
163
|
+
|
164
|
+
schema = schemathesis.openapi.from_url("https://your-api.com/openapi.json")
|
165
|
+
|
166
|
+
@schema.parametrize()
|
167
|
+
def test_api(case):
|
168
|
+
case.call_and_validate() # Finds bugs automatically
|
169
|
+
```
|
170
|
+
|
171
|
+
**CI/CD:**
|
172
|
+
```yaml
|
173
|
+
- uses: schemathesis/action@v1
|
174
|
+
with:
|
175
|
+
schema: "https://your-api.com/openapi.json"
|
176
|
+
```
|
177
|
+
|
178
|
+
## Who uses it
|
179
|
+
|
180
|
+
Used by teams at **[Spotify](https://github.com/backstage/backstage)**, **[WordPress](https://github.com/WordPress/openverse)**, **JetBrains**, **Red Hat** and dozens other companies.
|
181
|
+
|
182
|
+
|
183
|
+
> "_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
|
184
|
+
|
185
|
+
## Documentation
|
186
|
+
|
187
|
+
📚 **[Complete documentation](https://schemathesis.readthedocs.io/en/stable/)** with guides, examples, and API reference.
|
188
|
+
|
189
|
+
## Get Help
|
190
|
+
|
191
|
+
- 💬 [Discord community](https://discord.gg/R9ASRAmHnA)
|
192
|
+
- 🐛 [GitHub issues](https://github.com/schemathesis/schemathesis/issues)
|
193
|
+
|
194
|
+
## Contributing
|
195
|
+
|
196
|
+
We welcome contributions! See our [contributing guidelines](CONTRIBUTING.md) and join discussions in [issues](https://github.com/schemathesis/schemathesis/issues) or [Discord](https://discord.gg/R9ASRAmHnA).
|
197
|
+
|
198
|
+
## Acknowledgements
|
199
|
+
|
200
|
+
Schemathesis is built on top of <a href="https://hypothesis.works/" target="_blank">Hypothesis</a>, a powerful property-based testing library for Python.
|
201
|
+
|
202
|
+
## License
|
203
|
+
|
204
|
+
This project is licensed under the terms of the [MIT license](https://opensource.org/licenses/MIT).
|
@@ -0,0 +1,164 @@
|
|
1
|
+
schemathesis/__init__.py,sha256=QqVUCBQr-RDEstgCZLsxzIa9HJslVSeijrm9gES4b_0,1423
|
2
|
+
schemathesis/auths.py,sha256=JdEwPRS9WKmPcxzGXYYz9pjlIUMQYCfif7ZJU0Kde-I,16400
|
3
|
+
schemathesis/checks.py,sha256=GTdejjXDooAOuq66nvCK3i-AMPBuU-_-aNeSeL9JIlc,6561
|
4
|
+
schemathesis/errors.py,sha256=T8nobEi5tQX_SkwaYb8JFoIlF9F_vOQVprZ8EVPAhjA,931
|
5
|
+
schemathesis/filters.py,sha256=OEub50Ob5sf0Tn3iTeuIaxSMtepF7KVoiEM9wtt5GGA,13433
|
6
|
+
schemathesis/hooks.py,sha256=XIeSKLiClAz3NlMqQ0oNCGZlu-f4Kvzju5gaxqlAqSs,13881
|
7
|
+
schemathesis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
|
+
schemathesis/schemas.py,sha256=abMMY3nT_lh5siRE3mc5oB6y4rNv2oDJnCE8e5B1pzs,28252
|
9
|
+
schemathesis/cli/__init__.py,sha256=U9gjzWWpiFhaqevPjZbwyTNjABdpvXETI4HgwdGKnvs,877
|
10
|
+
schemathesis/cli/__main__.py,sha256=MWaenjaUTZIfNPFzKmnkTiawUri7DVldtg3mirLwzU8,92
|
11
|
+
schemathesis/cli/constants.py,sha256=CVcQNHEiX-joAQmyuEVKWPOSxDHsOw_EXXZsEclzLuY,341
|
12
|
+
schemathesis/cli/core.py,sha256=ue7YUdVo3YvuzGL4s6i62NL6YqNDeVPBSnQ1znrvG2w,480
|
13
|
+
schemathesis/cli/commands/__init__.py,sha256=rubTCCRGuMIbNYOl8yQEioiuHtTq__tWjkUtFWYGhqQ,3433
|
14
|
+
schemathesis/cli/commands/data.py,sha256=_ALywjIeCZjuaoDQFy-Kj8RZkEGqXd-Y95O47h8Jszs,171
|
15
|
+
schemathesis/cli/commands/run/__init__.py,sha256=qr6wSZSQMbLDNqsEyChLJr0616GuY1Wcg5gHjoTbPss,18648
|
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
|
+
schemathesis/cli/commands/run/filters.py,sha256=pzkNRcf5vLPSsMfnvt711GNzRSBK5iZIFjPA0fiH1N4,1701
|
20
|
+
schemathesis/cli/commands/run/loaders.py,sha256=6j0ez7wduAUYbUT28ELKxMf-dYEWr_67m_KIuTSyNGk,4358
|
21
|
+
schemathesis/cli/commands/run/validation.py,sha256=FzCzYdW1-hn3OgyzPO1p6wHEX5PG7HdewbPRvclV_vc,9002
|
22
|
+
schemathesis/cli/commands/run/handlers/__init__.py,sha256=TPZ3KdGi8m0fjlN0GjA31MAXXn1qI7uU4FtiDwroXZI,1915
|
23
|
+
schemathesis/cli/commands/run/handlers/base.py,sha256=yDsTtCiztLksfk7cRzg8JlaAVOfS-zwK3tsJMOXAFyc,530
|
24
|
+
schemathesis/cli/commands/run/handlers/cassettes.py,sha256=Gu0qcxzvHp1zMY-SVkY96T-Ifwtdh6oj-w0gE1MShnA,19157
|
25
|
+
schemathesis/cli/commands/run/handlers/junitxml.py,sha256=FX_347PcHhGLG7XY3eG8VwhB_8tSX4mOtqjZj_s6yLM,2402
|
26
|
+
schemathesis/cli/commands/run/handlers/output.py,sha256=L-zJnMsbHMkilSG65W1a030cQ7Nfo2Gnnmsia-8pZOc,62554
|
27
|
+
schemathesis/cli/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
|
+
schemathesis/cli/ext/fs.py,sha256=3lvoAsEDDdih75ITJJNxemd3nwxX55gGWrI7uDxm0cM,447
|
29
|
+
schemathesis/cli/ext/groups.py,sha256=kQ37t6qeArcKaY2y5VxyK3_KwAkBKCVm58IYV8gewds,2720
|
30
|
+
schemathesis/cli/ext/options.py,sha256=6yYwZNJL__FCEEL7kI3r5MbVmbp3ZeQjm7DrZ6J_h7s,3347
|
31
|
+
schemathesis/config/__init__.py,sha256=Ff-mcdwCatFIS_WpJNpSe-gl7ez0-m_s4F2_4Teg2eM,6240
|
32
|
+
schemathesis/config/_auth.py,sha256=83RLVPm97W2thbn-yi01Rt94YwOxLG_a5VoxhEfjUjs,1528
|
33
|
+
schemathesis/config/_checks.py,sha256=F0r16eSSiICvoiTUkNNOE2PH73EGd8bikoeZdME_3Yw,10763
|
34
|
+
schemathesis/config/_diff_base.py,sha256=-XqS6cTzZC5fplz8_2RSZHDMSAPJhBBIEP6H8wcgHmo,4221
|
35
|
+
schemathesis/config/_env.py,sha256=8XfIyrnGNQuCDnfG0lwmKRFbasRUjgeQGBAMupsmtOU,613
|
36
|
+
schemathesis/config/_error.py,sha256=TxuuqQ1olwJc7P7ssfxXb1dB_Xn5uVsoazjvYvRxrxA,5437
|
37
|
+
schemathesis/config/_generation.py,sha256=_THqCfC20i8RRRsO2hAwoJ52FV-CS1xOA6me3Wp3FHw,5087
|
38
|
+
schemathesis/config/_health_check.py,sha256=zC9inla5ibMBlEy5WyM4_TME7ju_KH3Bwfo21RI3Gks,561
|
39
|
+
schemathesis/config/_operations.py,sha256=OZMTcfTLef6M8CR9logi6vyaz3XdmZfEMjIobgxjOHA,12181
|
40
|
+
schemathesis/config/_output.py,sha256=3G9SOi-4oNcQPHeNRG3HggFCwvcKOW1kF28a9m0H-pU,4434
|
41
|
+
schemathesis/config/_parameters.py,sha256=i76Hwaf834fBAMmtKfKTl1SFCicJ-Y-5tZt5QNGW2fA,618
|
42
|
+
schemathesis/config/_phases.py,sha256=NFUhn-xzEQdNtgNVW1t51lMquXbjRNGR_QuiCRLCi28,6454
|
43
|
+
schemathesis/config/_projects.py,sha256=1rbI178wv743492FnexjdlsGvggNYpsbVUzQcUcJhAk,19487
|
44
|
+
schemathesis/config/_rate_limit.py,sha256=ekEW-jP_Ichk_O6hYpj-h2TTTKfp7Fm0nyFUbvlWcbA,456
|
45
|
+
schemathesis/config/_report.py,sha256=aYLnPO74B7Wfn_qTwlEp5zY9L74U1XFuYS10yjwKKWY,3885
|
46
|
+
schemathesis/config/_validator.py,sha256=IcE8geFZ0ZwR18rkIRs25i7pTl7Z84XbjYGUB-mqReU,258
|
47
|
+
schemathesis/config/_warnings.py,sha256=sI0VZcTj3dOnphhBwYwU_KTagxr89HGWTtQ99HcY84k,772
|
48
|
+
schemathesis/config/schema.json,sha256=wC1qe9M_fXotfmlBOmW_FCTRw9K5YC814-PipMGKllE,18907
|
49
|
+
schemathesis/core/__init__.py,sha256=5fAAKG6BAA5DP9qOUnMT1cG5LLN3tU7D7VdLyb-MxfM,1880
|
50
|
+
schemathesis/core/compat.py,sha256=9BWCrFoqN2sJIaiht_anxe8kLjYMR7t0iiOkXqLRUZ8,1058
|
51
|
+
schemathesis/core/control.py,sha256=IzwIc8HIAEMtZWW0Q0iXI7T1niBpjvcLlbuwOSmy5O8,130
|
52
|
+
schemathesis/core/curl.py,sha256=yuaCe_zHLGwUjEeloQi6W3tOA3cGdnHDNI17-5jia0o,1723
|
53
|
+
schemathesis/core/deserialization.py,sha256=ygIj4fNaOd0mJ2IvTsn6bsabBt_2AbSLCz-z9UqfpdQ,2406
|
54
|
+
schemathesis/core/errors.py,sha256=KuFLy5ZOGn8KlD4ai5HK_WFlB3fJ2rSKwV1yD4fn4BU,16295
|
55
|
+
schemathesis/core/failures.py,sha256=MYyRnom-XeUEuBmq2ffdz34xhxmpSHWaQunfHtliVsY,8932
|
56
|
+
schemathesis/core/fs.py,sha256=ItQT0_cVwjDdJX9IiI7EnU75NI2H3_DCEyyUjzg_BgI,472
|
57
|
+
schemathesis/core/hooks.py,sha256=qhbkkRSf8URJ4LKv2wmKRINKpquUOgxQzWBHKWRWo3Q,475
|
58
|
+
schemathesis/core/lazy_import.py,sha256=aMhWYgbU2JOltyWBb32vnWBb6kykOghucEzI_F70yVE,470
|
59
|
+
schemathesis/core/loaders.py,sha256=SQQ-8m64-D2FaOgvwKZLyTtLJuzP3RPo7Ud2BERK1c0,3404
|
60
|
+
schemathesis/core/marks.py,sha256=SH7jsVuNRJjx2gZN9Ze5MY01u7FJiHeO0iruzKi5rm4,2135
|
61
|
+
schemathesis/core/media_types.py,sha256=vV0CEu34sDoZWXvu4R1Y1HosxVS4YXZV8iTov8fU3X0,2148
|
62
|
+
schemathesis/core/rate_limit.py,sha256=7tg9Znk11erTfw8-ANutjEmu7hbfUHZx_iEdkoaP174,1757
|
63
|
+
schemathesis/core/registries.py,sha256=T4jZB4y3zBHdeSgQc0pRbgSeMblvO-6z4I3zmzIfTi0,811
|
64
|
+
schemathesis/core/result.py,sha256=d449YvyONjqjDs-A5DAPgtAI96iT753K8sU6_1HLo2Q,461
|
65
|
+
schemathesis/core/transforms.py,sha256=63aeLkR93r3krq4CwYtDcoS_pFBky4L16c9DcFsBHuE,3535
|
66
|
+
schemathesis/core/transport.py,sha256=LQcamAkFqJ0HuXQzepevAq2MCJW-uq5Nm-HE9yc7HMI,7503
|
67
|
+
schemathesis/core/validation.py,sha256=rnhzsqWukMWyrc7sRm0kZNHTePoPCQ3A4kLpLxrb0jM,1641
|
68
|
+
schemathesis/core/version.py,sha256=O-6yFbNocbD4RDwiBZLborxTp54htyKxBWTqpZDnPvg,202
|
69
|
+
schemathesis/core/output/__init__.py,sha256=SiHqONFskXl73AtP5dV29L14nZoKo7B-IeG52KZB32M,1446
|
70
|
+
schemathesis/core/output/sanitization.py,sha256=Ev3tae8dVwsYd7yVb2_1VBFYs92WFsQ4Eu1fGaymItE,2013
|
71
|
+
schemathesis/engine/__init__.py,sha256=QaFE-FinaTAaarteADo2RRMJ-Sz6hZB9TzD5KjMinIA,706
|
72
|
+
schemathesis/engine/context.py,sha256=x-I9KX6rO6hdCvvN8FEdzIZBqIcNaxdNYHgQjcXbZhM,3931
|
73
|
+
schemathesis/engine/control.py,sha256=QKUOs5VMphe7EcAIro_DDo9ZqdOU6ZVwTU1gMNndHWw,1006
|
74
|
+
schemathesis/engine/core.py,sha256=Pnpf1zNTxruUOnnJ9rQ-MskXj4WuA4A27_fWrf0hXWc,5609
|
75
|
+
schemathesis/engine/errors.py,sha256=cWKuwj0Kzr2BHdVCHACnniUJ8sFVJ0Nqckc3iggZS1o,18800
|
76
|
+
schemathesis/engine/events.py,sha256=VV6epicFIJnX4c87fVNSd0ibDccX3gryDv52OUGa3FI,6370
|
77
|
+
schemathesis/engine/recorder.py,sha256=K3HfMARrT5mPWXPnYebjjcq5CcsBRhMrtZwEL9_Lvtg,8432
|
78
|
+
schemathesis/engine/phases/__init__.py,sha256=zzILnWjoDJQwNmvEmrj3HXVAKT2q7Vb614svjyt8E-U,2794
|
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
|
83
|
+
schemathesis/engine/phases/unit/__init__.py,sha256=BvZh39LZmXg90Cy_Tn0cQY5y7eWzYvAEmJ43fGKFAt8,8715
|
84
|
+
schemathesis/engine/phases/unit/_executor.py,sha256=jay_D7fmmBTjZigifmY30RiVP5Jb0OlK450fknSWZ_I,16471
|
85
|
+
schemathesis/engine/phases/unit/_pool.py,sha256=iU0hdHDmohPnEv7_S1emcabuzbTf-Cznqwn0pGQ5wNQ,2480
|
86
|
+
schemathesis/generation/__init__.py,sha256=tvNO2FLiY8z3fZ_kL_QJhSgzXfnT4UqwSXMHCwfLI0g,645
|
87
|
+
schemathesis/generation/case.py,sha256=WbOJagE7Gjz3ZvBxzRl8vJHgm_LjW0wf2oRuPzoj6LI,11547
|
88
|
+
schemathesis/generation/coverage.py,sha256=bKP0idU5-eiK4VwhH4kjxDPtCZzMg81mbN1tEDuT6EA,47913
|
89
|
+
schemathesis/generation/meta.py,sha256=5ikrlhdk424dWcYLekZSMoWJYRl9_IhI80GKZzhByi4,2512
|
90
|
+
schemathesis/generation/metrics.py,sha256=cZU5HdeAMcLFEDnTbNE56NuNq4P0N4ew-g1NEz5-kt4,2836
|
91
|
+
schemathesis/generation/modes.py,sha256=Q1fhjWr3zxabU5qdtLvKfpMFZJAwlW9pnxgenjeXTyU,481
|
92
|
+
schemathesis/generation/overrides.py,sha256=ZwU7k5WnkjjuzKorpBwl_eov1Ko1VfM5WqjdRlX2DK4,3691
|
93
|
+
schemathesis/generation/hypothesis/__init__.py,sha256=SVwM-rx07jPZzms0idWYACgUtWAxh49HRuTnaQ__zf0,1549
|
94
|
+
schemathesis/generation/hypothesis/builder.py,sha256=2mXAVSkgl2SBV8IzrqkOd3okTD6oVLFdQoRirQMF7ss,32385
|
95
|
+
schemathesis/generation/hypothesis/examples.py,sha256=6eGaKUEC3elmKsaqfKj1sLvM8EHc-PWT4NRBq4NI0Rs,1409
|
96
|
+
schemathesis/generation/hypothesis/given.py,sha256=sTZR1of6XaHAPWtHx2_WLlZ50M8D5Rjux0GmWkWjDq4,2337
|
97
|
+
schemathesis/generation/hypothesis/reporting.py,sha256=uDVow6Ya8YFkqQuOqRsjbzsbyP4KKfr3jA7ZaY4FuKY,279
|
98
|
+
schemathesis/generation/hypothesis/strategies.py,sha256=RurE81E06d99YKG48dizy9346ayfNswYTt38zewmGgw,483
|
99
|
+
schemathesis/generation/stateful/__init__.py,sha256=s7jiJEnguIj44IsRyMi8afs-8yjIUuBbzW58bH5CHjs,1042
|
100
|
+
schemathesis/generation/stateful/state_machine.py,sha256=1cY3AH-f_AbUGfvfK8WMMKkUxAJT9Iw8eZGyRE2Sd44,8740
|
101
|
+
schemathesis/graphql/__init__.py,sha256=_eO6MAPHGgiADVGRntnwtPxmuvk666sAh-FAU4cG9-0,326
|
102
|
+
schemathesis/graphql/checks.py,sha256=IADbxiZjgkBWrC5yzHDtohRABX6zKXk5w_zpWNwdzYo,3186
|
103
|
+
schemathesis/graphql/loaders.py,sha256=KarhFo2lDiC_1GcC2UGHl_MRDWAMMMWtE7sKrdbaJvo,9348
|
104
|
+
schemathesis/openapi/__init__.py,sha256=-KcsSAM19uOM0N5J4s-yTnQ1BFsptYhW1E51cEf6kVM,311
|
105
|
+
schemathesis/openapi/checks.py,sha256=CQ9IjySb7wXJkbv5K0eUKZ0iU1LW--fbfN-wD6ayOV8,12389
|
106
|
+
schemathesis/openapi/loaders.py,sha256=1jh4Me2dngWalBmX5xjfln90tfbH-afxmjsiY1BuUTE,10645
|
107
|
+
schemathesis/openapi/generation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
108
|
+
schemathesis/openapi/generation/filters.py,sha256=pY9cUZdL_kQK80Z2aylTOqqa12zmaYUlYC5BfYgeQMk,2395
|
109
|
+
schemathesis/pytest/__init__.py,sha256=7W0q-Thcw03IAQfXE_Mo8JPZpUdHJzfu85fjK1ZdfQM,88
|
110
|
+
schemathesis/pytest/control_flow.py,sha256=F8rAPsPeNv_sJiJgbZYtTpwKWjauZmqFUaKroY2GmQI,217
|
111
|
+
schemathesis/pytest/lazy.py,sha256=W9epwVFYjOZRZSNemHUsgIwvRp9ya9p8IGHxvg3_t18,10854
|
112
|
+
schemathesis/pytest/loaders.py,sha256=Sbv8e5F77_x4amLP50iwubfm6kpOhx7LhLFGsVXW5Ys,925
|
113
|
+
schemathesis/pytest/plugin.py,sha256=m4zGLw6A537o4mBb9FvuM4jmAoxfpg0DPLWq5eCLXGc,13818
|
114
|
+
schemathesis/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
115
|
+
schemathesis/python/asgi.py,sha256=5PyvuTBaivvyPUEi3pwJni91K1kX5Zc0u9c6c1D8a1Q,287
|
116
|
+
schemathesis/python/wsgi.py,sha256=uShAgo_NChbfYaV1117e6UHp0MTg7jaR0Sy_to3Jmf8,219
|
117
|
+
schemathesis/specs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
118
|
+
schemathesis/specs/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
119
|
+
schemathesis/specs/graphql/_cache.py,sha256=QIcEFy2Koy5K0-u1nB-iab52LDlYsTm_9N5t42GplkM,770
|
120
|
+
schemathesis/specs/graphql/nodes.py,sha256=bE3G1kNmqJ8OV4igBvIK-UORrkQA6Nofduf87O3TD9I,541
|
121
|
+
schemathesis/specs/graphql/scalars.py,sha256=6lew8mnwhrtg23leiEbG43mLGPLlRln8mClCY94XpDA,2680
|
122
|
+
schemathesis/specs/graphql/schemas.py,sha256=25TXYPCxAXCAWE0L_vDFLDXmhNe7ac4YQbKulJuf9zI,14542
|
123
|
+
schemathesis/specs/graphql/validation.py,sha256=-W1Noc1MQmTb4RX-gNXMeU2qkgso4mzVfHxtdLkCPKM,1422
|
124
|
+
schemathesis/specs/openapi/__init__.py,sha256=C5HOsfuDJGq_3mv8CRBvRvb0Diy1p0BFdqyEXMS-loE,238
|
125
|
+
schemathesis/specs/openapi/_cache.py,sha256=HpglmETmZU0RCHxp3DO_sg5_B_nzi54Zuw9vGzzYCxY,4295
|
126
|
+
schemathesis/specs/openapi/_hypothesis.py,sha256=005E_gH4YGhOORQyJtP6vkOOM0-FgiES06JpXRcdL5c,22601
|
127
|
+
schemathesis/specs/openapi/checks.py,sha256=mKJ-ZkbjhbXS4eWDZiv8zslXKFDqkE3Mp4N8TVDHiI0,29801
|
128
|
+
schemathesis/specs/openapi/constants.py,sha256=JqM_FHOenqS_MuUE9sxVQ8Hnw0DNM8cnKDwCwPLhID4,783
|
129
|
+
schemathesis/specs/openapi/converter.py,sha256=lil8IewM5j8tvt4lpA9g_KITvIwx1M96i45DNSHNjoc,3505
|
130
|
+
schemathesis/specs/openapi/definitions.py,sha256=8htclglV3fW6JPBqs59lgM4LnA25Mm9IptXBPb_qUT0,93949
|
131
|
+
schemathesis/specs/openapi/examples.py,sha256=9dMY4d2WWz32JywKZzyLO5jdbMWcRqjjGHzhMqlqwIs,21129
|
132
|
+
schemathesis/specs/openapi/formats.py,sha256=8AIS7Uey-Z1wm1WYRqnsVqHwG9d316PdqfKLqwUs7us,3516
|
133
|
+
schemathesis/specs/openapi/media_types.py,sha256=F5M6TKl0s6Z5X8mZpPsWDEdPBvxclKRcUOc41eEwKbo,2472
|
134
|
+
schemathesis/specs/openapi/parameters.py,sha256=BevME4DWLQ-OFvc_7fREMjj99VAbVNxVb5i8OEX6Pfs,14453
|
135
|
+
schemathesis/specs/openapi/patterns.py,sha256=cBj8W4wn7VLJd4nABaIH5f502-zBDiqljxLgPWUn-50,15609
|
136
|
+
schemathesis/specs/openapi/references.py,sha256=40YcDExPLR2B8EOwt-Csw-5MYFi2xj_DXf91J0Pc9d4,8855
|
137
|
+
schemathesis/specs/openapi/schemas.py,sha256=TIKj9dnCHkBdBofgt0UH4fMByklv5ijy-JAc8i9_D5Y,51415
|
138
|
+
schemathesis/specs/openapi/security.py,sha256=6UWYMhL-dPtkTineqqBFNKca1i4EuoTduw-EOLeE0aQ,7149
|
139
|
+
schemathesis/specs/openapi/serialization.py,sha256=VdDLmeHqxlWM4cxQQcCkvrU6XurivolwEEaT13ohelA,11972
|
140
|
+
schemathesis/specs/openapi/utils.py,sha256=ER4vJkdFVDIE7aKyxyYatuuHVRNutytezgE52pqZNE8,900
|
141
|
+
schemathesis/specs/openapi/expressions/__init__.py,sha256=hfuRtXD75tQFhzSo6QgDZ3zByyWeZRKevB8edszAVj4,2272
|
142
|
+
schemathesis/specs/openapi/expressions/errors.py,sha256=YLVhps-sYcslgVaahfcUYxUSHlIfWL-rQMeT5PZSMZ8,219
|
143
|
+
schemathesis/specs/openapi/expressions/extractors.py,sha256=Py3of3_vBACP4ljiZIcgd-xQCrWIpcMsfQFc0EtAUoA,470
|
144
|
+
schemathesis/specs/openapi/expressions/lexer.py,sha256=KFA8Z-Kh1IYUpKgwAnDtEucN9YLLpnFR1GQl8KddWlA,3987
|
145
|
+
schemathesis/specs/openapi/expressions/nodes.py,sha256=KMTzuOXwzKQ09NU3m7Q9vDYI2Vgg6YiZJ7RnqnY2gbE,4049
|
146
|
+
schemathesis/specs/openapi/expressions/parser.py,sha256=e-ZxshrGE_5CVbgcZLYgdGSjdifgyzgKkLQp0dI0cJY,4503
|
147
|
+
schemathesis/specs/openapi/negative/__init__.py,sha256=qSANRvaBWJcyz637TT8I0YOLWz03pC-uHW9Tmm1qrQU,3840
|
148
|
+
schemathesis/specs/openapi/negative/mutations.py,sha256=r7kc8KVhDGMECvQtGZKHrzSJMRaknMwyfAbCq0BuQAo,19246
|
149
|
+
schemathesis/specs/openapi/negative/types.py,sha256=a7buCcVxNBG6ILBM3A7oNTAX0lyDseEtZndBuej8MbI,174
|
150
|
+
schemathesis/specs/openapi/negative/utils.py,sha256=ozcOIuASufLqZSgnKUACjX-EOZrrkuNdXX0SDnLoGYA,168
|
151
|
+
schemathesis/specs/openapi/stateful/__init__.py,sha256=FSitLbJxjBYU814cqjI_QCkdyoIc-9xfT_1HQcYwsXw,15064
|
152
|
+
schemathesis/specs/openapi/stateful/control.py,sha256=QaXLSbwQWtai5lxvvVtQV3BLJ8n5ePqSKB00XFxp-MA,3695
|
153
|
+
schemathesis/specs/openapi/stateful/links.py,sha256=fU-dn0ds7Dk7QHSF781kMF3Vq_3QuAjoelEb3lVWig0,8805
|
154
|
+
schemathesis/transport/__init__.py,sha256=6yg_RfV_9L0cpA6qpbH-SL9_3ggtHQji9CZrpIkbA6s,5321
|
155
|
+
schemathesis/transport/asgi.py,sha256=qTClt6oT_xUEWnRHokACN_uqCNNUZrRPT6YG0PjbElY,926
|
156
|
+
schemathesis/transport/prepare.py,sha256=c7__wdblBC4zqnmtcs99zoAeEY8jfXiGbdzh74icj6g,4668
|
157
|
+
schemathesis/transport/requests.py,sha256=J0j4_9KUBLqgObAklG_Ay62EKdPUeDIcbOMeutl2ctk,9170
|
158
|
+
schemathesis/transport/serialization.py,sha256=igUXKZ_VJ9gV7P0TUc5PDQBJXl_s0kK9T3ljGWWvo6E,10339
|
159
|
+
schemathesis/transport/wsgi.py,sha256=nqmIqYrhC_eqgJSgmDKWz2WSAMFMVVXThJCQLNf1cEQ,5970
|
160
|
+
schemathesis-4.0.0.dist-info/METADATA,sha256=0MR2TnUJtrdkWGqoEUNkCeF3CAxrowPL-h8larliZ0Q,8471
|
161
|
+
schemathesis-4.0.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
162
|
+
schemathesis-4.0.0.dist-info/entry_points.txt,sha256=hiK3un-xfgPdwj9uj16YVDtTNpO128bmk0U82SMv8ZQ,152
|
163
|
+
schemathesis-4.0.0.dist-info/licenses/LICENSE,sha256=2Ve4J8v5jMQAWrT7r1nf3bI8Vflk3rZVQefiF2zpxwg,1121
|
164
|
+
schemathesis-4.0.0.dist-info/RECORD,,
|
@@ -1,7 +1,7 @@
|
|
1
1
|
MIT License
|
2
2
|
|
3
3
|
Copyright (c) 2019 Kiwi.com
|
4
|
-
Copyright (c) 2020-
|
4
|
+
Copyright (c) 2020-2025 Dmitry Dygalo & Schemathesis.io
|
5
5
|
|
6
6
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
7
|
of this software and associated documentation files (the "Software"), to deal
|
schemathesis/_compat.py
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
from typing import Any, Callable, Type
|
2
|
-
|
3
|
-
from ._lazy_import import lazy_import
|
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,19 +0,0 @@
|
|
1
|
-
"""Compatibility flags based on installed dependency versions."""
|
2
|
-
|
3
|
-
from importlib import metadata
|
4
|
-
|
5
|
-
from packaging import version
|
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_7 = PYTEST_VERSION >= version.parse("7.0.0")
|
13
|
-
IS_PYTEST_ABOVE_8 = PYTEST_VERSION >= version.parse("8.0.0")
|
14
|
-
|
15
|
-
HYPOTHESIS_VERSION = version.parse(metadata.version("hypothesis"))
|
16
|
-
HYPOTHESIS_HAS_STATEFUL_NAMING_IMPROVEMENTS = HYPOTHESIS_VERSION >= version.parse("6.98.14")
|
17
|
-
|
18
|
-
PYRATE_LIMITER_VERSION = version.parse(metadata.version("pyrate-limiter"))
|
19
|
-
IS_PYRATE_LIMITER_ABOVE_3 = PYRATE_LIMITER_VERSION >= version.parse("3.0")
|