schemathesis 4.0.0a3__py3-none-any.whl → 4.0.0a5__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/cli/__init__.py +3 -3
- schemathesis/cli/commands/run/__init__.py +159 -135
- schemathesis/cli/commands/run/checks.py +2 -3
- schemathesis/cli/commands/run/context.py +102 -19
- schemathesis/cli/commands/run/executor.py +33 -12
- schemathesis/cli/commands/run/filters.py +1 -0
- schemathesis/cli/commands/run/handlers/cassettes.py +27 -46
- schemathesis/cli/commands/run/handlers/junitxml.py +1 -1
- schemathesis/cli/commands/run/handlers/output.py +238 -102
- schemathesis/cli/commands/run/hypothesis.py +14 -41
- schemathesis/cli/commands/run/reports.py +72 -0
- schemathesis/cli/commands/run/validation.py +18 -12
- schemathesis/cli/ext/groups.py +42 -13
- schemathesis/cli/ext/options.py +15 -8
- schemathesis/core/__init__.py +7 -1
- schemathesis/core/errors.py +79 -11
- schemathesis/core/failures.py +2 -1
- schemathesis/core/transforms.py +1 -1
- schemathesis/engine/config.py +2 -2
- schemathesis/engine/core.py +11 -1
- schemathesis/engine/errors.py +8 -3
- schemathesis/engine/events.py +7 -0
- schemathesis/engine/phases/__init__.py +16 -4
- schemathesis/engine/phases/stateful/_executor.py +1 -1
- schemathesis/engine/phases/unit/__init__.py +77 -53
- schemathesis/engine/phases/unit/_executor.py +28 -23
- schemathesis/engine/phases/unit/_pool.py +8 -0
- schemathesis/errors.py +6 -2
- schemathesis/experimental/__init__.py +0 -6
- schemathesis/filters.py +8 -0
- schemathesis/generation/coverage.py +6 -1
- schemathesis/generation/hypothesis/builder.py +222 -97
- schemathesis/generation/stateful/state_machine.py +49 -3
- schemathesis/openapi/checks.py +3 -1
- schemathesis/pytest/lazy.py +43 -5
- schemathesis/pytest/plugin.py +4 -4
- schemathesis/schemas.py +1 -1
- schemathesis/specs/openapi/checks.py +28 -11
- schemathesis/specs/openapi/examples.py +2 -5
- schemathesis/specs/openapi/expressions/__init__.py +22 -6
- schemathesis/specs/openapi/expressions/nodes.py +15 -21
- schemathesis/specs/openapi/expressions/parser.py +1 -1
- schemathesis/specs/openapi/parameters.py +0 -2
- schemathesis/specs/openapi/patterns.py +24 -7
- schemathesis/specs/openapi/schemas.py +13 -13
- schemathesis/specs/openapi/serialization.py +14 -0
- schemathesis/specs/openapi/stateful/__init__.py +96 -23
- schemathesis/specs/openapi/{links.py → stateful/links.py} +60 -16
- {schemathesis-4.0.0a3.dist-info → schemathesis-4.0.0a5.dist-info}/METADATA +7 -26
- {schemathesis-4.0.0a3.dist-info → schemathesis-4.0.0a5.dist-info}/RECORD +53 -52
- {schemathesis-4.0.0a3.dist-info → schemathesis-4.0.0a5.dist-info}/WHEEL +0 -0
- {schemathesis-4.0.0a3.dist-info → schemathesis-4.0.0a5.dist-info}/entry_points.txt +0 -0
- {schemathesis-4.0.0a3.dist-info → schemathesis-4.0.0a5.dist-info}/licenses/LICENSE +0 -0
@@ -7,15 +7,17 @@ from typing import TYPE_CHECKING, Any, Callable, Iterator
|
|
7
7
|
from hypothesis import strategies as st
|
8
8
|
from hypothesis.stateful import Bundle, Rule, precondition, rule
|
9
9
|
|
10
|
+
from schemathesis.core.errors import InvalidStateMachine
|
10
11
|
from schemathesis.core.result import Ok
|
12
|
+
from schemathesis.core.transforms import UNRESOLVABLE
|
11
13
|
from schemathesis.engine.recorder import ScenarioRecorder
|
12
14
|
from schemathesis.generation import GenerationMode
|
13
15
|
from schemathesis.generation.case import Case
|
14
16
|
from schemathesis.generation.hypothesis import strategies
|
15
17
|
from schemathesis.generation.stateful.state_machine import APIStateMachine, StepInput, StepOutput, _normalize_name
|
16
18
|
from schemathesis.schemas import APIOperation
|
17
|
-
from schemathesis.specs.openapi.links import OpenApiLink, get_all_links
|
18
19
|
from schemathesis.specs.openapi.stateful.control import TransitionController
|
20
|
+
from schemathesis.specs.openapi.stateful.links import OpenApiLink, get_all_links
|
19
21
|
from schemathesis.specs.openapi.utils import expand_status_code
|
20
22
|
|
21
23
|
if TYPE_CHECKING:
|
@@ -72,15 +74,35 @@ class ApiTransitions:
|
|
72
74
|
self.operations.setdefault(link.target.label, OperationTransitions()).incoming.append(link)
|
73
75
|
|
74
76
|
|
77
|
+
@dataclass
|
78
|
+
class RootTransitions:
|
79
|
+
"""Classification of API operations that can serve as entry points."""
|
80
|
+
|
81
|
+
__slots__ = ("reliable", "fallback")
|
82
|
+
|
83
|
+
def __init__(self) -> None:
|
84
|
+
# Operations likely to succeed and provide data for other transitions
|
85
|
+
self.reliable: set[str] = set()
|
86
|
+
# Operations that might work but are less reliable
|
87
|
+
self.fallback: set[str] = set()
|
88
|
+
|
89
|
+
|
75
90
|
def collect_transitions(operations: list[APIOperation]) -> ApiTransitions:
|
76
91
|
"""Collect all transitions between operations."""
|
77
92
|
transitions = ApiTransitions()
|
78
93
|
|
79
94
|
selected_labels = {operation.label for operation in operations}
|
95
|
+
errors = []
|
80
96
|
for operation in operations:
|
81
97
|
for _, link in get_all_links(operation):
|
82
|
-
if link
|
83
|
-
|
98
|
+
if isinstance(link, Ok):
|
99
|
+
if link.ok().target.label in selected_labels:
|
100
|
+
transitions.add_outgoing(operation.label, link.ok())
|
101
|
+
else:
|
102
|
+
errors.append(link.err())
|
103
|
+
|
104
|
+
if errors:
|
105
|
+
raise InvalidStateMachine(errors)
|
84
106
|
|
85
107
|
return transitions
|
86
108
|
|
@@ -109,15 +131,37 @@ def create_state_machine(schema: BaseOpenAPISchema) -> type[APIStateMachine]:
|
|
109
131
|
rules = {}
|
110
132
|
catch_all = Bundle("catch_all")
|
111
133
|
|
134
|
+
# We want stateful testing to be effective and focus on meaningful transitions.
|
135
|
+
# An operation is considered as a "root" transition (entry point) if it satisfies certain criteria
|
136
|
+
# that indicate it's likely to succeed and provide data for other transitions.
|
137
|
+
# For example:
|
138
|
+
# - POST operations that create resources
|
139
|
+
# - GET operations without path parameters (e.g., GET /users/ to list all users)
|
140
|
+
#
|
141
|
+
# We avoid adding operations as roots if they:
|
142
|
+
# 1. Have incoming transitions that will provide proper data
|
143
|
+
# Example: If POST /users/ -> GET /users/{id} exists, we don't need
|
144
|
+
# to generate random user IDs for GET /users/{id}
|
145
|
+
# 2. Are unlikely to succeed with random data
|
146
|
+
# Example: GET /users/{id} with random ID is likely to return 404
|
147
|
+
#
|
148
|
+
# This way we:
|
149
|
+
# 1. Maximize the chance of successful transitions
|
150
|
+
# 2. Don't waste the test budget (limited number of steps) on likely-to-fail operations
|
151
|
+
# 3. Focus on transitions that are designed to work together via links
|
152
|
+
|
153
|
+
roots = classify_root_transitions(operations, transitions)
|
154
|
+
|
112
155
|
for target in operations:
|
113
156
|
if target.label in transitions.operations:
|
114
157
|
incoming = transitions.operations[target.label].incoming
|
115
158
|
if incoming:
|
116
159
|
for link in incoming:
|
117
160
|
bundle_name = f"{link.source.label} -> {link.status_code}"
|
118
|
-
name = _normalize_name(
|
119
|
-
|
120
|
-
|
161
|
+
name = _normalize_name(
|
162
|
+
f"{link.source.label} -> {link.status_code} -> {link.name} -> {target.label}"
|
163
|
+
)
|
164
|
+
assert name not in rules, name
|
121
165
|
rules[name] = precondition(is_transition_allowed(bundle_name, link.source.label, target.label))(
|
122
166
|
transition(
|
123
167
|
name=name,
|
@@ -127,13 +171,8 @@ def create_state_machine(schema: BaseOpenAPISchema) -> type[APIStateMachine]:
|
|
127
171
|
),
|
128
172
|
)
|
129
173
|
)
|
130
|
-
if
|
131
|
-
|
132
|
-
# This approach also includes cases when there is an incoming transition back to POST
|
133
|
-
# For example, POST /users/ -> GET /users/{id}/
|
134
|
-
# The source operation has no prerequisite, but we need to allow this rule to be executed
|
135
|
-
# in order to reach other transitions
|
136
|
-
name = _normalize_name(f"{target.label} -> X")
|
174
|
+
if target.label in roots.reliable or (not roots.reliable and target.label in roots.fallback):
|
175
|
+
name = _normalize_name(f"RANDOM -> {target.label}")
|
137
176
|
if len(schema.generation_config.modes) == 1:
|
138
177
|
case_strategy = target.as_strategy(generation_mode=schema.generation_config.modes[0])
|
139
178
|
else:
|
@@ -168,41 +207,75 @@ def create_state_machine(schema: BaseOpenAPISchema) -> type[APIStateMachine]:
|
|
168
207
|
)
|
169
208
|
|
170
209
|
|
210
|
+
def classify_root_transitions(operations: list[APIOperation], transitions: ApiTransitions) -> RootTransitions:
|
211
|
+
"""Find operations that can serve as root transitions."""
|
212
|
+
roots = RootTransitions()
|
213
|
+
|
214
|
+
for operation in operations:
|
215
|
+
# Skip if operation has no outgoing transitions
|
216
|
+
operation_transitions = transitions.operations.get(operation.label)
|
217
|
+
if not operation_transitions or not operation_transitions.outgoing:
|
218
|
+
continue
|
219
|
+
|
220
|
+
if is_likely_root_transition(operation, operation_transitions):
|
221
|
+
roots.reliable.add(operation.label)
|
222
|
+
else:
|
223
|
+
roots.fallback.add(operation.label)
|
224
|
+
|
225
|
+
return roots
|
226
|
+
|
227
|
+
|
228
|
+
def is_likely_root_transition(operation: APIOperation, transitions: OperationTransitions) -> bool:
|
229
|
+
"""Check if operation is likely to succeed as a root transition."""
|
230
|
+
# POST operations with request bodies are likely to create resources
|
231
|
+
if operation.method == "post" and operation.body:
|
232
|
+
return True
|
233
|
+
|
234
|
+
# GET operations without path parameters are likely to return lists
|
235
|
+
if operation.method == "get" and not operation.path_parameters:
|
236
|
+
return True
|
237
|
+
|
238
|
+
return False
|
239
|
+
|
240
|
+
|
171
241
|
def into_step_input(
|
172
242
|
target: APIOperation, link: OpenApiLink, modes: list[GenerationMode]
|
173
243
|
) -> Callable[[StepOutput], st.SearchStrategy[StepInput]]:
|
174
244
|
def builder(_output: StepOutput) -> st.SearchStrategy[StepInput]:
|
175
245
|
@st.composite # type: ignore[misc]
|
176
246
|
def inner(draw: st.DrawFn, output: StepOutput) -> StepInput:
|
177
|
-
|
247
|
+
transition = link.extract(output)
|
178
248
|
|
179
249
|
kwargs: dict[str, Any] = {
|
180
250
|
container: {
|
181
251
|
name: extracted.value.ok()
|
182
252
|
for name, extracted in data.items()
|
183
|
-
if isinstance(extracted.value, Ok) and extracted.value.ok()
|
253
|
+
if isinstance(extracted.value, Ok) and extracted.value.ok() not in (None, UNRESOLVABLE)
|
184
254
|
}
|
185
|
-
for container, data in
|
255
|
+
for container, data in transition.parameters.items()
|
186
256
|
}
|
257
|
+
|
187
258
|
if (
|
188
|
-
|
189
|
-
and isinstance(
|
259
|
+
transition.request_body is not None
|
260
|
+
and isinstance(transition.request_body.value, Ok)
|
261
|
+
and transition.request_body.value.ok() is not UNRESOLVABLE
|
190
262
|
and not link.merge_body
|
191
263
|
):
|
192
|
-
kwargs["body"] =
|
264
|
+
kwargs["body"] = transition.request_body.value.ok()
|
193
265
|
cases = strategies.combine([target.as_strategy(generation_mode=mode, **kwargs) for mode in modes])
|
194
266
|
case = draw(cases)
|
195
267
|
if (
|
196
|
-
|
197
|
-
and isinstance(
|
268
|
+
transition.request_body is not None
|
269
|
+
and isinstance(transition.request_body.value, Ok)
|
270
|
+
and transition.request_body.value.ok() is not UNRESOLVABLE
|
198
271
|
and link.merge_body
|
199
272
|
):
|
200
|
-
new =
|
273
|
+
new = transition.request_body.value.ok()
|
201
274
|
if isinstance(case.body, dict) and isinstance(new, dict):
|
202
275
|
case.body = {**case.body, **new}
|
203
276
|
else:
|
204
277
|
case.body = new
|
205
|
-
return StepInput(case=case, transition=
|
278
|
+
return StepInput(case=case, transition=transition)
|
206
279
|
|
207
280
|
return inner(output=_output)
|
208
281
|
|
@@ -5,14 +5,13 @@ from functools import lru_cache
|
|
5
5
|
from typing import TYPE_CHECKING, Any, Callable, Generator, Literal, Union, cast
|
6
6
|
|
7
7
|
from schemathesis.core import NOT_SET, NotSet
|
8
|
-
from schemathesis.core.errors import
|
8
|
+
from schemathesis.core.errors import InvalidTransition, OperationNotFound, TransitionValidationError
|
9
9
|
from schemathesis.core.result import Err, Ok, Result
|
10
10
|
from schemathesis.generation.stateful.state_machine import ExtractedParam, StepOutput, Transition
|
11
11
|
from schemathesis.schemas import APIOperation
|
12
|
-
|
13
|
-
from . import
|
14
|
-
from .
|
15
|
-
from .references import RECURSION_DEPTH_LIMIT
|
12
|
+
from schemathesis.specs.openapi import expressions
|
13
|
+
from schemathesis.specs.openapi.constants import LOCATION_TO_CONTAINER
|
14
|
+
from schemathesis.specs.openapi.references import RECURSION_DEPTH_LIMIT
|
16
15
|
|
17
16
|
if TYPE_CHECKING:
|
18
17
|
from jsonschema import RefResolver
|
@@ -55,6 +54,7 @@ class OpenApiLink:
|
|
55
54
|
self.status_code = status_code
|
56
55
|
self.source = source
|
57
56
|
assert isinstance(source.schema, BaseOpenAPISchema)
|
57
|
+
errors = []
|
58
58
|
|
59
59
|
get_operation: Callable[[str], APIOperation]
|
60
60
|
if "operationId" in definition:
|
@@ -66,19 +66,30 @@ class OpenApiLink:
|
|
66
66
|
|
67
67
|
try:
|
68
68
|
self.target = get_operation(operation_reference)
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
69
|
+
target = self.target.label
|
70
|
+
except OperationNotFound:
|
71
|
+
target = operation_reference
|
72
|
+
errors.append(TransitionValidationError(f"Operation '{operation_reference}' not found"))
|
73
73
|
|
74
74
|
extension = definition.get(SCHEMATHESIS_LINK_EXTENSION)
|
75
|
-
self.parameters = self._normalize_parameters(definition.get("parameters", {}))
|
75
|
+
self.parameters = self._normalize_parameters(definition.get("parameters", {}), errors)
|
76
76
|
self.body = definition.get("requestBody", NOT_SET)
|
77
77
|
self.merge_body = extension.get("merge_body", True) if extension else True
|
78
78
|
|
79
|
+
if errors:
|
80
|
+
raise InvalidTransition(
|
81
|
+
name=self.name,
|
82
|
+
source=self.source.label,
|
83
|
+
target=target,
|
84
|
+
status_code=self.status_code,
|
85
|
+
errors=errors,
|
86
|
+
)
|
87
|
+
|
79
88
|
self._cached_extract = lru_cache(8)(self._extract_impl)
|
80
89
|
|
81
|
-
def _normalize_parameters(
|
90
|
+
def _normalize_parameters(
|
91
|
+
self, parameters: dict[str, str], errors: list[TransitionValidationError]
|
92
|
+
) -> list[NormalizedParameter]:
|
82
93
|
"""Process link parameters and resolve their container locations.
|
83
94
|
|
84
95
|
Handles both explicit locations (e.g., "path.id") and implicit ones resolved from target operation.
|
@@ -94,7 +105,34 @@ class OpenApiLink:
|
|
94
105
|
location = None
|
95
106
|
name = parameter
|
96
107
|
|
97
|
-
|
108
|
+
if isinstance(expression, str):
|
109
|
+
try:
|
110
|
+
parsed = expressions.parser.parse(expression)
|
111
|
+
# Find NonBodyRequest nodes that reference source parameters
|
112
|
+
for node in parsed:
|
113
|
+
if isinstance(node, expressions.nodes.NonBodyRequest):
|
114
|
+
# Check if parameter exists in source operation
|
115
|
+
if not any(
|
116
|
+
p.name == node.parameter and p.location == node.location
|
117
|
+
for p in self.source.iter_parameters()
|
118
|
+
):
|
119
|
+
errors.append(
|
120
|
+
TransitionValidationError(
|
121
|
+
f"Expression `{expression}` references non-existent {node.location} parameter "
|
122
|
+
f"`{node.parameter}` in `{self.source.label}`"
|
123
|
+
)
|
124
|
+
)
|
125
|
+
except Exception as exc:
|
126
|
+
errors.append(TransitionValidationError(str(exc)))
|
127
|
+
|
128
|
+
if hasattr(self, "target"):
|
129
|
+
try:
|
130
|
+
container_name = self._get_parameter_container(location, name)
|
131
|
+
except TransitionValidationError as exc:
|
132
|
+
errors.append(exc)
|
133
|
+
continue
|
134
|
+
else:
|
135
|
+
continue
|
98
136
|
result.append(NormalizedParameter(location, name, expression, container_name))
|
99
137
|
return result
|
100
138
|
|
@@ -106,7 +144,7 @@ class OpenApiLink:
|
|
106
144
|
for param in self.target.iter_parameters():
|
107
145
|
if param.name == name:
|
108
146
|
return LOCATION_TO_CONTAINER[param.location]
|
109
|
-
raise
|
147
|
+
raise TransitionValidationError(f"Parameter `{name}` is not defined in API operation `{self.target.label}`")
|
110
148
|
|
111
149
|
def extract(self, output: StepOutput) -> Transition:
|
112
150
|
return self._cached_extract(StepOutputWrapper(output))
|
@@ -114,7 +152,7 @@ class OpenApiLink:
|
|
114
152
|
def _extract_impl(self, wrapper: StepOutputWrapper) -> Transition:
|
115
153
|
output = wrapper.output
|
116
154
|
return Transition(
|
117
|
-
id=f"{self.source.label}
|
155
|
+
id=f"{self.source.label} -> [{self.status_code}] {self.name} -> {self.target.label}",
|
118
156
|
parent_id=output.case.id,
|
119
157
|
parameters=self.extract_parameters(output),
|
120
158
|
request_body=self.extract_body(output),
|
@@ -162,11 +200,17 @@ class StepOutputWrapper:
|
|
162
200
|
return self.output.case.id == other.output.case.id
|
163
201
|
|
164
202
|
|
165
|
-
def get_all_links(
|
203
|
+
def get_all_links(
|
204
|
+
operation: APIOperation,
|
205
|
+
) -> Generator[tuple[str, Result[OpenApiLink, InvalidTransition]], None, None]:
|
166
206
|
for status_code, definition in operation.definition.raw["responses"].items():
|
167
207
|
definition = operation.schema.resolver.resolve_all(definition, RECURSION_DEPTH_LIMIT - 8) # type: ignore[attr-defined]
|
168
208
|
for name, link_definition in definition.get(operation.schema.links_field, {}).items(): # type: ignore
|
169
|
-
|
209
|
+
try:
|
210
|
+
link = OpenApiLink(name, status_code, link_definition, operation)
|
211
|
+
yield status_code, Ok(link)
|
212
|
+
except InvalidTransition as exc:
|
213
|
+
yield status_code, Err(exc)
|
170
214
|
|
171
215
|
|
172
216
|
StatusCode = Union[str, int]
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: schemathesis
|
3
|
-
Version: 4.0.
|
3
|
+
Version: 4.0.0a5
|
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
|
@@ -137,36 +137,17 @@ Schemathesis is an API testing tool that automatically finds crashes and validat
|
|
137
137
|
|
138
138
|
### Highlights
|
139
139
|
|
140
|
-
🎯 **Catches Hard-to-Find Bugs
|
140
|
+
- 🎯 **Catches Hard-to-Find Bugs**: Automatically uncover crashes and spec violations that manual testing might miss.
|
141
141
|
|
142
|
-
-
|
143
|
-
- Identify spec violations and ensure your API adheres to its contract
|
142
|
+
- ⚡ **Accelerates Testing**: Generate a wide range of test cases directly from your API schema.
|
144
143
|
|
145
|
-
|
144
|
+
- 🧩 **Integrates Seamlessly**: Works with popular API formats such as OpenAPI and GraphQL, and easily integrates into your existing CI/CD workflows.
|
146
145
|
|
147
|
-
-
|
148
|
-
- Save time by reducing the need for manual test case creation
|
146
|
+
- 🔧 **Customizable and Extendable**: Leverage Python extensions to configure and extend your test generation.
|
149
147
|
|
150
|
-
|
148
|
+
- 🐞 **Simplifies Debugging**: Detailed reports and reproducible test cases with cURL commands streamline troubleshooting.
|
151
149
|
|
152
|
-
-
|
153
|
-
- Easily integrate into your existing CI/CD workflows.
|
154
|
-
|
155
|
-
🔧 **Customizable and Extendable**
|
156
|
-
|
157
|
-
- Tune the testing process using Python extensions.
|
158
|
-
- Adjust the testing flow to suit your needs with rich configuration options.
|
159
|
-
|
160
|
-
🐞 **Simplifies Debugging**
|
161
|
-
|
162
|
-
- Get detailed reports to identify and fix issues quickly.
|
163
|
-
- Reproduce failing test cases with cURL commands.
|
164
|
-
|
165
|
-
🔬 **Proven by Research**
|
166
|
-
|
167
|
-
- Validated through academic studies on API testing automation
|
168
|
-
- Featured in [ICSE 2022 paper](https://ieeexplore.ieee.org/document/9793781) on semantics-aware fuzzing
|
169
|
-
- Recognized in [ACM survey](https://dl.acm.org/doi/10.1145/3617175) as state-of-the-art RESTful API testing tool
|
150
|
+
- 🔬 **Proven by Research**: Validated through academic studies on API testing automation, featured in the [ICSE 2022 paper](https://ieeexplore.ieee.org/document/9793781) on semantics-aware fuzzing, and recognized in an [ACM survey](https://dl.acm.org/doi/10.1145/3617175) as a state-of-the-art RESTful API testing tool.
|
170
151
|
|
171
152
|
## Installation
|
172
153
|
|
@@ -1,45 +1,46 @@
|
|
1
1
|
schemathesis/__init__.py,sha256=ggp1CxctLo__wwFwlDhvtrexxDXGSbRjFKzXw_Twi7k,1139
|
2
2
|
schemathesis/auths.py,sha256=t-YuPyoLqL7jlRUH-45JxO7Ir3pYxpe31CRmNIJh7rI,15423
|
3
3
|
schemathesis/checks.py,sha256=B5-ROnjvvwpaqgj_iQ7eCjGqvRRVT30eWNPLKmwdrM8,5084
|
4
|
-
schemathesis/errors.py,sha256=
|
5
|
-
schemathesis/filters.py,sha256=
|
4
|
+
schemathesis/errors.py,sha256=VSZ-h9Bt7QvrvywOGB-MoHCshR8OWJegYlBxfVh5Vuw,899
|
5
|
+
schemathesis/filters.py,sha256=CzVPnNSRLNgvLlU5_WssPEC0wpdQi0dMvDpHSQbAlkE,13577
|
6
6
|
schemathesis/hooks.py,sha256=jTdN5GJbxHRMshxgcuI_th9ouuL32CN4m2Jt0pmT_bs,13148
|
7
7
|
schemathesis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
|
-
schemathesis/schemas.py,sha256=
|
9
|
-
schemathesis/cli/__init__.py,sha256=
|
8
|
+
schemathesis/schemas.py,sha256=Hs2pJTUa2Od3x5YRprrKYIfE7ndpKbAqeDylAWkB6yM,27407
|
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=Qm5xvpIIMwJDTeR3N3TjKhMCHV5d5Rp0UstVS2GjWgw,459
|
13
13
|
schemathesis/cli/hooks.py,sha256=vTrA8EN99whRns5K5AnExViQ6WL9cak5RGsC-ZBEiJM,1458
|
14
14
|
schemathesis/cli/commands/__init__.py,sha256=FFalEss3D7mnCRO0udtYb65onXSjQCCOv8sOSjqvTTM,1059
|
15
|
-
schemathesis/cli/commands/run/__init__.py,sha256=
|
16
|
-
schemathesis/cli/commands/run/checks.py,sha256
|
17
|
-
schemathesis/cli/commands/run/context.py,sha256=
|
15
|
+
schemathesis/cli/commands/run/__init__.py,sha256=ToPLYJrLcan5-fVqo-xs8peVy7O51fQMXxu1y5K2Ei4,23112
|
16
|
+
schemathesis/cli/commands/run/checks.py,sha256=lLtBCt6NhhQisrWo8aC6i0M3dSXlbjGWTTlOyjzatks,3278
|
17
|
+
schemathesis/cli/commands/run/context.py,sha256=pUwSlS7UwW2cq1nJXfKZFEaWDipsQAElCO4tdv1qYJA,7739
|
18
18
|
schemathesis/cli/commands/run/events.py,sha256=Dj-xvIr-Hkms8kvh4whNwKSk1Q2Hx4NIENi_4A8nQO8,1224
|
19
|
-
schemathesis/cli/commands/run/executor.py,sha256=
|
20
|
-
schemathesis/cli/commands/run/filters.py,sha256=
|
21
|
-
schemathesis/cli/commands/run/hypothesis.py,sha256=
|
19
|
+
schemathesis/cli/commands/run/executor.py,sha256=lKQZswH7vLsKCUNdDL8IOwJYsUicyPxRJ3vXOi1pwAk,5446
|
20
|
+
schemathesis/cli/commands/run/filters.py,sha256=MdymOZtzOolvXCNBIdfHbBbWEXVF7Se0mmDpy3sVWu4,7411
|
21
|
+
schemathesis/cli/commands/run/hypothesis.py,sha256=hdEHim_Hc2HwCGxAiRTf4t2OfQf0IeCUhyjNT_btB1o,2553
|
22
22
|
schemathesis/cli/commands/run/loaders.py,sha256=VedoeIE1tgFBqVokWxOoUReAjBl-Zhx87RjCEBtCVfs,4840
|
23
|
-
schemathesis/cli/commands/run/
|
23
|
+
schemathesis/cli/commands/run/reports.py,sha256=OjyakiV0lpNDBZb1xsb_2HmLtcqhTThPYMpJGXyNNO8,2147
|
24
|
+
schemathesis/cli/commands/run/validation.py,sha256=7fvLeDREQ9FTV8ZMJRnCdycD858j21k7j56ow4_iIcY,12789
|
24
25
|
schemathesis/cli/commands/run/handlers/__init__.py,sha256=TPZ3KdGi8m0fjlN0GjA31MAXXn1qI7uU4FtiDwroXZI,1915
|
25
26
|
schemathesis/cli/commands/run/handlers/base.py,sha256=yDsTtCiztLksfk7cRzg8JlaAVOfS-zwK3tsJMOXAFyc,530
|
26
|
-
schemathesis/cli/commands/run/handlers/cassettes.py,sha256=
|
27
|
-
schemathesis/cli/commands/run/handlers/junitxml.py,sha256=
|
28
|
-
schemathesis/cli/commands/run/handlers/output.py,sha256=
|
27
|
+
schemathesis/cli/commands/run/handlers/cassettes.py,sha256=SVk13xPhsQduCpgvvBwzEMDNTju-SHQCW90xTQ6iL1U,18525
|
28
|
+
schemathesis/cli/commands/run/handlers/junitxml.py,sha256=c24UiwXqRCnv2eWQWEaNXLOghMI9JtGoZ9RTJY4ao6M,2350
|
29
|
+
schemathesis/cli/commands/run/handlers/output.py,sha256=AcnFAOm03QR4eKNQcQV2EZFV-YUcRaL4rKvMrmOyCuM,58806
|
29
30
|
schemathesis/cli/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
30
31
|
schemathesis/cli/ext/fs.py,sha256=OA3mRzra4rq3NyDTcBvlRh0WJrh4ByN-QQ8loI04m88,408
|
31
|
-
schemathesis/cli/ext/groups.py,sha256=
|
32
|
-
schemathesis/cli/ext/options.py,sha256=
|
32
|
+
schemathesis/cli/ext/groups.py,sha256=kQ37t6qeArcKaY2y5VxyK3_KwAkBKCVm58IYV8gewds,2720
|
33
|
+
schemathesis/cli/ext/options.py,sha256=gBjfYPoiSoxCymWq41x0oKcQ2frv1fQnweETVpYiIsA,4096
|
33
34
|
schemathesis/contrib/__init__.py,sha256=wxpX86xrEGRAS3f7eugQfKVbnqV6ZfOqFBS_DmWxOok,120
|
34
35
|
schemathesis/contrib/openapi/__init__.py,sha256=-7mBZ9RQj0EGzzmC-HKiT5ZslwHcoWFqCVpRG0GHO_o,162
|
35
36
|
schemathesis/contrib/openapi/fill_missing_examples.py,sha256=BfBpuy3vCKbE_uILqPXnm7kxEDopAr5tNQwP5E9xX8A,585
|
36
|
-
schemathesis/core/__init__.py,sha256=
|
37
|
+
schemathesis/core/__init__.py,sha256=4SLVPpUZgZYABL6QPVRtanMemibKxTQEYcp4LFu4Jco,1761
|
37
38
|
schemathesis/core/compat.py,sha256=Lflo6z-nQ6S4uKZINc4Fr90pd3LTN6cIG9HJJmmaHeY,754
|
38
39
|
schemathesis/core/control.py,sha256=IzwIc8HIAEMtZWW0Q0iXI7T1niBpjvcLlbuwOSmy5O8,130
|
39
40
|
schemathesis/core/curl.py,sha256=yuaCe_zHLGwUjEeloQi6W3tOA3cGdnHDNI17-5jia0o,1723
|
40
41
|
schemathesis/core/deserialization.py,sha256=ygIj4fNaOd0mJ2IvTsn6bsabBt_2AbSLCz-z9UqfpdQ,2406
|
41
|
-
schemathesis/core/errors.py,sha256=
|
42
|
-
schemathesis/core/failures.py,sha256=
|
42
|
+
schemathesis/core/errors.py,sha256=97Fk3udsMaS5xZrco7ZaShqe4W6g2aZ55J7d58HPRac,15881
|
43
|
+
schemathesis/core/failures.py,sha256=jbbxOXB8LDYoLI97YrLCKi9XLuSqVqFJSLeeixVJPRU,8828
|
43
44
|
schemathesis/core/fs.py,sha256=ItQT0_cVwjDdJX9IiI7EnU75NI2H3_DCEyyUjzg_BgI,472
|
44
45
|
schemathesis/core/lazy_import.py,sha256=aMhWYgbU2JOltyWBb32vnWBb6kykOghucEzI_F70yVE,470
|
45
46
|
schemathesis/core/loaders.py,sha256=SQQ-8m64-D2FaOgvwKZLyTtLJuzP3RPo7Ud2BERK1c0,3404
|
@@ -48,57 +49,57 @@ schemathesis/core/media_types.py,sha256=vV0CEu34sDoZWXvu4R1Y1HosxVS4YXZV8iTov8fU
|
|
48
49
|
schemathesis/core/rate_limit.py,sha256=7tg9Znk11erTfw8-ANutjEmu7hbfUHZx_iEdkoaP174,1757
|
49
50
|
schemathesis/core/registries.py,sha256=T4jZB4y3zBHdeSgQc0pRbgSeMblvO-6z4I3zmzIfTi0,811
|
50
51
|
schemathesis/core/result.py,sha256=d449YvyONjqjDs-A5DAPgtAI96iT753K8sU6_1HLo2Q,461
|
51
|
-
schemathesis/core/transforms.py,sha256=
|
52
|
+
schemathesis/core/transforms.py,sha256=63aeLkR93r3krq4CwYtDcoS_pFBky4L16c9DcFsBHuE,3535
|
52
53
|
schemathesis/core/transport.py,sha256=VqtVF4JxMuPXSBORzS8SOSLUnCEZL6gPOr0kuymMCAk,3249
|
53
54
|
schemathesis/core/validation.py,sha256=JJbSymYUKKcbkY2L3nECKrbIVUb9PRyUsTqa-aeDEAw,1153
|
54
55
|
schemathesis/core/version.py,sha256=O-6yFbNocbD4RDwiBZLborxTp54htyKxBWTqpZDnPvg,202
|
55
56
|
schemathesis/core/output/__init__.py,sha256=lhVc4OzzxCsmvEPPvg1k8x19iPf_HF-9YonTaqsxvx8,2015
|
56
57
|
schemathesis/core/output/sanitization.py,sha256=EODHJMHD8gqlIA0Yqs1OnElZ2JyNxjvQ0WWErZV1K3s,6210
|
57
58
|
schemathesis/engine/__init__.py,sha256=xncZMXY8S-v4mrfnW4CK6-RQ0S0bigfLDJScpQysblE,831
|
58
|
-
schemathesis/engine/config.py,sha256=
|
59
|
+
schemathesis/engine/config.py,sha256=92Ud_aSTj-xi4Mwf8gej_gcvzjemH_ISjHQiXGGKskA,1885
|
59
60
|
schemathesis/engine/context.py,sha256=HeLX-0aqSAbXJe_ZlkqVfg3QlhmbCrazbb9-ZPbi0h0,3723
|
60
61
|
schemathesis/engine/control.py,sha256=QKUOs5VMphe7EcAIro_DDo9ZqdOU6ZVwTU1gMNndHWw,1006
|
61
|
-
schemathesis/engine/core.py,sha256=
|
62
|
-
schemathesis/engine/errors.py,sha256=
|
63
|
-
schemathesis/engine/events.py,sha256=
|
62
|
+
schemathesis/engine/core.py,sha256=DfulRMVTivmZj-wwLekIhuSzLsFnuVPtSg7j9HyWdz0,5536
|
63
|
+
schemathesis/engine/errors.py,sha256=8PHYsuq2qIEJHm2FDf_UnWa4IDc-DRFTPckLAr22yhE,16895
|
64
|
+
schemathesis/engine/events.py,sha256=gslRAWQKMPqBCQzLDS4wAbsKcVuONSy5SPqimJJJYT4,6250
|
64
65
|
schemathesis/engine/recorder.py,sha256=K3HfMARrT5mPWXPnYebjjcq5CcsBRhMrtZwEL9_Lvtg,8432
|
65
|
-
schemathesis/engine/phases/__init__.py,sha256=
|
66
|
+
schemathesis/engine/phases/__init__.py,sha256=3p_T3JYBFOtrwtgmMM7J-6a41QJgk83dUtm7NKcVl3o,2490
|
66
67
|
schemathesis/engine/phases/probes.py,sha256=3M9g3E7CXbDDK_8inuvkRZibCCcoO2Ce5U3lnyTeWXQ,5131
|
67
68
|
schemathesis/engine/phases/stateful/__init__.py,sha256=lWo2RLrutNblHvohTzofQqL22GORwBRA8bf6jvLuGPg,2391
|
68
|
-
schemathesis/engine/phases/stateful/_executor.py,sha256=
|
69
|
+
schemathesis/engine/phases/stateful/_executor.py,sha256=m1ZMqFUPc4Hdql10l0gF3tpP4JOImSA-XeBd4jg3Ll8,12443
|
69
70
|
schemathesis/engine/phases/stateful/context.py,sha256=SKWsok-tlWbUDagiUmP7cLNW6DsgFDc_Afv0vQfWv6c,2964
|
70
|
-
schemathesis/engine/phases/unit/__init__.py,sha256=
|
71
|
-
schemathesis/engine/phases/unit/_executor.py,sha256=
|
72
|
-
schemathesis/engine/phases/unit/_pool.py,sha256=
|
73
|
-
schemathesis/experimental/__init__.py,sha256=
|
71
|
+
schemathesis/engine/phases/unit/__init__.py,sha256=LcBQpGNPeEFB9XPGpcHBcH-C7nF-e8bZNPop9PIfiKA,7861
|
72
|
+
schemathesis/engine/phases/unit/_executor.py,sha256=buMEr7e01SFSeNuEQNGMf4hoiLxX9_sp0JhH4LBAk9M,12928
|
73
|
+
schemathesis/engine/phases/unit/_pool.py,sha256=9OgmFd-ov1AAvcZGquK40PXkGLp7f2qCjZoPZuoZl4A,2529
|
74
|
+
schemathesis/experimental/__init__.py,sha256=jYY3Mq6okqTRTMudPzcaT0JVjzJW5IN_ZVJdGU0stBs,2011
|
74
75
|
schemathesis/generation/__init__.py,sha256=2htA0TlQee6AvQmLl1VNxEptRDqvPjksXKJLMVLAJng,1580
|
75
76
|
schemathesis/generation/case.py,sha256=Rt5MCUtPVYVQzNyjUx8magocPJpHV1svyuqQSTwUE-I,7306
|
76
|
-
schemathesis/generation/coverage.py,sha256=
|
77
|
+
schemathesis/generation/coverage.py,sha256=hyDb465tBoCWE7nI-ZJjhTUzk7f2WDufaadWdSAkdr0,39276
|
77
78
|
schemathesis/generation/meta.py,sha256=36h6m4E7jzLGa8TCvl7eBl_xUWLiRul3qxzexl5cB58,2515
|
78
79
|
schemathesis/generation/modes.py,sha256=t_EvKr2aOXYMsEfdMu4lLF4KCGcX1LVVyvzTkcpJqhk,663
|
79
80
|
schemathesis/generation/overrides.py,sha256=FhqcFoliEvgW6MZyFPYemfLgzKt3Miy8Cud7OMOCb7g,3045
|
80
81
|
schemathesis/generation/targets.py,sha256=_rN2qgxTE2EfvygiN-Fy3WmDnRH0ERohdx3sKRDaYhU,2120
|
81
82
|
schemathesis/generation/hypothesis/__init__.py,sha256=Rl7QwvMBMJI7pBqTydplX6bXC420n0EGQHVm-vZgaYQ,1204
|
82
|
-
schemathesis/generation/hypothesis/builder.py,sha256=
|
83
|
+
schemathesis/generation/hypothesis/builder.py,sha256=lAxBePbfqGsp6iPjjXeDL-X8RnOgUhsgpYQpeKc1VKg,29292
|
83
84
|
schemathesis/generation/hypothesis/examples.py,sha256=6eGaKUEC3elmKsaqfKj1sLvM8EHc-PWT4NRBq4NI0Rs,1409
|
84
85
|
schemathesis/generation/hypothesis/given.py,sha256=sTZR1of6XaHAPWtHx2_WLlZ50M8D5Rjux0GmWkWjDq4,2337
|
85
86
|
schemathesis/generation/hypothesis/reporting.py,sha256=uDVow6Ya8YFkqQuOqRsjbzsbyP4KKfr3jA7ZaY4FuKY,279
|
86
87
|
schemathesis/generation/hypothesis/strategies.py,sha256=RurE81E06d99YKG48dizy9346ayfNswYTt38zewmGgw,483
|
87
88
|
schemathesis/generation/stateful/__init__.py,sha256=kXpCGbo1-QqfR2N0Z07tLw0Z5_tvbuG3Tk-WI_I1doI,653
|
88
|
-
schemathesis/generation/stateful/state_machine.py,sha256=
|
89
|
+
schemathesis/generation/stateful/state_machine.py,sha256=3NoB3pYd3BZ0XzlQlhCf8WBCMGttJw25DWCTDsuulGc,12306
|
89
90
|
schemathesis/graphql/__init__.py,sha256=_eO6MAPHGgiADVGRntnwtPxmuvk666sAh-FAU4cG9-0,326
|
90
91
|
schemathesis/graphql/checks.py,sha256=IADbxiZjgkBWrC5yzHDtohRABX6zKXk5w_zpWNwdzYo,3186
|
91
92
|
schemathesis/graphql/loaders.py,sha256=96R_On1jFvsNuLwqXnO3_TTpsYhdCv0LAmR5jWRXXnY,4756
|
92
93
|
schemathesis/openapi/__init__.py,sha256=-KcsSAM19uOM0N5J4s-yTnQ1BFsptYhW1E51cEf6kVM,311
|
93
|
-
schemathesis/openapi/checks.py,sha256=
|
94
|
+
schemathesis/openapi/checks.py,sha256=i26qtVqsNUb46Aqu191qWK5lVC51KK6ezbhm1rSSyr4,10781
|
94
95
|
schemathesis/openapi/loaders.py,sha256=jskoCnMgpjg_cpn17FRI4oDUpMdsMYjxfXdRPHYnPqs,6472
|
95
96
|
schemathesis/openapi/generation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
96
97
|
schemathesis/openapi/generation/filters.py,sha256=MB2t_k6OVc2Rt6qXUrV-u-3sDg5wX6c0Mli9WgfMUF4,2001
|
97
98
|
schemathesis/pytest/__init__.py,sha256=7W0q-Thcw03IAQfXE_Mo8JPZpUdHJzfu85fjK1ZdfQM,88
|
98
99
|
schemathesis/pytest/control_flow.py,sha256=F8rAPsPeNv_sJiJgbZYtTpwKWjauZmqFUaKroY2GmQI,217
|
99
|
-
schemathesis/pytest/lazy.py,sha256=
|
100
|
+
schemathesis/pytest/lazy.py,sha256=g7DpOeQNsjXC03FCG5e1L65iz3zE48qAyaqG81HzCZY,12028
|
100
101
|
schemathesis/pytest/loaders.py,sha256=oQJ78yyuIm3Ye9X7giVjDB1vYfaW5UY5YuhaTLm_ZFU,266
|
101
|
-
schemathesis/pytest/plugin.py,sha256=
|
102
|
+
schemathesis/pytest/plugin.py,sha256=RDOuT25Uotese7W-SD3Pu-nb7zdnaPbyPOoJSkJKSoQ,12379
|
102
103
|
schemathesis/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
103
104
|
schemathesis/python/asgi.py,sha256=5PyvuTBaivvyPUEi3pwJni91K1kX5Zc0u9c6c1D8a1Q,287
|
104
105
|
schemathesis/python/wsgi.py,sha256=uShAgo_NChbfYaV1117e6UHp0MTg7jaR0Sy_to3Jmf8,219
|
@@ -112,41 +113,41 @@ schemathesis/specs/graphql/validation.py,sha256=-W1Noc1MQmTb4RX-gNXMeU2qkgso4mzV
|
|
112
113
|
schemathesis/specs/openapi/__init__.py,sha256=C5HOsfuDJGq_3mv8CRBvRvb0Diy1p0BFdqyEXMS-loE,238
|
113
114
|
schemathesis/specs/openapi/_cache.py,sha256=HpglmETmZU0RCHxp3DO_sg5_B_nzi54Zuw9vGzzYCxY,4295
|
114
115
|
schemathesis/specs/openapi/_hypothesis.py,sha256=n_39iyz1rt2EdSe-Lyr-3sOIEyJIthnCVR4tGUUvH1c,21328
|
115
|
-
schemathesis/specs/openapi/checks.py,sha256=
|
116
|
+
schemathesis/specs/openapi/checks.py,sha256=m3n5N3_iZcS7inJojW47FF6dfbUQzrBH-bXwsCAOyhM,27737
|
116
117
|
schemathesis/specs/openapi/constants.py,sha256=JqM_FHOenqS_MuUE9sxVQ8Hnw0DNM8cnKDwCwPLhID4,783
|
117
118
|
schemathesis/specs/openapi/converter.py,sha256=lil8IewM5j8tvt4lpA9g_KITvIwx1M96i45DNSHNjoc,3505
|
118
119
|
schemathesis/specs/openapi/definitions.py,sha256=8htclglV3fW6JPBqs59lgM4LnA25Mm9IptXBPb_qUT0,93949
|
119
|
-
schemathesis/specs/openapi/examples.py,sha256=
|
120
|
+
schemathesis/specs/openapi/examples.py,sha256=aURgeCsQrpsdWEAhjmW6BiRFabuSf5TeRlZBd4ltgNw,20381
|
120
121
|
schemathesis/specs/openapi/formats.py,sha256=ViVF3aFeFI1ctwGQbiRDXhU3so82P0BCaF2aDDbUUm8,2816
|
121
|
-
schemathesis/specs/openapi/links.py,sha256=eVlZVnlIcBUSSnYEEb_Bes3tfY5F_BNsOo0IZCBb-io,9452
|
122
122
|
schemathesis/specs/openapi/media_types.py,sha256=ADedOaNWjbAtAekyaKmNj9fY6zBTeqcNqBEjN0EWNhI,1014
|
123
|
-
schemathesis/specs/openapi/parameters.py,sha256=
|
124
|
-
schemathesis/specs/openapi/patterns.py,sha256
|
123
|
+
schemathesis/specs/openapi/parameters.py,sha256=hv1reNpSjVuzFbtMpSTwWZ75zcWTOy5ZE0ah6AVEqAo,14565
|
124
|
+
schemathesis/specs/openapi/patterns.py,sha256=-1_0twbsyAiSbm0uTFipcXZTYgBY8UK6PriJkzhdET0,12038
|
125
125
|
schemathesis/specs/openapi/references.py,sha256=YjD1xMlaYS7xLt6PrrVS20R72ZWHuFZFTa8Llzf54Rg,8808
|
126
|
-
schemathesis/specs/openapi/schemas.py,sha256=
|
126
|
+
schemathesis/specs/openapi/schemas.py,sha256=VSeacEAVJJ6EKJ-llwOaX4aalzUTXyWP8s4wbxTqtWc,54720
|
127
127
|
schemathesis/specs/openapi/security.py,sha256=6UWYMhL-dPtkTineqqBFNKca1i4EuoTduw-EOLeE0aQ,7149
|
128
|
-
schemathesis/specs/openapi/serialization.py,sha256=
|
128
|
+
schemathesis/specs/openapi/serialization.py,sha256=VdDLmeHqxlWM4cxQQcCkvrU6XurivolwEEaT13ohelA,11972
|
129
129
|
schemathesis/specs/openapi/utils.py,sha256=ER4vJkdFVDIE7aKyxyYatuuHVRNutytezgE52pqZNE8,900
|
130
|
-
schemathesis/specs/openapi/expressions/__init__.py,sha256=
|
130
|
+
schemathesis/specs/openapi/expressions/__init__.py,sha256=hfuRtXD75tQFhzSo6QgDZ3zByyWeZRKevB8edszAVj4,2272
|
131
131
|
schemathesis/specs/openapi/expressions/errors.py,sha256=YLVhps-sYcslgVaahfcUYxUSHlIfWL-rQMeT5PZSMZ8,219
|
132
132
|
schemathesis/specs/openapi/expressions/extractors.py,sha256=Py3of3_vBACP4ljiZIcgd-xQCrWIpcMsfQFc0EtAUoA,470
|
133
133
|
schemathesis/specs/openapi/expressions/lexer.py,sha256=LeVE6fgYT9-fIsXrv0-YrRHnI4VPisbwsexyh9Q5YU0,3982
|
134
|
-
schemathesis/specs/openapi/expressions/nodes.py,sha256=
|
135
|
-
schemathesis/specs/openapi/expressions/parser.py,sha256=
|
134
|
+
schemathesis/specs/openapi/expressions/nodes.py,sha256=YvpbAi8OFdb6RqqrqReGBeADpAmFaoyWN-lGiyYOXTc,4072
|
135
|
+
schemathesis/specs/openapi/expressions/parser.py,sha256=e-ZxshrGE_5CVbgcZLYgdGSjdifgyzgKkLQp0dI0cJY,4503
|
136
136
|
schemathesis/specs/openapi/negative/__init__.py,sha256=60QqVBTXPTsAojcf7GDs7v8WbOE_k3g_VC_DBeQUqBw,3749
|
137
137
|
schemathesis/specs/openapi/negative/mutations.py,sha256=7jTjD9rt5vxWSVBL5Hx8Avj4WhTA63frDQiFMKysrUU,19248
|
138
138
|
schemathesis/specs/openapi/negative/types.py,sha256=a7buCcVxNBG6ILBM3A7oNTAX0lyDseEtZndBuej8MbI,174
|
139
139
|
schemathesis/specs/openapi/negative/utils.py,sha256=ozcOIuASufLqZSgnKUACjX-EOZrrkuNdXX0SDnLoGYA,168
|
140
|
-
schemathesis/specs/openapi/stateful/__init__.py,sha256=
|
140
|
+
schemathesis/specs/openapi/stateful/__init__.py,sha256=0pu_iGjRiKuqUDN3ewz1zUOt6f1SdvSxVtHC5uK-CYw,14750
|
141
141
|
schemathesis/specs/openapi/stateful/control.py,sha256=QaXLSbwQWtai5lxvvVtQV3BLJ8n5ePqSKB00XFxp-MA,3695
|
142
|
+
schemathesis/specs/openapi/stateful/links.py,sha256=8oHpmb-yBa3kZKoCv9ytndpOp80dG1vVis2-EpbkeVA,11432
|
142
143
|
schemathesis/transport/__init__.py,sha256=z-mRNSOlMBKwQyaEIhpmYv0plWTmK5dJqc9UmQOry80,3949
|
143
144
|
schemathesis/transport/asgi.py,sha256=qTClt6oT_xUEWnRHokACN_uqCNNUZrRPT6YG0PjbElY,926
|
144
145
|
schemathesis/transport/prepare.py,sha256=qQ6zXBw5NN2AIM0bzLAc5Ryc3dmMb0R6xN14lnR49pU,3826
|
145
146
|
schemathesis/transport/requests.py,sha256=OObRvcTL72-BZ7AfuDUrZZU9nZtfBqr22oF8nkzaOLE,8389
|
146
147
|
schemathesis/transport/serialization.py,sha256=jIMra1LqRGav0OX3Hx7mvORt38ll4cd2DKit2D58FN0,10531
|
147
148
|
schemathesis/transport/wsgi.py,sha256=RWSuUXPrl91GxAy8a4jyNNozOWVMRBxKx_tljlWA_Lo,5697
|
148
|
-
schemathesis-4.0.
|
149
|
-
schemathesis-4.0.
|
150
|
-
schemathesis-4.0.
|
151
|
-
schemathesis-4.0.
|
152
|
-
schemathesis-4.0.
|
149
|
+
schemathesis-4.0.0a5.dist-info/METADATA,sha256=uftZyIy9oqwJ76F5tKRz5tMu-jlUwK2pg-JHxKxiUeg,12103
|
150
|
+
schemathesis-4.0.0a5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
151
|
+
schemathesis-4.0.0a5.dist-info/entry_points.txt,sha256=hiK3un-xfgPdwj9uj16YVDtTNpO128bmk0U82SMv8ZQ,152
|
152
|
+
schemathesis-4.0.0a5.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
|
153
|
+
schemathesis-4.0.0a5.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|