schemathesis 4.3.13__py3-none-any.whl → 4.3.14__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.
Potentially problematic release.
This version of schemathesis might be problematic. Click here for more details.
- schemathesis/engine/errors.py +1 -11
- schemathesis/engine/phases/unit/_executor.py +2 -2
- schemathesis/generation/hypothesis/builder.py +3 -0
- schemathesis/generation/hypothesis/reporting.py +132 -1
- schemathesis/pytest/plugin.py +6 -1
- schemathesis/specs/graphql/schemas.py +6 -2
- {schemathesis-4.3.13.dist-info → schemathesis-4.3.14.dist-info}/METADATA +1 -1
- {schemathesis-4.3.13.dist-info → schemathesis-4.3.14.dist-info}/RECORD +11 -11
- {schemathesis-4.3.13.dist-info → schemathesis-4.3.14.dist-info}/WHEEL +0 -0
- {schemathesis-4.3.13.dist-info → schemathesis-4.3.14.dist-info}/entry_points.txt +0 -0
- {schemathesis-4.3.13.dist-info → schemathesis-4.3.14.dist-info}/licenses/LICENSE +0 -0
schemathesis/engine/errors.py
CHANGED
|
@@ -128,9 +128,6 @@ class EngineErrorInfo:
|
|
|
128
128
|
if self._kind == RuntimeErrorKind.HYPOTHESIS_HEALTH_CHECK_LARGE_BASE_EXAMPLE:
|
|
129
129
|
return HEALTH_CHECK_MESSAGE_LARGE_BASE_EXAMPLE
|
|
130
130
|
|
|
131
|
-
if self._kind == RuntimeErrorKind.HYPOTHESIS_UNSATISFIABLE:
|
|
132
|
-
return f"{self._error}. Possible reasons:"
|
|
133
|
-
|
|
134
131
|
if self._kind in (
|
|
135
132
|
RuntimeErrorKind.SCHEMA_INVALID_REGULAR_EXPRESSION,
|
|
136
133
|
RuntimeErrorKind.SCHEMA_GENERIC,
|
|
@@ -147,13 +144,6 @@ class EngineErrorInfo:
|
|
|
147
144
|
if isinstance(self._error, requests.RequestException):
|
|
148
145
|
return get_request_error_extras(self._error)
|
|
149
146
|
|
|
150
|
-
if self._kind == RuntimeErrorKind.HYPOTHESIS_UNSATISFIABLE:
|
|
151
|
-
return [
|
|
152
|
-
"- Contradictory schema constraints, such as a minimum value exceeding the maximum.",
|
|
153
|
-
"- Invalid schema definitions for headers or cookies, for example allowing for non-ASCII characters.",
|
|
154
|
-
"- Excessive schema complexity, which hinders parameter generation.",
|
|
155
|
-
]
|
|
156
|
-
|
|
157
147
|
return []
|
|
158
148
|
|
|
159
149
|
@cached_property
|
|
@@ -247,7 +237,7 @@ def get_runtime_error_suggestion(error_type: RuntimeErrorKind, bold: Callable[[s
|
|
|
247
237
|
|
|
248
238
|
return {
|
|
249
239
|
RuntimeErrorKind.CONNECTION_SSL: f"Bypass SSL verification with {bold('`--tls-verify=false`')}.",
|
|
250
|
-
RuntimeErrorKind.HYPOTHESIS_UNSATISFIABLE: "
|
|
240
|
+
RuntimeErrorKind.HYPOTHESIS_UNSATISFIABLE: "Review all parameters and request body schemas for conflicting constraints.",
|
|
251
241
|
RuntimeErrorKind.SCHEMA_NO_LINKS_FOUND: "Review your endpoint filters to include linked operations",
|
|
252
242
|
RuntimeErrorKind.SCHEMA_INVALID_REGULAR_EXPRESSION: "Ensure your regex is compatible with Python's syntax.\n"
|
|
253
243
|
"For guidance, visit: https://docs.python.org/3/library/re.html",
|
|
@@ -54,7 +54,7 @@ from schemathesis.generation.hypothesis.builder import (
|
|
|
54
54
|
UnresolvableReferenceMark,
|
|
55
55
|
UnsatisfiableExampleMark,
|
|
56
56
|
)
|
|
57
|
-
from schemathesis.generation.hypothesis.reporting import ignore_hypothesis_output
|
|
57
|
+
from schemathesis.generation.hypothesis.reporting import build_unsatisfiable_error, ignore_hypothesis_output
|
|
58
58
|
|
|
59
59
|
if TYPE_CHECKING:
|
|
60
60
|
from schemathesis.schemas import APIOperation
|
|
@@ -165,7 +165,7 @@ def run_test(
|
|
|
165
165
|
except hypothesis.errors.Unsatisfiable:
|
|
166
166
|
# We need more clear error message here
|
|
167
167
|
status = Status.ERROR
|
|
168
|
-
yield non_fatal_error(
|
|
168
|
+
yield non_fatal_error(build_unsatisfiable_error(operation, with_tip=False))
|
|
169
169
|
except KeyboardInterrupt:
|
|
170
170
|
yield scenario_finished(Status.INTERRUPTED)
|
|
171
171
|
yield events.Interrupted(phase=phase)
|
|
@@ -121,6 +121,8 @@ def create_test(
|
|
|
121
121
|
kwargs=config.given_kwargs,
|
|
122
122
|
)
|
|
123
123
|
|
|
124
|
+
ApiOperationMark.set(hypothesis_test, operation)
|
|
125
|
+
|
|
124
126
|
if config.seed is not None:
|
|
125
127
|
hypothesis_test = hypothesis.seed(config.seed)(hypothesis_test)
|
|
126
128
|
|
|
@@ -957,3 +959,4 @@ InvalidHeadersExampleMark = Mark[dict[str, str]](attr_name="invalid_example_head
|
|
|
957
959
|
MissingPathParameters = Mark[InvalidSchema](attr_name="missing_path_parameters")
|
|
958
960
|
InfiniteRecursiveReferenceMark = Mark[InfiniteRecursiveReference](attr_name="infinite_recursive_reference")
|
|
959
961
|
UnresolvableReferenceMark = Mark[UnresolvableReference](attr_name="unresolvable_reference")
|
|
962
|
+
ApiOperationMark = Mark[APIOperation](attr_name="api_operation")
|
|
@@ -1,8 +1,21 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
from contextlib import contextmanager
|
|
2
|
-
from
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Generator
|
|
3
6
|
|
|
7
|
+
from hypothesis.errors import Unsatisfiable
|
|
4
8
|
from hypothesis.reporting import with_reporter
|
|
5
9
|
|
|
10
|
+
from schemathesis.config import OutputConfig
|
|
11
|
+
from schemathesis.core.jsonschema.types import JsonSchema
|
|
12
|
+
from schemathesis.core.output import truncate_json
|
|
13
|
+
from schemathesis.core.parameters import ParameterLocation
|
|
14
|
+
from schemathesis.generation.hypothesis.examples import generate_one
|
|
15
|
+
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
from schemathesis.schemas import APIOperation
|
|
18
|
+
|
|
6
19
|
|
|
7
20
|
def ignore(_: str) -> None:
|
|
8
21
|
pass
|
|
@@ -12,3 +25,121 @@ def ignore(_: str) -> None:
|
|
|
12
25
|
def ignore_hypothesis_output() -> Generator:
|
|
13
26
|
with with_reporter(ignore): # type: ignore
|
|
14
27
|
yield
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
UNSATISFIABILITY_CAUSE = """ - Type mismatch (e.g., enum with strings but type: integer)
|
|
31
|
+
- Contradictory constraints (e.g., minimum > maximum)
|
|
32
|
+
- Regex that's too complex to generate values for"""
|
|
33
|
+
|
|
34
|
+
GENERIC_UNSATISFIABLE_MESSAGE = f"""Cannot generate test data for this operation
|
|
35
|
+
|
|
36
|
+
Unable to identify the specific parameter. Common causes:
|
|
37
|
+
{UNSATISFIABILITY_CAUSE}"""
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@dataclass
|
|
41
|
+
class UnsatisfiableParameter:
|
|
42
|
+
location: ParameterLocation
|
|
43
|
+
name: str
|
|
44
|
+
schema: JsonSchema
|
|
45
|
+
|
|
46
|
+
__slots__ = ("location", "name", "schema")
|
|
47
|
+
|
|
48
|
+
def get_error_message(self, config: OutputConfig) -> str:
|
|
49
|
+
formatted_schema = truncate_json(self.schema, config=config)
|
|
50
|
+
|
|
51
|
+
if self.location == ParameterLocation.BODY:
|
|
52
|
+
# For body, name is the media type
|
|
53
|
+
location = f"request body ({self.name})"
|
|
54
|
+
else:
|
|
55
|
+
location = f"{self.location.value} parameter '{self.name}'"
|
|
56
|
+
|
|
57
|
+
return f"""Cannot generate test data for {location}
|
|
58
|
+
Schema:
|
|
59
|
+
|
|
60
|
+
{formatted_schema}
|
|
61
|
+
|
|
62
|
+
This usually means:
|
|
63
|
+
{UNSATISFIABILITY_CAUSE}"""
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def find_unsatisfiable_parameter(operation: APIOperation) -> UnsatisfiableParameter | None:
|
|
67
|
+
from hypothesis_jsonschema import from_schema
|
|
68
|
+
|
|
69
|
+
for location, container in (
|
|
70
|
+
(ParameterLocation.QUERY, operation.query),
|
|
71
|
+
(ParameterLocation.PATH, operation.path_parameters),
|
|
72
|
+
(ParameterLocation.HEADER, operation.headers),
|
|
73
|
+
(ParameterLocation.COOKIE, operation.cookies),
|
|
74
|
+
(ParameterLocation.BODY, operation.body),
|
|
75
|
+
):
|
|
76
|
+
for parameter in container:
|
|
77
|
+
try:
|
|
78
|
+
generate_one(from_schema(parameter.optimized_schema))
|
|
79
|
+
except Unsatisfiable:
|
|
80
|
+
if location == ParameterLocation.BODY:
|
|
81
|
+
name = parameter.media_type
|
|
82
|
+
else:
|
|
83
|
+
name = parameter.name
|
|
84
|
+
schema = unbundle_schema_refs(parameter.optimized_schema, parameter.name_to_uri)
|
|
85
|
+
return UnsatisfiableParameter(location=location, name=name, schema=schema)
|
|
86
|
+
return None
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def unbundle_schema_refs(schema: JsonSchema | list[JsonSchema], name_to_uri: dict[str, str]) -> JsonSchema:
|
|
90
|
+
if isinstance(schema, dict):
|
|
91
|
+
result: dict[str, Any] = {}
|
|
92
|
+
for key, value in schema.items():
|
|
93
|
+
if key == "$ref" and isinstance(value, str) and value.startswith("#/x-bundled/"):
|
|
94
|
+
# Extract bundled name (e.g., "schema1" from "#/x-bundled/schema1")
|
|
95
|
+
bundled_name = value.split("/")[-1]
|
|
96
|
+
if bundled_name in name_to_uri:
|
|
97
|
+
original_uri = name_to_uri[bundled_name]
|
|
98
|
+
# Extract fragment after # (e.g., "#/components/schemas/ObjectType")
|
|
99
|
+
if "#" in original_uri:
|
|
100
|
+
result[key] = "#" + original_uri.split("#", 1)[1]
|
|
101
|
+
else:
|
|
102
|
+
# Fallback if no fragment
|
|
103
|
+
result[key] = value
|
|
104
|
+
else:
|
|
105
|
+
result[key] = value
|
|
106
|
+
elif key == "x-bundled" and isinstance(value, dict):
|
|
107
|
+
# Replace x-bundled with proper components/schemas structure
|
|
108
|
+
components: dict[str, dict[str, Any]] = {"schemas": {}}
|
|
109
|
+
for bundled_name, bundled_schema in value.items():
|
|
110
|
+
if bundled_name in name_to_uri:
|
|
111
|
+
original_uri = name_to_uri[bundled_name]
|
|
112
|
+
# Extract schema name (e.g., "ObjectType" from "...#/components/schemas/ObjectType")
|
|
113
|
+
if "#/components/schemas/" in original_uri:
|
|
114
|
+
schema_name = original_uri.split("#/components/schemas/")[1]
|
|
115
|
+
components["schemas"][schema_name] = unbundle_schema_refs(bundled_schema, name_to_uri)
|
|
116
|
+
else:
|
|
117
|
+
# Fallback: keep bundled name if URI doesn't match expected pattern
|
|
118
|
+
components["schemas"][bundled_name] = unbundle_schema_refs(bundled_schema, name_to_uri)
|
|
119
|
+
else:
|
|
120
|
+
components["schemas"][bundled_name] = unbundle_schema_refs(bundled_schema, name_to_uri)
|
|
121
|
+
result["components"] = components
|
|
122
|
+
elif isinstance(value, (dict, list)):
|
|
123
|
+
# Recursively process all other values
|
|
124
|
+
result[key] = unbundle_schema_refs(value, name_to_uri)
|
|
125
|
+
else:
|
|
126
|
+
result[key] = value
|
|
127
|
+
return result
|
|
128
|
+
elif isinstance(schema, list):
|
|
129
|
+
return [unbundle_schema_refs(item, name_to_uri) for item in schema] # type: ignore
|
|
130
|
+
return schema
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def build_unsatisfiable_error(operation: APIOperation, *, with_tip: bool) -> Unsatisfiable:
|
|
134
|
+
__tracebackhide__ = True
|
|
135
|
+
unsatisfiable = find_unsatisfiable_parameter(operation)
|
|
136
|
+
|
|
137
|
+
if unsatisfiable is not None:
|
|
138
|
+
message = unsatisfiable.get_error_message(operation.schema.config.output)
|
|
139
|
+
else:
|
|
140
|
+
message = GENERIC_UNSATISFIABLE_MESSAGE
|
|
141
|
+
|
|
142
|
+
if with_tip:
|
|
143
|
+
message += "\n\nTip: Review all parameters and request body schemas for conflicting constraints"
|
|
144
|
+
|
|
145
|
+
return Unsatisfiable(message)
|
schemathesis/pytest/plugin.py
CHANGED
|
@@ -34,7 +34,7 @@ from schemathesis.generation.hypothesis.given import (
|
|
|
34
34
|
merge_given_args,
|
|
35
35
|
validate_given_args,
|
|
36
36
|
)
|
|
37
|
-
from schemathesis.generation.hypothesis.reporting import ignore_hypothesis_output
|
|
37
|
+
from schemathesis.generation.hypothesis.reporting import build_unsatisfiable_error, ignore_hypothesis_output
|
|
38
38
|
from schemathesis.pytest.control_flow import fail_on_no_matches
|
|
39
39
|
from schemathesis.schemas import APIOperation
|
|
40
40
|
|
|
@@ -293,6 +293,7 @@ def pytest_pyfunc_call(pyfuncitem): # type:ignore
|
|
|
293
293
|
For example - kwargs validation is failed for some strategy.
|
|
294
294
|
"""
|
|
295
295
|
from schemathesis.generation.hypothesis.builder import (
|
|
296
|
+
ApiOperationMark,
|
|
296
297
|
InvalidHeadersExampleMark,
|
|
297
298
|
InvalidRegexMark,
|
|
298
299
|
MissingPathParameters,
|
|
@@ -327,6 +328,10 @@ def pytest_pyfunc_call(pyfuncitem): # type:ignore
|
|
|
327
328
|
if invalid_headers is not None:
|
|
328
329
|
raise InvalidHeadersExample.from_headers(invalid_headers) from None
|
|
329
330
|
pytest.skip(exc.args[0])
|
|
331
|
+
except Unsatisfiable:
|
|
332
|
+
operation = ApiOperationMark.get(pyfuncitem.obj)
|
|
333
|
+
assert operation is not None
|
|
334
|
+
raise build_unsatisfiable_error(operation, with_tip=True) from None
|
|
330
335
|
except SchemaError as exc:
|
|
331
336
|
raise InvalidRegexPattern.from_schema_error(exc, from_examples=False) from exc
|
|
332
337
|
|
|
@@ -19,9 +19,7 @@ from typing import (
|
|
|
19
19
|
)
|
|
20
20
|
from urllib.parse import urlsplit
|
|
21
21
|
|
|
22
|
-
import graphql
|
|
23
22
|
from hypothesis import strategies as st
|
|
24
|
-
from hypothesis_graphql import strategies as gql_st
|
|
25
23
|
from requests.structures import CaseInsensitiveDict
|
|
26
24
|
|
|
27
25
|
from schemathesis import auths
|
|
@@ -52,6 +50,7 @@ from schemathesis.schemas import (
|
|
|
52
50
|
from .scalars import CUSTOM_SCALARS, get_extra_scalar_strategies
|
|
53
51
|
|
|
54
52
|
if TYPE_CHECKING:
|
|
53
|
+
import graphql
|
|
55
54
|
from hypothesis.strategies import SearchStrategy
|
|
56
55
|
|
|
57
56
|
from schemathesis.auths import AuthStorage
|
|
@@ -143,6 +142,8 @@ class GraphQLSchema(BaseSchema):
|
|
|
143
142
|
|
|
144
143
|
@property
|
|
145
144
|
def client_schema(self) -> graphql.GraphQLSchema:
|
|
145
|
+
import graphql
|
|
146
|
+
|
|
146
147
|
if not hasattr(self, "_client_schema"):
|
|
147
148
|
self._client_schema = graphql.build_client_schema(self.raw_schema)
|
|
148
149
|
return self._client_schema
|
|
@@ -336,6 +337,9 @@ def graphql_cases(
|
|
|
336
337
|
media_type: str | None = None,
|
|
337
338
|
phase: TestPhase = TestPhase.FUZZING,
|
|
338
339
|
) -> Any:
|
|
340
|
+
import graphql
|
|
341
|
+
from hypothesis_graphql import strategies as gql_st
|
|
342
|
+
|
|
339
343
|
start = time.monotonic()
|
|
340
344
|
definition = cast(GraphQLOperationDefinition, operation.definition)
|
|
341
345
|
strategy_factory = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: schemathesis
|
|
3
|
-
Version: 4.3.
|
|
3
|
+
Version: 4.3.14
|
|
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://github.com/schemathesis/schemathesis/blob/master/CHANGELOG.md
|
|
@@ -79,7 +79,7 @@ schemathesis/engine/__init__.py,sha256=QaFE-FinaTAaarteADo2RRMJ-Sz6hZB9TzD5KjMin
|
|
|
79
79
|
schemathesis/engine/context.py,sha256=YaBfwTUyTCZaMq7-jtAKFQj-Eh1aQdbZ0UNcC5d_epU,5792
|
|
80
80
|
schemathesis/engine/control.py,sha256=FXzP8dxL47j1Giqpy2-Bsr_MdMw9YiATSK_UfpFwDtk,1348
|
|
81
81
|
schemathesis/engine/core.py,sha256=qlPHnZVq2RrUe93fOciXd1hC3E1gVyF2BIWMPMeLIj8,6655
|
|
82
|
-
schemathesis/engine/errors.py,sha256=
|
|
82
|
+
schemathesis/engine/errors.py,sha256=Vg64E97RS--IH6bXPPkQTDl2vw1DbasveCfL037JALU,18478
|
|
83
83
|
schemathesis/engine/events.py,sha256=jpCtMkWWfNe2jUeZh_Ly_wfZEF44EOodL-I_W4C9rgg,6594
|
|
84
84
|
schemathesis/engine/observations.py,sha256=T-5R8GeVIqvxpCMxc6vZ04UUxUTx3w7689r3Dc6bIcE,1416
|
|
85
85
|
schemathesis/engine/recorder.py,sha256=KWyWkGkZxIwSDU92jNWCJXU4G4E5WqfhLM6G1Yi7Jyo,8636
|
|
@@ -89,7 +89,7 @@ schemathesis/engine/phases/stateful/__init__.py,sha256=Lz1rgNqCfUSIz173XqCGsiMuU
|
|
|
89
89
|
schemathesis/engine/phases/stateful/_executor.py,sha256=yRpUJqKLTKMVRy7hEXPwmI23CtgGIprz341lCJwvTrU,15613
|
|
90
90
|
schemathesis/engine/phases/stateful/context.py,sha256=A7X1SLDOWFpCvFN9IiIeNVZM0emjqatmJL_k9UsO7vM,2946
|
|
91
91
|
schemathesis/engine/phases/unit/__init__.py,sha256=9dDcxyj887pktnE9YDIPNaR-vc7iqKQWIrFr77SbUTQ,8786
|
|
92
|
-
schemathesis/engine/phases/unit/_executor.py,sha256=
|
|
92
|
+
schemathesis/engine/phases/unit/_executor.py,sha256=8ryOJuAXulDum3NDR2w-ey1x7wSrEmdR9dnpL8vOcsY,17419
|
|
93
93
|
schemathesis/engine/phases/unit/_pool.py,sha256=iU0hdHDmohPnEv7_S1emcabuzbTf-Cznqwn0pGQ5wNQ,2480
|
|
94
94
|
schemathesis/generation/__init__.py,sha256=tvNO2FLiY8z3fZ_kL_QJhSgzXfnT4UqwSXMHCwfLI0g,645
|
|
95
95
|
schemathesis/generation/case.py,sha256=SLMw6zkzmeiZdaIij8_0tjTF70BrMlRSWREaqWii0uM,12508
|
|
@@ -99,10 +99,10 @@ schemathesis/generation/metrics.py,sha256=cZU5HdeAMcLFEDnTbNE56NuNq4P0N4ew-g1NEz
|
|
|
99
99
|
schemathesis/generation/modes.py,sha256=Q1fhjWr3zxabU5qdtLvKfpMFZJAwlW9pnxgenjeXTyU,481
|
|
100
100
|
schemathesis/generation/overrides.py,sha256=xI2djHsa42fzP32xpxgxO52INixKagf5DjDAWJYswM8,3890
|
|
101
101
|
schemathesis/generation/hypothesis/__init__.py,sha256=68BHULoXQC1WjFfw03ga5lvDGZ-c-J7H_fNEuUzFWRw,4976
|
|
102
|
-
schemathesis/generation/hypothesis/builder.py,sha256=
|
|
102
|
+
schemathesis/generation/hypothesis/builder.py,sha256=N9UiJfwUplmrCLsROHQtirm1UPt_TDqUiLv4as2qAjU,38562
|
|
103
103
|
schemathesis/generation/hypothesis/examples.py,sha256=6eGaKUEC3elmKsaqfKj1sLvM8EHc-PWT4NRBq4NI0Rs,1409
|
|
104
104
|
schemathesis/generation/hypothesis/given.py,sha256=sTZR1of6XaHAPWtHx2_WLlZ50M8D5Rjux0GmWkWjDq4,2337
|
|
105
|
-
schemathesis/generation/hypothesis/reporting.py,sha256=
|
|
105
|
+
schemathesis/generation/hypothesis/reporting.py,sha256=8MUT_HC_iUJ8aVfxEVQ7aPTLx2ZwqOMnTucxfP5qblM,5863
|
|
106
106
|
schemathesis/generation/stateful/__init__.py,sha256=s7jiJEnguIj44IsRyMi8afs-8yjIUuBbzW58bH5CHjs,1042
|
|
107
107
|
schemathesis/generation/stateful/state_machine.py,sha256=CiVtpBEeotpNOUkYO3vJLKRe89gdT1kjguZ88vbfqs0,9500
|
|
108
108
|
schemathesis/graphql/__init__.py,sha256=_eO6MAPHGgiADVGRntnwtPxmuvk666sAh-FAU4cG9-0,326
|
|
@@ -117,7 +117,7 @@ schemathesis/pytest/__init__.py,sha256=7W0q-Thcw03IAQfXE_Mo8JPZpUdHJzfu85fjK1Zdf
|
|
|
117
117
|
schemathesis/pytest/control_flow.py,sha256=F8rAPsPeNv_sJiJgbZYtTpwKWjauZmqFUaKroY2GmQI,217
|
|
118
118
|
schemathesis/pytest/lazy.py,sha256=wP0sqcVFcD-OjDIFUpYdJdFQ-BY18CVyL0iB6eHiWRw,11088
|
|
119
119
|
schemathesis/pytest/loaders.py,sha256=Sbv8e5F77_x4amLP50iwubfm6kpOhx7LhLFGsVXW5Ys,925
|
|
120
|
-
schemathesis/pytest/plugin.py,sha256=
|
|
120
|
+
schemathesis/pytest/plugin.py,sha256=j93P7Bp6V2kjkw4Xg9ZoNgd9txcDiQFHByP6rMkI2R0,14518
|
|
121
121
|
schemathesis/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
122
122
|
schemathesis/python/asgi.py,sha256=5PyvuTBaivvyPUEi3pwJni91K1kX5Zc0u9c6c1D8a1Q,287
|
|
123
123
|
schemathesis/python/wsgi.py,sha256=uShAgo_NChbfYaV1117e6UHp0MTg7jaR0Sy_to3Jmf8,219
|
|
@@ -125,7 +125,7 @@ schemathesis/specs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
|
125
125
|
schemathesis/specs/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
126
|
schemathesis/specs/graphql/nodes.py,sha256=bE3G1kNmqJ8OV4igBvIK-UORrkQA6Nofduf87O3TD9I,541
|
|
127
127
|
schemathesis/specs/graphql/scalars.py,sha256=6lew8mnwhrtg23leiEbG43mLGPLlRln8mClCY94XpDA,2680
|
|
128
|
-
schemathesis/specs/graphql/schemas.py,sha256=
|
|
128
|
+
schemathesis/specs/graphql/schemas.py,sha256=oNbluhfxpbxRWVIMoLn3_g-bUaVLCea29jOZiHN1MT0,14509
|
|
129
129
|
schemathesis/specs/graphql/validation.py,sha256=-W1Noc1MQmTb4RX-gNXMeU2qkgso4mzVfHxtdLkCPKM,1422
|
|
130
130
|
schemathesis/specs/openapi/__init__.py,sha256=C5HOsfuDJGq_3mv8CRBvRvb0Diy1p0BFdqyEXMS-loE,238
|
|
131
131
|
schemathesis/specs/openapi/_hypothesis.py,sha256=O8vN-koBjzBVZfpD3pmgIt6ecU4ddAPHOxTAORd23Lo,22642
|
|
@@ -178,8 +178,8 @@ schemathesis/transport/prepare.py,sha256=erYXRaxpQokIDzaIuvt_csHcw72iHfCyNq8VNEz
|
|
|
178
178
|
schemathesis/transport/requests.py,sha256=wriRI9fprTplE_qEZLEz1TerX6GwkE3pwr6ZnU2o6vQ,10648
|
|
179
179
|
schemathesis/transport/serialization.py,sha256=GwO6OAVTmL1JyKw7HiZ256tjV4CbrRbhQN0ep1uaZwI,11157
|
|
180
180
|
schemathesis/transport/wsgi.py,sha256=kQtasFre6pjdJWRKwLA_Qb-RyQHCFNpaey9ubzlFWKI,5907
|
|
181
|
-
schemathesis-4.3.
|
|
182
|
-
schemathesis-4.3.
|
|
183
|
-
schemathesis-4.3.
|
|
184
|
-
schemathesis-4.3.
|
|
185
|
-
schemathesis-4.3.
|
|
181
|
+
schemathesis-4.3.14.dist-info/METADATA,sha256=TvgjAcKH_S1rOrvKQsipJY2hJbJE1s_yzxNxKATSEfM,8566
|
|
182
|
+
schemathesis-4.3.14.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
183
|
+
schemathesis-4.3.14.dist-info/entry_points.txt,sha256=hiK3un-xfgPdwj9uj16YVDtTNpO128bmk0U82SMv8ZQ,152
|
|
184
|
+
schemathesis-4.3.14.dist-info/licenses/LICENSE,sha256=2Ve4J8v5jMQAWrT7r1nf3bI8Vflk3rZVQefiF2zpxwg,1121
|
|
185
|
+
schemathesis-4.3.14.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|