schemathesis 4.0.0a10__py3-none-any.whl → 4.0.0a11__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- schemathesis/__init__.py +3 -7
- schemathesis/checks.py +17 -7
- schemathesis/cli/commands/__init__.py +51 -3
- schemathesis/cli/commands/data.py +10 -0
- schemathesis/cli/commands/run/__init__.py +147 -260
- schemathesis/cli/commands/run/context.py +2 -3
- schemathesis/cli/commands/run/events.py +4 -0
- schemathesis/cli/commands/run/executor.py +60 -73
- schemathesis/cli/commands/run/filters.py +15 -165
- schemathesis/cli/commands/run/handlers/cassettes.py +105 -104
- schemathesis/cli/commands/run/handlers/junitxml.py +5 -4
- schemathesis/cli/commands/run/handlers/output.py +26 -47
- schemathesis/cli/commands/run/loaders.py +35 -50
- schemathesis/cli/commands/run/validation.py +36 -161
- schemathesis/cli/core.py +5 -3
- schemathesis/cli/ext/fs.py +7 -5
- schemathesis/cli/ext/options.py +0 -21
- schemathesis/config/__init__.py +188 -0
- schemathesis/config/_auth.py +51 -0
- schemathesis/config/_checks.py +268 -0
- schemathesis/config/_diff_base.py +99 -0
- schemathesis/config/_env.py +21 -0
- schemathesis/config/_error.py +156 -0
- schemathesis/config/_generation.py +150 -0
- schemathesis/config/_health_check.py +24 -0
- schemathesis/config/_operations.py +313 -0
- schemathesis/config/_output.py +171 -0
- schemathesis/config/_parameters.py +19 -0
- schemathesis/config/_phases.py +151 -0
- schemathesis/config/_projects.py +495 -0
- schemathesis/config/_rate_limit.py +17 -0
- schemathesis/config/_report.py +116 -0
- schemathesis/config/_validator.py +9 -0
- schemathesis/config/schema.json +837 -0
- schemathesis/core/__init__.py +2 -0
- schemathesis/core/compat.py +16 -9
- schemathesis/core/errors.py +19 -2
- schemathesis/core/failures.py +6 -7
- schemathesis/core/hooks.py +20 -0
- schemathesis/core/output/__init__.py +14 -37
- schemathesis/core/output/sanitization.py +3 -146
- schemathesis/core/validation.py +16 -0
- schemathesis/engine/__init__.py +2 -4
- schemathesis/engine/context.py +41 -43
- schemathesis/engine/core.py +7 -5
- schemathesis/engine/phases/__init__.py +10 -0
- schemathesis/engine/phases/probes.py +8 -8
- schemathesis/engine/phases/stateful/_executor.py +68 -43
- schemathesis/engine/phases/unit/__init__.py +23 -15
- schemathesis/engine/phases/unit/_executor.py +77 -17
- schemathesis/engine/phases/unit/_pool.py +1 -1
- schemathesis/errors.py +2 -0
- schemathesis/filters.py +2 -3
- schemathesis/generation/__init__.py +6 -31
- schemathesis/generation/case.py +5 -3
- schemathesis/generation/coverage.py +153 -123
- schemathesis/generation/hypothesis/builder.py +40 -14
- schemathesis/generation/meta.py +3 -3
- schemathesis/generation/overrides.py +37 -1
- schemathesis/generation/stateful/state_machine.py +8 -1
- schemathesis/graphql/loaders.py +21 -12
- schemathesis/openapi/checks.py +12 -8
- schemathesis/openapi/generation/filters.py +10 -8
- schemathesis/openapi/loaders.py +22 -13
- schemathesis/pytest/lazy.py +2 -5
- schemathesis/pytest/plugin.py +11 -2
- schemathesis/schemas.py +13 -61
- schemathesis/specs/graphql/schemas.py +11 -15
- schemathesis/specs/openapi/_hypothesis.py +12 -8
- schemathesis/specs/openapi/checks.py +16 -18
- schemathesis/specs/openapi/examples.py +4 -3
- schemathesis/specs/openapi/formats.py +2 -2
- schemathesis/specs/openapi/negative/__init__.py +2 -2
- schemathesis/specs/openapi/patterns.py +46 -16
- schemathesis/specs/openapi/references.py +2 -3
- schemathesis/specs/openapi/schemas.py +11 -20
- schemathesis/specs/openapi/stateful/__init__.py +10 -5
- schemathesis/transport/prepare.py +7 -6
- schemathesis/transport/requests.py +3 -1
- schemathesis/transport/wsgi.py +3 -4
- {schemathesis-4.0.0a10.dist-info → schemathesis-4.0.0a11.dist-info}/METADATA +7 -8
- schemathesis-4.0.0a11.dist-info/RECORD +166 -0
- schemathesis/cli/commands/run/checks.py +0 -79
- schemathesis/cli/commands/run/hypothesis.py +0 -78
- schemathesis/cli/commands/run/reports.py +0 -72
- schemathesis/cli/hooks.py +0 -36
- schemathesis/engine/config.py +0 -59
- schemathesis/experimental/__init__.py +0 -72
- schemathesis-4.0.0a10.dist-info/RECORD +0 -153
- {schemathesis-4.0.0a10.dist-info → schemathesis-4.0.0a11.dist-info}/WHEEL +0 -0
- {schemathesis-4.0.0a10.dist-info → schemathesis-4.0.0a11.dist-info}/entry_points.txt +0 -0
- {schemathesis-4.0.0a10.dist-info → schemathesis-4.0.0a11.dist-info}/licenses/LICENSE +0 -0
@@ -43,7 +43,7 @@ from schemathesis.generation.overrides import Override, OverrideMark, check_no_o
|
|
43
43
|
from schemathesis.openapi.checks import JsonSchemaError, MissingContentType
|
44
44
|
from schemathesis.specs.openapi.stateful import links
|
45
45
|
|
46
|
-
from ...generation import
|
46
|
+
from ...generation import GenerationMode
|
47
47
|
from ...hooks import HookContext, HookDispatcher
|
48
48
|
from ...schemas import APIOperation, APIOperationMap, ApiStatistic, BaseSchema, OperationDefinition
|
49
49
|
from . import serialization
|
@@ -292,9 +292,7 @@ class BaseOpenAPISchema(BaseSchema):
|
|
292
292
|
parameters = operation.get("parameters", ())
|
293
293
|
return self.collect_parameters(itertools.chain(parameters, shared_parameters), operation)
|
294
294
|
|
295
|
-
def get_all_operations(
|
296
|
-
self, generation_config: GenerationConfig | None = None
|
297
|
-
) -> Generator[Result[APIOperation, InvalidSchema], None, None]:
|
295
|
+
def get_all_operations(self) -> Generator[Result[APIOperation, InvalidSchema], None, None]:
|
298
296
|
"""Iterate over all operations defined in the API.
|
299
297
|
|
300
298
|
Each yielded item is either `Ok` or `Err`, depending on the presence of errors during schema processing.
|
@@ -352,9 +350,6 @@ class BaseOpenAPISchema(BaseSchema):
|
|
352
350
|
entry,
|
353
351
|
resolved,
|
354
352
|
scope,
|
355
|
-
with_security_parameters=generation_config.with_security_parameters
|
356
|
-
if generation_config
|
357
|
-
else None,
|
358
353
|
)
|
359
354
|
yield Ok(operation)
|
360
355
|
except SCHEMA_PARSING_ERRORS as exc:
|
@@ -381,7 +376,9 @@ class BaseOpenAPISchema(BaseSchema):
|
|
381
376
|
try:
|
382
377
|
self.validate()
|
383
378
|
except jsonschema.ValidationError as exc:
|
384
|
-
raise InvalidSchema.from_jsonschema_error(
|
379
|
+
raise InvalidSchema.from_jsonschema_error(
|
380
|
+
exc, path=path, method=method, config=self.config.output
|
381
|
+
) from None
|
385
382
|
raise InvalidSchema(SCHEMA_ERROR_MESSAGE, path=path, method=method) from error
|
386
383
|
|
387
384
|
def validate(self) -> None:
|
@@ -417,7 +414,6 @@ class BaseOpenAPISchema(BaseSchema):
|
|
417
414
|
raw: dict[str, Any],
|
418
415
|
resolved: dict[str, Any],
|
419
416
|
scope: str,
|
420
|
-
with_security_parameters: bool | None = None,
|
421
417
|
) -> APIOperation:
|
422
418
|
"""Create JSON schemas for the query, body, etc from Swagger parameters definitions."""
|
423
419
|
__tracebackhide__ = True
|
@@ -432,12 +428,8 @@ class BaseOpenAPISchema(BaseSchema):
|
|
432
428
|
)
|
433
429
|
for parameter in parameters:
|
434
430
|
operation.add_parameter(parameter)
|
435
|
-
|
436
|
-
|
437
|
-
if with_security_parameters is not None
|
438
|
-
else self.generation_config.with_security_parameters
|
439
|
-
)
|
440
|
-
if with_security_parameters:
|
431
|
+
config = self.config.generation_for(operation=operation)
|
432
|
+
if config.with_security_parameters:
|
441
433
|
self.security.process_definitions(self.raw_schema, operation, self.resolver)
|
442
434
|
self.dispatch_hook("before_init_operation", HookContext(operation=operation), operation)
|
443
435
|
return operation
|
@@ -545,21 +537,20 @@ class BaseOpenAPISchema(BaseSchema):
|
|
545
537
|
hooks: HookDispatcher | None = None,
|
546
538
|
auth_storage: AuthStorage | None = None,
|
547
539
|
generation_mode: GenerationMode = GenerationMode.default(),
|
548
|
-
generation_config: GenerationConfig | None = None,
|
549
540
|
**kwargs: Any,
|
550
541
|
) -> SearchStrategy:
|
551
542
|
return openapi_cases(
|
552
543
|
operation=operation,
|
553
|
-
auth_storage=auth_storage,
|
554
544
|
hooks=hooks,
|
545
|
+
auth_storage=auth_storage,
|
555
546
|
generation_mode=generation_mode,
|
556
|
-
generation_config=generation_config or self.generation_config,
|
557
547
|
**kwargs,
|
558
548
|
)
|
559
549
|
|
560
550
|
def get_parameter_serializer(self, operation: APIOperation, location: str) -> Callable | None:
|
561
551
|
definitions = [item.definition for item in operation.iter_parameters() if item.location == location]
|
562
|
-
|
552
|
+
config = self.config.generation_for(operation=operation)
|
553
|
+
if config.with_security_parameters:
|
563
554
|
security_parameters = self.security.get_security_definitions_as_parameters(
|
564
555
|
self.raw_schema, operation, self.resolver, location
|
565
556
|
)
|
@@ -713,7 +704,7 @@ class BaseOpenAPISchema(BaseSchema):
|
|
713
704
|
JsonSchemaError.from_exception(
|
714
705
|
operation=operation.label,
|
715
706
|
exc=exc,
|
716
|
-
|
707
|
+
config=operation.schema.config.output,
|
717
708
|
)
|
718
709
|
)
|
719
710
|
_maybe_raise_one_or_more(failures)
|
@@ -162,22 +162,25 @@ def create_state_machine(schema: BaseOpenAPISchema) -> type[APIStateMachine]:
|
|
162
162
|
f"{link.source.label} -> {link.status_code} -> {link.name} -> {target.label}"
|
163
163
|
)
|
164
164
|
assert name not in rules, name
|
165
|
+
config = schema.config.generation_for(operation=target, phase="stateful")
|
165
166
|
rules[name] = precondition(is_transition_allowed(bundle_name, link.source.label, target.label))(
|
166
167
|
transition(
|
167
168
|
name=name,
|
168
169
|
target=catch_all,
|
169
170
|
input=bundles[bundle_name].flatmap(
|
170
|
-
into_step_input(target=target, link=link, modes=
|
171
|
+
into_step_input(target=target, link=link, modes=config.modes)
|
171
172
|
),
|
172
173
|
)
|
173
174
|
)
|
174
175
|
if target.label in roots.reliable or (not roots.reliable and target.label in roots.fallback):
|
175
176
|
name = _normalize_name(f"RANDOM -> {target.label}")
|
176
|
-
|
177
|
-
|
177
|
+
config = schema.config.generation_for(operation=target, phase="stateful")
|
178
|
+
if len(config.modes) == 1:
|
179
|
+
case_strategy = target.as_strategy(generation_mode=config.modes[0], __is_stateful_phase=True)
|
178
180
|
else:
|
179
181
|
_strategies = {
|
180
|
-
method: target.as_strategy(generation_mode=method)
|
182
|
+
method: target.as_strategy(generation_mode=method, __is_stateful_phase=True)
|
183
|
+
for method in config.modes
|
181
184
|
}
|
182
185
|
|
183
186
|
@st.composite # type: ignore[misc]
|
@@ -262,7 +265,9 @@ def into_step_input(
|
|
262
265
|
and not link.merge_body
|
263
266
|
):
|
264
267
|
kwargs["body"] = transition.request_body.value.ok()
|
265
|
-
cases = strategies.combine(
|
268
|
+
cases = strategies.combine(
|
269
|
+
[target.as_strategy(generation_mode=mode, __is_stateful_phase=True, **kwargs) for mode in modes]
|
270
|
+
)
|
266
271
|
case = draw(cases)
|
267
272
|
if (
|
268
273
|
transition.request_body is not None
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
3
3
|
from typing import TYPE_CHECKING, Any, Mapping, cast
|
4
4
|
from urllib.parse import quote, unquote, urljoin, urlsplit, urlunsplit
|
5
5
|
|
6
|
+
from schemathesis.config import SanitizationConfig
|
6
7
|
from schemathesis.core import SCHEMATHESIS_TEST_CASE_HEADER, NotSet
|
7
8
|
from schemathesis.core.errors import InvalidSchema
|
8
9
|
from schemathesis.core.output.sanitization import sanitize_url, sanitize_value
|
@@ -81,19 +82,19 @@ def prepare_path(path: str, parameters: dict[str, Any] | None) -> str:
|
|
81
82
|
raise InvalidSchema(f"Malformed path template: `{path}`\n\n {exc}") from exc
|
82
83
|
|
83
84
|
|
84
|
-
def prepare_request(case: Case, headers: Mapping[str, Any] | None,
|
85
|
+
def prepare_request(case: Case, headers: Mapping[str, Any] | None, *, config: SanitizationConfig) -> PreparedRequest:
|
85
86
|
import requests
|
86
87
|
|
87
88
|
from schemathesis.transport.requests import REQUESTS_TRANSPORT
|
88
89
|
|
89
90
|
base_url = normalize_base_url(case.operation.base_url)
|
90
91
|
kwargs = REQUESTS_TRANSPORT.serialize_case(case, base_url=base_url, headers=headers)
|
91
|
-
if
|
92
|
-
kwargs["url"] = sanitize_url(kwargs["url"])
|
93
|
-
sanitize_value(kwargs["headers"])
|
92
|
+
if config.enabled:
|
93
|
+
kwargs["url"] = sanitize_url(kwargs["url"], config=config)
|
94
|
+
sanitize_value(kwargs["headers"], config=config)
|
94
95
|
if kwargs["cookies"]:
|
95
|
-
sanitize_value(kwargs["cookies"])
|
96
|
+
sanitize_value(kwargs["cookies"], config=config)
|
96
97
|
if kwargs["params"]:
|
97
|
-
sanitize_value(kwargs["params"])
|
98
|
+
sanitize_value(kwargs["params"], config=config)
|
98
99
|
|
99
100
|
return requests.Request(**kwargs).prepare()
|
@@ -99,7 +99,9 @@ class RequestsTransport(BaseTransport["Case", Response, "requests.Session"]):
|
|
99
99
|
verify = data.get("verify", True)
|
100
100
|
|
101
101
|
try:
|
102
|
-
|
102
|
+
config = case.operation.schema.config
|
103
|
+
rate_limit = config.rate_limit_for(operation=case.operation)
|
104
|
+
with ratelimit(rate_limit, config.base_url):
|
103
105
|
response = session.request(**data) # type: ignore
|
104
106
|
return Response.from_requests(response, verify=verify)
|
105
107
|
finally:
|
schemathesis/transport/wsgi.py
CHANGED
@@ -75,10 +75,9 @@ class WSGITransport(BaseTransport["Case", Response, "werkzeug.Client"]):
|
|
75
75
|
client = session or wsgi.get_client(application)
|
76
76
|
cookies = {**(case.cookies or {}), **(cookies or {})}
|
77
77
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
):
|
78
|
+
config = case.operation.schema.config
|
79
|
+
rate_limit = config.rate_limit_for(operation=case.operation)
|
80
|
+
with cookie_handler(client, cookies), ratelimit(rate_limit, config.base_url):
|
82
81
|
start = time.monotonic()
|
83
82
|
response = client.open(**data)
|
84
83
|
elapsed = time.monotonic() - start
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: schemathesis
|
3
|
-
Version: 4.0.
|
3
|
+
Version: 4.0.0a11
|
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
|
@@ -29,7 +29,7 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
29
29
|
Classifier: Topic :: Software Development :: Testing
|
30
30
|
Requires-Python: >=3.9
|
31
31
|
Requires-Dist: backoff<3.0,>=2.1.2
|
32
|
-
Requires-Dist: click<9
|
32
|
+
Requires-Dist: click<9,>=8.0
|
33
33
|
Requires-Dist: colorama<1.0,>=0.4
|
34
34
|
Requires-Dist: harfile<1.0,>=0.3.0
|
35
35
|
Requires-Dist: httpx<1.0,>=0.22.0
|
@@ -45,6 +45,7 @@ Requires-Dist: pyyaml<7.0,>=5.1
|
|
45
45
|
Requires-Dist: requests<3,>=2.22
|
46
46
|
Requires-Dist: rich>=13.9.4
|
47
47
|
Requires-Dist: starlette-testclient<1,>=0.4.1
|
48
|
+
Requires-Dist: tomli>=2.2.1
|
48
49
|
Requires-Dist: typing-extensions>=4.12.2
|
49
50
|
Requires-Dist: werkzeug<4,>=0.16.0
|
50
51
|
Provides-Extra: bench
|
@@ -60,6 +61,7 @@ Requires-Dist: coverage[toml]>=5.3; extra == 'dev'
|
|
60
61
|
Requires-Dist: fastapi>=0.86.0; extra == 'dev'
|
61
62
|
Requires-Dist: flask<3.0,>=2.1.1; extra == 'dev'
|
62
63
|
Requires-Dist: hypothesis-openapi<1,>=0.2; (python_version >= '3.10') and extra == 'dev'
|
64
|
+
Requires-Dist: mkdocs-material; extra == 'dev'
|
63
65
|
Requires-Dist: pydantic>=1.10.2; extra == 'dev'
|
64
66
|
Requires-Dist: pytest-asyncio<1.0,>=0.18.0; extra == 'dev'
|
65
67
|
Requires-Dist: pytest-codspeed==2.2.1; extra == 'dev'
|
@@ -67,16 +69,12 @@ Requires-Dist: pytest-httpserver<2.0,>=1.0; extra == 'dev'
|
|
67
69
|
Requires-Dist: pytest-mock<4.0,>=3.7.0; extra == 'dev'
|
68
70
|
Requires-Dist: pytest-trio<1.0,>=0.8; extra == 'dev'
|
69
71
|
Requires-Dist: pytest-xdist<4.0,>=3; extra == 'dev'
|
70
|
-
Requires-Dist: sphinx; extra == 'dev'
|
71
|
-
Requires-Dist: sphinx-click; extra == 'dev'
|
72
|
-
Requires-Dist: sphinx-rtd-theme; extra == 'dev'
|
73
72
|
Requires-Dist: strawberry-graphql[fastapi]>=0.109.0; extra == 'dev'
|
74
73
|
Requires-Dist: syrupy<5.0,>=2; extra == 'dev'
|
74
|
+
Requires-Dist: tomli-w>=1.2.0; extra == 'dev'
|
75
75
|
Requires-Dist: trustme<1.0,>=0.9.0; extra == 'dev'
|
76
76
|
Provides-Extra: docs
|
77
|
-
Requires-Dist:
|
78
|
-
Requires-Dist: sphinx-click; extra == 'docs'
|
79
|
-
Requires-Dist: sphinx-rtd-theme; extra == 'docs'
|
77
|
+
Requires-Dist: mkdocs-material; extra == 'docs'
|
80
78
|
Provides-Extra: tests
|
81
79
|
Requires-Dist: aiohttp<4.0,>=3.9.1; extra == 'tests'
|
82
80
|
Requires-Dist: coverage>=6; extra == 'tests'
|
@@ -91,6 +89,7 @@ Requires-Dist: pytest-trio<1.0,>=0.8; extra == 'tests'
|
|
91
89
|
Requires-Dist: pytest-xdist<4.0,>=3; extra == 'tests'
|
92
90
|
Requires-Dist: strawberry-graphql[fastapi]>=0.109.0; extra == 'tests'
|
93
91
|
Requires-Dist: syrupy<5.0,>=2; extra == 'tests'
|
92
|
+
Requires-Dist: tomli-w>=1.2.0; extra == 'tests'
|
94
93
|
Requires-Dist: trustme<1.0,>=0.9.0; extra == 'tests'
|
95
94
|
Description-Content-Type: text/markdown
|
96
95
|
|
@@ -0,0 +1,166 @@
|
|
1
|
+
schemathesis/__init__.py,sha256=IznSJx_si-x3bBolTLGcq_NakcVoeMCtE11ctKuz9uE,1119
|
2
|
+
schemathesis/auths.py,sha256=t-YuPyoLqL7jlRUH-45JxO7Ir3pYxpe31CRmNIJh7rI,15423
|
3
|
+
schemathesis/checks.py,sha256=bNrebGDOryn2SmXcgMUVWhItCmGgiGSq54JMNvGiZjE,5421
|
4
|
+
schemathesis/errors.py,sha256=T8nobEi5tQX_SkwaYb8JFoIlF9F_vOQVprZ8EVPAhjA,931
|
5
|
+
schemathesis/filters.py,sha256=OEub50Ob5sf0Tn3iTeuIaxSMtepF7KVoiEM9wtt5GGA,13433
|
6
|
+
schemathesis/hooks.py,sha256=ZSGEnsLJ7UVezf4CcaJebVkjEpvwgJolJFZo5fjQNDc,13153
|
7
|
+
schemathesis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
|
+
schemathesis/schemas.py,sha256=KyYuL04FAPEkc6mN53NioDEUgn7rmTDkvv5Q2_PGgoY,25824
|
9
|
+
schemathesis/cli/__init__.py,sha256=U9gjzWWpiFhaqevPjZbwyTNjABdpvXETI4HgwdGKnvs,877
|
10
|
+
schemathesis/cli/__main__.py,sha256=MWaenjaUTZIfNPFzKmnkTiawUri7DVldtg3mirLwzU8,92
|
11
|
+
schemathesis/cli/constants.py,sha256=rUixnqorraUFDtOu3Nmm1x_k0qbgmW9xW96kQB_fBCQ,338
|
12
|
+
schemathesis/cli/core.py,sha256=ue7YUdVo3YvuzGL4s6i62NL6YqNDeVPBSnQ1znrvG2w,480
|
13
|
+
schemathesis/cli/commands/__init__.py,sha256=rubTCCRGuMIbNYOl8yQEioiuHtTq__tWjkUtFWYGhqQ,3433
|
14
|
+
schemathesis/cli/commands/data.py,sha256=_ALywjIeCZjuaoDQFy-Kj8RZkEGqXd-Y95O47h8Jszs,171
|
15
|
+
schemathesis/cli/commands/run/__init__.py,sha256=wOrs_7aj-6nYBuuVnMTJ24u2s7C9_hsMwYYes0l5A-k,18818
|
16
|
+
schemathesis/cli/commands/run/context.py,sha256=15jijsCgwFZYLfWbeQZJ9lWD0b3Jp3NfWTURzh6Uyuc,7663
|
17
|
+
schemathesis/cli/commands/run/events.py,sha256=CuS5iZ5IoYl7d9ytvNmW73WEjjQ3SriEm1O9as8O2wU,1348
|
18
|
+
schemathesis/cli/commands/run/executor.py,sha256=x4vfwP3B5OUhx9fiZMH3shjDmTkXZUcRAm3by613_lY,5132
|
19
|
+
schemathesis/cli/commands/run/filters.py,sha256=pzkNRcf5vLPSsMfnvt711GNzRSBK5iZIFjPA0fiH1N4,1701
|
20
|
+
schemathesis/cli/commands/run/loaders.py,sha256=6j0ez7wduAUYbUT28ELKxMf-dYEWr_67m_KIuTSyNGk,4358
|
21
|
+
schemathesis/cli/commands/run/validation.py,sha256=xiDFkR_9lwRVLJXL-0paVMK1Q2JNu1qreDjwf1hoiGA,8502
|
22
|
+
schemathesis/cli/commands/run/handlers/__init__.py,sha256=TPZ3KdGi8m0fjlN0GjA31MAXXn1qI7uU4FtiDwroXZI,1915
|
23
|
+
schemathesis/cli/commands/run/handlers/base.py,sha256=yDsTtCiztLksfk7cRzg8JlaAVOfS-zwK3tsJMOXAFyc,530
|
24
|
+
schemathesis/cli/commands/run/handlers/cassettes.py,sha256=Gu0qcxzvHp1zMY-SVkY96T-Ifwtdh6oj-w0gE1MShnA,19157
|
25
|
+
schemathesis/cli/commands/run/handlers/junitxml.py,sha256=FX_347PcHhGLG7XY3eG8VwhB_8tSX4mOtqjZj_s6yLM,2402
|
26
|
+
schemathesis/cli/commands/run/handlers/output.py,sha256=i0UGeKKVY4o1eiMzFtg3azXvCOOSj1FS4ZdScW4Nm5Y,58198
|
27
|
+
schemathesis/cli/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
|
+
schemathesis/cli/ext/fs.py,sha256=3lvoAsEDDdih75ITJJNxemd3nwxX55gGWrI7uDxm0cM,447
|
29
|
+
schemathesis/cli/ext/groups.py,sha256=kQ37t6qeArcKaY2y5VxyK3_KwAkBKCVm58IYV8gewds,2720
|
30
|
+
schemathesis/cli/ext/options.py,sha256=6yYwZNJL__FCEEL7kI3r5MbVmbp3ZeQjm7DrZ6J_h7s,3347
|
31
|
+
schemathesis/config/__init__.py,sha256=A7KvfcX_o2sWBXiO798vDUYVDSEQisI9-L84mLyYFZM,6192
|
32
|
+
schemathesis/config/_auth.py,sha256=83RLVPm97W2thbn-yi01Rt94YwOxLG_a5VoxhEfjUjs,1528
|
33
|
+
schemathesis/config/_checks.py,sha256=F0r16eSSiICvoiTUkNNOE2PH73EGd8bikoeZdME_3Yw,10763
|
34
|
+
schemathesis/config/_diff_base.py,sha256=-XqS6cTzZC5fplz8_2RSZHDMSAPJhBBIEP6H8wcgHmo,4221
|
35
|
+
schemathesis/config/_env.py,sha256=8XfIyrnGNQuCDnfG0lwmKRFbasRUjgeQGBAMupsmtOU,613
|
36
|
+
schemathesis/config/_error.py,sha256=TxuuqQ1olwJc7P7ssfxXb1dB_Xn5uVsoazjvYvRxrxA,5437
|
37
|
+
schemathesis/config/_generation.py,sha256=gHLv3wiMuGKg47gwtq6Y6xLCJBE-pceIAlu6Jg4Kmlk,5136
|
38
|
+
schemathesis/config/_health_check.py,sha256=zC9inla5ibMBlEy5WyM4_TME7ju_KH3Bwfo21RI3Gks,561
|
39
|
+
schemathesis/config/_operations.py,sha256=l1jQHQY18OGefFtvePNPmYhr7hLT0Re0fAUMY5VO2G4,11584
|
40
|
+
schemathesis/config/_output.py,sha256=3G9SOi-4oNcQPHeNRG3HggFCwvcKOW1kF28a9m0H-pU,4434
|
41
|
+
schemathesis/config/_parameters.py,sha256=i76Hwaf834fBAMmtKfKTl1SFCicJ-Y-5tZt5QNGW2fA,618
|
42
|
+
schemathesis/config/_phases.py,sha256=C-OLJNwkVIdp9w4Uw6qNTV2inQZdaT6UGkS7anHxUdg,5090
|
43
|
+
schemathesis/config/_projects.py,sha256=U78ZixEIlWIFBXGHgMXrkKRNeol2PkOrHrSFRDvTIlk,18147
|
44
|
+
schemathesis/config/_rate_limit.py,sha256=ekEW-jP_Ichk_O6hYpj-h2TTTKfp7Fm0nyFUbvlWcbA,456
|
45
|
+
schemathesis/config/_report.py,sha256=FAmmOndCuXju2Eat5DX1lBMobIHWLNSGyJBb7Q32bLk,3739
|
46
|
+
schemathesis/config/_validator.py,sha256=IcE8geFZ0ZwR18rkIRs25i7pTl7Z84XbjYGUB-mqReU,258
|
47
|
+
schemathesis/config/schema.json,sha256=dJSUxWvrME5JoknxBgkOBtWKZgkgYy-I9RCWIDQRkFE,17843
|
48
|
+
schemathesis/contrib/__init__.py,sha256=wxpX86xrEGRAS3f7eugQfKVbnqV6ZfOqFBS_DmWxOok,120
|
49
|
+
schemathesis/contrib/openapi/__init__.py,sha256=-7mBZ9RQj0EGzzmC-HKiT5ZslwHcoWFqCVpRG0GHO_o,162
|
50
|
+
schemathesis/contrib/openapi/fill_missing_examples.py,sha256=BfBpuy3vCKbE_uILqPXnm7kxEDopAr5tNQwP5E9xX8A,585
|
51
|
+
schemathesis/core/__init__.py,sha256=5fAAKG6BAA5DP9qOUnMT1cG5LLN3tU7D7VdLyb-MxfM,1880
|
52
|
+
schemathesis/core/compat.py,sha256=9BWCrFoqN2sJIaiht_anxe8kLjYMR7t0iiOkXqLRUZ8,1058
|
53
|
+
schemathesis/core/control.py,sha256=IzwIc8HIAEMtZWW0Q0iXI7T1niBpjvcLlbuwOSmy5O8,130
|
54
|
+
schemathesis/core/curl.py,sha256=yuaCe_zHLGwUjEeloQi6W3tOA3cGdnHDNI17-5jia0o,1723
|
55
|
+
schemathesis/core/deserialization.py,sha256=ygIj4fNaOd0mJ2IvTsn6bsabBt_2AbSLCz-z9UqfpdQ,2406
|
56
|
+
schemathesis/core/errors.py,sha256=HbQJyxJbW0-GfhYvm-6nK20f4hiqsdDGEOy--agdvHE,16319
|
57
|
+
schemathesis/core/failures.py,sha256=MYyRnom-XeUEuBmq2ffdz34xhxmpSHWaQunfHtliVsY,8932
|
58
|
+
schemathesis/core/fs.py,sha256=ItQT0_cVwjDdJX9IiI7EnU75NI2H3_DCEyyUjzg_BgI,472
|
59
|
+
schemathesis/core/hooks.py,sha256=qhbkkRSf8URJ4LKv2wmKRINKpquUOgxQzWBHKWRWo3Q,475
|
60
|
+
schemathesis/core/lazy_import.py,sha256=aMhWYgbU2JOltyWBb32vnWBb6kykOghucEzI_F70yVE,470
|
61
|
+
schemathesis/core/loaders.py,sha256=SQQ-8m64-D2FaOgvwKZLyTtLJuzP3RPo7Ud2BERK1c0,3404
|
62
|
+
schemathesis/core/marks.py,sha256=SH7jsVuNRJjx2gZN9Ze5MY01u7FJiHeO0iruzKi5rm4,2135
|
63
|
+
schemathesis/core/media_types.py,sha256=vV0CEu34sDoZWXvu4R1Y1HosxVS4YXZV8iTov8fU3X0,2148
|
64
|
+
schemathesis/core/rate_limit.py,sha256=7tg9Znk11erTfw8-ANutjEmu7hbfUHZx_iEdkoaP174,1757
|
65
|
+
schemathesis/core/registries.py,sha256=T4jZB4y3zBHdeSgQc0pRbgSeMblvO-6z4I3zmzIfTi0,811
|
66
|
+
schemathesis/core/result.py,sha256=d449YvyONjqjDs-A5DAPgtAI96iT753K8sU6_1HLo2Q,461
|
67
|
+
schemathesis/core/transforms.py,sha256=63aeLkR93r3krq4CwYtDcoS_pFBky4L16c9DcFsBHuE,3535
|
68
|
+
schemathesis/core/transport.py,sha256=VqtVF4JxMuPXSBORzS8SOSLUnCEZL6gPOr0kuymMCAk,3249
|
69
|
+
schemathesis/core/validation.py,sha256=rnhzsqWukMWyrc7sRm0kZNHTePoPCQ3A4kLpLxrb0jM,1641
|
70
|
+
schemathesis/core/version.py,sha256=O-6yFbNocbD4RDwiBZLborxTp54htyKxBWTqpZDnPvg,202
|
71
|
+
schemathesis/core/output/__init__.py,sha256=SiHqONFskXl73AtP5dV29L14nZoKo7B-IeG52KZB32M,1446
|
72
|
+
schemathesis/core/output/sanitization.py,sha256=Ev3tae8dVwsYd7yVb2_1VBFYs92WFsQ4Eu1fGaymItE,2013
|
73
|
+
schemathesis/engine/__init__.py,sha256=QaFE-FinaTAaarteADo2RRMJ-Sz6hZB9TzD5KjMinIA,706
|
74
|
+
schemathesis/engine/context.py,sha256=1m6KiD2M9_fVRiUnYxFw2csUQeZV0N4FepR7w_DZCHA,3902
|
75
|
+
schemathesis/engine/control.py,sha256=QKUOs5VMphe7EcAIro_DDo9ZqdOU6ZVwTU1gMNndHWw,1006
|
76
|
+
schemathesis/engine/core.py,sha256=Pnpf1zNTxruUOnnJ9rQ-MskXj4WuA4A27_fWrf0hXWc,5609
|
77
|
+
schemathesis/engine/errors.py,sha256=8PHYsuq2qIEJHm2FDf_UnWa4IDc-DRFTPckLAr22yhE,16895
|
78
|
+
schemathesis/engine/events.py,sha256=gslRAWQKMPqBCQzLDS4wAbsKcVuONSy5SPqimJJJYT4,6250
|
79
|
+
schemathesis/engine/recorder.py,sha256=K3HfMARrT5mPWXPnYebjjcq5CcsBRhMrtZwEL9_Lvtg,8432
|
80
|
+
schemathesis/engine/phases/__init__.py,sha256=zzILnWjoDJQwNmvEmrj3HXVAKT2q7Vb614svjyt8E-U,2794
|
81
|
+
schemathesis/engine/phases/probes.py,sha256=MgjH3yLw0siiSnaESzDVww70Uz4dAyJ2W22H1Ome03Q,4964
|
82
|
+
schemathesis/engine/phases/stateful/__init__.py,sha256=lWo2RLrutNblHvohTzofQqL22GORwBRA8bf6jvLuGPg,2391
|
83
|
+
schemathesis/engine/phases/stateful/_executor.py,sha256=3_UV5r2O_nx4UCAF-m0xo_pdrvPwdZ_g_qQDr7JhTXE,13624
|
84
|
+
schemathesis/engine/phases/stateful/context.py,sha256=SKWsok-tlWbUDagiUmP7cLNW6DsgFDc_Afv0vQfWv6c,2964
|
85
|
+
schemathesis/engine/phases/unit/__init__.py,sha256=BvZh39LZmXg90Cy_Tn0cQY5y7eWzYvAEmJ43fGKFAt8,8715
|
86
|
+
schemathesis/engine/phases/unit/_executor.py,sha256=GE_uFbaaF7SuwL3K7HjSoDf5P3PFc7B1inhMhB3QRcE,14939
|
87
|
+
schemathesis/engine/phases/unit/_pool.py,sha256=iU0hdHDmohPnEv7_S1emcabuzbTf-Cznqwn0pGQ5wNQ,2480
|
88
|
+
schemathesis/generation/__init__.py,sha256=QA2BiS4nk9VmcBn8_Ad6vaIbj6B9ToigLHLVn-DjCwM,700
|
89
|
+
schemathesis/generation/case.py,sha256=dca80qoI4JZot84I7eqpxE_yWbNQ-iwKG6pXTIhxKP0,7486
|
90
|
+
schemathesis/generation/coverage.py,sha256=ISXKXTdfYLpdo6bOIW3--AiwWVWnwfOwKb1KQZ7AEM8,47913
|
91
|
+
schemathesis/generation/meta.py,sha256=5ikrlhdk424dWcYLekZSMoWJYRl9_IhI80GKZzhByi4,2512
|
92
|
+
schemathesis/generation/modes.py,sha256=t_EvKr2aOXYMsEfdMu4lLF4KCGcX1LVVyvzTkcpJqhk,663
|
93
|
+
schemathesis/generation/overrides.py,sha256=iPxnxPIKKhO9mwPwKszYv40VM4ylxFJvhzWvrC6qkOE,4385
|
94
|
+
schemathesis/generation/targets.py,sha256=_rN2qgxTE2EfvygiN-Fy3WmDnRH0ERohdx3sKRDaYhU,2120
|
95
|
+
schemathesis/generation/hypothesis/__init__.py,sha256=SVwM-rx07jPZzms0idWYACgUtWAxh49HRuTnaQ__zf0,1549
|
96
|
+
schemathesis/generation/hypothesis/builder.py,sha256=PYJaBbXMAPpM_9WkUmStQKoxQ67tWyJYybt6y4Izjg0,31487
|
97
|
+
schemathesis/generation/hypothesis/examples.py,sha256=6eGaKUEC3elmKsaqfKj1sLvM8EHc-PWT4NRBq4NI0Rs,1409
|
98
|
+
schemathesis/generation/hypothesis/given.py,sha256=sTZR1of6XaHAPWtHx2_WLlZ50M8D5Rjux0GmWkWjDq4,2337
|
99
|
+
schemathesis/generation/hypothesis/reporting.py,sha256=uDVow6Ya8YFkqQuOqRsjbzsbyP4KKfr3jA7ZaY4FuKY,279
|
100
|
+
schemathesis/generation/hypothesis/strategies.py,sha256=RurE81E06d99YKG48dizy9346ayfNswYTt38zewmGgw,483
|
101
|
+
schemathesis/generation/stateful/__init__.py,sha256=kXpCGbo1-QqfR2N0Z07tLw0Z5_tvbuG3Tk-WI_I1doI,653
|
102
|
+
schemathesis/generation/stateful/state_machine.py,sha256=h79_G8oUOU8TVJFFF6EKbrW8KPuz6E8gc7us0TC2lrA,12656
|
103
|
+
schemathesis/graphql/__init__.py,sha256=_eO6MAPHGgiADVGRntnwtPxmuvk666sAh-FAU4cG9-0,326
|
104
|
+
schemathesis/graphql/checks.py,sha256=IADbxiZjgkBWrC5yzHDtohRABX6zKXk5w_zpWNwdzYo,3186
|
105
|
+
schemathesis/graphql/loaders.py,sha256=bBXWLbwyF31nQILSVldysP1IEMrYle-j71n8nx1TZAE,5301
|
106
|
+
schemathesis/openapi/__init__.py,sha256=-KcsSAM19uOM0N5J4s-yTnQ1BFsptYhW1E51cEf6kVM,311
|
107
|
+
schemathesis/openapi/checks.py,sha256=5AP_pjTIJ7GcHNhTtGz-IOeoutZ4HqkxyoANrRKf23M,10825
|
108
|
+
schemathesis/openapi/loaders.py,sha256=18vdQZGUtwvHUrHZYRmKDoLzuNA5kBx3YdSTKEfuSzQ,7062
|
109
|
+
schemathesis/openapi/generation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
110
|
+
schemathesis/openapi/generation/filters.py,sha256=EBbgW9zH3wA4d9FyBWp4koiPrrIpNGFnousBDl9qJso,2079
|
111
|
+
schemathesis/pytest/__init__.py,sha256=7W0q-Thcw03IAQfXE_Mo8JPZpUdHJzfu85fjK1ZdfQM,88
|
112
|
+
schemathesis/pytest/control_flow.py,sha256=F8rAPsPeNv_sJiJgbZYtTpwKWjauZmqFUaKroY2GmQI,217
|
113
|
+
schemathesis/pytest/lazy.py,sha256=Wbyn3fYqcmDL7uOFO0PgVpR7--MP8g3Z8q1yArjmDEo,11824
|
114
|
+
schemathesis/pytest/loaders.py,sha256=oQJ78yyuIm3Ye9X7giVjDB1vYfaW5UY5YuhaTLm_ZFU,266
|
115
|
+
schemathesis/pytest/plugin.py,sha256=j8L3JV1ijf9dYpoLTDNJpdFnS2fbsYM3Gzv-3r2nk60,12454
|
116
|
+
schemathesis/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
117
|
+
schemathesis/python/asgi.py,sha256=5PyvuTBaivvyPUEi3pwJni91K1kX5Zc0u9c6c1D8a1Q,287
|
118
|
+
schemathesis/python/wsgi.py,sha256=uShAgo_NChbfYaV1117e6UHp0MTg7jaR0Sy_to3Jmf8,219
|
119
|
+
schemathesis/specs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
120
|
+
schemathesis/specs/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
121
|
+
schemathesis/specs/graphql/_cache.py,sha256=QIcEFy2Koy5K0-u1nB-iab52LDlYsTm_9N5t42GplkM,770
|
122
|
+
schemathesis/specs/graphql/nodes.py,sha256=bE3G1kNmqJ8OV4igBvIK-UORrkQA6Nofduf87O3TD9I,541
|
123
|
+
schemathesis/specs/graphql/scalars.py,sha256=ERUECtwWuEe4_T_fpM6DQJKLrkvahbnaswM7oEOcC0M,1850
|
124
|
+
schemathesis/specs/graphql/schemas.py,sha256=EjvXLjti2w11AJF5Hi0m-AXVgtMXw4Z1BoCW1OQfQfU,14168
|
125
|
+
schemathesis/specs/graphql/validation.py,sha256=-W1Noc1MQmTb4RX-gNXMeU2qkgso4mzVfHxtdLkCPKM,1422
|
126
|
+
schemathesis/specs/openapi/__init__.py,sha256=C5HOsfuDJGq_3mv8CRBvRvb0Diy1p0BFdqyEXMS-loE,238
|
127
|
+
schemathesis/specs/openapi/_cache.py,sha256=HpglmETmZU0RCHxp3DO_sg5_B_nzi54Zuw9vGzzYCxY,4295
|
128
|
+
schemathesis/specs/openapi/_hypothesis.py,sha256=gLQjVkYkR8Z_dw3HzHeAKDm08qdTZphPHlM0Jzu0xe4,21576
|
129
|
+
schemathesis/specs/openapi/checks.py,sha256=oEnogK5H8c_GEJrYe-2_crhDKiOijYFdspVUjtOW1So,27469
|
130
|
+
schemathesis/specs/openapi/constants.py,sha256=JqM_FHOenqS_MuUE9sxVQ8Hnw0DNM8cnKDwCwPLhID4,783
|
131
|
+
schemathesis/specs/openapi/converter.py,sha256=lil8IewM5j8tvt4lpA9g_KITvIwx1M96i45DNSHNjoc,3505
|
132
|
+
schemathesis/specs/openapi/definitions.py,sha256=8htclglV3fW6JPBqs59lgM4LnA25Mm9IptXBPb_qUT0,93949
|
133
|
+
schemathesis/specs/openapi/examples.py,sha256=9dMY4d2WWz32JywKZzyLO5jdbMWcRqjjGHzhMqlqwIs,21129
|
134
|
+
schemathesis/specs/openapi/formats.py,sha256=CbuFP_pegtIQfG0AH2gTl0KCCAI6y1a_z6hGvjeIa5A,2810
|
135
|
+
schemathesis/specs/openapi/media_types.py,sha256=ADedOaNWjbAtAekyaKmNj9fY6zBTeqcNqBEjN0EWNhI,1014
|
136
|
+
schemathesis/specs/openapi/parameters.py,sha256=tVL61gDe9A8_jwoVKZZvpXKPerMyq7vkAvwdMsi44TI,14622
|
137
|
+
schemathesis/specs/openapi/patterns.py,sha256=cBj8W4wn7VLJd4nABaIH5f502-zBDiqljxLgPWUn-50,15609
|
138
|
+
schemathesis/specs/openapi/references.py,sha256=40YcDExPLR2B8EOwt-Csw-5MYFi2xj_DXf91J0Pc9d4,8855
|
139
|
+
schemathesis/specs/openapi/schemas.py,sha256=bTa7LEod5Oaqc42TD4JwUDCDLDwB4PYtkU60hsY9IQE,54672
|
140
|
+
schemathesis/specs/openapi/security.py,sha256=6UWYMhL-dPtkTineqqBFNKca1i4EuoTduw-EOLeE0aQ,7149
|
141
|
+
schemathesis/specs/openapi/serialization.py,sha256=VdDLmeHqxlWM4cxQQcCkvrU6XurivolwEEaT13ohelA,11972
|
142
|
+
schemathesis/specs/openapi/utils.py,sha256=ER4vJkdFVDIE7aKyxyYatuuHVRNutytezgE52pqZNE8,900
|
143
|
+
schemathesis/specs/openapi/expressions/__init__.py,sha256=hfuRtXD75tQFhzSo6QgDZ3zByyWeZRKevB8edszAVj4,2272
|
144
|
+
schemathesis/specs/openapi/expressions/errors.py,sha256=YLVhps-sYcslgVaahfcUYxUSHlIfWL-rQMeT5PZSMZ8,219
|
145
|
+
schemathesis/specs/openapi/expressions/extractors.py,sha256=Py3of3_vBACP4ljiZIcgd-xQCrWIpcMsfQFc0EtAUoA,470
|
146
|
+
schemathesis/specs/openapi/expressions/lexer.py,sha256=KFA8Z-Kh1IYUpKgwAnDtEucN9YLLpnFR1GQl8KddWlA,3987
|
147
|
+
schemathesis/specs/openapi/expressions/nodes.py,sha256=63LC4mQHy3a0_tKiGIVWaUHu9L9IWilq6R004GLpjyY,4077
|
148
|
+
schemathesis/specs/openapi/expressions/parser.py,sha256=e-ZxshrGE_5CVbgcZLYgdGSjdifgyzgKkLQp0dI0cJY,4503
|
149
|
+
schemathesis/specs/openapi/negative/__init__.py,sha256=eKiBWsMYjcJ0mNmh07IOnbVMHZ8k-fCidcohwBz8yJ4,3741
|
150
|
+
schemathesis/specs/openapi/negative/mutations.py,sha256=MIFVSWbZHW92KhpWruJT3XLisgc-rFnvYasRtwMmExs,19253
|
151
|
+
schemathesis/specs/openapi/negative/types.py,sha256=a7buCcVxNBG6ILBM3A7oNTAX0lyDseEtZndBuej8MbI,174
|
152
|
+
schemathesis/specs/openapi/negative/utils.py,sha256=ozcOIuASufLqZSgnKUACjX-EOZrrkuNdXX0SDnLoGYA,168
|
153
|
+
schemathesis/specs/openapi/stateful/__init__.py,sha256=AZoc9lTb0P6zeVf8Yf4D5ZcVecz2E1osCeDpv3WS-sw,14994
|
154
|
+
schemathesis/specs/openapi/stateful/control.py,sha256=QaXLSbwQWtai5lxvvVtQV3BLJ8n5ePqSKB00XFxp-MA,3695
|
155
|
+
schemathesis/specs/openapi/stateful/links.py,sha256=8oHpmb-yBa3kZKoCv9ytndpOp80dG1vVis2-EpbkeVA,11432
|
156
|
+
schemathesis/transport/__init__.py,sha256=z-mRNSOlMBKwQyaEIhpmYv0plWTmK5dJqc9UmQOry80,3949
|
157
|
+
schemathesis/transport/asgi.py,sha256=qTClt6oT_xUEWnRHokACN_uqCNNUZrRPT6YG0PjbElY,926
|
158
|
+
schemathesis/transport/prepare.py,sha256=wBqKgDyrIxaH1HOP7hjb5ERoSh0WkCBDu7yCaAJQlEY,3958
|
159
|
+
schemathesis/transport/requests.py,sha256=zGpTJiDjeX-H6WOJHf13TMe9WSblGCcrVbSEekj8zMU,8831
|
160
|
+
schemathesis/transport/serialization.py,sha256=jIMra1LqRGav0OX3Hx7mvORt38ll4cd2DKit2D58FN0,10531
|
161
|
+
schemathesis/transport/wsgi.py,sha256=Eva8iTYGSmdqV7-1WSUXLe3Ysdr8vTijTwadM6ybPxE,5736
|
162
|
+
schemathesis-4.0.0a11.dist-info/METADATA,sha256=fWWqGEuqISnHZCYthJw9bMx3XmndCWScfSUSMugrpJc,10380
|
163
|
+
schemathesis-4.0.0a11.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
164
|
+
schemathesis-4.0.0a11.dist-info/entry_points.txt,sha256=hiK3un-xfgPdwj9uj16YVDtTNpO128bmk0U82SMv8ZQ,152
|
165
|
+
schemathesis-4.0.0a11.dist-info/licenses/LICENSE,sha256=2Ve4J8v5jMQAWrT7r1nf3bI8Vflk3rZVQefiF2zpxwg,1121
|
166
|
+
schemathesis-4.0.0a11.dist-info/RECORD,,
|
@@ -1,79 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
from dataclasses import dataclass
|
4
|
-
from typing import Sequence
|
5
|
-
|
6
|
-
from schemathesis import experimental
|
7
|
-
from schemathesis.checks import CHECKS, CheckFunction, ChecksConfig
|
8
|
-
|
9
|
-
|
10
|
-
@dataclass
|
11
|
-
class CheckArguments:
|
12
|
-
included_check_names: Sequence[str]
|
13
|
-
excluded_check_names: Sequence[str]
|
14
|
-
positive_data_acceptance_allowed_statuses: list[str] | None
|
15
|
-
missing_required_header_allowed_statuses: list[str] | None
|
16
|
-
negative_data_rejection_allowed_statuses: list[str] | None
|
17
|
-
max_response_time: float | None
|
18
|
-
|
19
|
-
__slots__ = (
|
20
|
-
"included_check_names",
|
21
|
-
"excluded_check_names",
|
22
|
-
"positive_data_acceptance_allowed_statuses",
|
23
|
-
"missing_required_header_allowed_statuses",
|
24
|
-
"negative_data_rejection_allowed_statuses",
|
25
|
-
"max_response_time",
|
26
|
-
)
|
27
|
-
|
28
|
-
def into(self) -> tuple[list[CheckFunction], ChecksConfig]:
|
29
|
-
# Determine selected checks
|
30
|
-
if "all" in self.included_check_names:
|
31
|
-
selected_checks = CHECKS.get_all()
|
32
|
-
else:
|
33
|
-
selected_checks = CHECKS.get_by_names(self.included_check_names or [])
|
34
|
-
|
35
|
-
# Prepare checks configuration
|
36
|
-
checks_config: ChecksConfig = {}
|
37
|
-
|
38
|
-
if experimental.POSITIVE_DATA_ACCEPTANCE.is_enabled:
|
39
|
-
from schemathesis.openapi.checks import PositiveDataAcceptanceConfig
|
40
|
-
from schemathesis.specs.openapi.checks import positive_data_acceptance
|
41
|
-
|
42
|
-
selected_checks.append(positive_data_acceptance)
|
43
|
-
if self.positive_data_acceptance_allowed_statuses:
|
44
|
-
checks_config[positive_data_acceptance] = PositiveDataAcceptanceConfig(
|
45
|
-
allowed_statuses=self.positive_data_acceptance_allowed_statuses
|
46
|
-
)
|
47
|
-
|
48
|
-
if self.missing_required_header_allowed_statuses:
|
49
|
-
from schemathesis.openapi.checks import MissingRequiredHeaderConfig
|
50
|
-
from schemathesis.specs.openapi.checks import missing_required_header
|
51
|
-
|
52
|
-
selected_checks.append(missing_required_header)
|
53
|
-
checks_config[missing_required_header] = MissingRequiredHeaderConfig(
|
54
|
-
allowed_statuses=self.missing_required_header_allowed_statuses
|
55
|
-
)
|
56
|
-
|
57
|
-
if self.negative_data_rejection_allowed_statuses:
|
58
|
-
from schemathesis.openapi.checks import NegativeDataRejectionConfig
|
59
|
-
from schemathesis.specs.openapi.checks import negative_data_rejection
|
60
|
-
|
61
|
-
checks_config[negative_data_rejection] = NegativeDataRejectionConfig(
|
62
|
-
allowed_statuses=self.negative_data_rejection_allowed_statuses
|
63
|
-
)
|
64
|
-
|
65
|
-
if self.max_response_time is not None:
|
66
|
-
from schemathesis.checks import max_response_time as _max_response_time
|
67
|
-
from schemathesis.core.failures import MaxResponseTimeConfig
|
68
|
-
|
69
|
-
checks_config[_max_response_time] = MaxResponseTimeConfig(self.max_response_time)
|
70
|
-
selected_checks.append(_max_response_time)
|
71
|
-
|
72
|
-
from schemathesis.specs.openapi.checks import unsupported_method
|
73
|
-
|
74
|
-
selected_checks.append(unsupported_method)
|
75
|
-
|
76
|
-
# Exclude checks based on their names
|
77
|
-
selected_checks = [check for check in selected_checks if check.__name__ not in self.excluded_check_names]
|
78
|
-
|
79
|
-
return selected_checks, checks_config
|
@@ -1,78 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
from enum import Enum, unique
|
4
|
-
from typing import TYPE_CHECKING, Any
|
5
|
-
|
6
|
-
if TYPE_CHECKING:
|
7
|
-
import hypothesis
|
8
|
-
|
9
|
-
HYPOTHESIS_IN_MEMORY_DATABASE_IDENTIFIER = ":memory:"
|
10
|
-
|
11
|
-
# Importing Hypothesis is expensive, hence we re-create the enums we need in CLI commands definitions
|
12
|
-
# Hypothesis is stable, hence it should not be a problem and adding new variants should not be automatic
|
13
|
-
|
14
|
-
|
15
|
-
@unique
|
16
|
-
class HealthCheck(str, Enum):
|
17
|
-
# We remove not relevant checks
|
18
|
-
data_too_large = "data_too_large"
|
19
|
-
filter_too_much = "filter_too_much"
|
20
|
-
too_slow = "too_slow"
|
21
|
-
large_base_example = "large_base_example"
|
22
|
-
all = "all"
|
23
|
-
|
24
|
-
def as_hypothesis(self) -> list[hypothesis.HealthCheck]:
|
25
|
-
from hypothesis import HealthCheck
|
26
|
-
|
27
|
-
if self.name == "all":
|
28
|
-
return list(HealthCheck)
|
29
|
-
|
30
|
-
return [HealthCheck[self.name]]
|
31
|
-
|
32
|
-
|
33
|
-
def prepare_health_checks(
|
34
|
-
hypothesis_suppress_health_check: list[HealthCheck] | None,
|
35
|
-
) -> list[hypothesis.HealthCheck] | None:
|
36
|
-
if hypothesis_suppress_health_check is None:
|
37
|
-
return None
|
38
|
-
|
39
|
-
return [entry for health_check in hypothesis_suppress_health_check for entry in health_check.as_hypothesis()]
|
40
|
-
|
41
|
-
|
42
|
-
def prepare_phases(no_shrink: bool = False) -> list[hypothesis.Phase] | None:
|
43
|
-
from hypothesis import Phase
|
44
|
-
|
45
|
-
phases = set(Phase) - {Phase.explain}
|
46
|
-
if no_shrink:
|
47
|
-
return list(phases - {Phase.shrink})
|
48
|
-
return list(phases)
|
49
|
-
|
50
|
-
|
51
|
-
def prepare_settings(
|
52
|
-
database: str | None = None,
|
53
|
-
derandomize: bool | None = None,
|
54
|
-
max_examples: int | None = None,
|
55
|
-
phases: list[hypothesis.Phase] | None = None,
|
56
|
-
suppress_health_check: list[hypothesis.HealthCheck] | None = None,
|
57
|
-
) -> hypothesis.settings:
|
58
|
-
import hypothesis
|
59
|
-
from hypothesis.database import DirectoryBasedExampleDatabase, InMemoryExampleDatabase
|
60
|
-
|
61
|
-
kwargs: dict[str, Any] = {
|
62
|
-
key: value
|
63
|
-
for key, value in (
|
64
|
-
("derandomize", derandomize),
|
65
|
-
("max_examples", max_examples),
|
66
|
-
("phases", phases),
|
67
|
-
("suppress_health_check", suppress_health_check),
|
68
|
-
)
|
69
|
-
if value is not None
|
70
|
-
}
|
71
|
-
if database is not None:
|
72
|
-
if database.lower() == "none":
|
73
|
-
kwargs["database"] = None
|
74
|
-
elif database == HYPOTHESIS_IN_MEMORY_DATABASE_IDENTIFIER:
|
75
|
-
kwargs["database"] = InMemoryExampleDatabase()
|
76
|
-
else:
|
77
|
-
kwargs["database"] = DirectoryBasedExampleDatabase(database)
|
78
|
-
return hypothesis.settings(print_blob=False, deadline=None, verbosity=hypothesis.Verbosity.quiet, **kwargs)
|