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
schemathesis/utils.py
DELETED
@@ -1,164 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
from contextlib import contextmanager
|
4
|
-
from inspect import getfullargspec
|
5
|
-
from pathlib import Path
|
6
|
-
from typing import (
|
7
|
-
TYPE_CHECKING,
|
8
|
-
Any,
|
9
|
-
Callable,
|
10
|
-
Generator,
|
11
|
-
NoReturn,
|
12
|
-
Union,
|
13
|
-
)
|
14
|
-
|
15
|
-
import pytest
|
16
|
-
from hypothesis.core import is_invalid_test
|
17
|
-
from hypothesis.reporting import with_reporter
|
18
|
-
from hypothesis.strategies import SearchStrategy
|
19
|
-
|
20
|
-
from ._compat import InferType, get_signature
|
21
|
-
|
22
|
-
# Backward-compat
|
23
|
-
from .exceptions import SkipTest, UsageError
|
24
|
-
|
25
|
-
if TYPE_CHECKING:
|
26
|
-
from .types import GenericTest, PathLike
|
27
|
-
|
28
|
-
|
29
|
-
def is_schemathesis_test(func: Callable) -> bool:
|
30
|
-
"""Check whether test is parametrized with schemathesis."""
|
31
|
-
try:
|
32
|
-
from .schemas import BaseSchema
|
33
|
-
|
34
|
-
item = getattr(func, PARAMETRIZE_MARKER, None)
|
35
|
-
# Comparison is needed to avoid false-positives when mocks are collected by pytest
|
36
|
-
return isinstance(item, BaseSchema)
|
37
|
-
except Exception:
|
38
|
-
return False
|
39
|
-
|
40
|
-
|
41
|
-
def fail_on_no_matches(node_id: str) -> NoReturn: # type: ignore
|
42
|
-
pytest.fail(f"Test function {node_id} does not match any API operations and therefore has no effect")
|
43
|
-
|
44
|
-
|
45
|
-
IGNORED_PATTERNS = (
|
46
|
-
"Falsifying example: ",
|
47
|
-
"Falsifying explicit example: ",
|
48
|
-
"You can add @seed",
|
49
|
-
"Failed to reproduce exception. Expected:",
|
50
|
-
"Flaky example!",
|
51
|
-
"Traceback (most recent call last):",
|
52
|
-
"You can reproduce this example by temporarily",
|
53
|
-
"Unreliable test timings",
|
54
|
-
)
|
55
|
-
|
56
|
-
|
57
|
-
@contextmanager
|
58
|
-
def capture_hypothesis_output() -> Generator[list[str], None, None]:
|
59
|
-
"""Capture all output of Hypothesis into a list of strings.
|
60
|
-
|
61
|
-
It allows us to have more granular control over Schemathesis output.
|
62
|
-
|
63
|
-
Usage::
|
64
|
-
|
65
|
-
@given(i=st.integers())
|
66
|
-
def test(i):
|
67
|
-
assert 0
|
68
|
-
|
69
|
-
with capture_hypothesis_output() as output:
|
70
|
-
test() # hypothesis test
|
71
|
-
# output == ["Falsifying example: test(i=0)"]
|
72
|
-
"""
|
73
|
-
output = []
|
74
|
-
|
75
|
-
def get_output(value: str) -> None:
|
76
|
-
# Drop messages that could be confusing in the Schemathesis context
|
77
|
-
if value.startswith(IGNORED_PATTERNS):
|
78
|
-
return
|
79
|
-
output.append(value)
|
80
|
-
|
81
|
-
# the following context manager is untyped
|
82
|
-
with with_reporter(get_output): # type: ignore
|
83
|
-
yield output
|
84
|
-
|
85
|
-
|
86
|
-
GivenInput = Union[SearchStrategy, InferType]
|
87
|
-
PARAMETRIZE_MARKER = "_schemathesis_test"
|
88
|
-
GIVEN_ARGS_MARKER = "_schemathesis_given_args"
|
89
|
-
GIVEN_KWARGS_MARKER = "_schemathesis_given_kwargs"
|
90
|
-
|
91
|
-
|
92
|
-
def get_given_args(func: GenericTest) -> tuple:
|
93
|
-
return getattr(func, GIVEN_ARGS_MARKER, ())
|
94
|
-
|
95
|
-
|
96
|
-
def get_given_kwargs(func: GenericTest) -> dict[str, Any]:
|
97
|
-
return getattr(func, GIVEN_KWARGS_MARKER, {})
|
98
|
-
|
99
|
-
|
100
|
-
def is_given_applied(func: GenericTest) -> bool:
|
101
|
-
return hasattr(func, GIVEN_ARGS_MARKER) or hasattr(func, GIVEN_KWARGS_MARKER)
|
102
|
-
|
103
|
-
|
104
|
-
def given_proxy(*args: GivenInput, **kwargs: GivenInput) -> Callable[[GenericTest], GenericTest]:
|
105
|
-
"""Proxy Hypothesis strategies to ``hypothesis.given``."""
|
106
|
-
|
107
|
-
def wrapper(func: GenericTest) -> GenericTest:
|
108
|
-
if hasattr(func, GIVEN_ARGS_MARKER):
|
109
|
-
|
110
|
-
def wrapped_test(*_: Any, **__: Any) -> NoReturn:
|
111
|
-
raise UsageError(
|
112
|
-
f"You have applied `given` to the `{func.__name__}` test more than once, which "
|
113
|
-
"overrides the previous decorator. You need to pass all arguments to the same `given` call."
|
114
|
-
)
|
115
|
-
|
116
|
-
return wrapped_test
|
117
|
-
|
118
|
-
setattr(func, GIVEN_ARGS_MARKER, args)
|
119
|
-
setattr(func, GIVEN_KWARGS_MARKER, kwargs)
|
120
|
-
return func
|
121
|
-
|
122
|
-
return wrapper
|
123
|
-
|
124
|
-
|
125
|
-
def merge_given_args(func: GenericTest, args: tuple, kwargs: dict[str, Any]) -> dict[str, Any]:
|
126
|
-
"""Merge positional arguments to ``@schema.given`` into a dictionary with keyword arguments.
|
127
|
-
|
128
|
-
Kwargs are modified inplace.
|
129
|
-
"""
|
130
|
-
if args:
|
131
|
-
argspec = getfullargspec(func)
|
132
|
-
for name, strategy in zip(reversed([arg for arg in argspec.args if arg != "case"]), reversed(args)):
|
133
|
-
kwargs[name] = strategy
|
134
|
-
return kwargs
|
135
|
-
|
136
|
-
|
137
|
-
def validate_given_args(func: GenericTest, args: tuple, kwargs: dict[str, Any]) -> Callable | None:
|
138
|
-
signature = get_signature(func)
|
139
|
-
return is_invalid_test(func, signature, args, kwargs) # type: ignore
|
140
|
-
|
141
|
-
|
142
|
-
def compose(*functions: Callable) -> Callable:
|
143
|
-
"""Compose multiple functions into a single one."""
|
144
|
-
|
145
|
-
def composed(x: Any) -> Any:
|
146
|
-
result = x
|
147
|
-
for func in reversed(functions):
|
148
|
-
result = func(result)
|
149
|
-
return result
|
150
|
-
|
151
|
-
return composed
|
152
|
-
|
153
|
-
|
154
|
-
def skip(operation_name: str) -> NoReturn:
|
155
|
-
raise SkipTest(f"It is not possible to generate negative test cases for `{operation_name}`")
|
156
|
-
|
157
|
-
|
158
|
-
def _ensure_parent(path: PathLike, fail_silently: bool = True) -> None:
|
159
|
-
# Try to create the parent dir
|
160
|
-
try:
|
161
|
-
Path(path).parent.mkdir(mode=0o755, parents=True, exist_ok=True)
|
162
|
-
except OSError:
|
163
|
-
if not fail_silently:
|
164
|
-
raise
|
@@ -1,293 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.4
|
2
|
-
Name: schemathesis
|
3
|
-
Version: 3.39.16
|
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.8
|
24
|
-
Classifier: Programming Language :: Python :: 3.9
|
25
|
-
Classifier: Programming Language :: Python :: 3.10
|
26
|
-
Classifier: Programming Language :: Python :: 3.11
|
27
|
-
Classifier: Programming Language :: Python :: 3.12
|
28
|
-
Classifier: Programming Language :: Python :: 3.13
|
29
|
-
Classifier: Programming Language :: Python :: Implementation :: CPython
|
30
|
-
Classifier: Topic :: Software Development :: Testing
|
31
|
-
Requires-Python: >=3.8
|
32
|
-
Requires-Dist: backoff<3.0,>=2.1.2
|
33
|
-
Requires-Dist: click<9.0,>=7.0
|
34
|
-
Requires-Dist: colorama<1.0,>=0.4
|
35
|
-
Requires-Dist: harfile<1.0,>=0.3.0
|
36
|
-
Requires-Dist: httpx<1.0,>=0.22.0
|
37
|
-
Requires-Dist: hypothesis-graphql<1,>=0.11.1
|
38
|
-
Requires-Dist: hypothesis-jsonschema<0.24,>=0.23.1
|
39
|
-
Requires-Dist: hypothesis<7,>=6.103.4; python_version > '3.8'
|
40
|
-
Requires-Dist: hypothesis[zoneinfo]<7,>=6.103.4; python_version == '3.8'
|
41
|
-
Requires-Dist: jsonschema[format]<5.0,>=4.18.0
|
42
|
-
Requires-Dist: junit-xml<2.0,>=1.9
|
43
|
-
Requires-Dist: pyrate-limiter<4.0,>=2.10
|
44
|
-
Requires-Dist: pytest-subtests<0.15.0,>=0.2.1
|
45
|
-
Requires-Dist: pytest<9,>=4.6.4
|
46
|
-
Requires-Dist: pyyaml<7.0,>=5.1
|
47
|
-
Requires-Dist: requests<3,>=2.22
|
48
|
-
Requires-Dist: starlette-testclient<1,>=0.4.1
|
49
|
-
Requires-Dist: starlette<1,>=0.13
|
50
|
-
Requires-Dist: tomli-w<2.0,>=1.0.0
|
51
|
-
Requires-Dist: tomli<3.0,>=2.0.1
|
52
|
-
Requires-Dist: werkzeug<4,>=0.16.0
|
53
|
-
Requires-Dist: yarl<2.0,>=1.5
|
54
|
-
Provides-Extra: bench
|
55
|
-
Requires-Dist: pytest-codspeed==2.2.1; extra == 'bench'
|
56
|
-
Provides-Extra: cov
|
57
|
-
Requires-Dist: coverage-enable-subprocess; extra == 'cov'
|
58
|
-
Requires-Dist: coverage[toml]>=5.3; extra == 'cov'
|
59
|
-
Provides-Extra: dev
|
60
|
-
Requires-Dist: aiohttp<4.0,>=3.9.1; extra == 'dev'
|
61
|
-
Requires-Dist: coverage-enable-subprocess; extra == 'dev'
|
62
|
-
Requires-Dist: coverage>=6; extra == 'dev'
|
63
|
-
Requires-Dist: coverage[toml]>=5.3; extra == 'dev'
|
64
|
-
Requires-Dist: fastapi>=0.86.0; extra == 'dev'
|
65
|
-
Requires-Dist: flask<3.0,>=2.1.1; extra == 'dev'
|
66
|
-
Requires-Dist: hypothesis-openapi<1,>=0.2; (python_version >= '3.10') and extra == 'dev'
|
67
|
-
Requires-Dist: pydantic>=1.10.2; extra == 'dev'
|
68
|
-
Requires-Dist: pytest-asyncio<1.0,>=0.18.0; extra == 'dev'
|
69
|
-
Requires-Dist: pytest-codspeed==2.2.1; extra == 'dev'
|
70
|
-
Requires-Dist: pytest-httpserver<2.0,>=1.0; extra == 'dev'
|
71
|
-
Requires-Dist: pytest-mock<4.0,>=3.7.0; extra == 'dev'
|
72
|
-
Requires-Dist: pytest-trio<1.0,>=0.8; extra == 'dev'
|
73
|
-
Requires-Dist: pytest-xdist<4.0,>=3; extra == 'dev'
|
74
|
-
Requires-Dist: sphinx; extra == 'dev'
|
75
|
-
Requires-Dist: sphinx-click; extra == 'dev'
|
76
|
-
Requires-Dist: sphinx-rtd-theme; extra == 'dev'
|
77
|
-
Requires-Dist: strawberry-graphql[fastapi]>=0.109.0; extra == 'dev'
|
78
|
-
Requires-Dist: syrupy<5.0,>=2; extra == 'dev'
|
79
|
-
Requires-Dist: trustme<1.0,>=0.9.0; extra == 'dev'
|
80
|
-
Provides-Extra: docs
|
81
|
-
Requires-Dist: sphinx; extra == 'docs'
|
82
|
-
Requires-Dist: sphinx-click; extra == 'docs'
|
83
|
-
Requires-Dist: sphinx-rtd-theme; extra == 'docs'
|
84
|
-
Provides-Extra: tests
|
85
|
-
Requires-Dist: aiohttp<4.0,>=3.9.1; extra == 'tests'
|
86
|
-
Requires-Dist: coverage>=6; extra == 'tests'
|
87
|
-
Requires-Dist: fastapi>=0.86.0; extra == 'tests'
|
88
|
-
Requires-Dist: flask<3.0,>=2.1.1; extra == 'tests'
|
89
|
-
Requires-Dist: hypothesis-openapi<1,>=0.2; (python_version >= '3.10') and extra == 'tests'
|
90
|
-
Requires-Dist: pydantic>=1.10.2; extra == 'tests'
|
91
|
-
Requires-Dist: pytest-asyncio<1.0,>=0.18.0; extra == 'tests'
|
92
|
-
Requires-Dist: pytest-httpserver<2.0,>=1.0; extra == 'tests'
|
93
|
-
Requires-Dist: pytest-mock<4.0,>=3.7.0; extra == 'tests'
|
94
|
-
Requires-Dist: pytest-trio<1.0,>=0.8; extra == 'tests'
|
95
|
-
Requires-Dist: pytest-xdist<4.0,>=3; extra == 'tests'
|
96
|
-
Requires-Dist: strawberry-graphql[fastapi]>=0.109.0; extra == 'tests'
|
97
|
-
Requires-Dist: syrupy<5.0,>=2; extra == 'tests'
|
98
|
-
Requires-Dist: trustme<1.0,>=0.9.0; extra == 'tests'
|
99
|
-
Description-Content-Type: text/markdown
|
100
|
-
|
101
|
-
<p align="center">
|
102
|
-
<a href="https://github.com/schemathesis/schemathesis/actions" target="_blank">
|
103
|
-
<img src="https://github.com/schemathesis/schemathesis/actions/workflows/build.yml/badge.svg" alt="Build">
|
104
|
-
</a>
|
105
|
-
<a href="https://codecov.io/gh/schemathesis/schemathesis/branch/master" target="_blank">
|
106
|
-
<img src="https://codecov.io/gh/schemathesis/schemathesis/branch/master/graph/badge.svg" alt="Coverage">
|
107
|
-
</a>
|
108
|
-
<a href="https://pypi.org/project/schemathesis/" target="_blank">
|
109
|
-
<img src="https://img.shields.io/pypi/v/schemathesis.svg" alt="Version">
|
110
|
-
</a>
|
111
|
-
<a href="https://pypi.org/project/schemathesis/" target="_blank">
|
112
|
-
<img src="https://img.shields.io/pypi/pyversions/schemathesis.svg" alt="Python versions">
|
113
|
-
</a>
|
114
|
-
<a href="https://discord.gg/R9ASRAmHnA" target="_blank">
|
115
|
-
<img src="https://img.shields.io/discord/938139740912369755" alt="Discord">
|
116
|
-
</a>
|
117
|
-
<a href="https://opensource.org/licenses/MIT" target="_blank">
|
118
|
-
<img src="https://img.shields.io/pypi/l/schemathesis.svg" alt="License">
|
119
|
-
</a>
|
120
|
-
</p>
|
121
|
-
|
122
|
-
## Schemathesis
|
123
|
-
|
124
|
-
Schemathesis is an API testing tool that automatically finds crashes and validates spec compliance.
|
125
|
-
|
126
|
-
<p align="center">
|
127
|
-
<img src="https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/demo.gif" alt="Schemathesis Demo"/>
|
128
|
-
</p>
|
129
|
-
|
130
|
-
<p align="center">
|
131
|
-
<i>Finding server crashes in the Demo API.</i>
|
132
|
-
</p>
|
133
|
-
|
134
|
-
### Highlights
|
135
|
-
|
136
|
-
🎯 **Catches Hard-to-Find Bugs**
|
137
|
-
|
138
|
-
- Uncover hidden crashes and edge cases that manual testing might miss
|
139
|
-
- Identify spec violations and ensure your API adheres to its contract
|
140
|
-
|
141
|
-
⚡ **Accelerates Testing Cycles**
|
142
|
-
|
143
|
-
- Automatically generate a wide range of test cases based on your API schema
|
144
|
-
- Save time by reducing the need for manual test case creation
|
145
|
-
|
146
|
-
🧩 **Integrates Seamlessly**
|
147
|
-
|
148
|
-
- Works with popular API formats such as OpenAPI, GraphQL.
|
149
|
-
- Easily integrate into your existing CI/CD workflows.
|
150
|
-
|
151
|
-
🔧 **Customizable and Extendable**
|
152
|
-
|
153
|
-
- Tune the testing process using Python extensions.
|
154
|
-
- Adjust the testing flow to suit your needs with rich configuration options.
|
155
|
-
|
156
|
-
🐞 **Simplifies Debugging**
|
157
|
-
|
158
|
-
- Get detailed reports to identify and fix issues quickly.
|
159
|
-
- Reproduce failing test cases with cURL commands.
|
160
|
-
|
161
|
-
🔬 **Proven by Research**
|
162
|
-
|
163
|
-
- Validated through academic studies on API testing automation
|
164
|
-
- Featured in [ICSE 2022 paper](https://ieeexplore.ieee.org/document/9793781) on semantics-aware fuzzing
|
165
|
-
- Recognized in [ACM survey](https://dl.acm.org/doi/10.1145/3617175) as state-of-the-art RESTful API testing tool
|
166
|
-
|
167
|
-
## Installation
|
168
|
-
|
169
|
-
Use Schemathesis via Docker, or install it from [PyPI](https://pypi.org/project/schemathesis/)
|
170
|
-
|
171
|
-
```console
|
172
|
-
# Via Docker.
|
173
|
-
$ docker pull schemathesis/schemathesis:stable
|
174
|
-
|
175
|
-
# With pip.
|
176
|
-
$ pip install schemathesis
|
177
|
-
```
|
178
|
-
|
179
|
-
## Getting Started
|
180
|
-
|
181
|
-
Schemathesis works as a standalone CLI:
|
182
|
-
|
183
|
-
```console
|
184
|
-
docker run schemathesis/schemathesis:stable
|
185
|
-
run --checks all https://example.schemathesis.io/openapi.json
|
186
|
-
# Or when installed with pip
|
187
|
-
schemathesis run --checks all https://example.schemathesis.io/openapi.json
|
188
|
-
```
|
189
|
-
|
190
|
-
Or a Python library:
|
191
|
-
|
192
|
-
```python
|
193
|
-
import schemathesis
|
194
|
-
|
195
|
-
schema = schemathesis.from_uri("https://example.schemathesis.io/openapi.json")
|
196
|
-
|
197
|
-
|
198
|
-
@schema.parametrize()
|
199
|
-
def test_api(case):
|
200
|
-
case.call_and_validate()
|
201
|
-
```
|
202
|
-
|
203
|
-
See a complete working example project in the [/example](https://github.com/schemathesis/schemathesis/tree/master/example) directory.
|
204
|
-
|
205
|
-
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:
|
206
|
-
|
207
|
-
```yaml
|
208
|
-
api-tests:
|
209
|
-
runs-on: ubuntu-latest
|
210
|
-
steps:
|
211
|
-
- uses: schemathesis/action@v1
|
212
|
-
with:
|
213
|
-
schema: "https://example.schemathesis.io/openapi.json"
|
214
|
-
```
|
215
|
-
|
216
|
-
For more details, check out our [GitHub Action](https://github.com/schemathesis/action) repository.
|
217
|
-
|
218
|
-
## Who's Using Schemathesis?
|
219
|
-
|
220
|
-
Schemathesis is used by a number of projects and companies, including direct usage or integration into other tools:
|
221
|
-
|
222
|
-
- Abstract Machines ([Magistrala](https://github.com/absmach/magistrala))
|
223
|
-
- Bundesstelle für Open Data ([smard-api](https://github.com/bundesAPI/smard-api))
|
224
|
-
- [CheckMK](https://github.com/Checkmk/checkmk)
|
225
|
-
- Chronosphere.io ([Calyptia](https://github.com/chronosphereio/calyptia-api))
|
226
|
-
- HXSecurity ([DongTai](https://github.com/HXSecurity/DongTai))
|
227
|
-
- Netflix ([Dispatch](https://github.com/Netflix/dispatch))
|
228
|
-
- [Pixie](https://github.com/pixie-io/pixie)
|
229
|
-
- [Qdrant](https://github.com/qdrant/qdrant)
|
230
|
-
- Spotify ([Backstage](https://github.com/backstage/backstage))
|
231
|
-
- [Weechat](https://github.com/weechat/weechat)
|
232
|
-
- WordPress ([OpenVerse](https://github.com/WordPress/openverse))
|
233
|
-
|
234
|
-
## Testimonials
|
235
|
-
|
236
|
-
"_The world needs modern, spec-based API tests, so we can deliver APIs as-designed. Schemathesis is the right tool for that job._"
|
237
|
-
|
238
|
-
<div>Emmanuel Paraskakis - <strong>Level 250</strong></div>
|
239
|
-
|
240
|
-
---
|
241
|
-
|
242
|
-
"_Schemathesis is the only sane way to thoroughly test an API._"
|
243
|
-
|
244
|
-
<div>Zdenek Nemec - <strong>superface.ai</strong></div>
|
245
|
-
|
246
|
-
---
|
247
|
-
|
248
|
-
"_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._"
|
249
|
-
|
250
|
-
<div>Luděk Nový - <strong>JetBrains</strong></div>
|
251
|
-
|
252
|
-
---
|
253
|
-
|
254
|
-
"_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._"
|
255
|
-
|
256
|
-
<div>Dmitry Misharov - <strong>RedHat</strong></div>
|
257
|
-
|
258
|
-
---
|
259
|
-
|
260
|
-
"_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._"
|
261
|
-
|
262
|
-
<div>Testing RESTful APIs: A Survey - <strong>a research paper by Golmohammadi, at al</strong></div>
|
263
|
-
|
264
|
-
---
|
265
|
-
|
266
|
-
## Contributing
|
267
|
-
|
268
|
-
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.
|
269
|
-
|
270
|
-
### How to Contribute
|
271
|
-
|
272
|
-
1. Discuss ideas and questions through [GitHub issues](https://github.com/schemathesis/schemathesis/issues) or on our [Discord channel](https://discord.gg/R9ASRAmHnA).
|
273
|
-
2. For code contributions, see our [contributing guidelines](https://github.com/schemathesis/schemathesis/blob/master/CONTRIBUTING.rst).
|
274
|
-
3. Share your experience and thoughts using [this feedback form](https://forms.gle/kJ4hSxc1Yp6Ga96t5).
|
275
|
-
|
276
|
-
### Why Your Input Matters
|
277
|
-
|
278
|
-
- Enables us to develop useful features and fix bugs faster
|
279
|
-
- Improves our test suite and documentation
|
280
|
-
|
281
|
-
Thank you for contributing to making Schemathesis better! 👍
|
282
|
-
|
283
|
-
## Get in Touch
|
284
|
-
|
285
|
-
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>.
|
286
|
-
|
287
|
-
## Acknowledgements
|
288
|
-
|
289
|
-
Schemathesis is built on top of <a href="https://hypothesis.works/" target="_blank">Hypothesis</a>, a powerful property-based testing library for Python.
|
290
|
-
|
291
|
-
## License
|
292
|
-
|
293
|
-
This project is licensed under the terms of the [MIT license](https://opensource.org/licenses/MIT).
|
@@ -1,160 +0,0 @@
|
|
1
|
-
schemathesis/__init__.py,sha256=AGpMI329waZiHwU05CW7cB1cxqQsXvRPB5vs4N7ktB4,2090
|
2
|
-
schemathesis/_compat.py,sha256=y4RZd59i2NCnZ91VQhnKeMn_8t3SgvLOk2Xm8nymUHY,1837
|
3
|
-
schemathesis/_dependency_versions.py,sha256=pjEkkGAfOQJYNb-9UOo84V8nj_lKHr_TGDVdFwY2UU0,816
|
4
|
-
schemathesis/_hypothesis.py,sha256=L0cCrVk4NBI4Tn9pRIQe_URPXsJCn5Ooay0VHbdj5z8,30899
|
5
|
-
schemathesis/_lazy_import.py,sha256=aMhWYgbU2JOltyWBb32vnWBb6kykOghucEzI_F70yVE,470
|
6
|
-
schemathesis/_override.py,sha256=TAjYB3eJQmlw9K_xiR9ptt9Wj7if4U7UFlUhGjpBAoM,1625
|
7
|
-
schemathesis/_patches.py,sha256=Hsbpn4UVeXUQD2Kllrbq01CSWsTYENWa0VJTyhX5C2k,895
|
8
|
-
schemathesis/_rate_limiter.py,sha256=q_XWst5hzuAyXQRiZc4s_bx7-JlPYZM_yKDmeavt3oo,242
|
9
|
-
schemathesis/_xml.py,sha256=qc2LydEwIqcSfgqQOJqiYicivA4YFJGKgCBOem_JqNc,8560
|
10
|
-
schemathesis/auths.py,sha256=De97IS_iOlC36-jRhkZ2DUndjUpXYgsd8R-nA-iHn88,16837
|
11
|
-
schemathesis/checks.py,sha256=YPUI1N5giGBy1072vd77e6HWelGAKrJUmJLEG4oqfF8,2630
|
12
|
-
schemathesis/code_samples.py,sha256=rsdTo6ksyUs3ZMhqx0mmmkPSKUCFa--snIOYsXgZd80,4120
|
13
|
-
schemathesis/constants.py,sha256=RHwog2lAz84qG6KCpP1U15A4a9w1xcwbgZ97aY4juQg,2555
|
14
|
-
schemathesis/exceptions.py,sha256=5zjPlyVoQNJGbwufplL6ZVV7FEBPBNPHGdlQRJ7xnhE,20449
|
15
|
-
schemathesis/failures.py,sha256=OsQM5FDs79usUM4MLA20WIDaoW6SKTR39IyKDjeiwtQ,8197
|
16
|
-
schemathesis/filters.py,sha256=f3c_yXIBwIin-9Y0qU2TkcC1NEM_Mw34jGUHQc0BOyw,17026
|
17
|
-
schemathesis/graphql.py,sha256=XiuKcfoOB92iLFC8zpz2msLkM0_V0TLdxPNBqrrGZ8w,216
|
18
|
-
schemathesis/hooks.py,sha256=p5AXgjVGtka0jn9MOeyBaRUtNbqZTs4iaJqytYTacHc,14856
|
19
|
-
schemathesis/lazy.py,sha256=Ddhkk7Tpc_VcRGYkCtKDmP2gpjxVmEZ3b01ZTNjbm8I,19004
|
20
|
-
schemathesis/loaders.py,sha256=MoEhcdOEBJxNRn5X-ZNhWB9jZDHQQNpkNfEdQjf_NDw,4590
|
21
|
-
schemathesis/models.py,sha256=8V3ZDTq2l45iFB-kE_NWb64iTy-hkf-hXCI-bIp4oxw,50010
|
22
|
-
schemathesis/parameters.py,sha256=izlu4MFYT1RWrC4RBxrV6weeCal-ODbdLQLMb0PYCZY,2327
|
23
|
-
schemathesis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
|
-
schemathesis/sanitization.py,sha256=Lycn1VVfula9B6XpzkxTHja7CZ7RHqbUh9kBic0Yi4M,9056
|
25
|
-
schemathesis/schemas.py,sha256=kwgdRD7JdE0iovuZVqArQCf_Dqfo2CsqqWYeR_bgsZo,20526
|
26
|
-
schemathesis/serializers.py,sha256=HyYVSVR71FhWfIErnH6OoGLOa4tkh9mTeVUTIpzEW24,11739
|
27
|
-
schemathesis/targets.py,sha256=XIGRghvEzbmEJjse9aZgNEj67L3jAbiazm2rxURWgDE,2351
|
28
|
-
schemathesis/throttling.py,sha256=aisUc4MJDGIOGUAs9L2DlWWpdd4KyAFuNVKhYoaUC9M,1719
|
29
|
-
schemathesis/types.py,sha256=Tem2Q_zyMCd0Clp5iGKv6Fu13wdcbxVE8tCVH9WWt7A,1065
|
30
|
-
schemathesis/utils.py,sha256=LwqxqoAKmRiAdj-qUbNmgQgsamc49V5lc5TnOIDuuMA,4904
|
31
|
-
schemathesis/cli/__init__.py,sha256=jiDVw31fF8oNl0TyAWJpDo-166PkCqNV4t1rUcy_4oo,76352
|
32
|
-
schemathesis/cli/__main__.py,sha256=MWaenjaUTZIfNPFzKmnkTiawUri7DVldtg3mirLwzU8,92
|
33
|
-
schemathesis/cli/callbacks.py,sha256=UMCYPfoHXgxtT-uui0zlfeNoOLzteJu90q9ID3qt1m4,16540
|
34
|
-
schemathesis/cli/cassettes.py,sha256=zji-B-uuwyr0Z0BzQX-DLMV6lWb58JtLExcUE1v3m4Y,20153
|
35
|
-
schemathesis/cli/constants.py,sha256=wk-0GsoJIel8wFFerQ6Kf_6eAYUtIWkwMFwyAqv3yj4,1635
|
36
|
-
schemathesis/cli/context.py,sha256=j_lvYQiPa6Q7P4P_IGCM9V2y2gJSpDbpxIIzR5oFB2I,2567
|
37
|
-
schemathesis/cli/debug.py,sha256=_YA-bX1ujHl4bqQDEum7M-I2XHBTEGbvgkhvcvKhmgU,658
|
38
|
-
schemathesis/cli/handlers.py,sha256=EXSAFe5TQlHANz1AVlSttfsoDT2oeaeFbqq1N7e2udw,467
|
39
|
-
schemathesis/cli/junitxml.py,sha256=_psBdqGwH4OKySSWeva41mbgGLav86UnWhQyOt99gnU,5331
|
40
|
-
schemathesis/cli/options.py,sha256=jPqJxkuAb91wtB_aOUFkGDdGtJ3UDwT2Nn3vvL-odsE,3062
|
41
|
-
schemathesis/cli/reporting.py,sha256=KC3sxSc1u4aFQ-0Q8CQ3G4HTEl7QxlubGnJgNKmVJdQ,3627
|
42
|
-
schemathesis/cli/sanitization.py,sha256=Onw_NWZSom6XTVNJ5NHnC0PAhrYAcGzIXJbsBCzLkn4,1005
|
43
|
-
schemathesis/cli/output/__init__.py,sha256=AXaUzQ1nhQ-vXhW4-X-91vE2VQtEcCOrGtQXXNN55iQ,29
|
44
|
-
schemathesis/cli/output/default.py,sha256=kRJPcZ5RL9Nsy9k4bSZaRtAezzPiHE6hybdNZLfrEhs,39071
|
45
|
-
schemathesis/cli/output/short.py,sha256=CL6-Apxr5tuZ3BL1vecV1MiRY1wDt21g0wiUwZu6mLM,2607
|
46
|
-
schemathesis/contrib/__init__.py,sha256=FH8NL8NXgSKBFOF8Jy_EB6T4CJEaiM-tmDhz16B2o4k,187
|
47
|
-
schemathesis/contrib/unique_data.py,sha256=cTjJfoNpfLMobUzmGnm3k6kVrZcL34_FMPLlpDDsg4c,1249
|
48
|
-
schemathesis/contrib/openapi/__init__.py,sha256=N-BoCzrLGq9aynubhmQBS-LJUBv1wPJcveMCJDhyQl4,217
|
49
|
-
schemathesis/contrib/openapi/fill_missing_examples.py,sha256=SL3LXG4khjGKneU3aBu1MGIhYtwRMjK77NH8L--9JBE,583
|
50
|
-
schemathesis/contrib/openapi/formats/__init__.py,sha256=OpHWPW8MkTLVv83QXPYY1HVLflhmSH49hSVefm1oVV0,111
|
51
|
-
schemathesis/contrib/openapi/formats/uuid.py,sha256=PG7aV0QAQnQ1zKmKiDK3cJue3Xy-TLGzyMeCB_RQbgk,391
|
52
|
-
schemathesis/experimental/__init__.py,sha256=0YVz037-Koc1OZ9Y5oYujc4if0gE9SdtfFlWnfzrWNo,3498
|
53
|
-
schemathesis/extra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
54
|
-
schemathesis/extra/_aiohttp.py,sha256=-bIY0ucv7pfK3gA9PHiO4n7ajtZJJM9pS3EY3cLau9c,957
|
55
|
-
schemathesis/extra/_flask.py,sha256=lpKQxg_kdEFo59Q8sV5T78IJYhgx6p4SCwIohJYSycw,345
|
56
|
-
schemathesis/extra/_server.py,sha256=JFJTgJjpZu_eVZkI16rLaXJSv55Awbl7JNqegCLnQBg,541
|
57
|
-
schemathesis/extra/pytest_plugin.py,sha256=3FF7pcqK26J__FGq6uOZdaD-1tZ-khQEwpdwb1ueFPc,12617
|
58
|
-
schemathesis/fixups/__init__.py,sha256=RP5QYJVJhp8LXjhH89fCRaIVU26dHCy74jD9seoYMuc,967
|
59
|
-
schemathesis/fixups/fast_api.py,sha256=mn-KzBqnR8jl4W5fY-_ZySabMDMUnpzCIESMHnlvE1c,1304
|
60
|
-
schemathesis/fixups/utf8_bom.py,sha256=lWT9RNmJG8i-l5AXIpaCT3qCPUwRgzXPW3eoOjmZETA,745
|
61
|
-
schemathesis/generation/__init__.py,sha256=PClFLK3bu-8Gsy71rgdD0ULMqySrzX-Um8Tan77x_5A,1628
|
62
|
-
schemathesis/generation/_hypothesis.py,sha256=74fzLPHugZgMQXerWYFAMqCAjtAXz5E4gek7Gnkhli4,1756
|
63
|
-
schemathesis/generation/_methods.py,sha256=r8oVlJ71_gXcnEhU-byw2E0R2RswQQFm8U7yGErSqbw,1204
|
64
|
-
schemathesis/generation/coverage.py,sha256=bE93UnTpp8FsILzbupgqcc-1pQL5Y2DykuIlwWUweM4,41279
|
65
|
-
schemathesis/internal/__init__.py,sha256=93HcdG3LF0BbQKbCteOsFMa1w6nXl8yTmx87QLNJOik,161
|
66
|
-
schemathesis/internal/checks.py,sha256=ZPvsPJ7gWwK0IpzBFgOMaq4L2e0yfeC8qxPrnpauVFA,2741
|
67
|
-
schemathesis/internal/copy.py,sha256=DcL56z-d69kKR_5u8mlHvjSL1UTyUKNMAwexrwHFY1s,1031
|
68
|
-
schemathesis/internal/datetime.py,sha256=zPLBL0XXLNfP-KYel3H2m8pnsxjsA_4d-zTOhJg2EPQ,136
|
69
|
-
schemathesis/internal/deprecation.py,sha256=XnzwSegbbdQyoTF1OGW_s9pdjIfN_Uzzdb2rfah1w2o,1261
|
70
|
-
schemathesis/internal/diff.py,sha256=upGqM6s9WDT653wzxK_tqclFCxqkzB0j4wsO1foq5_k,466
|
71
|
-
schemathesis/internal/extensions.py,sha256=h0aHRK_PTKfiAufkeBziegQS8537TL-Gr1hPW48q8Yc,790
|
72
|
-
schemathesis/internal/jsonschema.py,sha256=-7tF15cXo1ZdhiRFYYfEClXihX2Svc5Loi_Dz1x201k,1157
|
73
|
-
schemathesis/internal/output.py,sha256=zMaG5knIuBieVH8CrcmPJgbmQukDs2xdekX0BrK7BZs,1989
|
74
|
-
schemathesis/internal/result.py,sha256=d449YvyONjqjDs-A5DAPgtAI96iT753K8sU6_1HLo2Q,461
|
75
|
-
schemathesis/internal/transformation.py,sha256=M5LA4pFZC4nD_0iGfih1wLF3_q8xJas94Uuaymt-7Cw,690
|
76
|
-
schemathesis/internal/validation.py,sha256=G7i8jIMUpAeOnDsDF_eWYvRZe_yMprRswx0QAtMPyEw,966
|
77
|
-
schemathesis/runner/__init__.py,sha256=r8SoHc3X_wk5lfmt9P87gzv6nvbIowkQ2-WlT7fhReY,22182
|
78
|
-
schemathesis/runner/events.py,sha256=cRKKSDvHvKLBIyFBz-J0JtAKshbGGKco9eaMyLCgzsY,11734
|
79
|
-
schemathesis/runner/probes.py,sha256=no5AfO3kse25qvHevjeUfB0Q3C860V2AYzschUW3QMQ,5688
|
80
|
-
schemathesis/runner/serialization.py,sha256=vZi1wd9HX9Swp9VJ_hZFeDgy3Y726URpHra-TbPvQhk,20762
|
81
|
-
schemathesis/runner/impl/__init__.py,sha256=1E2iME8uthYPBh9MjwVBCTFV-P3fi7AdphCCoBBspjs,199
|
82
|
-
schemathesis/runner/impl/context.py,sha256=KY06FXVOFQ6DBaa_FomSBXL81ULs3D21IW1u3yLqs1E,2434
|
83
|
-
schemathesis/runner/impl/core.py,sha256=pB_0zs_MfzAcbrVvRU85mONAn8QXVqFfM_y7yV8a2l0,49962
|
84
|
-
schemathesis/runner/impl/solo.py,sha256=y5QSxgK8nBCEjZVD5BpFvYUXmB6tEjk6TwxAo__NejA,2911
|
85
|
-
schemathesis/runner/impl/threadpool.py,sha256=yNR5LYE8f3N_4t42OwSgy0_qdGgBPM7d11F9c9oEAAs,15075
|
86
|
-
schemathesis/service/__init__.py,sha256=cDVTCFD1G-vvhxZkJUwiToTAEQ-0ByIoqwXvJBCf_V8,472
|
87
|
-
schemathesis/service/auth.py,sha256=AiZXvSNwz1Hi3fn-OCp6XD-E4GAMDlfcX8fORJ8_dLo,445
|
88
|
-
schemathesis/service/ci.py,sha256=3m9xSWFhrpWA6mI_8bXI7sspND9RSqXFM9UseO5nIiM,6782
|
89
|
-
schemathesis/service/client.py,sha256=9h-y7-GGO3lsuOfSVSMKeHH8nw91rk3Bi06gr23r3E4,5222
|
90
|
-
schemathesis/service/constants.py,sha256=Q1bhtLRkmhso4KSVAtWl0u446Wlbk3ShOL3ZdbPoJOM,1502
|
91
|
-
schemathesis/service/events.py,sha256=YHhVB66bRODx2ZnG4vjE6lVg3LqzOrsMb8O8vtc8SpE,1294
|
92
|
-
schemathesis/service/extensions.py,sha256=9TBvH762I4DKUQEE551oTH4cHRlVsRXBMDdMVwaFjQk,7805
|
93
|
-
schemathesis/service/hosts.py,sha256=gg4xObk3G9p39bkmAvX3gJpZ3Anx-Fnwm9T03qov0LE,3161
|
94
|
-
schemathesis/service/metadata.py,sha256=6CEyYbf2GkoqUHzC0U1br6DkrF12VBbjr8yhOfRZ0fM,2086
|
95
|
-
schemathesis/service/models.py,sha256=nUf38yf2AK8-B56KHjviVlVe-fjos9Dp-M8YAWOIkrc,6572
|
96
|
-
schemathesis/service/report.py,sha256=FHIlt0UcDQkwRlqsnURuBD7O6PdXlAMJlCdWdukIoiY,8302
|
97
|
-
schemathesis/service/serialization.py,sha256=20APAy8CZ561agg4FP17PIEX8hB0LXtk_p7dpO1Z-JI,6278
|
98
|
-
schemathesis/service/usage.py,sha256=UbXqxeDq5mAjKkfV4hApZsReZmQHXiqoXUYn_Z6YuZk,2438
|
99
|
-
schemathesis/specs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
100
|
-
schemathesis/specs/graphql/__init__.py,sha256=fgyHtvWNUVWismBTOqxQtgLoTighTfvMv6v6QCD_Oyc,85
|
101
|
-
schemathesis/specs/graphql/_cache.py,sha256=7ras3q_InDJBPykgHroerl9f2jFamC8xJD35376Zs6I,795
|
102
|
-
schemathesis/specs/graphql/loaders.py,sha256=-PUdzGiGo1BZWe9slaUmqeamMqCM6daq2lSrFblomCc,12339
|
103
|
-
schemathesis/specs/graphql/nodes.py,sha256=bE3G1kNmqJ8OV4igBvIK-UORrkQA6Nofduf87O3TD9I,541
|
104
|
-
schemathesis/specs/graphql/scalars.py,sha256=9tvLTiYVe8A_E8ASA0czz3Z0Mp9lyak7R4wHpAE_jKo,1805
|
105
|
-
schemathesis/specs/graphql/schemas.py,sha256=6oTsg730KBswaeZK9EttVCxxk8FWV1JHjyiVzU6qXlQ,14445
|
106
|
-
schemathesis/specs/graphql/validation.py,sha256=uINIOt-2E7ZuQV2CxKzwez-7L9tDtqzMSpnVoRWvxy0,1635
|
107
|
-
schemathesis/specs/openapi/__init__.py,sha256=HDcx3bqpa6qWPpyMrxAbM3uTo0Lqpg-BUNZhDJSJKnw,279
|
108
|
-
schemathesis/specs/openapi/_cache.py,sha256=PAiAu4X_a2PQgD2lG5H3iisXdyg4SaHpU46bRZvfNkM,4320
|
109
|
-
schemathesis/specs/openapi/_hypothesis.py,sha256=nU8UDn1PzGCre4IVmwIuO9-CZv1KJe1fYY0d2BojhSo,22981
|
110
|
-
schemathesis/specs/openapi/checks.py,sha256=cuHTZsoHV2fdUz23_F99-mLelT1xtvaiS9EcG7R-hZs,26897
|
111
|
-
schemathesis/specs/openapi/constants.py,sha256=JqM_FHOenqS_MuUE9sxVQ8Hnw0DNM8cnKDwCwPLhID4,783
|
112
|
-
schemathesis/specs/openapi/converter.py,sha256=Yxw9lS_JKEyi-oJuACT07fm04bqQDlAu-iHwzkeDvE4,3546
|
113
|
-
schemathesis/specs/openapi/definitions.py,sha256=WTkWwCgTc3OMxfKsqh6YDoGfZMTThSYrHGp8h0vLAK0,93935
|
114
|
-
schemathesis/specs/openapi/examples.py,sha256=fpZ8gzc1wxgpcUeOpIYaS_WOC-O0oPCLI4tcqmgNpog,21082
|
115
|
-
schemathesis/specs/openapi/formats.py,sha256=3KtEC-8nQRwMErS-WpMadXsr8R0O-NzYwFisZqMuc-8,2761
|
116
|
-
schemathesis/specs/openapi/links.py,sha256=C4Uir2P_EcpqME8ee_a1vdUM8Tm3ZcKNn2YsGjZiMUQ,17935
|
117
|
-
schemathesis/specs/openapi/loaders.py,sha256=jlTYLoG5sVRh8xycIF2M2VDCZ44M80Sct07a_ycg1Po,25698
|
118
|
-
schemathesis/specs/openapi/media_types.py,sha256=dNTxpRQbY3SubdVjh4Cjb38R6Bc9MF9BsRQwPD87x0g,1017
|
119
|
-
schemathesis/specs/openapi/parameters.py,sha256=fP4BupY_1wFbjL9n0lTtpQZY0YBt2mCjrG598LF8ZOI,14712
|
120
|
-
schemathesis/specs/openapi/patterns.py,sha256=L99UtslPvwObCVf5ndq3vL2YjQ7H1nMb-ZNMcyz_Qvk,12677
|
121
|
-
schemathesis/specs/openapi/references.py,sha256=0-gqbAxvBfrvFXA7YqmcNh7zRY7V_pKEnak0ncwQljI,9894
|
122
|
-
schemathesis/specs/openapi/schemas.py,sha256=Vrk6ORM1POvMe5XkbYTT9pnLFsDTFvHXrCplyKnBeDU,54173
|
123
|
-
schemathesis/specs/openapi/security.py,sha256=Z-6pk2Ga1PTUtBe298KunjVHsNh5A-teegeso7zcPIE,7138
|
124
|
-
schemathesis/specs/openapi/serialization.py,sha256=rcZfqQbWer_RELedu4Sh5h_RhKYPWTfUjnmLwpP2R_A,11842
|
125
|
-
schemathesis/specs/openapi/utils.py,sha256=ER4vJkdFVDIE7aKyxyYatuuHVRNutytezgE52pqZNE8,900
|
126
|
-
schemathesis/specs/openapi/validation.py,sha256=Q9ThZlwU-mSz7ExDnIivnZGi1ivC5hlX2mIMRAM79kc,999
|
127
|
-
schemathesis/specs/openapi/expressions/__init__.py,sha256=hFpJrIWbPi55GcIVjNFRDDUL8xmDu3mdbdldoHBoFJ0,1729
|
128
|
-
schemathesis/specs/openapi/expressions/context.py,sha256=GsraXq4azVg4pn0vilc6P7zZjzUWvoO7VUqmshqvmeQ,350
|
129
|
-
schemathesis/specs/openapi/expressions/errors.py,sha256=YLVhps-sYcslgVaahfcUYxUSHlIfWL-rQMeT5PZSMZ8,219
|
130
|
-
schemathesis/specs/openapi/expressions/extractors.py,sha256=FK7NIFuZ3voqRwQ4Uz0wIX_tlXqP7fc4m6MG6EBUOok,526
|
131
|
-
schemathesis/specs/openapi/expressions/lexer.py,sha256=LeVE6fgYT9-fIsXrv0-YrRHnI4VPisbwsexyh9Q5YU0,3982
|
132
|
-
schemathesis/specs/openapi/expressions/nodes.py,sha256=UOVrK8fRHACv0T460CPSyO6OU5aeKnE2eKX4HF9SiFs,3990
|
133
|
-
schemathesis/specs/openapi/expressions/parser.py,sha256=gM_Ob-TlTGxpgjZGRHNyPhBj1YAvRgRoSlNCrE7-djk,4452
|
134
|
-
schemathesis/specs/openapi/negative/__init__.py,sha256=MG0tx3a7BYx0mVg0pjTojq1fLufMmd_x4zppR3oz-Mk,3739
|
135
|
-
schemathesis/specs/openapi/negative/mutations.py,sha256=_BfeqOeqlEo8KuPuFLv3Z7kAR_9G7dvTtyMyMGlkp6o,19244
|
136
|
-
schemathesis/specs/openapi/negative/types.py,sha256=a7buCcVxNBG6ILBM3A7oNTAX0lyDseEtZndBuej8MbI,174
|
137
|
-
schemathesis/specs/openapi/negative/utils.py,sha256=ozcOIuASufLqZSgnKUACjX-EOZrrkuNdXX0SDnLoGYA,168
|
138
|
-
schemathesis/specs/openapi/stateful/__init__.py,sha256=Iu77XE4iUuiz32UoYFqIe7H3yLEC4HKflG0ZX0JCyHg,9451
|
139
|
-
schemathesis/specs/openapi/stateful/statistic.py,sha256=xV_I2Oy-H7K_53nedLMy0rR6kIEvgtXwnGl53UixDZQ,7441
|
140
|
-
schemathesis/specs/openapi/stateful/types.py,sha256=DtxmxdvCbzlgoyecudXP84qF7NuCv3fRal3oJJs7eAU,456
|
141
|
-
schemathesis/stateful/__init__.py,sha256=HBg-h131EI8IipHQgufSaXe-CrFTKmffPVsoEFjPUmE,5100
|
142
|
-
schemathesis/stateful/config.py,sha256=huYzqDoD6x20p_VNAR79NgxPwUFO8UXoc3_z4BEuHqU,3586
|
143
|
-
schemathesis/stateful/context.py,sha256=lpCOVhJEbPOp8F_Z_YvU5ptVTgaKJsllvI1NK28Dtvs,5085
|
144
|
-
schemathesis/stateful/events.py,sha256=CyYvyQebOaeTn6UevaB7HXOrUhxCWbqXMfQ7pZK7fV8,6727
|
145
|
-
schemathesis/stateful/runner.py,sha256=3tRRmWcXp5GCeRWGOtQ9-W0rxljoR06qSCKC4r7EQyY,12672
|
146
|
-
schemathesis/stateful/sink.py,sha256=bHYlgh-fMwg1Srxk_XGs0-WV34YccotwH9PGrxCK57A,2474
|
147
|
-
schemathesis/stateful/state_machine.py,sha256=EE1T0L21vBU0UHGiCmfPfIfnhU1WptB16h0t1iNVro0,13037
|
148
|
-
schemathesis/stateful/statistic.py,sha256=2-uU5xpT9CbMulKgJWLZN6MUpC0Fskf5yXTt4ef4NFA,542
|
149
|
-
schemathesis/stateful/validation.py,sha256=23qSZjC1_xRmtCX4OqsyG6pGxdlo6IZYid695ZpDQyU,3747
|
150
|
-
schemathesis/transports/__init__.py,sha256=9ahByCU8HNCWX8zc6ngGFrkW4kAHJZKGc1fpajKGYJU,13308
|
151
|
-
schemathesis/transports/asgi.py,sha256=bwW9vMd1h89Jh7I4jHJVwSNUQzHvc7-JOD5u4hSHZd8,212
|
152
|
-
schemathesis/transports/auth.py,sha256=urSTO9zgFO1qU69xvnKHPFQV0SlJL3d7_Ojl0tLnZwo,1143
|
153
|
-
schemathesis/transports/content_types.py,sha256=MiKOm-Hy5i75hrROPdpiBZPOTDzOwlCdnthJD12AJzI,2187
|
154
|
-
schemathesis/transports/headers.py,sha256=hr_AIDOfUxsJxpHfemIZ_uNG3_vzS_ZeMEKmZjbYiBE,990
|
155
|
-
schemathesis/transports/responses.py,sha256=OFD4ZLqwEFpo7F9vaP_SVgjhxAqatxIj38FS4XVq8Qs,1680
|
156
|
-
schemathesis-3.39.16.dist-info/METADATA,sha256=3G135B_eBxr3JzsGS2GBSk9HrsnaD0CSfo-fUIVpKRM,11901
|
157
|
-
schemathesis-3.39.16.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
158
|
-
schemathesis-3.39.16.dist-info/entry_points.txt,sha256=VHyLcOG7co0nOeuk8WjgpRETk5P1E2iCLrn26Zkn5uk,158
|
159
|
-
schemathesis-3.39.16.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
|
160
|
-
schemathesis-3.39.16.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|