schemathesis 3.33.2__py3-none-any.whl → 3.34.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/auths.py +71 -13
- schemathesis/checks.py +2 -0
- schemathesis/cli/__init__.py +10 -0
- schemathesis/cli/callbacks.py +3 -6
- schemathesis/cli/junitxml.py +20 -17
- schemathesis/cli/sanitization.py +5 -0
- schemathesis/exceptions.py +8 -0
- schemathesis/failures.py +20 -0
- schemathesis/generation/__init__.py +2 -0
- schemathesis/hooks.py +81 -8
- schemathesis/internal/transformation.py +10 -0
- schemathesis/models.py +12 -26
- schemathesis/runner/events.py +1 -0
- schemathesis/runner/impl/core.py +13 -1
- schemathesis/sanitization.py +1 -0
- schemathesis/schemas.py +12 -2
- schemathesis/service/serialization.py +1 -0
- schemathesis/specs/graphql/schemas.py +4 -0
- schemathesis/specs/openapi/checks.py +249 -12
- schemathesis/specs/openapi/examples.py +18 -1
- schemathesis/specs/openapi/links.py +45 -14
- schemathesis/specs/openapi/schemas.py +33 -17
- schemathesis/specs/openapi/stateful/__init__.py +18 -7
- schemathesis/stateful/__init__.py +20 -16
- schemathesis/stateful/config.py +16 -4
- schemathesis/stateful/runner.py +1 -1
- schemathesis/stateful/state_machine.py +20 -1
- schemathesis/transports/__init__.py +9 -1
- {schemathesis-3.33.2.dist-info → schemathesis-3.34.0.dist-info}/METADATA +11 -3
- {schemathesis-3.33.2.dist-info → schemathesis-3.34.0.dist-info}/RECORD +33 -33
- {schemathesis-3.33.2.dist-info → schemathesis-3.34.0.dist-info}/WHEEL +0 -0
- {schemathesis-3.33.2.dist-info → schemathesis-3.34.0.dist-info}/entry_points.txt +0 -0
- {schemathesis-3.33.2.dist-info → schemathesis-3.34.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -5,7 +5,7 @@ from functools import lru_cache
|
|
|
5
5
|
from typing import TYPE_CHECKING, Any, Callable, ClassVar, Iterator
|
|
6
6
|
|
|
7
7
|
from hypothesis import strategies as st
|
|
8
|
-
from hypothesis.stateful import Bundle, Rule, rule
|
|
8
|
+
from hypothesis.stateful import Bundle, Rule, precondition, rule
|
|
9
9
|
|
|
10
10
|
from ....constants import NOT_SET
|
|
11
11
|
from ....internal.result import Ok
|
|
@@ -93,10 +93,11 @@ def create_state_machine(schema: BaseOpenAPISchema) -> type[APIStateMachine]:
|
|
|
93
93
|
for data_generation_method in schema.data_generation_methods
|
|
94
94
|
]
|
|
95
95
|
)
|
|
96
|
+
bundle = bundles[bundle_name]
|
|
96
97
|
rules[name] = transition(
|
|
97
98
|
name=name,
|
|
98
99
|
target=catch_all,
|
|
99
|
-
previous=
|
|
100
|
+
previous=bundle,
|
|
100
101
|
case=case_strategy,
|
|
101
102
|
link=st.just(link),
|
|
102
103
|
)
|
|
@@ -116,11 +117,13 @@ def create_state_machine(schema: BaseOpenAPISchema) -> type[APIStateMachine]:
|
|
|
116
117
|
for data_generation_method in schema.data_generation_methods
|
|
117
118
|
]
|
|
118
119
|
)
|
|
119
|
-
rules[name] =
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
120
|
+
rules[name] = precondition(ensure_links_followed)(
|
|
121
|
+
transition(
|
|
122
|
+
name=name,
|
|
123
|
+
target=catch_all,
|
|
124
|
+
previous=st.none(),
|
|
125
|
+
case=case_strategy,
|
|
126
|
+
)
|
|
124
127
|
)
|
|
125
128
|
|
|
126
129
|
return type(
|
|
@@ -136,6 +139,14 @@ def create_state_machine(schema: BaseOpenAPISchema) -> type[APIStateMachine]:
|
|
|
136
139
|
)
|
|
137
140
|
|
|
138
141
|
|
|
142
|
+
def ensure_links_followed(machine: APIStateMachine) -> bool:
|
|
143
|
+
# If there are responses that have links to follow, reject any rule without incoming transitions
|
|
144
|
+
for bundle in machine.bundles.values():
|
|
145
|
+
if bundle:
|
|
146
|
+
return False
|
|
147
|
+
return True
|
|
148
|
+
|
|
149
|
+
|
|
139
150
|
def transition(
|
|
140
151
|
*,
|
|
141
152
|
name: str,
|
|
@@ -60,6 +60,9 @@ class StatefulTest:
|
|
|
60
60
|
def parse(self, case: Case, response: GenericResponse) -> ParsedData:
|
|
61
61
|
raise NotImplementedError
|
|
62
62
|
|
|
63
|
+
def is_match(self) -> bool:
|
|
64
|
+
raise NotImplementedError
|
|
65
|
+
|
|
63
66
|
def make_operation(self, collected: list[ParsedData]) -> APIOperation:
|
|
64
67
|
raise NotImplementedError
|
|
65
68
|
|
|
@@ -113,22 +116,23 @@ class Feedback:
|
|
|
113
116
|
from .._hypothesis import create_test
|
|
114
117
|
|
|
115
118
|
for data in self.stateful_tests.values():
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
119
|
+
if data.stateful_test.is_match():
|
|
120
|
+
operation = data.make_operation()
|
|
121
|
+
_as_strategy_kwargs: dict[str, Any] | None
|
|
122
|
+
if callable(as_strategy_kwargs):
|
|
123
|
+
_as_strategy_kwargs = as_strategy_kwargs(operation)
|
|
124
|
+
else:
|
|
125
|
+
_as_strategy_kwargs = as_strategy_kwargs
|
|
126
|
+
test_function = create_test(
|
|
127
|
+
operation=operation,
|
|
128
|
+
test=test,
|
|
129
|
+
settings=settings,
|
|
130
|
+
seed=seed,
|
|
131
|
+
data_generation_methods=operation.schema.data_generation_methods,
|
|
132
|
+
generation_config=generation_config,
|
|
133
|
+
as_strategy_kwargs=_as_strategy_kwargs,
|
|
134
|
+
)
|
|
135
|
+
yield Ok((operation, test_function))
|
|
132
136
|
|
|
133
137
|
|
|
134
138
|
def run_state_machine_as_test(
|
schemathesis/stateful/config.py
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
|
+
from datetime import timedelta
|
|
4
5
|
from typing import TYPE_CHECKING, Any
|
|
5
6
|
|
|
7
|
+
from ..constants import DEFAULT_DEADLINE
|
|
8
|
+
|
|
6
9
|
if TYPE_CHECKING:
|
|
7
10
|
import hypothesis
|
|
8
11
|
from requests.auth import HTTPDigestAuth
|
|
@@ -16,15 +19,20 @@ if TYPE_CHECKING:
|
|
|
16
19
|
|
|
17
20
|
def _default_checks_factory() -> tuple[CheckFunction, ...]:
|
|
18
21
|
from ..checks import ALL_CHECKS
|
|
19
|
-
from ..specs.openapi.checks import use_after_free
|
|
22
|
+
from ..specs.openapi.checks import ensure_resource_availability, use_after_free
|
|
20
23
|
|
|
21
|
-
return ALL_CHECKS + (use_after_free,)
|
|
24
|
+
return ALL_CHECKS + (use_after_free, ensure_resource_availability)
|
|
22
25
|
|
|
23
26
|
|
|
24
27
|
def _get_default_hypothesis_settings_kwargs() -> dict[str, Any]:
|
|
25
28
|
import hypothesis
|
|
26
29
|
|
|
27
|
-
return {
|
|
30
|
+
return {
|
|
31
|
+
"phases": (hypothesis.Phase.generate,),
|
|
32
|
+
"deadline": None,
|
|
33
|
+
"stateful_step_count": 6,
|
|
34
|
+
"suppress_health_check": list(hypothesis.HealthCheck),
|
|
35
|
+
}
|
|
28
36
|
|
|
29
37
|
|
|
30
38
|
def _default_hypothesis_settings_factory() -> hypothesis.settings:
|
|
@@ -79,6 +87,10 @@ def _get_hypothesis_settings_kwargs_override(settings: hypothesis.settings) -> d
|
|
|
79
87
|
state_machine_default = _default_hypothesis_settings_factory()
|
|
80
88
|
if settings.phases == hypothesis_default.phases:
|
|
81
89
|
kwargs["phases"] = state_machine_default.phases
|
|
82
|
-
if settings.
|
|
90
|
+
if settings.stateful_step_count == hypothesis_default.stateful_step_count:
|
|
91
|
+
kwargs["stateful_step_count"] = state_machine_default.stateful_step_count
|
|
92
|
+
if settings.deadline in (hypothesis_default.deadline, timedelta(milliseconds=DEFAULT_DEADLINE)):
|
|
83
93
|
kwargs["deadline"] = state_machine_default.deadline
|
|
94
|
+
if settings.suppress_health_check == hypothesis_default.suppress_health_check:
|
|
95
|
+
kwargs["suppress_health_check"] = state_machine_default.suppress_health_check
|
|
84
96
|
return kwargs
|
schemathesis/stateful/runner.py
CHANGED
|
@@ -7,10 +7,10 @@ from dataclasses import dataclass, field
|
|
|
7
7
|
from typing import TYPE_CHECKING, Any, Generator, Iterator, Type
|
|
8
8
|
|
|
9
9
|
import hypothesis
|
|
10
|
-
from hypothesis.stateful import Rule
|
|
11
10
|
import requests
|
|
12
11
|
from hypothesis.control import current_build_context
|
|
13
12
|
from hypothesis.errors import Flaky
|
|
13
|
+
from hypothesis.stateful import Rule
|
|
14
14
|
|
|
15
15
|
from ..exceptions import CheckFailed
|
|
16
16
|
from ..targets import TargetMetricCollector
|
|
@@ -3,7 +3,8 @@ from __future__ import annotations
|
|
|
3
3
|
import re
|
|
4
4
|
import time
|
|
5
5
|
from dataclasses import dataclass
|
|
6
|
-
from
|
|
6
|
+
from functools import lru_cache
|
|
7
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Type
|
|
7
8
|
|
|
8
9
|
from hypothesis.errors import InvalidDefinition
|
|
9
10
|
from hypothesis.stateful import RuleBasedStateMachine
|
|
@@ -12,6 +13,7 @@ from .._dependency_versions import HYPOTHESIS_HAS_STATEFUL_NAMING_IMPROVEMENTS
|
|
|
12
13
|
from ..constants import NO_LINKS_ERROR_MESSAGE, NOT_SET
|
|
13
14
|
from ..exceptions import UsageError
|
|
14
15
|
from ..models import APIOperation, Case, CheckFunction
|
|
16
|
+
from .config import _default_hypothesis_settings_factory
|
|
15
17
|
from .runner import StatefulTestRunner, StatefulTestRunnerConfig
|
|
16
18
|
from .sink import StateMachineSink
|
|
17
19
|
from .statistic import TransitionStats
|
|
@@ -60,6 +62,23 @@ class APIStateMachine(RuleBasedStateMachine):
|
|
|
60
62
|
raise
|
|
61
63
|
self.setup()
|
|
62
64
|
|
|
65
|
+
@classmethod
|
|
66
|
+
@lru_cache
|
|
67
|
+
def _to_test_case(cls) -> Type:
|
|
68
|
+
from . import run_state_machine_as_test
|
|
69
|
+
|
|
70
|
+
class StateMachineTestCase(RuleBasedStateMachine.TestCase):
|
|
71
|
+
settings = _default_hypothesis_settings_factory()
|
|
72
|
+
|
|
73
|
+
def runTest(self) -> None:
|
|
74
|
+
run_state_machine_as_test(cls, settings=self.settings)
|
|
75
|
+
|
|
76
|
+
runTest.is_hypothesis_test = True # type: ignore[attr-defined]
|
|
77
|
+
|
|
78
|
+
StateMachineTestCase.__name__ = cls.__name__ + ".TestCase"
|
|
79
|
+
StateMachineTestCase.__qualname__ = cls.__qualname__ + ".TestCase"
|
|
80
|
+
return StateMachineTestCase
|
|
81
|
+
|
|
63
82
|
def _pretty_print(self, value: Any) -> str:
|
|
64
83
|
if isinstance(value, Case):
|
|
65
84
|
# State machines suppose to be reproducible, hence it is OK to get kwargs here
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import base64
|
|
4
|
+
import inspect
|
|
4
5
|
import time
|
|
5
6
|
from contextlib import contextmanager
|
|
6
7
|
from dataclasses import dataclass
|
|
@@ -219,8 +220,15 @@ def validate_vanilla_requests_kwargs(data: dict[str, Any]) -> None:
|
|
|
219
220
|
"""
|
|
220
221
|
url = data["url"]
|
|
221
222
|
if not urlparse(url).netloc:
|
|
223
|
+
stack = inspect.stack()
|
|
224
|
+
method_name = "call"
|
|
225
|
+
for frame in stack[1:]:
|
|
226
|
+
if frame.function == "call_and_validate":
|
|
227
|
+
method_name = "call_and_validate"
|
|
228
|
+
break
|
|
222
229
|
raise RuntimeError(
|
|
223
|
-
"The
|
|
230
|
+
"The `base_url` argument is required when specifying a schema via a file, so Schemathesis knows where to send the data. \n"
|
|
231
|
+
f"Pass `base_url` either to the `schemathesis.from_*` loader or to the `Case.{method_name}`.\n"
|
|
224
232
|
f"If you use the ASGI integration, please supply your test client "
|
|
225
233
|
f"as the `session` argument to `call`.\nURL: {url}"
|
|
226
234
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: schemathesis
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.34.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
|
|
@@ -33,11 +33,11 @@ Requires-Dist: click<9.0,>=7.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
|
|
36
|
-
Requires-Dist: hypothesis-graphql<1,>=0.11.
|
|
36
|
+
Requires-Dist: hypothesis-graphql<1,>=0.11.1
|
|
37
37
|
Requires-Dist: hypothesis-jsonschema<0.24,>=0.23.1
|
|
38
38
|
Requires-Dist: hypothesis<7,>=6.103.4; python_version > '3.8'
|
|
39
39
|
Requires-Dist: hypothesis[zoneinfo]<7,>=6.103.4; python_version == '3.8'
|
|
40
|
-
Requires-Dist: jsonschema<5.0,>=4.18.0
|
|
40
|
+
Requires-Dist: jsonschema[format]<5.0,>=4.18.0
|
|
41
41
|
Requires-Dist: junit-xml<2.0,>=1.9
|
|
42
42
|
Requires-Dist: pyrate-limiter<4.0,>=2.10
|
|
43
43
|
Requires-Dist: pytest-subtests<0.8.0,>=0.2.1
|
|
@@ -344,6 +344,10 @@ Schemathesis is used by a number of project and companies, including direct usag
|
|
|
344
344
|
|
|
345
345
|
### Articles
|
|
346
346
|
|
|
347
|
+
- [Boost Your FastAPI Reliability with Schemathesis Automated Testing](https://medium.com/@jeremy3/boost-your-fastapi-reliability-with-schemathesis-automated-testing-e8b70ff704f6) by **Jeremy**
|
|
348
|
+
- **Description**: Showcases how easy Schemathesis covers API testing in FastAPI projects.
|
|
349
|
+
- **Date**: 17 Jul 2024
|
|
350
|
+
|
|
347
351
|
- [Implementing Schemathesis at PayLead](https://medium.com/paylead/implementing-schemathesis-at-paylead-a469a5d43626) by **Jérémy Pelletier** at **PayLead**
|
|
348
352
|
- **Description**: In-depth walkthrough including custom hooks, stateful testing and CI/CD integration.
|
|
349
353
|
- **Date**: 29 May 2024
|
|
@@ -369,6 +373,10 @@ Schemathesis is used by a number of project and companies, including direct usag
|
|
|
369
373
|
|
|
370
374
|
### Videos
|
|
371
375
|
|
|
376
|
+
- [API Testing With Unittest Mock, Pytest & Schemathesis](https://youtu.be/56whiv57T9I) by **
|
|
377
|
+
Ssali Jonathan**
|
|
378
|
+
- **Description**: Describes various API testing techniques and features Schemathesis for automatic test generation.
|
|
379
|
+
- **Date**: 29 Jul 2024
|
|
372
380
|
- [API Fuzzing: What it is and why you should use it](https://youtu.be/wX3GMJY9B6A) by **José Haro Peralta**
|
|
373
381
|
- **Description**: A comprehensive overview and demo of Schemathesis.
|
|
374
382
|
- **Date**: 14 Feb 2023
|
|
@@ -6,39 +6,39 @@ schemathesis/_lazy_import.py,sha256=aMhWYgbU2JOltyWBb32vnWBb6kykOghucEzI_F70yVE,
|
|
|
6
6
|
schemathesis/_override.py,sha256=3CbA7P9Q89W3ymaYxiOV5Xpv1yhoBqroLK4YRpYMjX4,1630
|
|
7
7
|
schemathesis/_rate_limiter.py,sha256=q_XWst5hzuAyXQRiZc4s_bx7-JlPYZM_yKDmeavt3oo,242
|
|
8
8
|
schemathesis/_xml.py,sha256=lwRaKEMQvl6SUySnhGgooNsdmXPnDh11YSPpbsW8dR8,6923
|
|
9
|
-
schemathesis/auths.py,sha256=
|
|
10
|
-
schemathesis/checks.py,sha256=
|
|
9
|
+
schemathesis/auths.py,sha256=FvBgJWmaTFWH0dW3aLgNmRAubE03VME3gU8Dbv8NwrA,16786
|
|
10
|
+
schemathesis/checks.py,sha256=5wugI6gNVX1W3hUPU7G6l2u20R_A3fxI_7fwC-9_vto,2483
|
|
11
11
|
schemathesis/code_samples.py,sha256=xk1-1jnXg5hS40VzIZp8PEtZwGaazNlVKMT7_X-zG-M,4123
|
|
12
12
|
schemathesis/constants.py,sha256=l1YQ7PXhEj9dyf9CTESVUpPOaFCH7iz-Fe8o4v6Th_s,2673
|
|
13
|
-
schemathesis/exceptions.py,sha256=
|
|
14
|
-
schemathesis/failures.py,sha256=
|
|
13
|
+
schemathesis/exceptions.py,sha256=iKNKlQhxYOCQOoKu_Tztg9JXO4XyJHh5UNvwLGsvQw8,20268
|
|
14
|
+
schemathesis/failures.py,sha256=dlvobJxkbxab-P1GMVrcnbcvf0-1qyhz79Fdw9pFJEw,7578
|
|
15
15
|
schemathesis/filters.py,sha256=t1P236DPVaWvhu2Sm6OGy6Oe2x-nnwEVYRau4qqX6C4,17034
|
|
16
16
|
schemathesis/graphql.py,sha256=YkoKWY5K8lxp7H3ikAs-IsoDbiPwJvChG7O8p3DgwtI,229
|
|
17
|
-
schemathesis/hooks.py,sha256=
|
|
17
|
+
schemathesis/hooks.py,sha256=Uv9rZHqM2bpb_uYBjf4kqsMeu7XdLOHpRWSaN43xIgw,14774
|
|
18
18
|
schemathesis/lazy.py,sha256=hGwSuWe5tDaGpjZTV4Mj8zqdrHDYHxR22N2p5h2yh1g,18897
|
|
19
19
|
schemathesis/loaders.py,sha256=OtCD1o0TVmSNAUF7dgHpouoAXtY6w9vEtsRVGv4lE0g,4588
|
|
20
|
-
schemathesis/models.py,sha256=
|
|
20
|
+
schemathesis/models.py,sha256=WpF-W592_MVWnMZ8t7wt_A2fr3YNLEwPX3r-jwW8GpY,44266
|
|
21
21
|
schemathesis/parameters.py,sha256=PndmqQRlEYsCt1kWjSShPsFf6vj7X_7FRdz_-A95eNg,2258
|
|
22
22
|
schemathesis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
|
-
schemathesis/sanitization.py,sha256=
|
|
24
|
-
schemathesis/schemas.py,sha256=
|
|
23
|
+
schemathesis/sanitization.py,sha256=_qSt04f_XcHrgguyUnowvdfj-b6u409Ubu07i0ivQUQ,9011
|
|
24
|
+
schemathesis/schemas.py,sha256=YXTWWM1JTFNQEKrxWPye1uQgm3I1_MQPBbc2Y4KW19o,20610
|
|
25
25
|
schemathesis/serializers.py,sha256=kxXZ-UGa1v_vOm0sC4QYcrNv4rfvI7tHGT2elRVbCbc,11649
|
|
26
26
|
schemathesis/targets.py,sha256=XIGRghvEzbmEJjse9aZgNEj67L3jAbiazm2rxURWgDE,2351
|
|
27
27
|
schemathesis/throttling.py,sha256=aisUc4MJDGIOGUAs9L2DlWWpdd4KyAFuNVKhYoaUC9M,1719
|
|
28
28
|
schemathesis/types.py,sha256=xOzNAeMs6qqeaJnWs5Fpw5JPbvVjyfRfxTJa3G2Ln5I,920
|
|
29
29
|
schemathesis/utils.py,sha256=NX04p9mO-lCAH3DIISXDXPxWZk6lkGNM4-ubRi8vlvY,5234
|
|
30
|
-
schemathesis/cli/__init__.py,sha256=
|
|
30
|
+
schemathesis/cli/__init__.py,sha256=ZxFkRvpRAaV5OuDZeHEeWrFTnVjJXX-w4cQfYe_R6Yw,73390
|
|
31
31
|
schemathesis/cli/__main__.py,sha256=MWaenjaUTZIfNPFzKmnkTiawUri7DVldtg3mirLwzU8,92
|
|
32
|
-
schemathesis/cli/callbacks.py,sha256=
|
|
32
|
+
schemathesis/cli/callbacks.py,sha256=PJs64n6qGrGC5Yv_yl3fGm797cvN6pp2enFLmSljGKs,15127
|
|
33
33
|
schemathesis/cli/cassettes.py,sha256=lKKKKLjoVT8VnZXjCOCmDYhvLKn1XSrCXCMF9EeftHA,18498
|
|
34
34
|
schemathesis/cli/constants.py,sha256=wk-0GsoJIel8wFFerQ6Kf_6eAYUtIWkwMFwyAqv3yj4,1635
|
|
35
35
|
schemathesis/cli/context.py,sha256=EMeyAbU9mRujR46anc43yr6ab4rGYtIDaHC3cV9Qa-Q,2092
|
|
36
36
|
schemathesis/cli/debug.py,sha256=_YA-bX1ujHl4bqQDEum7M-I2XHBTEGbvgkhvcvKhmgU,658
|
|
37
37
|
schemathesis/cli/handlers.py,sha256=RjvogPCqqFTiyVYWrGG6euw9-6h-7uSeFvS-ouU8eWs,389
|
|
38
|
-
schemathesis/cli/junitxml.py,sha256=
|
|
38
|
+
schemathesis/cli/junitxml.py,sha256=FeQbgjYYwD0twk1QSbP3AivLPhHGwIuikQ6CN2Kw9ho,5050
|
|
39
39
|
schemathesis/cli/options.py,sha256=DY5PUzpUNyYgpcqqFTeZjmVUykpbaI9fbN44QIWNOfA,2559
|
|
40
40
|
schemathesis/cli/reporting.py,sha256=zNKaRAUfDZ23-gMtiWbnG2OBndkYlM7ljKvk0Mc_lqI,3589
|
|
41
|
-
schemathesis/cli/sanitization.py,sha256=
|
|
41
|
+
schemathesis/cli/sanitization.py,sha256=Onw_NWZSom6XTVNJ5NHnC0PAhrYAcGzIXJbsBCzLkn4,1005
|
|
42
42
|
schemathesis/cli/output/__init__.py,sha256=AXaUzQ1nhQ-vXhW4-X-91vE2VQtEcCOrGtQXXNN55iQ,29
|
|
43
43
|
schemathesis/cli/output/default.py,sha256=nYuUwm2M3pIsDebofgXuIFb7Vl4t4sLO0PKmJcE6tb8,39385
|
|
44
44
|
schemathesis/cli/output/short.py,sha256=CL6-Apxr5tuZ3BL1vecV1MiRY1wDt21g0wiUwZu6mLM,2607
|
|
@@ -57,7 +57,7 @@ schemathesis/extra/pytest_plugin.py,sha256=ymicV2NjmSzee0ccUUUjNEvb9ihCxxf_8M60g
|
|
|
57
57
|
schemathesis/fixups/__init__.py,sha256=RP5QYJVJhp8LXjhH89fCRaIVU26dHCy74jD9seoYMuc,967
|
|
58
58
|
schemathesis/fixups/fast_api.py,sha256=mn-KzBqnR8jl4W5fY-_ZySabMDMUnpzCIESMHnlvE1c,1304
|
|
59
59
|
schemathesis/fixups/utf8_bom.py,sha256=lWT9RNmJG8i-l5AXIpaCT3qCPUwRgzXPW3eoOjmZETA,745
|
|
60
|
-
schemathesis/generation/__init__.py,sha256=
|
|
60
|
+
schemathesis/generation/__init__.py,sha256=wUd5HqIh96Aw91Un0rLOd3XXi2E3BXedSMMjS5RXkuo,2472
|
|
61
61
|
schemathesis/internal/__init__.py,sha256=93HcdG3LF0BbQKbCteOsFMa1w6nXl8yTmx87QLNJOik,161
|
|
62
62
|
schemathesis/internal/copy.py,sha256=DcL56z-d69kKR_5u8mlHvjSL1UTyUKNMAwexrwHFY1s,1031
|
|
63
63
|
schemathesis/internal/datetime.py,sha256=zPLBL0XXLNfP-KYel3H2m8pnsxjsA_4d-zTOhJg2EPQ,136
|
|
@@ -66,14 +66,14 @@ schemathesis/internal/extensions.py,sha256=h0aHRK_PTKfiAufkeBziegQS8537TL-Gr1hPW
|
|
|
66
66
|
schemathesis/internal/jsonschema.py,sha256=-7tF15cXo1ZdhiRFYYfEClXihX2Svc5Loi_Dz1x201k,1157
|
|
67
67
|
schemathesis/internal/output.py,sha256=zMaG5knIuBieVH8CrcmPJgbmQukDs2xdekX0BrK7BZs,1989
|
|
68
68
|
schemathesis/internal/result.py,sha256=d449YvyONjqjDs-A5DAPgtAI96iT753K8sU6_1HLo2Q,461
|
|
69
|
-
schemathesis/internal/transformation.py,sha256=
|
|
69
|
+
schemathesis/internal/transformation.py,sha256=M5LA4pFZC4nD_0iGfih1wLF3_q8xJas94Uuaymt-7Cw,690
|
|
70
70
|
schemathesis/internal/validation.py,sha256=G7i8jIMUpAeOnDsDF_eWYvRZe_yMprRswx0QAtMPyEw,966
|
|
71
71
|
schemathesis/runner/__init__.py,sha256=-aedUaRBCiTiaooC0OsBbdi4XP8APFOpj6eOzwt5nQ8,21366
|
|
72
|
-
schemathesis/runner/events.py,sha256=
|
|
72
|
+
schemathesis/runner/events.py,sha256=F3TizErDI490cDakpyeCbyK9IOecWpuToQ1HGXvBXzo,11531
|
|
73
73
|
schemathesis/runner/probes.py,sha256=no5AfO3kse25qvHevjeUfB0Q3C860V2AYzschUW3QMQ,5688
|
|
74
74
|
schemathesis/runner/serialization.py,sha256=erbXEHyI8rIlkQ42AwgmlH7aAbh313EPqCEfrGKxUls,20040
|
|
75
75
|
schemathesis/runner/impl/__init__.py,sha256=1E2iME8uthYPBh9MjwVBCTFV-P3fi7AdphCCoBBspjs,199
|
|
76
|
-
schemathesis/runner/impl/core.py,sha256=
|
|
76
|
+
schemathesis/runner/impl/core.py,sha256=H4sYY59kMXQPeOD4BH3j47Ymvix71FSgyQh36flrQxM,45605
|
|
77
77
|
schemathesis/runner/impl/solo.py,sha256=N7-pUL6nWGiSRUC4Zqy1T4h99vbeQowP6b6cMnobOow,3042
|
|
78
78
|
schemathesis/runner/impl/threadpool.py,sha256=JtTn5X7gqpbkO4q8n5kykGEPQCpJ9hXJrvU3KMF1CXA,14948
|
|
79
79
|
schemathesis/service/__init__.py,sha256=cDVTCFD1G-vvhxZkJUwiToTAEQ-0ByIoqwXvJBCf_V8,472
|
|
@@ -87,7 +87,7 @@ schemathesis/service/hosts.py,sha256=ad2Lxq9Zcc9PP-1eFLQnxen4ImglcGOH8n7CGG72NNg
|
|
|
87
87
|
schemathesis/service/metadata.py,sha256=x2LeCED1mdPf-YQJmjY8xtcIKHfD1ap5V0BGl-UgqNo,2087
|
|
88
88
|
schemathesis/service/models.py,sha256=ihItUJ9CvH4TvmdfJY3W88NR82OODF8a3RD7WRXn6RM,6578
|
|
89
89
|
schemathesis/service/report.py,sha256=4A8nf6_KOjDW3x1VXF8gSf_WY2xXp1Cbz-Owl_GeR7o,8294
|
|
90
|
-
schemathesis/service/serialization.py,sha256=
|
|
90
|
+
schemathesis/service/serialization.py,sha256=DSpDu2f9KTW7PVcFAb4uSA_rnHctuvFlnF-JJ0XyDnE,6240
|
|
91
91
|
schemathesis/service/usage.py,sha256=UbXqxeDq5mAjKkfV4hApZsReZmQHXiqoXUYn_Z6YuZk,2438
|
|
92
92
|
schemathesis/specs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
93
93
|
schemathesis/specs/graphql/__init__.py,sha256=fgyHtvWNUVWismBTOqxQtgLoTighTfvMv6v6QCD_Oyc,85
|
|
@@ -95,23 +95,23 @@ schemathesis/specs/graphql/_cache.py,sha256=7ras3q_InDJBPykgHroerl9f2jFamC8xJD35
|
|
|
95
95
|
schemathesis/specs/graphql/loaders.py,sha256=qxNGL67_AfhoRh0hIxlnJVe6do26vqwWS_TrJtB-Lro,12198
|
|
96
96
|
schemathesis/specs/graphql/nodes.py,sha256=bE3G1kNmqJ8OV4igBvIK-UORrkQA6Nofduf87O3TD9I,541
|
|
97
97
|
schemathesis/specs/graphql/scalars.py,sha256=9tvLTiYVe8A_E8ASA0czz3Z0Mp9lyak7R4wHpAE_jKo,1805
|
|
98
|
-
schemathesis/specs/graphql/schemas.py,sha256=
|
|
98
|
+
schemathesis/specs/graphql/schemas.py,sha256=L7u73YXnmqypghWhmj5FaGUAmU57IporT9NteinEVYY,14036
|
|
99
99
|
schemathesis/specs/graphql/validation.py,sha256=uINIOt-2E7ZuQV2CxKzwez-7L9tDtqzMSpnVoRWvxy0,1635
|
|
100
100
|
schemathesis/specs/openapi/__init__.py,sha256=HDcx3bqpa6qWPpyMrxAbM3uTo0Lqpg-BUNZhDJSJKnw,279
|
|
101
101
|
schemathesis/specs/openapi/_cache.py,sha256=PAiAu4X_a2PQgD2lG5H3iisXdyg4SaHpU46bRZvfNkM,4320
|
|
102
102
|
schemathesis/specs/openapi/_hypothesis.py,sha256=XtC-rYiH-GHvWykdSSzPFVK7jHNNL7NtibjSEeIZDQw,24122
|
|
103
|
-
schemathesis/specs/openapi/checks.py,sha256=
|
|
103
|
+
schemathesis/specs/openapi/checks.py,sha256=K4Eu9e85Tue54_xGp9dp5P8CuuDAcDlqJAM4iRVzXA0,21090
|
|
104
104
|
schemathesis/specs/openapi/constants.py,sha256=JqM_FHOenqS_MuUE9sxVQ8Hnw0DNM8cnKDwCwPLhID4,783
|
|
105
105
|
schemathesis/specs/openapi/converter.py,sha256=TaYgc5BBHPdkN-n0lqpbeVgLu3eL3L8Wu3y_Vo3TJaQ,2800
|
|
106
106
|
schemathesis/specs/openapi/definitions.py,sha256=Z186F0gNBSCmPg-Kk7Q-n6XxEZHIOzgUyeqixlC62XE,94058
|
|
107
|
-
schemathesis/specs/openapi/examples.py,sha256=
|
|
107
|
+
schemathesis/specs/openapi/examples.py,sha256=ElfX1kZ4XWfOSOVbes_ovy4P6q_NgWpa0RF0rNJLVM4,16170
|
|
108
108
|
schemathesis/specs/openapi/formats.py,sha256=JmmkQWNAj5XreXb7Edgj4LADAf4m86YulR_Ec8evpJ4,1220
|
|
109
|
-
schemathesis/specs/openapi/links.py,sha256=
|
|
109
|
+
schemathesis/specs/openapi/links.py,sha256=DCOu14VOFqKYYFbQJHWICDpmTBzJfeP2v2FXBwW3vBI,17531
|
|
110
110
|
schemathesis/specs/openapi/loaders.py,sha256=AcpvTK8qdirSRcHcinCjQbwfSQSx448LAh_GvFML1C0,25515
|
|
111
111
|
schemathesis/specs/openapi/media_types.py,sha256=dNTxpRQbY3SubdVjh4Cjb38R6Bc9MF9BsRQwPD87x0g,1017
|
|
112
112
|
schemathesis/specs/openapi/parameters.py,sha256=_6vNCnPXcdxjfAQbykCRLHjvmTpu_02xDJghxDrGYr8,13611
|
|
113
113
|
schemathesis/specs/openapi/references.py,sha256=euxM02kQGMHh4Ss1jWjOY_gyw_HazafKITIsvOEiAvI,9831
|
|
114
|
-
schemathesis/specs/openapi/schemas.py,sha256=
|
|
114
|
+
schemathesis/specs/openapi/schemas.py,sha256=c732S1iDo-Ns-mw8xfRn98KXzhE6bgmgYk9KN9lTqhc,53003
|
|
115
115
|
schemathesis/specs/openapi/security.py,sha256=nEhDB_SvEFldmfpa9uOQywfWN6DtXHKmgtwucJvfN5Q,7096
|
|
116
116
|
schemathesis/specs/openapi/serialization.py,sha256=5qGdFHZ3n80UlbSXrO_bkr4Al_7ci_Z3aSUjZczNDQY,11384
|
|
117
117
|
schemathesis/specs/openapi/utils.py,sha256=-TCu0hTrlwp2x5qHNp-TxiHRMeIZC9OBmlhLssjRIiQ,742
|
|
@@ -127,25 +127,25 @@ schemathesis/specs/openapi/negative/__init__.py,sha256=gw0w_9tVQf_MY5Df3_xTZFC4r
|
|
|
127
127
|
schemathesis/specs/openapi/negative/mutations.py,sha256=lLEN0GLxvPmZBQ3tHCznDSjmZ4yQiQxspjv1UpO4Kx0,19019
|
|
128
128
|
schemathesis/specs/openapi/negative/types.py,sha256=a7buCcVxNBG6ILBM3A7oNTAX0lyDseEtZndBuej8MbI,174
|
|
129
129
|
schemathesis/specs/openapi/negative/utils.py,sha256=ozcOIuASufLqZSgnKUACjX-EOZrrkuNdXX0SDnLoGYA,168
|
|
130
|
-
schemathesis/specs/openapi/stateful/__init__.py,sha256=
|
|
130
|
+
schemathesis/specs/openapi/stateful/__init__.py,sha256=WV0iPWE_BiSoTu2bt0IMbuk71TDJvLPv403thTSXcqc,8662
|
|
131
131
|
schemathesis/specs/openapi/stateful/statistic.py,sha256=EJK4NqeAYRYl1FtU9YEuTLyhGhPmks0bLoxUPuQlOvM,7443
|
|
132
132
|
schemathesis/specs/openapi/stateful/types.py,sha256=UuGcCTFvaHsqeLN9ZeUNcbjsEwmthoT3UcHfDHchOYo,419
|
|
133
|
-
schemathesis/stateful/__init__.py,sha256=
|
|
134
|
-
schemathesis/stateful/config.py,sha256=
|
|
133
|
+
schemathesis/stateful/__init__.py,sha256=gONzl3pgZ8DihjK52Wd3Ye1LeP6gnulmevHI_jEqHWI,5088
|
|
134
|
+
schemathesis/stateful/config.py,sha256=s0klpsesAJuK9IS6V8pVJNO-OwB0MbmzlXkU3WlMO1g,3556
|
|
135
135
|
schemathesis/stateful/context.py,sha256=MeP3-lKyhtAd-jzApC65AWlDZSOBzQq0IgK-nvagYqs,4519
|
|
136
136
|
schemathesis/stateful/events.py,sha256=reGjsmS-y2izRd3bahpEZNe4zxTSpKAkPI-nCQyoUzI,6733
|
|
137
|
-
schemathesis/stateful/runner.py,sha256=
|
|
137
|
+
schemathesis/stateful/runner.py,sha256=tIlXRpy0Y0vuQYjTlafpZ4Ur_KhFhdK5CH7ScRvDPWk,11110
|
|
138
138
|
schemathesis/stateful/sink.py,sha256=xjsqJYH5WETKh5pDGlchYyjT3HcjzHEotUjvo1p0JsE,2470
|
|
139
|
-
schemathesis/stateful/state_machine.py,sha256=
|
|
139
|
+
schemathesis/stateful/state_machine.py,sha256=u7PkwCjxTZZcePC7GPiOUuu4uhqUees3UuorD_0Sx_c,12938
|
|
140
140
|
schemathesis/stateful/statistic.py,sha256=xPLiCw61ofNXQicqcK_sZyLHiqiGcgQARpwd8AiRubM,487
|
|
141
141
|
schemathesis/stateful/validation.py,sha256=JtqnRzl11ZbVR8Lcr0xBJKoOXzx8VUfRz92jOnB2Smg,3605
|
|
142
|
-
schemathesis/transports/__init__.py,sha256=
|
|
142
|
+
schemathesis/transports/__init__.py,sha256=tIJm79N_pBHM5ccvez4Z4mW-VrG1LfN8yq7B0v9YDGk,12832
|
|
143
143
|
schemathesis/transports/auth.py,sha256=yELjkEkfx4g74hNrd0Db9aFf0xDJDRIwhg2vzKOTZGg,1138
|
|
144
144
|
schemathesis/transports/content_types.py,sha256=VrcRQvF5T_TUjrCyrZcYF2LOwKfs3IrLcMtkVSp1ImI,2189
|
|
145
145
|
schemathesis/transports/headers.py,sha256=hr_AIDOfUxsJxpHfemIZ_uNG3_vzS_ZeMEKmZjbYiBE,990
|
|
146
146
|
schemathesis/transports/responses.py,sha256=6-gvVcRK0Ho_lSydUysBNFWoJwZEiEgf6Iv-GWkQGd8,1675
|
|
147
|
-
schemathesis-3.
|
|
148
|
-
schemathesis-3.
|
|
149
|
-
schemathesis-3.
|
|
150
|
-
schemathesis-3.
|
|
151
|
-
schemathesis-3.
|
|
147
|
+
schemathesis-3.34.0.dist-info/METADATA,sha256=J6cG2yfIh_VOAI7UbhuD_TEKHla0zgqghCjawG6nwLw,18373
|
|
148
|
+
schemathesis-3.34.0.dist-info/WHEEL,sha256=hKi7AIIx6qfnsRbr087vpeJnrVUuDokDHZacPPMW7-Y,87
|
|
149
|
+
schemathesis-3.34.0.dist-info/entry_points.txt,sha256=VHyLcOG7co0nOeuk8WjgpRETk5P1E2iCLrn26Zkn5uk,158
|
|
150
|
+
schemathesis-3.34.0.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
|
|
151
|
+
schemathesis-3.34.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|