schemathesis 3.25.6__py3-none-any.whl → 3.26.1__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/_dependency_versions.py +1 -0
- schemathesis/_hypothesis.py +11 -1
- schemathesis/_xml.py +1 -0
- schemathesis/auths.py +1 -0
- schemathesis/cli/__init__.py +26 -18
- schemathesis/cli/cassettes.py +4 -4
- schemathesis/cli/context.py +4 -1
- schemathesis/cli/output/default.py +154 -39
- schemathesis/cli/output/short.py +4 -0
- schemathesis/experimental/__init__.py +7 -0
- schemathesis/filters.py +1 -0
- schemathesis/models.py +3 -0
- schemathesis/parameters.py +1 -0
- schemathesis/runner/__init__.py +12 -0
- schemathesis/runner/events.py +12 -0
- schemathesis/runner/impl/core.py +29 -2
- schemathesis/runner/probes.py +1 -0
- schemathesis/runner/serialization.py +6 -2
- schemathesis/schemas.py +1 -0
- schemathesis/serializers.py +1 -1
- schemathesis/service/client.py +35 -2
- schemathesis/service/extensions.py +224 -0
- schemathesis/service/hosts.py +1 -0
- schemathesis/service/metadata.py +24 -0
- schemathesis/service/models.py +210 -2
- schemathesis/service/serialization.py +31 -1
- schemathesis/specs/graphql/schemas.py +4 -0
- schemathesis/specs/openapi/__init__.py +1 -0
- schemathesis/specs/openapi/_hypothesis.py +11 -0
- schemathesis/specs/openapi/expressions/__init__.py +1 -0
- schemathesis/specs/openapi/expressions/lexer.py +1 -0
- schemathesis/specs/openapi/expressions/nodes.py +1 -0
- schemathesis/specs/openapi/links.py +1 -0
- schemathesis/specs/openapi/media_types.py +34 -0
- schemathesis/specs/openapi/negative/mutations.py +1 -0
- schemathesis/specs/openapi/schemas.py +1 -0
- schemathesis/specs/openapi/security.py +5 -1
- {schemathesis-3.25.6.dist-info → schemathesis-3.26.1.dist-info}/METADATA +8 -5
- {schemathesis-3.25.6.dist-info → schemathesis-3.26.1.dist-info}/RECORD +42 -40
- {schemathesis-3.25.6.dist-info → schemathesis-3.26.1.dist-info}/WHEEL +0 -0
- {schemathesis-3.25.6.dist-info → schemathesis-3.26.1.dist-info}/entry_points.txt +0 -0
- {schemathesis-3.25.6.dist-info → schemathesis-3.26.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
+
|
|
2
3
|
from dataclasses import asdict
|
|
3
4
|
from typing import Any, Callable, Dict, Optional, TypeVar, cast
|
|
4
5
|
|
|
6
|
+
from ..exceptions import format_exception
|
|
7
|
+
from ..internal.result import Err, Ok
|
|
8
|
+
from ..internal.transformation import merge_recursively
|
|
5
9
|
from ..models import Response
|
|
10
|
+
from .models import AnalysisSuccess
|
|
6
11
|
from ..runner import events
|
|
7
12
|
from ..runner.serialization import SerializedCase
|
|
8
|
-
from ..internal.transformation import merge_recursively
|
|
9
13
|
|
|
10
14
|
S = TypeVar("S", bound=events.ExecutionEvent)
|
|
11
15
|
SerializeFunc = Callable[[S], Optional[Dict[str, Any]]]
|
|
@@ -28,6 +32,24 @@ def serialize_after_probing(event: events.AfterProbing) -> dict[str, Any] | None
|
|
|
28
32
|
return {"probes": [probe.serialize() for probe in probes]}
|
|
29
33
|
|
|
30
34
|
|
|
35
|
+
def serialize_before_analysis(_: events.BeforeAnalysis) -> None:
|
|
36
|
+
return None
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def serialize_after_analysis(event: events.AfterAnalysis) -> dict[str, Any] | None:
|
|
40
|
+
data = {}
|
|
41
|
+
analysis = event.analysis
|
|
42
|
+
if isinstance(analysis, Ok):
|
|
43
|
+
result = analysis.ok()
|
|
44
|
+
if isinstance(result, AnalysisSuccess):
|
|
45
|
+
data["analysis_id"] = result.id
|
|
46
|
+
else:
|
|
47
|
+
data["error"] = result.message
|
|
48
|
+
elif isinstance(analysis, Err):
|
|
49
|
+
data["error"] = format_exception(analysis.err())
|
|
50
|
+
return data
|
|
51
|
+
|
|
52
|
+
|
|
31
53
|
def serialize_before_execution(event: events.BeforeExecution) -> dict[str, Any] | None:
|
|
32
54
|
return {
|
|
33
55
|
"correlation_id": event.correlation_id,
|
|
@@ -38,6 +60,8 @@ def serialize_before_execution(event: events.BeforeExecution) -> dict[str, Any]
|
|
|
38
60
|
|
|
39
61
|
def _serialize_case(case: SerializedCase) -> dict[str, Any]:
|
|
40
62
|
return {
|
|
63
|
+
"id": case.id,
|
|
64
|
+
"generation_time": case.generation_time,
|
|
41
65
|
"verbose_name": case.verbose_name,
|
|
42
66
|
"path_template": case.path_template,
|
|
43
67
|
"path_parameters": stringify_path_parameters(case.path_parameters),
|
|
@@ -127,6 +151,8 @@ SERIALIZER_MAP = {
|
|
|
127
151
|
events.Initialized: serialize_initialized,
|
|
128
152
|
events.BeforeProbing: serialize_before_probing,
|
|
129
153
|
events.AfterProbing: serialize_after_probing,
|
|
154
|
+
events.BeforeAnalysis: serialize_before_analysis,
|
|
155
|
+
events.AfterAnalysis: serialize_after_analysis,
|
|
130
156
|
events.BeforeExecution: serialize_before_execution,
|
|
131
157
|
events.AfterExecution: serialize_after_execution,
|
|
132
158
|
events.Interrupted: serialize_interrupted,
|
|
@@ -141,6 +167,8 @@ def serialize_event(
|
|
|
141
167
|
on_initialized: SerializeFunc | None = None,
|
|
142
168
|
on_before_probing: SerializeFunc | None = None,
|
|
143
169
|
on_after_probing: SerializeFunc | None = None,
|
|
170
|
+
on_before_analysis: SerializeFunc | None = None,
|
|
171
|
+
on_after_analysis: SerializeFunc | None = None,
|
|
144
172
|
on_before_execution: SerializeFunc | None = None,
|
|
145
173
|
on_after_execution: SerializeFunc | None = None,
|
|
146
174
|
on_interrupted: SerializeFunc | None = None,
|
|
@@ -154,6 +182,8 @@ def serialize_event(
|
|
|
154
182
|
events.Initialized: on_initialized,
|
|
155
183
|
events.BeforeProbing: on_before_probing,
|
|
156
184
|
events.AfterProbing: on_after_probing,
|
|
185
|
+
events.BeforeAnalysis: on_before_analysis,
|
|
186
|
+
events.AfterAnalysis: on_after_analysis,
|
|
157
187
|
events.BeforeExecution: on_before_execution,
|
|
158
188
|
events.AfterExecution: on_after_execution,
|
|
159
189
|
events.Interrupted: on_interrupted,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import enum
|
|
4
|
+
import time
|
|
4
5
|
from dataclasses import dataclass, field
|
|
5
6
|
from difflib import get_close_matches
|
|
6
7
|
from enum import unique
|
|
@@ -287,6 +288,7 @@ class GraphQLSchema(BaseSchema):
|
|
|
287
288
|
query=query,
|
|
288
289
|
body=body,
|
|
289
290
|
media_type=media_type,
|
|
291
|
+
generation_time=0.0,
|
|
290
292
|
)
|
|
291
293
|
|
|
292
294
|
def get_tags(self, operation: APIOperation) -> list[str] | None:
|
|
@@ -337,6 +339,7 @@ def get_case_strategy(
|
|
|
337
339
|
generation_config: GenerationConfig | None = None,
|
|
338
340
|
**kwargs: Any,
|
|
339
341
|
) -> Any:
|
|
342
|
+
start = time.monotonic()
|
|
340
343
|
definition = cast(GraphQLOperationDefinition, operation.definition)
|
|
341
344
|
strategy_factory = {
|
|
342
345
|
RootType.QUERY: gql_st.queries,
|
|
@@ -369,6 +372,7 @@ def get_case_strategy(
|
|
|
369
372
|
body=body,
|
|
370
373
|
operation=operation,
|
|
371
374
|
data_generation_method=data_generation_method,
|
|
375
|
+
generation_time=time.monotonic() - start,
|
|
372
376
|
) # type: ignore
|
|
373
377
|
context = auths.AuthContext(
|
|
374
378
|
operation=operation,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
from .formats import register_string_format as format
|
|
2
2
|
from .formats import unregister_string_format
|
|
3
3
|
from .loaders import from_aiohttp, from_asgi, from_dict, from_file, from_path, from_pytest_fixture, from_uri, from_wsgi
|
|
4
|
+
from .media_types import register_media_type as media_type
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
import string
|
|
3
|
+
import time
|
|
3
4
|
from base64 import b64encode
|
|
4
5
|
from contextlib import suppress
|
|
5
6
|
from dataclasses import dataclass
|
|
@@ -30,6 +31,7 @@ from ...types import NotSet
|
|
|
30
31
|
from ...serializers import Binary
|
|
31
32
|
from ...utils import compose, skip
|
|
32
33
|
from .constants import LOCATION_TO_CONTAINER
|
|
34
|
+
from .media_types import MEDIA_TYPES
|
|
33
35
|
from .negative import negative_schema
|
|
34
36
|
from .negative.utils import can_negate
|
|
35
37
|
from .parameters import OpenAPIBody, parameters_to_json_schema
|
|
@@ -130,6 +132,7 @@ def get_case_strategy(
|
|
|
130
132
|
The primary purpose of this behavior is to prevent sending incomplete explicit examples by generating missing parts
|
|
131
133
|
as it works with `body`.
|
|
132
134
|
"""
|
|
135
|
+
start = time.monotonic()
|
|
133
136
|
strategy_factory = DATA_GENERATION_METHOD_TO_STRATEGY_FACTORY[generator]
|
|
134
137
|
|
|
135
138
|
context = HookContext(operation)
|
|
@@ -175,6 +178,11 @@ def get_case_strategy(
|
|
|
175
178
|
else:
|
|
176
179
|
body_ = ValueContainer(value=body, location="body", generator=None)
|
|
177
180
|
else:
|
|
181
|
+
# This explicit body payload comes for a media type that has a custom strategy registered
|
|
182
|
+
# Such strategies only support binary payloads, otherwise they can't be serialized
|
|
183
|
+
if not isinstance(body, bytes) and media_type in MEDIA_TYPES:
|
|
184
|
+
all_media_types = operation.get_request_payload_content_types()
|
|
185
|
+
raise SerializationNotPossible.from_media_types(*all_media_types)
|
|
178
186
|
body_ = ValueContainer(value=body, location="body", generator=None)
|
|
179
187
|
|
|
180
188
|
if operation.schema.validate_schema and operation.method.upper() == "GET" and operation.body:
|
|
@@ -187,6 +195,7 @@ def get_case_strategy(
|
|
|
187
195
|
reject()
|
|
188
196
|
instance = Case(
|
|
189
197
|
operation=operation,
|
|
198
|
+
generation_time=time.monotonic() - start,
|
|
190
199
|
media_type=media_type,
|
|
191
200
|
path_parameters=path_parameters_.value,
|
|
192
201
|
headers=CaseInsensitiveDict(headers_.value) if headers_.value is not None else headers_.value,
|
|
@@ -212,6 +221,8 @@ def _get_body_strategy(
|
|
|
212
221
|
operation: APIOperation,
|
|
213
222
|
generation_config: GenerationConfig,
|
|
214
223
|
) -> st.SearchStrategy:
|
|
224
|
+
if parameter.media_type in MEDIA_TYPES:
|
|
225
|
+
return MEDIA_TYPES[parameter.media_type]
|
|
215
226
|
# The cache key relies on object ids, which means that the parameter should not be mutated
|
|
216
227
|
# Note, the parent schema is not included as each parameter belong only to one schema
|
|
217
228
|
if parameter in _BODY_STRATEGIES_CACHE and strategy_factory in _BODY_STRATEGIES_CACHE[parameter]:
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Any, Collection
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from hypothesis import strategies as st
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
MEDIA_TYPES: dict[str, st.SearchStrategy[bytes]] = {}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def register_media_type(name: str, strategy: st.SearchStrategy[bytes], *, aliases: Collection[str] = ()) -> None:
|
|
13
|
+
"""Register a strategy for the given media type."""
|
|
14
|
+
from ...serializers import SerializerContext, register
|
|
15
|
+
|
|
16
|
+
@register(name, aliases=aliases)
|
|
17
|
+
class MediaTypeSerializer:
|
|
18
|
+
def as_requests(self, context: SerializerContext, value: Any) -> dict[str, Any]:
|
|
19
|
+
return {"data": value}
|
|
20
|
+
|
|
21
|
+
def as_werkzeug(self, context: SerializerContext, value: Any) -> dict[str, Any]:
|
|
22
|
+
return {"data": value}
|
|
23
|
+
|
|
24
|
+
MEDIA_TYPES[name] = strategy
|
|
25
|
+
for alias in aliases:
|
|
26
|
+
MEDIA_TYPES[alias] = strategy
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def unregister_all() -> None:
|
|
30
|
+
from ...serializers import unregister
|
|
31
|
+
|
|
32
|
+
for media_type in MEDIA_TYPES:
|
|
33
|
+
unregister(media_type)
|
|
34
|
+
MEDIA_TYPES.clear()
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"""Processing of ``securityDefinitions`` or ``securitySchemes`` keywords."""
|
|
2
|
+
|
|
2
3
|
from __future__ import annotations
|
|
3
4
|
from dataclasses import dataclass
|
|
4
5
|
from typing import Any, ClassVar, Generator
|
|
@@ -126,7 +127,10 @@ class OpenAPISecurityProcessor(BaseSecurityProcessor):
|
|
|
126
127
|
security_schemes = components.get("securitySchemes", {})
|
|
127
128
|
if "$ref" in security_schemes:
|
|
128
129
|
return resolver.resolve(security_schemes["$ref"])[1]
|
|
129
|
-
return
|
|
130
|
+
return {
|
|
131
|
+
key: resolver.resolve(value["$ref"])[1] if "$ref" in value else value
|
|
132
|
+
for key, value in security_schemes.items()
|
|
133
|
+
}
|
|
130
134
|
|
|
131
135
|
def _make_http_auth_parameter(self, definition: dict[str, Any]) -> dict[str, Any]:
|
|
132
136
|
schema = make_auth_header_schema(definition)
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: schemathesis
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.26.1
|
|
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
|
|
7
7
|
Project-URL: Bug Tracker, https://github.com/schemathesis/schemathesis
|
|
8
8
|
Project-URL: Funding, https://github.com/sponsors/Stranger6667
|
|
9
9
|
Project-URL: Source Code, https://github.com/schemathesis/schemathesis
|
|
10
|
-
Author-email: Dmitry Dygalo <
|
|
11
|
-
Maintainer-email: Dmitry Dygalo <
|
|
10
|
+
Author-email: Dmitry Dygalo <dmitry@dygalo.dev>
|
|
11
|
+
Maintainer-email: Dmitry Dygalo <dmitry@dygalo.dev>
|
|
12
12
|
License-Expression: MIT
|
|
13
13
|
License-File: LICENSE
|
|
14
14
|
Keywords: graphql,hypothesis,openapi,pytest,testing
|
|
@@ -35,7 +35,8 @@ Requires-Dist: colorama<1.0,>=0.4
|
|
|
35
35
|
Requires-Dist: httpx<1.0,>=0.22.0
|
|
36
36
|
Requires-Dist: hypothesis-graphql<1,>=0.11.0
|
|
37
37
|
Requires-Dist: hypothesis-jsonschema<0.24,>=0.23.1
|
|
38
|
-
Requires-Dist: hypothesis<7,>=6.84.3
|
|
38
|
+
Requires-Dist: hypothesis<7,>=6.84.3; python_version > '3.8'
|
|
39
|
+
Requires-Dist: hypothesis[zoneinfo]<7,>=6.84.3; python_version == '3.8'
|
|
39
40
|
Requires-Dist: jsonschema<5.0,>=4.18.0
|
|
40
41
|
Requires-Dist: junit-xml<2.0,>=1.9
|
|
41
42
|
Requires-Dist: pyrate-limiter<3.0,>=2.10
|
|
@@ -224,7 +225,9 @@ Receive automatic comments in your pull requests and updates on GitHub checks st
|
|
|
224
225
|
|
|
225
226
|
### Software as a Service
|
|
226
227
|
|
|
227
|
-
|
|
228
|
+
Schemathesis CLI integrates with Schemathesis.io to enhance bug detection by optimizing test case generation for efficiency and realism. It leverages various techniques to infer appropriate data generation strategies, provide support for uncommon media types, and adjust schemas for faster data generation. The integration also detects the web server being used to generate more targeted test data.
|
|
229
|
+
|
|
230
|
+
Schemathesis.io offers a user-friendly UI that simplifies viewing and analyzing test results. If you prefer an all-in-one solution with quick setup, we have a [free tier](https://schemathesis.io/#pricing) available.
|
|
228
231
|
|
|
229
232
|
## How it works
|
|
230
233
|
|
|
@@ -1,51 +1,51 @@
|
|
|
1
1
|
schemathesis/__init__.py,sha256=WW1NBZxmc5jRR0c24xz-ZtTkJMUQG5MOw1MGVRRGc1s,1970
|
|
2
2
|
schemathesis/_compat.py,sha256=VizWR0QAVj4l7WZautNe_zmo3AJ7WBl2zrJQOfJAQtk,1837
|
|
3
|
-
schemathesis/_dependency_versions.py,sha256=
|
|
4
|
-
schemathesis/_hypothesis.py,sha256=
|
|
3
|
+
schemathesis/_dependency_versions.py,sha256=sLlY3jGtnjIg2JRMbVt89lYKiD3K2zl1A5QF0_5_O08,728
|
|
4
|
+
schemathesis/_hypothesis.py,sha256=O3rfMbT0rChFONMUsYmMEGV9nPG5cHd_6v9NhWDI_IQ,10763
|
|
5
5
|
schemathesis/_lazy_import.py,sha256=LTki2tM168fCcXet1e6qDoQq8SLgInUA3xjXgi7cXJk,469
|
|
6
6
|
schemathesis/_override.py,sha256=oetGCvMGqP8plf2Suvql2E0n3P-PU9SIySKwlBjzuR4,1629
|
|
7
|
-
schemathesis/_xml.py,sha256=
|
|
8
|
-
schemathesis/auths.py,sha256=
|
|
7
|
+
schemathesis/_xml.py,sha256=5AMZuno3fS4YWPqBlrv5V-f-BmawkdwmpD3GpAsaxnA,6922
|
|
8
|
+
schemathesis/auths.py,sha256=tUuaHvXO96HJr22Gu9OmlSpL2wbAqKZr3TRbb9dVyA4,14732
|
|
9
9
|
schemathesis/checks.py,sha256=SYts1Teecg-5kSHBo32Pzhh7YQ4a1Y7DIfldd-0VTj8,2155
|
|
10
10
|
schemathesis/code_samples.py,sha256=QFwyA7dmc_ij2FRwfbe0uMRm6j2yeofQ8zXynZV3SZI,4122
|
|
11
11
|
schemathesis/constants.py,sha256=gptQZnXJwEJjuLgw62n7LL_kbkE7dhxUgyyJw_dEEAc,2672
|
|
12
12
|
schemathesis/exceptions.py,sha256=fAkismvT-QcIunr6rZ6OllhXFK3sHjwiZJlD63fttQw,19631
|
|
13
13
|
schemathesis/failures.py,sha256=oKbIDD075ymLT4h7SQK-herHDT608d-StPX9pXmOSVU,5996
|
|
14
|
-
schemathesis/filters.py,sha256=
|
|
14
|
+
schemathesis/filters.py,sha256=9SJyZ8mcuDyKG2G1hp2Nfz-TvyJWP_NcntsgwFWYY_Q,10250
|
|
15
15
|
schemathesis/graphql.py,sha256=YkoKWY5K8lxp7H3ikAs-IsoDbiPwJvChG7O8p3DgwtI,229
|
|
16
16
|
schemathesis/hooks.py,sha256=cNJgCh7SyLWT1sYDKF5ncDC80ld08CinvKo2IqLMV4g,12396
|
|
17
17
|
schemathesis/lazy.py,sha256=CivWpvesh4iYLSkatXbQPTEOruWmXvuZQ29gng5p9wM,14846
|
|
18
18
|
schemathesis/loaders.py,sha256=RJnrbf-3vZ7KXmRBkmr3uqWyg0eHzOnONABuudWcTIg,4586
|
|
19
|
-
schemathesis/models.py,sha256=
|
|
20
|
-
schemathesis/parameters.py,sha256=
|
|
19
|
+
schemathesis/models.py,sha256=Rcgm2VX7oQN3HN-ThZlqWmBuNsV1Hrd2_xbvh0K6KQY,46883
|
|
20
|
+
schemathesis/parameters.py,sha256=VheEffVzoSfYaSEcG7KhPlA4ypifosG8biiHifzwL8g,2257
|
|
21
21
|
schemathesis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
22
|
schemathesis/sanitization.py,sha256=WSV_MB5YRrYkp1pQRPHrzsidqsKcqYZiq64N9grKobo,8956
|
|
23
|
-
schemathesis/schemas.py,sha256=
|
|
24
|
-
schemathesis/serializers.py,sha256=
|
|
23
|
+
schemathesis/schemas.py,sha256=rtlbHoEmZt5sF31E7Mn_MJdfcaCRUejVAkxFicrq3c0,18252
|
|
24
|
+
schemathesis/serializers.py,sha256=_xoebWkVrgbGbPjPgTgwuN-fN4YT004aj7kImyPComY,11619
|
|
25
25
|
schemathesis/targets.py,sha256=tzp7VZ2-7g2nZHCooRgFzTMtOVcbl0rvtNR421hQthA,1162
|
|
26
26
|
schemathesis/throttling.py,sha256=QQcS7TFpXHavUjm0kdFaCcCRhAGlgQ4y3XIbkdRoW20,1079
|
|
27
27
|
schemathesis/types.py,sha256=AglR5M0bce-YXeDRkweToXTP0GjNOWVjS_mIsxLobwc,919
|
|
28
28
|
schemathesis/utils.py,sha256=4HXvHysnHp-Uz2HfNgLfW5F5VjL-mtixrjjzRCEJhYo,5233
|
|
29
|
-
schemathesis/cli/__init__.py,sha256=
|
|
29
|
+
schemathesis/cli/__init__.py,sha256=MSdz9Xt2qvey-3HbWj5nfwV2nZ-rdV05u_Eh_Be9m0c,64909
|
|
30
30
|
schemathesis/cli/callbacks.py,sha256=HmD0WmSYf5x8v4xeZdOKzy_8CEk23NitUlL8JQ7LHdQ,14950
|
|
31
|
-
schemathesis/cli/cassettes.py,sha256=
|
|
31
|
+
schemathesis/cli/cassettes.py,sha256=1ucgYyOZiNu44uOv044FdfKTzQolUyhAM2onk4m3MD0,12988
|
|
32
32
|
schemathesis/cli/constants.py,sha256=XoezT0_fHuiOY2e--cmBUhNieJsepcUoW8e48QuLSDI,1544
|
|
33
|
-
schemathesis/cli/context.py,sha256=
|
|
33
|
+
schemathesis/cli/context.py,sha256=wwfdSL_NKHEyzQnj8PcnaJdzasa_N08e2KPvy4Wl8N4,1874
|
|
34
34
|
schemathesis/cli/debug.py,sha256=PDEa-oHyz5bZ8aYjRYARwQaCv_AC6HM_L43LJfe4vUM,657
|
|
35
35
|
schemathesis/cli/handlers.py,sha256=62GPWPmgeGUz3pkDd01H4UCXcIy5a9yRtU7qaAeeR-A,389
|
|
36
36
|
schemathesis/cli/junitxml.py,sha256=jMZzYBYpBE7Rl5n1ct3J0bhhPa1lhBeYb33lTZE1eW8,1792
|
|
37
37
|
schemathesis/cli/options.py,sha256=7_dXcrPT0kWqAkm60cAT1J0IsTOcvNFxT1pcHYttBuI,2558
|
|
38
38
|
schemathesis/cli/sanitization.py,sha256=v-9rsMCBpWhom0Bfzj_8c6InqxkVjSWK6kRoURa52Nk,727
|
|
39
39
|
schemathesis/cli/output/__init__.py,sha256=AXaUzQ1nhQ-vXhW4-X-91vE2VQtEcCOrGtQXXNN55iQ,29
|
|
40
|
-
schemathesis/cli/output/default.py,sha256=
|
|
41
|
-
schemathesis/cli/output/short.py,sha256=
|
|
40
|
+
schemathesis/cli/output/default.py,sha256=XxnfZXXERuB1X3M8dlVBZnYUuZ0JXsQMCX4EEv5-oYg,38213
|
|
41
|
+
schemathesis/cli/output/short.py,sha256=MmFMOKBRqqvgq7Kmx6XJc7Vqkr9g5BrJBxRbyZ0Rh-k,2068
|
|
42
42
|
schemathesis/contrib/__init__.py,sha256=FH8NL8NXgSKBFOF8Jy_EB6T4CJEaiM-tmDhz16B2o4k,187
|
|
43
43
|
schemathesis/contrib/unique_data.py,sha256=zxrmAlQH7Bcil9YSfy2EazwLj2rxLzOvAE3O6QRRkFY,1317
|
|
44
44
|
schemathesis/contrib/openapi/__init__.py,sha256=YMj_b2f3ohGwEt8QQXlxBT60wqvdCFS6516I4EHWVNM,217
|
|
45
45
|
schemathesis/contrib/openapi/fill_missing_examples.py,sha256=dY1ygG41PWmITOegdv2uwpDm-UiBcyDSOuGCZMGxYAg,582
|
|
46
46
|
schemathesis/contrib/openapi/formats/__init__.py,sha256=OpHWPW8MkTLVv83QXPYY1HVLflhmSH49hSVefm1oVV0,111
|
|
47
47
|
schemathesis/contrib/openapi/formats/uuid.py,sha256=SsTH_bInSXnlGLNyYLmwUfvafVnVOTHdmhmKytQVoUQ,390
|
|
48
|
-
schemathesis/experimental/__init__.py,sha256=
|
|
48
|
+
schemathesis/experimental/__init__.py,sha256=e4QbqDYeGU769e5XhWOK6nJeCj9GfNFqdernZw05bQs,2275
|
|
49
49
|
schemathesis/extra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
50
|
schemathesis/extra/_aiohttp.py,sha256=YQIV-jHdlAyyw5O4FQDQC8KTLjwKi-LWfD3U7JU4Pns,956
|
|
51
51
|
schemathesis/extra/_flask.py,sha256=BHCbxBDoMlIvNS5sRNyrPN1NwHxiDQt0IsyfYwwoFes,289
|
|
@@ -63,35 +63,36 @@ schemathesis/internal/jsonschema.py,sha256=eQEkBLTdJ__U7Z0XYXB_RVBQJ4texfFO0AaOo
|
|
|
63
63
|
schemathesis/internal/result.py,sha256=Og_ZfwwQ6JFmW79ExC1ndjVMIOHJB7o9XtrfhYIjOOs,461
|
|
64
64
|
schemathesis/internal/transformation.py,sha256=ZNEtL8ezryLdP9-of4eSRBMSjjV_lBQ5DZZfoPGZFEU,449
|
|
65
65
|
schemathesis/internal/validation.py,sha256=G7i8jIMUpAeOnDsDF_eWYvRZe_yMprRswx0QAtMPyEw,966
|
|
66
|
-
schemathesis/runner/__init__.py,sha256=
|
|
67
|
-
schemathesis/runner/events.py,sha256=
|
|
68
|
-
schemathesis/runner/probes.py,sha256=
|
|
69
|
-
schemathesis/runner/serialization.py,sha256=
|
|
66
|
+
schemathesis/runner/__init__.py,sha256=kkqjC_5G2Mrq00syLNUDHP3sXqwiId8_cusKtIlOyXM,21419
|
|
67
|
+
schemathesis/runner/events.py,sha256=eZc4TT8C8mWCMr9h4JvlijvQQ-x8wFry8LntdsYIL-A,10200
|
|
68
|
+
schemathesis/runner/probes.py,sha256=t_B38-ljy-p3Odw-dqcZUVIjYTPwBvac8KE5GaLnz4M,5546
|
|
69
|
+
schemathesis/runner/serialization.py,sha256=JgkZrbELi2rL7iCsQ0yySOADwxSNF96gd_DOHVANPVU,16080
|
|
70
70
|
schemathesis/runner/impl/__init__.py,sha256=1E2iME8uthYPBh9MjwVBCTFV-P3fi7AdphCCoBBspjs,199
|
|
71
|
-
schemathesis/runner/impl/core.py,sha256=
|
|
71
|
+
schemathesis/runner/impl/core.py,sha256=vaw6OBgYOVT44-gR2t_EiWLArX2RmtAxITR3WZWCX8k,39558
|
|
72
72
|
schemathesis/runner/impl/solo.py,sha256=Y_tNhVBVxcuxv65hN0FjxLlVSC41ebHMOM1xSzVrNk8,3358
|
|
73
73
|
schemathesis/runner/impl/threadpool.py,sha256=2-2Wvw7msezZtenZY5vU_x3FGLLVlH-ywvhU9hTwAAo,15073
|
|
74
74
|
schemathesis/service/__init__.py,sha256=cDVTCFD1G-vvhxZkJUwiToTAEQ-0ByIoqwXvJBCf_V8,472
|
|
75
75
|
schemathesis/service/auth.py,sha256=AiZXvSNwz1Hi3fn-OCp6XD-E4GAMDlfcX8fORJ8_dLo,445
|
|
76
76
|
schemathesis/service/ci.py,sha256=Nke_GHtUlbJtZA-7JmjD1Nu4aKBCtkUo8AwFwm38qpk,6781
|
|
77
|
-
schemathesis/service/client.py,sha256=
|
|
77
|
+
schemathesis/service/client.py,sha256=TcUnLyiGYuU3ENZRStycx5p6tQe_iknioYKPqlEe5Xk,5218
|
|
78
78
|
schemathesis/service/constants.py,sha256=Q1bhtLRkmhso4KSVAtWl0u446Wlbk3ShOL3ZdbPoJOM,1502
|
|
79
79
|
schemathesis/service/events.py,sha256=oysiTeHkE1r65CZTPlyNXW3XFh0_Xt0eq9-FNBUy5U0,1237
|
|
80
|
-
schemathesis/service/
|
|
81
|
-
schemathesis/service/
|
|
82
|
-
schemathesis/service/
|
|
80
|
+
schemathesis/service/extensions.py,sha256=PuG-Qfb9Y1oWOaa2Dxb8qhTH0t9CyawzZ2xkUoL7Sd4,7827
|
|
81
|
+
schemathesis/service/hosts.py,sha256=Qxa-BGV56z9pRHl8kUm8LNZQiW3fALDYVcgZqUMh4qQ,3122
|
|
82
|
+
schemathesis/service/metadata.py,sha256=ajiDb2VDquXRoYl7h9LGDoj9GWq6pKv5nN-WVtTnCIE,2086
|
|
83
|
+
schemathesis/service/models.py,sha256=45J7lugoFP1QbQFAEFCi9aj-yuTBKKHtil9vA8BWnfk,6577
|
|
83
84
|
schemathesis/service/report.py,sha256=ua1-cfa-TgGshZgimUQ3-YQqykhZqMHCkEificBKncM,8294
|
|
84
|
-
schemathesis/service/serialization.py,sha256=
|
|
85
|
+
schemathesis/service/serialization.py,sha256=OjWG7FfihEl4LtpOD8N-fmjOTzSPUm6A4x6sypt2nW4,8377
|
|
85
86
|
schemathesis/service/usage.py,sha256=Z-GCwFcW1pS6YdC-ziEOynikqgOttxp2Uyj_dfK5Q7A,2437
|
|
86
87
|
schemathesis/specs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
87
88
|
schemathesis/specs/graphql/__init__.py,sha256=fgyHtvWNUVWismBTOqxQtgLoTighTfvMv6v6QCD_Oyc,85
|
|
88
89
|
schemathesis/specs/graphql/loaders.py,sha256=16fGT4rSqVF91DPY90cKDaFsbtRb9_ZdLnlGY1Gb_vg,11391
|
|
89
90
|
schemathesis/specs/graphql/nodes.py,sha256=7F5jbk96uTZZXK9Ulr86KpCAn8z6LKMBcrLrdJHggH0,540
|
|
90
91
|
schemathesis/specs/graphql/scalars.py,sha256=W5oj6AcjiXpR-Z6eSSp1oPWl0mjH2NF-w87nRFhrHHg,1805
|
|
91
|
-
schemathesis/specs/graphql/schemas.py,sha256=
|
|
92
|
+
schemathesis/specs/graphql/schemas.py,sha256=XK-zbR_d8zER2HLU3zH-BrKnfoV9hb0VXvDueryp8Y0,14091
|
|
92
93
|
schemathesis/specs/graphql/validation.py,sha256=SqQbj9uymGUQxlHXc8HkQccIq25uwP5CvLF1zReb1Xg,1636
|
|
93
|
-
schemathesis/specs/openapi/__init__.py,sha256=
|
|
94
|
-
schemathesis/specs/openapi/_hypothesis.py,sha256=
|
|
94
|
+
schemathesis/specs/openapi/__init__.py,sha256=HDcx3bqpa6qWPpyMrxAbM3uTo0Lqpg-BUNZhDJSJKnw,279
|
|
95
|
+
schemathesis/specs/openapi/_hypothesis.py,sha256=VPjIiGgsVBMffcCxHpaHFxpgjI2hq180Hpcsub46UC8,22807
|
|
95
96
|
schemathesis/specs/openapi/checks.py,sha256=1WB_UGNqptfJThWLUNbds1Q-IzOGbbHCOYPIhBYk-zs,5411
|
|
96
97
|
schemathesis/specs/openapi/constants.py,sha256=JqM_FHOenqS_MuUE9sxVQ8Hnw0DNM8cnKDwCwPLhID4,783
|
|
97
98
|
schemathesis/specs/openapi/converter.py,sha256=9TKeKvNi9MVvoNMfqoPz_cODO8oNrMSTXTOwLLfjD_Q,2799
|
|
@@ -99,23 +100,24 @@ schemathesis/specs/openapi/definitions.py,sha256=t5xffHLBnSgptBdDkSqYN1OfT-DaXoe
|
|
|
99
100
|
schemathesis/specs/openapi/examples.py,sha256=igLDfMpNhRMAk7mYBqi93CtVRQTZCWjCJ2KxlQFotdA,14932
|
|
100
101
|
schemathesis/specs/openapi/filters.py,sha256=Ei-QTFcGCvGSIunT-GYQrtqzB-kqvUePOcUuC7B7mT8,1436
|
|
101
102
|
schemathesis/specs/openapi/formats.py,sha256=JmmkQWNAj5XreXb7Edgj4LADAf4m86YulR_Ec8evpJ4,1220
|
|
102
|
-
schemathesis/specs/openapi/links.py,sha256=
|
|
103
|
+
schemathesis/specs/openapi/links.py,sha256=FUjqEf6Sv6PeS0UX7CLL5p2VHa9vA1MGDPhx2pfYg1s,14576
|
|
103
104
|
schemathesis/specs/openapi/loaders.py,sha256=Jm37MTUmbVVkOxoRAJOo_T_Ex-tWu2ir7YG7y-v-BjM,24014
|
|
105
|
+
schemathesis/specs/openapi/media_types.py,sha256=dNTxpRQbY3SubdVjh4Cjb38R6Bc9MF9BsRQwPD87x0g,1017
|
|
104
106
|
schemathesis/specs/openapi/parameters.py,sha256=5jMZQZFsZNBFjG22Bqot-Rc65emiSA4E95rIzwImThk,13610
|
|
105
107
|
schemathesis/specs/openapi/references.py,sha256=YGunHAGubYPKbMqQtpFWZm1D4AGxB8wLuiVhE6T6cWo,8978
|
|
106
|
-
schemathesis/specs/openapi/schemas.py,sha256=
|
|
107
|
-
schemathesis/specs/openapi/security.py,sha256=
|
|
108
|
+
schemathesis/specs/openapi/schemas.py,sha256=BuBKfToNYIsQ1RIh3EedNaB948-33wLSrjSi1lBV0F0,50457
|
|
109
|
+
schemathesis/specs/openapi/security.py,sha256=nCUIaZTzI6t26HAfd8YTHW6mFxXAPN9Ds-P9UnXxmNA,6628
|
|
108
110
|
schemathesis/specs/openapi/serialization.py,sha256=jajqowTIiyEVWEx-Gy4ZinXZewNg0n_ipsGzz7JXP7c,11383
|
|
109
111
|
schemathesis/specs/openapi/utils.py,sha256=gmW4v6o6sZQifajfPquhFeWmZWGQM89mOOBYZvjnE7g,741
|
|
110
112
|
schemathesis/specs/openapi/validation.py,sha256=UJWtW7VTRyMbbBHMRhMwNSUn92k1Hnp4p7IIVqCvqiI,998
|
|
111
|
-
schemathesis/specs/openapi/expressions/__init__.py,sha256=
|
|
113
|
+
schemathesis/specs/openapi/expressions/__init__.py,sha256=GIOeU0wU40LJ5V8vSdrDjpChAkGibZyGFijNSoF81xw,661
|
|
112
114
|
schemathesis/specs/openapi/expressions/context.py,sha256=ngZQPUvN8PKqvH8SIvhM3yyDZjb_g1aPzH9hzquRsKE,350
|
|
113
115
|
schemathesis/specs/openapi/expressions/errors.py,sha256=YLVhps-sYcslgVaahfcUYxUSHlIfWL-rQMeT5PZSMZ8,219
|
|
114
|
-
schemathesis/specs/openapi/expressions/lexer.py,sha256=
|
|
115
|
-
schemathesis/specs/openapi/expressions/nodes.py,sha256=
|
|
116
|
+
schemathesis/specs/openapi/expressions/lexer.py,sha256=j-zGtpeJlaMsuZXbOvLI-m0BF2cYJMs4o0FkMN8tykg,3825
|
|
117
|
+
schemathesis/specs/openapi/expressions/nodes.py,sha256=YkYcMq_myhdBQrjPCYoBdxadVNtrxyt4y226HjLGGK8,3299
|
|
116
118
|
schemathesis/specs/openapi/expressions/parser.py,sha256=xFA3cTTxl7VgAOiFF-vSDZ3usUFXpd3jk6ewMLeg6ao,3523
|
|
117
119
|
schemathesis/specs/openapi/negative/__init__.py,sha256=Nhe6qeSCnlgf5l-Fu6yHvL--3tkAkxYyIGffuo77bLs,3696
|
|
118
|
-
schemathesis/specs/openapi/negative/mutations.py,sha256=
|
|
120
|
+
schemathesis/specs/openapi/negative/mutations.py,sha256=SQjQR5aK-LpbSWzwrtbFX3PQ2xb5hzJV7eZXw6MlRJo,18643
|
|
119
121
|
schemathesis/specs/openapi/negative/types.py,sha256=a7buCcVxNBG6ILBM3A7oNTAX0lyDseEtZndBuej8MbI,174
|
|
120
122
|
schemathesis/specs/openapi/negative/utils.py,sha256=ozcOIuASufLqZSgnKUACjX-EOZrrkuNdXX0SDnLoGYA,168
|
|
121
123
|
schemathesis/specs/openapi/stateful/__init__.py,sha256=R8RhPJD3rDzqL4eA9jSnUwh9Q_Mv27ka1C5FdRuyusY,4509
|
|
@@ -127,8 +129,8 @@ schemathesis/transports/auth.py,sha256=ZKFku9gjhIG6445qNC2p_64Yt9Iz_4azbvja8AMpt
|
|
|
127
129
|
schemathesis/transports/content_types.py,sha256=xU8RZWxz-CyWRqQTI2fGYQacB7KasoY7LL_bxPQdyPY,2144
|
|
128
130
|
schemathesis/transports/headers.py,sha256=EDxpm8su0AuhyqZUkMex-OFZMAJN_5NHah7fDT2HDZE,989
|
|
129
131
|
schemathesis/transports/responses.py,sha256=U6z1VW5w19c9qRRoyf2ljkuXR2smTfWikmrTGqlgl18,1619
|
|
130
|
-
schemathesis-3.
|
|
131
|
-
schemathesis-3.
|
|
132
|
-
schemathesis-3.
|
|
133
|
-
schemathesis-3.
|
|
134
|
-
schemathesis-3.
|
|
132
|
+
schemathesis-3.26.1.dist-info/METADATA,sha256=UjWFZfyYDSYLiD8diepu3d2yF9mZSU36rJ6FrHdNtqU,16257
|
|
133
|
+
schemathesis-3.26.1.dist-info/WHEEL,sha256=hKi7AIIx6qfnsRbr087vpeJnrVUuDokDHZacPPMW7-Y,87
|
|
134
|
+
schemathesis-3.26.1.dist-info/entry_points.txt,sha256=VHyLcOG7co0nOeuk8WjgpRETk5P1E2iCLrn26Zkn5uk,158
|
|
135
|
+
schemathesis-3.26.1.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
|
|
136
|
+
schemathesis-3.26.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|