schemathesis 3.37.0__py3-none-any.whl → 3.38.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/_hypothesis.py +18 -8
- schemathesis/_patches.py +21 -0
- schemathesis/cli/__init__.py +1 -1
- schemathesis/cli/cassettes.py +6 -0
- schemathesis/extra/pytest_plugin.py +1 -1
- schemathesis/generation/_hypothesis.py +2 -0
- schemathesis/generation/coverage.py +257 -59
- schemathesis/hooks.py +4 -0
- schemathesis/internal/checks.py +4 -2
- schemathesis/internal/diff.py +15 -0
- schemathesis/models.py +65 -3
- schemathesis/parameters.py +5 -0
- schemathesis/runner/impl/context.py +10 -1
- schemathesis/runner/impl/core.py +14 -4
- schemathesis/runner/serialization.py +6 -3
- schemathesis/serializers.py +3 -0
- schemathesis/service/extensions.py +1 -1
- schemathesis/service/metadata.py +3 -3
- schemathesis/specs/openapi/_hypothesis.py +7 -46
- schemathesis/specs/openapi/checks.py +7 -2
- schemathesis/specs/openapi/converter.py +27 -11
- schemathesis/specs/openapi/formats.py +44 -0
- schemathesis/specs/openapi/links.py +4 -0
- schemathesis/specs/openapi/negative/mutations.py +5 -0
- schemathesis/specs/openapi/parameters.py +21 -14
- schemathesis/specs/openapi/schemas.py +6 -2
- schemathesis/stateful/context.py +1 -1
- schemathesis/stateful/runner.py +6 -2
- schemathesis/transports/__init__.py +4 -0
- schemathesis/utils.py +6 -4
- {schemathesis-3.37.0.dist-info → schemathesis-3.38.0.dist-info}/METADATA +2 -1
- {schemathesis-3.37.0.dist-info → schemathesis-3.38.0.dist-info}/RECORD +35 -33
- {schemathesis-3.37.0.dist-info → schemathesis-3.38.0.dist-info}/WHEEL +0 -0
- {schemathesis-3.37.0.dist-info → schemathesis-3.38.0.dist-info}/entry_points.txt +0 -0
- {schemathesis-3.37.0.dist-info → schemathesis-3.38.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -9,6 +9,8 @@ from ...parameters import Parameter
|
|
|
9
9
|
from .converter import to_json_schema_recursive
|
|
10
10
|
|
|
11
11
|
if TYPE_CHECKING:
|
|
12
|
+
from hypothesis.vendor.pretty import RepresentationPrinter
|
|
13
|
+
|
|
12
14
|
from ...models import APIOperation
|
|
13
15
|
|
|
14
16
|
|
|
@@ -21,6 +23,9 @@ class OpenAPIParameter(Parameter):
|
|
|
21
23
|
nullable_field: ClassVar[str]
|
|
22
24
|
supported_jsonschema_keywords: ClassVar[tuple[str, ...]]
|
|
23
25
|
|
|
26
|
+
def _repr_pretty_(self, printer: RepresentationPrinter, cycle: bool) -> None:
|
|
27
|
+
return None
|
|
28
|
+
|
|
24
29
|
@property
|
|
25
30
|
def description(self) -> str | None:
|
|
26
31
|
"""A brief parameter description."""
|
|
@@ -52,7 +57,7 @@ class OpenAPIParameter(Parameter):
|
|
|
52
57
|
def is_header(self) -> bool:
|
|
53
58
|
return self.location in ("header", "cookie")
|
|
54
59
|
|
|
55
|
-
def as_json_schema(self, operation: APIOperation) -> dict[str, Any]:
|
|
60
|
+
def as_json_schema(self, operation: APIOperation, *, update_quantifiers: bool = True) -> dict[str, Any]:
|
|
56
61
|
"""Convert parameter's definition to JSON Schema."""
|
|
57
62
|
# JSON Schema allows `examples` as an array
|
|
58
63
|
examples = []
|
|
@@ -65,11 +70,11 @@ class OpenAPIParameter(Parameter):
|
|
|
65
70
|
schema = self.from_open_api_to_json_schema(operation, self.definition)
|
|
66
71
|
if examples:
|
|
67
72
|
schema["examples"] = examples
|
|
68
|
-
return self.transform_keywords(schema)
|
|
73
|
+
return self.transform_keywords(schema, update_quantifiers=update_quantifiers)
|
|
69
74
|
|
|
70
|
-
def transform_keywords(self, schema: dict[str, Any]) -> dict[str, Any]:
|
|
75
|
+
def transform_keywords(self, schema: dict[str, Any], *, update_quantifiers: bool = True) -> dict[str, Any]:
|
|
71
76
|
"""Transform Open API specific keywords into JSON Schema compatible form."""
|
|
72
|
-
definition = to_json_schema_recursive(schema, self.nullable_field)
|
|
77
|
+
definition = to_json_schema_recursive(schema, self.nullable_field, update_quantifiers=update_quantifiers)
|
|
73
78
|
# Headers are strings, but it is not always explicitly defined in the schema. By preparing them properly, we
|
|
74
79
|
# can achieve significant performance improvements for such cases.
|
|
75
80
|
# For reference (my machine) - running a single test with 100 examples with the resulting strategy:
|
|
@@ -231,11 +236,11 @@ class OpenAPI20Body(OpenAPIBody, OpenAPI20Parameter):
|
|
|
231
236
|
# NOTE. For Open API 2.0 bodies, we still give `x-example` precedence over the schema-level `example` field to keep
|
|
232
237
|
# the precedence rules consistent.
|
|
233
238
|
|
|
234
|
-
def as_json_schema(self, operation: APIOperation) -> dict[str, Any]:
|
|
239
|
+
def as_json_schema(self, operation: APIOperation, *, update_quantifiers: bool = True) -> dict[str, Any]:
|
|
235
240
|
"""Convert body definition to JSON Schema."""
|
|
236
241
|
# `schema` is required in Open API 2.0 when the `in` keyword is `body`
|
|
237
242
|
schema = self.definition["schema"]
|
|
238
|
-
return self.transform_keywords(schema)
|
|
243
|
+
return self.transform_keywords(schema, update_quantifiers=update_quantifiers)
|
|
239
244
|
|
|
240
245
|
|
|
241
246
|
FORM_MEDIA_TYPES = ("multipart/form-data", "application/x-www-form-urlencoded")
|
|
@@ -254,13 +259,13 @@ class OpenAPI30Body(OpenAPIBody, OpenAPI30Parameter):
|
|
|
254
259
|
required: bool = False
|
|
255
260
|
description: str | None = None
|
|
256
261
|
|
|
257
|
-
def as_json_schema(self, operation: APIOperation) -> dict[str, Any]:
|
|
262
|
+
def as_json_schema(self, operation: APIOperation, *, update_quantifiers: bool = True) -> dict[str, Any]:
|
|
258
263
|
"""Convert body definition to JSON Schema."""
|
|
259
264
|
schema = get_media_type_schema(self.definition)
|
|
260
|
-
return self.transform_keywords(schema)
|
|
265
|
+
return self.transform_keywords(schema, update_quantifiers=update_quantifiers)
|
|
261
266
|
|
|
262
|
-
def transform_keywords(self, schema: dict[str, Any]) -> dict[str, Any]:
|
|
263
|
-
definition = super().transform_keywords(schema)
|
|
267
|
+
def transform_keywords(self, schema: dict[str, Any], *, update_quantifiers: bool = True) -> dict[str, Any]:
|
|
268
|
+
definition = super().transform_keywords(schema, update_quantifiers=update_quantifiers)
|
|
264
269
|
if self.is_form:
|
|
265
270
|
# It significantly reduces the "filtering" part of data generation.
|
|
266
271
|
definition.setdefault("type", "object")
|
|
@@ -298,12 +303,14 @@ class OpenAPI20CompositeBody(OpenAPIBody, OpenAPI20Parameter):
|
|
|
298
303
|
# We generate an object for formData - it is always required.
|
|
299
304
|
return bool(self.definition)
|
|
300
305
|
|
|
301
|
-
def as_json_schema(self, operation: APIOperation) -> dict[str, Any]:
|
|
306
|
+
def as_json_schema(self, operation: APIOperation, *, update_quantifiers: bool = True) -> dict[str, Any]:
|
|
302
307
|
"""The composite body is transformed into an "object" JSON Schema."""
|
|
303
|
-
return parameters_to_json_schema(operation, self.definition)
|
|
308
|
+
return parameters_to_json_schema(operation, self.definition, update_quantifiers=update_quantifiers)
|
|
304
309
|
|
|
305
310
|
|
|
306
|
-
def parameters_to_json_schema(
|
|
311
|
+
def parameters_to_json_schema(
|
|
312
|
+
operation: APIOperation, parameters: Iterable[OpenAPIParameter], *, update_quantifiers: bool = True
|
|
313
|
+
) -> dict[str, Any]:
|
|
307
314
|
"""Create an "object" JSON schema from a list of Open API parameters.
|
|
308
315
|
|
|
309
316
|
:param List[OpenAPIParameter] parameters: A list of Open API parameters related to the same location. All of
|
|
@@ -343,7 +350,7 @@ def parameters_to_json_schema(operation: APIOperation, parameters: Iterable[Open
|
|
|
343
350
|
required = []
|
|
344
351
|
for parameter in parameters:
|
|
345
352
|
name = parameter.name
|
|
346
|
-
properties[name] = parameter.as_json_schema(operation)
|
|
353
|
+
properties[name] = parameter.as_json_schema(operation, update_quantifiers=update_quantifiers)
|
|
347
354
|
# If parameter names are duplicated, we need to avoid duplicate entries in `required` anyway
|
|
348
355
|
if parameter.is_required and name not in required:
|
|
349
356
|
required.append(name)
|
|
@@ -986,7 +986,9 @@ class SwaggerV20(BaseOpenAPISchema):
|
|
|
986
986
|
return scopes, None
|
|
987
987
|
# Extra conversion to JSON Schema is needed here if there was one $ref in the input
|
|
988
988
|
# because it is not converted
|
|
989
|
-
return scopes, to_json_schema_recursive(
|
|
989
|
+
return scopes, to_json_schema_recursive(
|
|
990
|
+
schema, self.nullable_name, is_response_schema=True, update_quantifiers=False
|
|
991
|
+
)
|
|
990
992
|
|
|
991
993
|
def get_content_types(self, operation: APIOperation, response: GenericResponse) -> list[str]:
|
|
992
994
|
produces = operation.definition.raw.get("produces", None)
|
|
@@ -1137,7 +1139,9 @@ class OpenApi30(SwaggerV20):
|
|
|
1137
1139
|
if option and "schema" in option:
|
|
1138
1140
|
# Extra conversion to JSON Schema is needed here if there was one $ref in the input
|
|
1139
1141
|
# because it is not converted
|
|
1140
|
-
return scopes, to_json_schema_recursive(
|
|
1142
|
+
return scopes, to_json_schema_recursive(
|
|
1143
|
+
option["schema"], self.nullable_name, is_response_schema=True, update_quantifiers=False
|
|
1144
|
+
)
|
|
1141
1145
|
return scopes, None
|
|
1142
1146
|
|
|
1143
1147
|
def get_strategies_from_examples(
|
schemathesis/stateful/context.py
CHANGED
|
@@ -18,7 +18,7 @@ FailureKey = Union[Type[CheckFailed], Tuple[str, int]]
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
def _failure_cache_key(exc: CheckFailed | AssertionError) -> FailureKey:
|
|
21
|
-
"""Create a
|
|
21
|
+
"""Create a key to identify unique failures."""
|
|
22
22
|
from hypothesis.internal.escalation import get_trimmed_traceback
|
|
23
23
|
|
|
24
24
|
# For CheckFailed, we already have all distinctive information about the failure, which is contained
|
schemathesis/stateful/runner.py
CHANGED
|
@@ -69,7 +69,7 @@ class StatefulTestRunner:
|
|
|
69
69
|
try:
|
|
70
70
|
event = self.event_queue.get(timeout=EVENT_QUEUE_TIMEOUT)
|
|
71
71
|
# Set the run status based on the suite status
|
|
72
|
-
# ERROR &
|
|
72
|
+
# ERROR & INTERRUPTED statuses are terminal, therefore they should not be overridden
|
|
73
73
|
if isinstance(event, events.SuiteFinished):
|
|
74
74
|
if event.status == events.SuiteStatus.FAILURE:
|
|
75
75
|
run_status = events.RunStatus.FAILURE
|
|
@@ -131,7 +131,11 @@ def _execute_state_machine_loop(
|
|
|
131
131
|
if config.auth is not None:
|
|
132
132
|
session.auth = config.auth
|
|
133
133
|
call_kwargs["session"] = session
|
|
134
|
-
check_ctx = CheckContext(
|
|
134
|
+
check_ctx = CheckContext(
|
|
135
|
+
override=config.override,
|
|
136
|
+
auth=config.auth,
|
|
137
|
+
headers=CaseInsensitiveDict(config.headers) if config.headers else None,
|
|
138
|
+
)
|
|
135
139
|
|
|
136
140
|
class _InstrumentedStateMachine(state_machine): # type: ignore[valid-type,misc]
|
|
137
141
|
"""State machine with additional hooks for emitting events."""
|
|
@@ -21,6 +21,7 @@ if TYPE_CHECKING:
|
|
|
21
21
|
import requests
|
|
22
22
|
import werkzeug
|
|
23
23
|
from _typeshed.wsgi import WSGIApplication
|
|
24
|
+
from hypothesis.vendor.pretty import RepresentationPrinter
|
|
24
25
|
from starlette_testclient._testclient import ASGI2App, ASGI3App
|
|
25
26
|
|
|
26
27
|
from ..models import Case
|
|
@@ -34,6 +35,9 @@ class RequestConfig:
|
|
|
34
35
|
proxy: str | None = None
|
|
35
36
|
cert: RequestCert | None = None
|
|
36
37
|
|
|
38
|
+
def _repr_pretty_(self, printer: RepresentationPrinter, cycle: bool) -> None:
|
|
39
|
+
return None
|
|
40
|
+
|
|
37
41
|
@property
|
|
38
42
|
def prepared_timeout(self) -> float | None:
|
|
39
43
|
return prepare_timeout(self.timeout)
|
schemathesis/utils.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import functools
|
|
4
3
|
from contextlib import contextmanager
|
|
5
4
|
from inspect import getfullargspec
|
|
6
5
|
from pathlib import Path
|
|
@@ -143,10 +142,13 @@ def validate_given_args(func: GenericTest, args: tuple, kwargs: dict[str, Any])
|
|
|
143
142
|
def compose(*functions: Callable) -> Callable:
|
|
144
143
|
"""Compose multiple functions into a single one."""
|
|
145
144
|
|
|
146
|
-
def
|
|
147
|
-
|
|
145
|
+
def composed(x: Any) -> Any:
|
|
146
|
+
result = x
|
|
147
|
+
for func in reversed(functions):
|
|
148
|
+
result = func(result)
|
|
149
|
+
return result
|
|
148
150
|
|
|
149
|
-
return
|
|
151
|
+
return composed
|
|
150
152
|
|
|
151
153
|
|
|
152
154
|
def skip(operation_name: str) -> NoReturn:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: schemathesis
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.38.0
|
|
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
|
|
@@ -25,6 +25,7 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
25
25
|
Classifier: Programming Language :: Python :: 3.10
|
|
26
26
|
Classifier: Programming Language :: Python :: 3.11
|
|
27
27
|
Classifier: Programming Language :: Python :: 3.12
|
|
28
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
28
29
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
29
30
|
Classifier: Topic :: Software Development :: Testing
|
|
30
31
|
Requires-Python: >=3.8
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
schemathesis/__init__.py,sha256=UW2Bq8hDDkcBeAAA7PzpBFXkOOxkmHox-mfQwzHDjL0,1914
|
|
2
2
|
schemathesis/_compat.py,sha256=y4RZd59i2NCnZ91VQhnKeMn_8t3SgvLOk2Xm8nymUHY,1837
|
|
3
3
|
schemathesis/_dependency_versions.py,sha256=pjEkkGAfOQJYNb-9UOo84V8nj_lKHr_TGDVdFwY2UU0,816
|
|
4
|
-
schemathesis/_hypothesis.py,sha256=
|
|
4
|
+
schemathesis/_hypothesis.py,sha256=VZp_ttyI1y2Vx_Bu8S1pxZG8iHxA1pFgfP-jduzSjrk,15269
|
|
5
5
|
schemathesis/_lazy_import.py,sha256=aMhWYgbU2JOltyWBb32vnWBb6kykOghucEzI_F70yVE,470
|
|
6
6
|
schemathesis/_override.py,sha256=TAjYB3eJQmlw9K_xiR9ptt9Wj7if4U7UFlUhGjpBAoM,1625
|
|
7
|
+
schemathesis/_patches.py,sha256=Hsbpn4UVeXUQD2Kllrbq01CSWsTYENWa0VJTyhX5C2k,895
|
|
7
8
|
schemathesis/_rate_limiter.py,sha256=q_XWst5hzuAyXQRiZc4s_bx7-JlPYZM_yKDmeavt3oo,242
|
|
8
9
|
schemathesis/_xml.py,sha256=lwRaKEMQvl6SUySnhGgooNsdmXPnDh11YSPpbsW8dR8,6923
|
|
9
10
|
schemathesis/auths.py,sha256=De97IS_iOlC36-jRhkZ2DUndjUpXYgsd8R-nA-iHn88,16837
|
|
@@ -14,23 +15,23 @@ schemathesis/exceptions.py,sha256=5zjPlyVoQNJGbwufplL6ZVV7FEBPBNPHGdlQRJ7xnhE,20
|
|
|
14
15
|
schemathesis/failures.py,sha256=fybNkCF2rqH90e3KW_XwpgZnSM6f7_FERcxHT9Pd3NM,7911
|
|
15
16
|
schemathesis/filters.py,sha256=f3c_yXIBwIin-9Y0qU2TkcC1NEM_Mw34jGUHQc0BOyw,17026
|
|
16
17
|
schemathesis/graphql.py,sha256=XiuKcfoOB92iLFC8zpz2msLkM0_V0TLdxPNBqrrGZ8w,216
|
|
17
|
-
schemathesis/hooks.py,sha256=
|
|
18
|
+
schemathesis/hooks.py,sha256=f0AUPxyBenpe1YGIWDY_uwSRoT2mE4Tp4Qase7f0L08,14953
|
|
18
19
|
schemathesis/lazy.py,sha256=Ddhkk7Tpc_VcRGYkCtKDmP2gpjxVmEZ3b01ZTNjbm8I,19004
|
|
19
20
|
schemathesis/loaders.py,sha256=MoEhcdOEBJxNRn5X-ZNhWB9jZDHQQNpkNfEdQjf_NDw,4590
|
|
20
|
-
schemathesis/models.py,sha256=
|
|
21
|
-
schemathesis/parameters.py,sha256=
|
|
21
|
+
schemathesis/models.py,sha256=s69MSs_y3ZNxmAiMl8h4ifuBPc8JW5FZHzDHU8Ebl4A,49204
|
|
22
|
+
schemathesis/parameters.py,sha256=_LN3NL5XwoRfvjcU8o2ArrNFK9sbBZo25UFdxuywkRw,2425
|
|
22
23
|
schemathesis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
24
|
schemathesis/sanitization.py,sha256=Lycn1VVfula9B6XpzkxTHja7CZ7RHqbUh9kBic0Yi4M,9056
|
|
24
25
|
schemathesis/schemas.py,sha256=3xTZOZ1lLdAdwLAkiW0eakRb96mQ0MpbcwmrT-XO4KA,20457
|
|
25
|
-
schemathesis/serializers.py,sha256=
|
|
26
|
+
schemathesis/serializers.py,sha256=HyYVSVR71FhWfIErnH6OoGLOa4tkh9mTeVUTIpzEW24,11739
|
|
26
27
|
schemathesis/targets.py,sha256=XIGRghvEzbmEJjse9aZgNEj67L3jAbiazm2rxURWgDE,2351
|
|
27
28
|
schemathesis/throttling.py,sha256=aisUc4MJDGIOGUAs9L2DlWWpdd4KyAFuNVKhYoaUC9M,1719
|
|
28
29
|
schemathesis/types.py,sha256=Tem2Q_zyMCd0Clp5iGKv6Fu13wdcbxVE8tCVH9WWt7A,1065
|
|
29
|
-
schemathesis/utils.py,sha256=
|
|
30
|
-
schemathesis/cli/__init__.py,sha256=
|
|
30
|
+
schemathesis/utils.py,sha256=LwqxqoAKmRiAdj-qUbNmgQgsamc49V5lc5TnOIDuuMA,4904
|
|
31
|
+
schemathesis/cli/__init__.py,sha256=rAebJYQrORWsl4WR6sLUseJCQQZbDEsaQex52kmn6kI,74536
|
|
31
32
|
schemathesis/cli/__main__.py,sha256=MWaenjaUTZIfNPFzKmnkTiawUri7DVldtg3mirLwzU8,92
|
|
32
33
|
schemathesis/cli/callbacks.py,sha256=-VA_I_mVma9WxFNtUR8d2KNICKJD5ScayfSdKKPEP5Y,16321
|
|
33
|
-
schemathesis/cli/cassettes.py,sha256=
|
|
34
|
+
schemathesis/cli/cassettes.py,sha256=ZRWFoJVwrEOymQYlraEFR8blemog1FnpWeZgtMx0kCE,19648
|
|
34
35
|
schemathesis/cli/constants.py,sha256=wk-0GsoJIel8wFFerQ6Kf_6eAYUtIWkwMFwyAqv3yj4,1635
|
|
35
36
|
schemathesis/cli/context.py,sha256=j_lvYQiPa6Q7P4P_IGCM9V2y2gJSpDbpxIIzR5oFB2I,2567
|
|
36
37
|
schemathesis/cli/debug.py,sha256=_YA-bX1ujHl4bqQDEum7M-I2XHBTEGbvgkhvcvKhmgU,658
|
|
@@ -53,19 +54,20 @@ schemathesis/extra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
|
53
54
|
schemathesis/extra/_aiohttp.py,sha256=-bIY0ucv7pfK3gA9PHiO4n7ajtZJJM9pS3EY3cLau9c,957
|
|
54
55
|
schemathesis/extra/_flask.py,sha256=lpKQxg_kdEFo59Q8sV5T78IJYhgx6p4SCwIohJYSycw,345
|
|
55
56
|
schemathesis/extra/_server.py,sha256=JFJTgJjpZu_eVZkI16rLaXJSv55Awbl7JNqegCLnQBg,541
|
|
56
|
-
schemathesis/extra/pytest_plugin.py,sha256=
|
|
57
|
+
schemathesis/extra/pytest_plugin.py,sha256=3FF7pcqK26J__FGq6uOZdaD-1tZ-khQEwpdwb1ueFPc,12617
|
|
57
58
|
schemathesis/fixups/__init__.py,sha256=RP5QYJVJhp8LXjhH89fCRaIVU26dHCy74jD9seoYMuc,967
|
|
58
59
|
schemathesis/fixups/fast_api.py,sha256=mn-KzBqnR8jl4W5fY-_ZySabMDMUnpzCIESMHnlvE1c,1304
|
|
59
60
|
schemathesis/fixups/utf8_bom.py,sha256=lWT9RNmJG8i-l5AXIpaCT3qCPUwRgzXPW3eoOjmZETA,745
|
|
60
61
|
schemathesis/generation/__init__.py,sha256=29Zys_tD6kfngaC4zHeC6TOBZQcmo7CWm7KDSYsHStQ,1581
|
|
61
|
-
schemathesis/generation/_hypothesis.py,sha256=
|
|
62
|
+
schemathesis/generation/_hypothesis.py,sha256=74fzLPHugZgMQXerWYFAMqCAjtAXz5E4gek7Gnkhli4,1756
|
|
62
63
|
schemathesis/generation/_methods.py,sha256=r8oVlJ71_gXcnEhU-byw2E0R2RswQQFm8U7yGErSqbw,1204
|
|
63
|
-
schemathesis/generation/coverage.py,sha256=
|
|
64
|
+
schemathesis/generation/coverage.py,sha256=hMtISl3fYaTmE78sFCBd42BPJfPvgSEZJztlXnKxTRo,38310
|
|
64
65
|
schemathesis/internal/__init__.py,sha256=93HcdG3LF0BbQKbCteOsFMa1w6nXl8yTmx87QLNJOik,161
|
|
65
|
-
schemathesis/internal/checks.py,sha256=
|
|
66
|
+
schemathesis/internal/checks.py,sha256=wUApc22zY6_tAWMEA3kAYLQRwHIhy4AngZYREy0AiPw,2413
|
|
66
67
|
schemathesis/internal/copy.py,sha256=DcL56z-d69kKR_5u8mlHvjSL1UTyUKNMAwexrwHFY1s,1031
|
|
67
68
|
schemathesis/internal/datetime.py,sha256=zPLBL0XXLNfP-KYel3H2m8pnsxjsA_4d-zTOhJg2EPQ,136
|
|
68
69
|
schemathesis/internal/deprecation.py,sha256=Ty5VBFBlufkITpP0WWTPIPbnB7biDi0kQgXVYWZp820,1273
|
|
70
|
+
schemathesis/internal/diff.py,sha256=upGqM6s9WDT653wzxK_tqclFCxqkzB0j4wsO1foq5_k,466
|
|
69
71
|
schemathesis/internal/extensions.py,sha256=h0aHRK_PTKfiAufkeBziegQS8537TL-Gr1hPW48q8Yc,790
|
|
70
72
|
schemathesis/internal/jsonschema.py,sha256=-7tF15cXo1ZdhiRFYYfEClXihX2Svc5Loi_Dz1x201k,1157
|
|
71
73
|
schemathesis/internal/output.py,sha256=zMaG5knIuBieVH8CrcmPJgbmQukDs2xdekX0BrK7BZs,1989
|
|
@@ -75,10 +77,10 @@ schemathesis/internal/validation.py,sha256=G7i8jIMUpAeOnDsDF_eWYvRZe_yMprRswx0QA
|
|
|
75
77
|
schemathesis/runner/__init__.py,sha256=b96aoJQo9Kash0GNKI-uCiLMEKOI8cxKjKCKQlWxkUw,21925
|
|
76
78
|
schemathesis/runner/events.py,sha256=cRKKSDvHvKLBIyFBz-J0JtAKshbGGKco9eaMyLCgzsY,11734
|
|
77
79
|
schemathesis/runner/probes.py,sha256=no5AfO3kse25qvHevjeUfB0Q3C860V2AYzschUW3QMQ,5688
|
|
78
|
-
schemathesis/runner/serialization.py,sha256=
|
|
80
|
+
schemathesis/runner/serialization.py,sha256=SOmdLJSr0YPHptBiqMaiiW3xzXOyBcA5jwiZy-9ZUjY,20593
|
|
79
81
|
schemathesis/runner/impl/__init__.py,sha256=1E2iME8uthYPBh9MjwVBCTFV-P3fi7AdphCCoBBspjs,199
|
|
80
|
-
schemathesis/runner/impl/context.py,sha256=
|
|
81
|
-
schemathesis/runner/impl/core.py,sha256=
|
|
82
|
+
schemathesis/runner/impl/context.py,sha256=hjJoDHpL9wUXVUGlC-Mx82tUpNAi7qecEB847T-XEvY,3043
|
|
83
|
+
schemathesis/runner/impl/core.py,sha256=3bCwPcZB1br-clz3oQz8KV9yF9hZK7t3F29ZEq2ErBQ,47642
|
|
82
84
|
schemathesis/runner/impl/solo.py,sha256=y5QSxgK8nBCEjZVD5BpFvYUXmB6tEjk6TwxAo__NejA,2911
|
|
83
85
|
schemathesis/runner/impl/threadpool.py,sha256=yNR5LYE8f3N_4t42OwSgy0_qdGgBPM7d11F9c9oEAAs,15075
|
|
84
86
|
schemathesis/service/__init__.py,sha256=cDVTCFD1G-vvhxZkJUwiToTAEQ-0ByIoqwXvJBCf_V8,472
|
|
@@ -87,9 +89,9 @@ schemathesis/service/ci.py,sha256=3m9xSWFhrpWA6mI_8bXI7sspND9RSqXFM9UseO5nIiM,67
|
|
|
87
89
|
schemathesis/service/client.py,sha256=9h-y7-GGO3lsuOfSVSMKeHH8nw91rk3Bi06gr23r3E4,5222
|
|
88
90
|
schemathesis/service/constants.py,sha256=Q1bhtLRkmhso4KSVAtWl0u446Wlbk3ShOL3ZdbPoJOM,1502
|
|
89
91
|
schemathesis/service/events.py,sha256=YHhVB66bRODx2ZnG4vjE6lVg3LqzOrsMb8O8vtc8SpE,1294
|
|
90
|
-
schemathesis/service/extensions.py,sha256=
|
|
92
|
+
schemathesis/service/extensions.py,sha256=9TBvH762I4DKUQEE551oTH4cHRlVsRXBMDdMVwaFjQk,7805
|
|
91
93
|
schemathesis/service/hosts.py,sha256=gg4xObk3G9p39bkmAvX3gJpZ3Anx-Fnwm9T03qov0LE,3161
|
|
92
|
-
schemathesis/service/metadata.py,sha256=
|
|
94
|
+
schemathesis/service/metadata.py,sha256=6CEyYbf2GkoqUHzC0U1br6DkrF12VBbjr8yhOfRZ0fM,2086
|
|
93
95
|
schemathesis/service/models.py,sha256=nUf38yf2AK8-B56KHjviVlVe-fjos9Dp-M8YAWOIkrc,6572
|
|
94
96
|
schemathesis/service/report.py,sha256=FHIlt0UcDQkwRlqsnURuBD7O6PdXlAMJlCdWdukIoiY,8302
|
|
95
97
|
schemathesis/service/serialization.py,sha256=20APAy8CZ561agg4FP17PIEX8hB0LXtk_p7dpO1Z-JI,6278
|
|
@@ -104,20 +106,20 @@ schemathesis/specs/graphql/schemas.py,sha256=b7QwglKbcYQCMjuYmqDsVoFu2o4xaA_kduU
|
|
|
104
106
|
schemathesis/specs/graphql/validation.py,sha256=uINIOt-2E7ZuQV2CxKzwez-7L9tDtqzMSpnVoRWvxy0,1635
|
|
105
107
|
schemathesis/specs/openapi/__init__.py,sha256=HDcx3bqpa6qWPpyMrxAbM3uTo0Lqpg-BUNZhDJSJKnw,279
|
|
106
108
|
schemathesis/specs/openapi/_cache.py,sha256=PAiAu4X_a2PQgD2lG5H3iisXdyg4SaHpU46bRZvfNkM,4320
|
|
107
|
-
schemathesis/specs/openapi/_hypothesis.py,sha256=
|
|
108
|
-
schemathesis/specs/openapi/checks.py,sha256=
|
|
109
|
+
schemathesis/specs/openapi/_hypothesis.py,sha256=uKcWfiiCNcIBLilzUc6EDxll1hv7CTiBz3ZhKtE_-j4,22916
|
|
110
|
+
schemathesis/specs/openapi/checks.py,sha256=ugo7-6iAu2fX8OmQgyvSunMO9Nt9cr6PNdT3vyX8Z4I,23914
|
|
109
111
|
schemathesis/specs/openapi/constants.py,sha256=JqM_FHOenqS_MuUE9sxVQ8Hnw0DNM8cnKDwCwPLhID4,783
|
|
110
|
-
schemathesis/specs/openapi/converter.py,sha256=
|
|
112
|
+
schemathesis/specs/openapi/converter.py,sha256=Yxw9lS_JKEyi-oJuACT07fm04bqQDlAu-iHwzkeDvE4,3546
|
|
111
113
|
schemathesis/specs/openapi/definitions.py,sha256=WTkWwCgTc3OMxfKsqh6YDoGfZMTThSYrHGp8h0vLAK0,93935
|
|
112
114
|
schemathesis/specs/openapi/examples.py,sha256=FwhPWca7bpdHpUp_LRoK09DVgusojO3aXXhXYrK373I,20354
|
|
113
|
-
schemathesis/specs/openapi/formats.py,sha256=
|
|
114
|
-
schemathesis/specs/openapi/links.py,sha256=
|
|
115
|
+
schemathesis/specs/openapi/formats.py,sha256=3KtEC-8nQRwMErS-WpMadXsr8R0O-NzYwFisZqMuc-8,2761
|
|
116
|
+
schemathesis/specs/openapi/links.py,sha256=C4Uir2P_EcpqME8ee_a1vdUM8Tm3ZcKNn2YsGjZiMUQ,17935
|
|
115
117
|
schemathesis/specs/openapi/loaders.py,sha256=5B1cgYEBj3h2psPQxzrQ5Xq5owLVGw-u9HsCQIx7yFE,25705
|
|
116
118
|
schemathesis/specs/openapi/media_types.py,sha256=dNTxpRQbY3SubdVjh4Cjb38R6Bc9MF9BsRQwPD87x0g,1017
|
|
117
|
-
schemathesis/specs/openapi/parameters.py,sha256=
|
|
119
|
+
schemathesis/specs/openapi/parameters.py,sha256=ri_LBnGHLHxDFBw-tExJ54kCfnhgECWRd-tIceCGHiE,14757
|
|
118
120
|
schemathesis/specs/openapi/patterns.py,sha256=IK2BkXI1xByEz5if6jvydFE07nq5rDa4k_-2xX7ifG8,4715
|
|
119
121
|
schemathesis/specs/openapi/references.py,sha256=euxM02kQGMHh4Ss1jWjOY_gyw_HazafKITIsvOEiAvI,9831
|
|
120
|
-
schemathesis/specs/openapi/schemas.py,sha256=
|
|
122
|
+
schemathesis/specs/openapi/schemas.py,sha256=MLU2h9DrQNCDkk74MFFSj-8BsKjkJsf9lJQHPxLFVps,53845
|
|
121
123
|
schemathesis/specs/openapi/security.py,sha256=Z-6pk2Ga1PTUtBe298KunjVHsNh5A-teegeso7zcPIE,7138
|
|
122
124
|
schemathesis/specs/openapi/serialization.py,sha256=5qGdFHZ3n80UlbSXrO_bkr4Al_7ci_Z3aSUjZczNDQY,11384
|
|
123
125
|
schemathesis/specs/openapi/utils.py,sha256=ER4vJkdFVDIE7aKyxyYatuuHVRNutytezgE52pqZNE8,900
|
|
@@ -130,7 +132,7 @@ schemathesis/specs/openapi/expressions/lexer.py,sha256=LeVE6fgYT9-fIsXrv0-YrRHnI
|
|
|
130
132
|
schemathesis/specs/openapi/expressions/nodes.py,sha256=UOVrK8fRHACv0T460CPSyO6OU5aeKnE2eKX4HF9SiFs,3990
|
|
131
133
|
schemathesis/specs/openapi/expressions/parser.py,sha256=gM_Ob-TlTGxpgjZGRHNyPhBj1YAvRgRoSlNCrE7-djk,4452
|
|
132
134
|
schemathesis/specs/openapi/negative/__init__.py,sha256=MG0tx3a7BYx0mVg0pjTojq1fLufMmd_x4zppR3oz-Mk,3739
|
|
133
|
-
schemathesis/specs/openapi/negative/mutations.py,sha256=
|
|
135
|
+
schemathesis/specs/openapi/negative/mutations.py,sha256=_BfeqOeqlEo8KuPuFLv3Z7kAR_9G7dvTtyMyMGlkp6o,19244
|
|
134
136
|
schemathesis/specs/openapi/negative/types.py,sha256=a7buCcVxNBG6ILBM3A7oNTAX0lyDseEtZndBuej8MbI,174
|
|
135
137
|
schemathesis/specs/openapi/negative/utils.py,sha256=ozcOIuASufLqZSgnKUACjX-EOZrrkuNdXX0SDnLoGYA,168
|
|
136
138
|
schemathesis/specs/openapi/stateful/__init__.py,sha256=Iu77XE4iUuiz32UoYFqIe7H3yLEC4HKflG0ZX0JCyHg,9451
|
|
@@ -138,21 +140,21 @@ schemathesis/specs/openapi/stateful/statistic.py,sha256=xV_I2Oy-H7K_53nedLMy0rR6
|
|
|
138
140
|
schemathesis/specs/openapi/stateful/types.py,sha256=DtxmxdvCbzlgoyecudXP84qF7NuCv3fRal3oJJs7eAU,456
|
|
139
141
|
schemathesis/stateful/__init__.py,sha256=HBg-h131EI8IipHQgufSaXe-CrFTKmffPVsoEFjPUmE,5100
|
|
140
142
|
schemathesis/stateful/config.py,sha256=huYzqDoD6x20p_VNAR79NgxPwUFO8UXoc3_z4BEuHqU,3586
|
|
141
|
-
schemathesis/stateful/context.py,sha256=
|
|
143
|
+
schemathesis/stateful/context.py,sha256=lpCOVhJEbPOp8F_Z_YvU5ptVTgaKJsllvI1NK28Dtvs,5085
|
|
142
144
|
schemathesis/stateful/events.py,sha256=CyYvyQebOaeTn6UevaB7HXOrUhxCWbqXMfQ7pZK7fV8,6727
|
|
143
|
-
schemathesis/stateful/runner.py,sha256=
|
|
145
|
+
schemathesis/stateful/runner.py,sha256=3tRRmWcXp5GCeRWGOtQ9-W0rxljoR06qSCKC4r7EQyY,12672
|
|
144
146
|
schemathesis/stateful/sink.py,sha256=bHYlgh-fMwg1Srxk_XGs0-WV34YccotwH9PGrxCK57A,2474
|
|
145
147
|
schemathesis/stateful/state_machine.py,sha256=PFztY82W5enuXjO6k4Mz8fbHmDJ7Z8OLYZRWtuBeyjg,12956
|
|
146
148
|
schemathesis/stateful/statistic.py,sha256=2-uU5xpT9CbMulKgJWLZN6MUpC0Fskf5yXTt4ef4NFA,542
|
|
147
149
|
schemathesis/stateful/validation.py,sha256=23qSZjC1_xRmtCX4OqsyG6pGxdlo6IZYid695ZpDQyU,3747
|
|
148
|
-
schemathesis/transports/__init__.py,sha256=
|
|
150
|
+
schemathesis/transports/__init__.py,sha256=kFM_0RcBjjw5Jg5ddBhWi98pvC0WrVsR_irJNAb4FQs,13048
|
|
149
151
|
schemathesis/transports/asgi.py,sha256=bwW9vMd1h89Jh7I4jHJVwSNUQzHvc7-JOD5u4hSHZd8,212
|
|
150
152
|
schemathesis/transports/auth.py,sha256=urSTO9zgFO1qU69xvnKHPFQV0SlJL3d7_Ojl0tLnZwo,1143
|
|
151
153
|
schemathesis/transports/content_types.py,sha256=MiKOm-Hy5i75hrROPdpiBZPOTDzOwlCdnthJD12AJzI,2187
|
|
152
154
|
schemathesis/transports/headers.py,sha256=hr_AIDOfUxsJxpHfemIZ_uNG3_vzS_ZeMEKmZjbYiBE,990
|
|
153
155
|
schemathesis/transports/responses.py,sha256=OFD4ZLqwEFpo7F9vaP_SVgjhxAqatxIj38FS4XVq8Qs,1680
|
|
154
|
-
schemathesis-3.
|
|
155
|
-
schemathesis-3.
|
|
156
|
-
schemathesis-3.
|
|
157
|
-
schemathesis-3.
|
|
158
|
-
schemathesis-3.
|
|
156
|
+
schemathesis-3.38.0.dist-info/METADATA,sha256=xtyRXDtAqdBhey-HDZvagpAMxwIucdSFY6n4wSpyr_k,12956
|
|
157
|
+
schemathesis-3.38.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
|
158
|
+
schemathesis-3.38.0.dist-info/entry_points.txt,sha256=VHyLcOG7co0nOeuk8WjgpRETk5P1E2iCLrn26Zkn5uk,158
|
|
159
|
+
schemathesis-3.38.0.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
|
|
160
|
+
schemathesis-3.38.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|