schemathesis 4.0.0a2__py3-none-any.whl → 4.0.0a4__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.
Files changed (47) hide show
  1. schemathesis/cli/__init__.py +15 -4
  2. schemathesis/cli/commands/run/__init__.py +148 -94
  3. schemathesis/cli/commands/run/context.py +72 -2
  4. schemathesis/cli/commands/run/events.py +22 -2
  5. schemathesis/cli/commands/run/executor.py +35 -12
  6. schemathesis/cli/commands/run/filters.py +1 -0
  7. schemathesis/cli/commands/run/handlers/cassettes.py +27 -46
  8. schemathesis/cli/commands/run/handlers/junitxml.py +1 -1
  9. schemathesis/cli/commands/run/handlers/output.py +180 -87
  10. schemathesis/cli/commands/run/hypothesis.py +30 -19
  11. schemathesis/cli/commands/run/reports.py +72 -0
  12. schemathesis/cli/commands/run/validation.py +18 -12
  13. schemathesis/cli/ext/groups.py +42 -13
  14. schemathesis/cli/ext/options.py +15 -8
  15. schemathesis/core/errors.py +85 -9
  16. schemathesis/core/failures.py +2 -1
  17. schemathesis/core/transforms.py +1 -1
  18. schemathesis/engine/core.py +1 -1
  19. schemathesis/engine/errors.py +17 -6
  20. schemathesis/engine/phases/stateful/__init__.py +1 -0
  21. schemathesis/engine/phases/stateful/_executor.py +9 -12
  22. schemathesis/engine/phases/unit/__init__.py +2 -3
  23. schemathesis/engine/phases/unit/_executor.py +16 -13
  24. schemathesis/engine/recorder.py +22 -21
  25. schemathesis/errors.py +23 -13
  26. schemathesis/filters.py +8 -0
  27. schemathesis/generation/coverage.py +10 -5
  28. schemathesis/generation/hypothesis/builder.py +15 -12
  29. schemathesis/generation/stateful/state_machine.py +57 -12
  30. schemathesis/pytest/lazy.py +2 -3
  31. schemathesis/pytest/plugin.py +2 -3
  32. schemathesis/schemas.py +1 -1
  33. schemathesis/specs/openapi/checks.py +77 -37
  34. schemathesis/specs/openapi/expressions/__init__.py +22 -6
  35. schemathesis/specs/openapi/expressions/nodes.py +15 -21
  36. schemathesis/specs/openapi/expressions/parser.py +1 -1
  37. schemathesis/specs/openapi/parameters.py +0 -2
  38. schemathesis/specs/openapi/patterns.py +170 -2
  39. schemathesis/specs/openapi/schemas.py +67 -39
  40. schemathesis/specs/openapi/stateful/__init__.py +207 -84
  41. schemathesis/specs/openapi/stateful/control.py +87 -0
  42. schemathesis/specs/openapi/{links.py → stateful/links.py} +72 -14
  43. {schemathesis-4.0.0a2.dist-info → schemathesis-4.0.0a4.dist-info}/METADATA +1 -1
  44. {schemathesis-4.0.0a2.dist-info → schemathesis-4.0.0a4.dist-info}/RECORD +47 -45
  45. {schemathesis-4.0.0a2.dist-info → schemathesis-4.0.0a4.dist-info}/WHEEL +0 -0
  46. {schemathesis-4.0.0a2.dist-info → schemathesis-4.0.0a4.dist-info}/entry_points.txt +0 -0
  47. {schemathesis-4.0.0a2.dist-info → schemathesis-4.0.0a4.dist-info}/licenses/LICENSE +0 -0
@@ -2,16 +2,16 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from functools import lru_cache
5
- from typing import TYPE_CHECKING, Any, Generator, Literal, Union, cast
5
+ from typing import TYPE_CHECKING, Any, Callable, Generator, Literal, Union, cast
6
6
 
7
7
  from schemathesis.core import NOT_SET, NotSet
8
+ from schemathesis.core.errors import InvalidTransition, OperationNotFound, TransitionValidationError
8
9
  from schemathesis.core.result import Err, Ok, Result
9
10
  from schemathesis.generation.stateful.state_machine import ExtractedParam, StepOutput, Transition
10
11
  from schemathesis.schemas import APIOperation
11
-
12
- from . import expressions
13
- from .constants import LOCATION_TO_CONTAINER
14
- from .references import RECURSION_DEPTH_LIMIT
12
+ from schemathesis.specs.openapi import expressions
13
+ from schemathesis.specs.openapi.constants import LOCATION_TO_CONTAINER
14
+ from schemathesis.specs.openapi.references import RECURSION_DEPTH_LIMIT
15
15
 
16
16
  if TYPE_CHECKING:
17
17
  from jsonschema import RefResolver
@@ -48,23 +48,48 @@ class OpenApiLink:
48
48
  __slots__ = ("name", "status_code", "source", "target", "parameters", "body", "merge_body", "_cached_extract")
49
49
 
50
50
  def __init__(self, name: str, status_code: str, definition: dict[str, Any], source: APIOperation):
51
+ from schemathesis.specs.openapi.schemas import BaseOpenAPISchema
52
+
51
53
  self.name = name
52
54
  self.status_code = status_code
53
55
  self.source = source
56
+ assert isinstance(source.schema, BaseOpenAPISchema)
57
+ errors = []
54
58
 
59
+ get_operation: Callable[[str], APIOperation]
55
60
  if "operationId" in definition:
56
- self.target = source.schema.get_operation_by_id(definition["operationId"]) # type: ignore
61
+ operation_reference = definition["operationId"]
62
+ get_operation = source.schema.get_operation_by_id
57
63
  else:
58
- self.target = source.schema.get_operation_by_reference(definition["operationRef"]) # type: ignore
64
+ operation_reference = definition["operationRef"]
65
+ get_operation = source.schema.get_operation_by_reference
66
+
67
+ try:
68
+ self.target = get_operation(operation_reference)
69
+ target = self.target.label
70
+ except OperationNotFound:
71
+ target = operation_reference
72
+ errors.append(TransitionValidationError(f"Operation '{operation_reference}' not found"))
59
73
 
60
74
  extension = definition.get(SCHEMATHESIS_LINK_EXTENSION)
61
- self.parameters = self._normalize_parameters(definition.get("parameters", {}))
75
+ self.parameters = self._normalize_parameters(definition.get("parameters", {}), errors)
62
76
  self.body = definition.get("requestBody", NOT_SET)
63
77
  self.merge_body = extension.get("merge_body", True) if extension else True
64
78
 
79
+ if errors:
80
+ raise InvalidTransition(
81
+ name=self.name,
82
+ source=self.source.label,
83
+ target=target,
84
+ status_code=self.status_code,
85
+ errors=errors,
86
+ )
87
+
65
88
  self._cached_extract = lru_cache(8)(self._extract_impl)
66
89
 
67
- def _normalize_parameters(self, parameters: dict[str, str]) -> list[NormalizedParameter]:
90
+ def _normalize_parameters(
91
+ self, parameters: dict[str, str], errors: list[TransitionValidationError]
92
+ ) -> list[NormalizedParameter]:
68
93
  """Process link parameters and resolve their container locations.
69
94
 
70
95
  Handles both explicit locations (e.g., "path.id") and implicit ones resolved from target operation.
@@ -80,7 +105,34 @@ class OpenApiLink:
80
105
  location = None
81
106
  name = parameter
82
107
 
83
- container_name = self._get_parameter_container(location, name)
108
+ if isinstance(expression, str):
109
+ try:
110
+ parsed = expressions.parser.parse(expression)
111
+ # Find NonBodyRequest nodes that reference source parameters
112
+ for node in parsed:
113
+ if isinstance(node, expressions.nodes.NonBodyRequest):
114
+ # Check if parameter exists in source operation
115
+ if not any(
116
+ p.name == node.parameter and p.location == node.location
117
+ for p in self.source.iter_parameters()
118
+ ):
119
+ errors.append(
120
+ TransitionValidationError(
121
+ f"Expression `{expression}` references non-existent {node.location} parameter "
122
+ f"`{node.parameter}` in `{self.source.label}`"
123
+ )
124
+ )
125
+ except Exception as exc:
126
+ errors.append(TransitionValidationError(str(exc)))
127
+
128
+ if hasattr(self, "target"):
129
+ try:
130
+ container_name = self._get_parameter_container(location, name)
131
+ except TransitionValidationError as exc:
132
+ errors.append(exc)
133
+ continue
134
+ else:
135
+ continue
84
136
  result.append(NormalizedParameter(location, name, expression, container_name))
85
137
  return result
86
138
 
@@ -92,7 +144,7 @@ class OpenApiLink:
92
144
  for param in self.target.iter_parameters():
93
145
  if param.name == name:
94
146
  return LOCATION_TO_CONTAINER[param.location]
95
- raise ValueError(f"Parameter `{name}` is not defined in API operation `{self.target.label}`")
147
+ raise TransitionValidationError(f"Parameter `{name}` is not defined in API operation `{self.target.label}`")
96
148
 
97
149
  def extract(self, output: StepOutput) -> Transition:
98
150
  return self._cached_extract(StepOutputWrapper(output))
@@ -100,7 +152,7 @@ class OpenApiLink:
100
152
  def _extract_impl(self, wrapper: StepOutputWrapper) -> Transition:
101
153
  output = wrapper.output
102
154
  return Transition(
103
- id=f"{self.source.label} - {self.status_code} - {self.name}",
155
+ id=f"{self.source.label} -> [{self.status_code}] {self.name} -> {self.target.label}",
104
156
  parent_id=output.case.id,
105
157
  parameters=self.extract_parameters(output),
106
158
  request_body=self.extract_body(output),
@@ -148,11 +200,17 @@ class StepOutputWrapper:
148
200
  return self.output.case.id == other.output.case.id
149
201
 
150
202
 
151
- def get_all_links(operation: APIOperation) -> Generator[tuple[str, OpenApiLink], None, None]:
203
+ def get_all_links(
204
+ operation: APIOperation,
205
+ ) -> Generator[tuple[str, Result[OpenApiLink, InvalidTransition]], None, None]:
152
206
  for status_code, definition in operation.definition.raw["responses"].items():
153
207
  definition = operation.schema.resolver.resolve_all(definition, RECURSION_DEPTH_LIMIT - 8) # type: ignore[attr-defined]
154
208
  for name, link_definition in definition.get(operation.schema.links_field, {}).items(): # type: ignore
155
- yield status_code, OpenApiLink(name, status_code, link_definition, operation)
209
+ try:
210
+ link = OpenApiLink(name, status_code, link_definition, operation)
211
+ yield status_code, Ok(link)
212
+ except InvalidTransition as exc:
213
+ yield status_code, Err(exc)
156
214
 
157
215
 
158
216
  StatusCode = Union[str, int]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: schemathesis
3
- Version: 4.0.0a2
3
+ Version: 4.0.0a4
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
@@ -1,35 +1,36 @@
1
1
  schemathesis/__init__.py,sha256=ggp1CxctLo__wwFwlDhvtrexxDXGSbRjFKzXw_Twi7k,1139
2
2
  schemathesis/auths.py,sha256=t-YuPyoLqL7jlRUH-45JxO7Ir3pYxpe31CRmNIJh7rI,15423
3
3
  schemathesis/checks.py,sha256=B5-ROnjvvwpaqgj_iQ7eCjGqvRRVT30eWNPLKmwdrM8,5084
4
- schemathesis/errors.py,sha256=v5LpP5Yv78E96HoMJCsiKT_epDjkzLYMT0TtkarqomY,1336
5
- schemathesis/filters.py,sha256=6kffe_Xbi7-xThsUciWfmy1IU-LBgSYkXROUJJONJ48,13311
4
+ schemathesis/errors.py,sha256=VSZ-h9Bt7QvrvywOGB-MoHCshR8OWJegYlBxfVh5Vuw,899
5
+ schemathesis/filters.py,sha256=CzVPnNSRLNgvLlU5_WssPEC0wpdQi0dMvDpHSQbAlkE,13577
6
6
  schemathesis/hooks.py,sha256=jTdN5GJbxHRMshxgcuI_th9ouuL32CN4m2Jt0pmT_bs,13148
7
7
  schemathesis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- schemathesis/schemas.py,sha256=wQqKfZIaPgfAzLVUOxkgW7LqwBdWtLJeryeouytUlTw,27412
9
- schemathesis/cli/__init__.py,sha256=Fxsopap2Mw6mYh27l6xMRJ5PhUsCJ19pDxDj2hCc2wg,582
8
+ schemathesis/schemas.py,sha256=Hs2pJTUa2Od3x5YRprrKYIfE7ndpKbAqeDylAWkB6yM,27407
9
+ schemathesis/cli/__init__.py,sha256=U9gjzWWpiFhaqevPjZbwyTNjABdpvXETI4HgwdGKnvs,877
10
10
  schemathesis/cli/__main__.py,sha256=MWaenjaUTZIfNPFzKmnkTiawUri7DVldtg3mirLwzU8,92
11
11
  schemathesis/cli/constants.py,sha256=rUixnqorraUFDtOu3Nmm1x_k0qbgmW9xW96kQB_fBCQ,338
12
12
  schemathesis/cli/core.py,sha256=Qm5xvpIIMwJDTeR3N3TjKhMCHV5d5Rp0UstVS2GjWgw,459
13
13
  schemathesis/cli/hooks.py,sha256=vTrA8EN99whRns5K5AnExViQ6WL9cak5RGsC-ZBEiJM,1458
14
14
  schemathesis/cli/commands/__init__.py,sha256=FFalEss3D7mnCRO0udtYb65onXSjQCCOv8sOSjqvTTM,1059
15
- schemathesis/cli/commands/run/__init__.py,sha256=mpXoFTAuyaBjTQiusLVfzU9BXwcNN84vcmll22bQ-18,22651
15
+ schemathesis/cli/commands/run/__init__.py,sha256=5hxw_Xxn8cleTFF6eUBxeQBBW1Ztlmi3BLPCsAA_fqg,23871
16
16
  schemathesis/cli/commands/run/checks.py,sha256=-p6bzuc98kNR1VhkTI2s4xaJx-b5zYSMwdlhONwUhRM,3337
17
- schemathesis/cli/commands/run/context.py,sha256=o_lUkR2bpsxO4oMB7eJVCMIR9jmfS0nLZCd_LdOluF4,3906
18
- schemathesis/cli/commands/run/events.py,sha256=rGR0Gm2Vw8YZGz7w2buj8Gck_UO9TDl1oSLLoEitDz8,960
19
- schemathesis/cli/commands/run/executor.py,sha256=vTqr4eq88d3Q0pIh14wgkO6B6N6r-uEP0hdUG7gemqg,4699
20
- schemathesis/cli/commands/run/filters.py,sha256=vBYH_Q1Gc2yjo4pysd1nSKfNVQADh5POFoAExvUPmqQ,7390
21
- schemathesis/cli/commands/run/hypothesis.py,sha256=3PkcUSe-P6zgkhPJbN8RstjGNzgcY76AVlJ7ayu44Eg,3582
17
+ schemathesis/cli/commands/run/context.py,sha256=fXt7kMZc-O1cddknb_NCs23SP7JZ05eVhEn00TxXass,7187
18
+ schemathesis/cli/commands/run/events.py,sha256=Dj-xvIr-Hkms8kvh4whNwKSk1Q2Hx4NIENi_4A8nQO8,1224
19
+ schemathesis/cli/commands/run/executor.py,sha256=AbLqlTBsbIFNoTlUZZTcChAmCeA-1iony-XgQU8g6Gw,5405
20
+ schemathesis/cli/commands/run/filters.py,sha256=MdymOZtzOolvXCNBIdfHbBbWEXVF7Se0mmDpy3sVWu4,7411
21
+ schemathesis/cli/commands/run/hypothesis.py,sha256=kUPm8W5JB2Njt9ZvrWsrskwx33n3qYh6Xqkp0YBGY_0,4000
22
22
  schemathesis/cli/commands/run/loaders.py,sha256=VedoeIE1tgFBqVokWxOoUReAjBl-Zhx87RjCEBtCVfs,4840
23
- schemathesis/cli/commands/run/validation.py,sha256=zeMQ2QAlVTwxUriRJjo9AQbQRXqm41F7YMP3JysY6vQ,12667
23
+ schemathesis/cli/commands/run/reports.py,sha256=OjyakiV0lpNDBZb1xsb_2HmLtcqhTThPYMpJGXyNNO8,2147
24
+ schemathesis/cli/commands/run/validation.py,sha256=7fvLeDREQ9FTV8ZMJRnCdycD858j21k7j56ow4_iIcY,12789
24
25
  schemathesis/cli/commands/run/handlers/__init__.py,sha256=TPZ3KdGi8m0fjlN0GjA31MAXXn1qI7uU4FtiDwroXZI,1915
25
26
  schemathesis/cli/commands/run/handlers/base.py,sha256=yDsTtCiztLksfk7cRzg8JlaAVOfS-zwK3tsJMOXAFyc,530
26
- schemathesis/cli/commands/run/handlers/cassettes.py,sha256=y4gtGnAfhE9dskhXPnDAQSx3kY4R2a1hvAiE3o8AsUA,19001
27
- schemathesis/cli/commands/run/handlers/junitxml.py,sha256=MkFq_DyMWves4Ytj72-4secMTlBOt7Gs9W3nfBzknIA,2316
28
- schemathesis/cli/commands/run/handlers/output.py,sha256=l6Q_UZk_Fd3EzLQHU2TgaXvcn9M-ASLfjT4Y9wx9PyU,50197
27
+ schemathesis/cli/commands/run/handlers/cassettes.py,sha256=SVk13xPhsQduCpgvvBwzEMDNTju-SHQCW90xTQ6iL1U,18525
28
+ schemathesis/cli/commands/run/handlers/junitxml.py,sha256=c24UiwXqRCnv2eWQWEaNXLOghMI9JtGoZ9RTJY4ao6M,2350
29
+ schemathesis/cli/commands/run/handlers/output.py,sha256=O95Ap8_HtnNtNPf9kaV-rNa7mGG6_A06ySlMUhgNwVg,54505
29
30
  schemathesis/cli/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
31
  schemathesis/cli/ext/fs.py,sha256=OA3mRzra4rq3NyDTcBvlRh0WJrh4ByN-QQ8loI04m88,408
31
- schemathesis/cli/ext/groups.py,sha256=9mIZUnQasUxGz6gZA0IoGVGKtSQuVNl8w2pwX_a1nBk,1796
32
- schemathesis/cli/ext/options.py,sha256=Cm56WoktqBjKb8uDf063XT1der7lWOnTd81Y56PjoIg,3657
32
+ schemathesis/cli/ext/groups.py,sha256=kQ37t6qeArcKaY2y5VxyK3_KwAkBKCVm58IYV8gewds,2720
33
+ schemathesis/cli/ext/options.py,sha256=gBjfYPoiSoxCymWq41x0oKcQ2frv1fQnweETVpYiIsA,4096
33
34
  schemathesis/contrib/__init__.py,sha256=wxpX86xrEGRAS3f7eugQfKVbnqV6ZfOqFBS_DmWxOok,120
34
35
  schemathesis/contrib/openapi/__init__.py,sha256=-7mBZ9RQj0EGzzmC-HKiT5ZslwHcoWFqCVpRG0GHO_o,162
35
36
  schemathesis/contrib/openapi/fill_missing_examples.py,sha256=BfBpuy3vCKbE_uILqPXnm7kxEDopAr5tNQwP5E9xX8A,585
@@ -38,8 +39,8 @@ schemathesis/core/compat.py,sha256=Lflo6z-nQ6S4uKZINc4Fr90pd3LTN6cIG9HJJmmaHeY,7
38
39
  schemathesis/core/control.py,sha256=IzwIc8HIAEMtZWW0Q0iXI7T1niBpjvcLlbuwOSmy5O8,130
39
40
  schemathesis/core/curl.py,sha256=yuaCe_zHLGwUjEeloQi6W3tOA3cGdnHDNI17-5jia0o,1723
40
41
  schemathesis/core/deserialization.py,sha256=ygIj4fNaOd0mJ2IvTsn6bsabBt_2AbSLCz-z9UqfpdQ,2406
41
- schemathesis/core/errors.py,sha256=Euy3YfF49dAH70KgMz4uFO5eRRX485RkT8v4go0TxOc,13423
42
- schemathesis/core/failures.py,sha256=4ftUsY0q1QqqfWpYkl5lWCZVBUAMy8VP9pXsyDZ8Q3o,8723
42
+ schemathesis/core/errors.py,sha256=97Fk3udsMaS5xZrco7ZaShqe4W6g2aZ55J7d58HPRac,15881
43
+ schemathesis/core/failures.py,sha256=jbbxOXB8LDYoLI97YrLCKi9XLuSqVqFJSLeeixVJPRU,8828
43
44
  schemathesis/core/fs.py,sha256=ItQT0_cVwjDdJX9IiI7EnU75NI2H3_DCEyyUjzg_BgI,472
44
45
  schemathesis/core/lazy_import.py,sha256=aMhWYgbU2JOltyWBb32vnWBb6kykOghucEzI_F70yVE,470
45
46
  schemathesis/core/loaders.py,sha256=SQQ-8m64-D2FaOgvwKZLyTtLJuzP3RPo7Ud2BERK1c0,3404
@@ -48,7 +49,7 @@ schemathesis/core/media_types.py,sha256=vV0CEu34sDoZWXvu4R1Y1HosxVS4YXZV8iTov8fU
48
49
  schemathesis/core/rate_limit.py,sha256=7tg9Znk11erTfw8-ANutjEmu7hbfUHZx_iEdkoaP174,1757
49
50
  schemathesis/core/registries.py,sha256=T4jZB4y3zBHdeSgQc0pRbgSeMblvO-6z4I3zmzIfTi0,811
50
51
  schemathesis/core/result.py,sha256=d449YvyONjqjDs-A5DAPgtAI96iT753K8sU6_1HLo2Q,461
51
- schemathesis/core/transforms.py,sha256=oFyUcGILC_bUrPShKKS0C2KyROJLWQnCirbdElHuQSI,3521
52
+ schemathesis/core/transforms.py,sha256=63aeLkR93r3krq4CwYtDcoS_pFBky4L16c9DcFsBHuE,3535
52
53
  schemathesis/core/transport.py,sha256=VqtVF4JxMuPXSBORzS8SOSLUnCEZL6gPOr0kuymMCAk,3249
53
54
  schemathesis/core/validation.py,sha256=JJbSymYUKKcbkY2L3nECKrbIVUb9PRyUsTqa-aeDEAw,1153
54
55
  schemathesis/core/version.py,sha256=O-6yFbNocbD4RDwiBZLborxTp54htyKxBWTqpZDnPvg,202
@@ -58,34 +59,34 @@ schemathesis/engine/__init__.py,sha256=xncZMXY8S-v4mrfnW4CK6-RQ0S0bigfLDJScpQysb
58
59
  schemathesis/engine/config.py,sha256=vWwtaWuSLvE-w0S9n4_MlJADjN58zlgSp84ZQS2z0ls,1919
59
60
  schemathesis/engine/context.py,sha256=HeLX-0aqSAbXJe_ZlkqVfg3QlhmbCrazbb9-ZPbi0h0,3723
60
61
  schemathesis/engine/control.py,sha256=QKUOs5VMphe7EcAIro_DDo9ZqdOU6ZVwTU1gMNndHWw,1006
61
- schemathesis/engine/core.py,sha256=Q7fkHlGJdMDTt4PBFp53rWJbyQdNOMgn1QIt2nI74KQ,5088
62
- schemathesis/engine/errors.py,sha256=nvl-2DKQSBAbas1MpEveUGLb_DL-LtMkcg9LijmctPM,16179
62
+ schemathesis/engine/core.py,sha256=_Z89tc_aWQ0kHajVXmoTaEbIRYeERvb1s0rD82XpYxg,5085
63
+ schemathesis/engine/errors.py,sha256=8PHYsuq2qIEJHm2FDf_UnWa4IDc-DRFTPckLAr22yhE,16895
63
64
  schemathesis/engine/events.py,sha256=7tpxCxptKx_WvcFgv9_6v0E-5wiQfDs1O5bsOH46xb8,5989
64
- schemathesis/engine/recorder.py,sha256=jmYhsk-RCIXvUyOqmSTL2shMBFepL58s0r1z2Ydg1YE,8428
65
+ schemathesis/engine/recorder.py,sha256=K3HfMARrT5mPWXPnYebjjcq5CcsBRhMrtZwEL9_Lvtg,8432
65
66
  schemathesis/engine/phases/__init__.py,sha256=HZmlOjGvtDkfTwAw2rJFcfsJ2qg2h973l4zDy3AzsQg,2034
66
67
  schemathesis/engine/phases/probes.py,sha256=3M9g3E7CXbDDK_8inuvkRZibCCcoO2Ce5U3lnyTeWXQ,5131
67
- schemathesis/engine/phases/stateful/__init__.py,sha256=_m0gx9ASfAKawAlHtI5hnWdMJs5QFUw1jd8VlxjETJo,2308
68
- schemathesis/engine/phases/stateful/_executor.py,sha256=V_nJJDaDSOEGH2hcoCyZH4xz_57Vqu8k4XpNd53znSg,12640
68
+ schemathesis/engine/phases/stateful/__init__.py,sha256=lWo2RLrutNblHvohTzofQqL22GORwBRA8bf6jvLuGPg,2391
69
+ schemathesis/engine/phases/stateful/_executor.py,sha256=m1ZMqFUPc4Hdql10l0gF3tpP4JOImSA-XeBd4jg3Ll8,12443
69
70
  schemathesis/engine/phases/stateful/context.py,sha256=SKWsok-tlWbUDagiUmP7cLNW6DsgFDc_Afv0vQfWv6c,2964
70
- schemathesis/engine/phases/unit/__init__.py,sha256=XgLGwkVemmobLP6cyfAGYLu8RFRCrv6osfB3BD6OAS0,7537
71
- schemathesis/engine/phases/unit/_executor.py,sha256=X8hziN6rAd9vRTkbiMKcZWN6ujj4pUEiVdm6OmFsniI,12931
71
+ schemathesis/engine/phases/unit/__init__.py,sha256=R6ZLed54p_kXUE_tVF60ucj8J6V04--Tf6smm4qavFg,7468
72
+ schemathesis/engine/phases/unit/_executor.py,sha256=LjdR6pcvtqCV3nXszU_IOBtR-lnRGKg0aLGDwz9PRVM,13016
72
73
  schemathesis/engine/phases/unit/_pool.py,sha256=01xRGJnmfLqGBH-f3nQEDv7vOufmen5ZCiXwNLpkxOw,2210
73
74
  schemathesis/experimental/__init__.py,sha256=36H1vLQhrw4SMD_jx76Wt07PHneELRDY1jfBSh7VxU0,2257
74
75
  schemathesis/generation/__init__.py,sha256=2htA0TlQee6AvQmLl1VNxEptRDqvPjksXKJLMVLAJng,1580
75
76
  schemathesis/generation/case.py,sha256=Rt5MCUtPVYVQzNyjUx8magocPJpHV1svyuqQSTwUE-I,7306
76
- schemathesis/generation/coverage.py,sha256=u6VjUUQq3nNFOaJingO8CR-e_qL5BqQrUJRU5MZNzDQ,39149
77
+ schemathesis/generation/coverage.py,sha256=hyDb465tBoCWE7nI-ZJjhTUzk7f2WDufaadWdSAkdr0,39276
77
78
  schemathesis/generation/meta.py,sha256=36h6m4E7jzLGa8TCvl7eBl_xUWLiRul3qxzexl5cB58,2515
78
79
  schemathesis/generation/modes.py,sha256=t_EvKr2aOXYMsEfdMu4lLF4KCGcX1LVVyvzTkcpJqhk,663
79
80
  schemathesis/generation/overrides.py,sha256=FhqcFoliEvgW6MZyFPYemfLgzKt3Miy8Cud7OMOCb7g,3045
80
81
  schemathesis/generation/targets.py,sha256=_rN2qgxTE2EfvygiN-Fy3WmDnRH0ERohdx3sKRDaYhU,2120
81
82
  schemathesis/generation/hypothesis/__init__.py,sha256=Rl7QwvMBMJI7pBqTydplX6bXC420n0EGQHVm-vZgaYQ,1204
82
- schemathesis/generation/hypothesis/builder.py,sha256=s1JHSL0ATNk8u-dli1a-LQzjhyiIgUBfUuJCwp-rt8g,24401
83
+ schemathesis/generation/hypothesis/builder.py,sha256=K8pA5hFkx7sXSFIR8zX7ltYCwJHx3CFcq4Rm12ou1wk,24650
83
84
  schemathesis/generation/hypothesis/examples.py,sha256=6eGaKUEC3elmKsaqfKj1sLvM8EHc-PWT4NRBq4NI0Rs,1409
84
85
  schemathesis/generation/hypothesis/given.py,sha256=sTZR1of6XaHAPWtHx2_WLlZ50M8D5Rjux0GmWkWjDq4,2337
85
86
  schemathesis/generation/hypothesis/reporting.py,sha256=uDVow6Ya8YFkqQuOqRsjbzsbyP4KKfr3jA7ZaY4FuKY,279
86
87
  schemathesis/generation/hypothesis/strategies.py,sha256=RurE81E06d99YKG48dizy9346ayfNswYTt38zewmGgw,483
87
88
  schemathesis/generation/stateful/__init__.py,sha256=kXpCGbo1-QqfR2N0Z07tLw0Z5_tvbuG3Tk-WI_I1doI,653
88
- schemathesis/generation/stateful/state_machine.py,sha256=hV-npuzfvp0cxT6SBxAYoseuxmTdbChGnDZ3Wf7nL9o,10962
89
+ schemathesis/generation/stateful/state_machine.py,sha256=3NoB3pYd3BZ0XzlQlhCf8WBCMGttJw25DWCTDsuulGc,12306
89
90
  schemathesis/graphql/__init__.py,sha256=_eO6MAPHGgiADVGRntnwtPxmuvk666sAh-FAU4cG9-0,326
90
91
  schemathesis/graphql/checks.py,sha256=IADbxiZjgkBWrC5yzHDtohRABX6zKXk5w_zpWNwdzYo,3186
91
92
  schemathesis/graphql/loaders.py,sha256=96R_On1jFvsNuLwqXnO3_TTpsYhdCv0LAmR5jWRXXnY,4756
@@ -96,9 +97,9 @@ schemathesis/openapi/generation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
96
97
  schemathesis/openapi/generation/filters.py,sha256=MB2t_k6OVc2Rt6qXUrV-u-3sDg5wX6c0Mli9WgfMUF4,2001
97
98
  schemathesis/pytest/__init__.py,sha256=7W0q-Thcw03IAQfXE_Mo8JPZpUdHJzfu85fjK1ZdfQM,88
98
99
  schemathesis/pytest/control_flow.py,sha256=F8rAPsPeNv_sJiJgbZYtTpwKWjauZmqFUaKroY2GmQI,217
99
- schemathesis/pytest/lazy.py,sha256=FK_fVndvGn02wuVDMwaGfl2NlbVbQWEmCgMjRxeOmRk,10541
100
+ schemathesis/pytest/lazy.py,sha256=tPW8_VfMWy4vqk-XgzswqvL9jCYxhIyYieq1HFf4UTw,10480
100
101
  schemathesis/pytest/loaders.py,sha256=oQJ78yyuIm3Ye9X7giVjDB1vYfaW5UY5YuhaTLm_ZFU,266
101
- schemathesis/pytest/plugin.py,sha256=ZIF75b4G81IGtGle0c8PHYeWcR_pHGC2NoSlijsznCQ,12372
102
+ schemathesis/pytest/plugin.py,sha256=kon8stIVLCySkeyTTk0gBunEs5sUkXwQY8Nviwb-dxA,12303
102
103
  schemathesis/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
104
  schemathesis/python/asgi.py,sha256=5PyvuTBaivvyPUEi3pwJni91K1kX5Zc0u9c6c1D8a1Q,287
104
105
  schemathesis/python/wsgi.py,sha256=uShAgo_NChbfYaV1117e6UHp0MTg7jaR0Sy_to3Jmf8,219
@@ -112,40 +113,41 @@ schemathesis/specs/graphql/validation.py,sha256=-W1Noc1MQmTb4RX-gNXMeU2qkgso4mzV
112
113
  schemathesis/specs/openapi/__init__.py,sha256=C5HOsfuDJGq_3mv8CRBvRvb0Diy1p0BFdqyEXMS-loE,238
113
114
  schemathesis/specs/openapi/_cache.py,sha256=HpglmETmZU0RCHxp3DO_sg5_B_nzi54Zuw9vGzzYCxY,4295
114
115
  schemathesis/specs/openapi/_hypothesis.py,sha256=n_39iyz1rt2EdSe-Lyr-3sOIEyJIthnCVR4tGUUvH1c,21328
115
- schemathesis/specs/openapi/checks.py,sha256=bgThVKGwmxDLnAxH8B96t0Qn-hNkpE0DrZ1B7GvTXJM,26236
116
+ schemathesis/specs/openapi/checks.py,sha256=Fk2_2MdKjhMuHGkWtm_lu_8c8DenF9ttZfDGN9nPnj0,27697
116
117
  schemathesis/specs/openapi/constants.py,sha256=JqM_FHOenqS_MuUE9sxVQ8Hnw0DNM8cnKDwCwPLhID4,783
117
118
  schemathesis/specs/openapi/converter.py,sha256=lil8IewM5j8tvt4lpA9g_KITvIwx1M96i45DNSHNjoc,3505
118
119
  schemathesis/specs/openapi/definitions.py,sha256=8htclglV3fW6JPBqs59lgM4LnA25Mm9IptXBPb_qUT0,93949
119
120
  schemathesis/specs/openapi/examples.py,sha256=Uy6naFBq-m1vo_18j4KuZBUYc9qKrBk19jBCWT7tnRg,20464
120
121
  schemathesis/specs/openapi/formats.py,sha256=ViVF3aFeFI1ctwGQbiRDXhU3so82P0BCaF2aDDbUUm8,2816
121
- schemathesis/specs/openapi/links.py,sha256=c3ko0jrASbqpo7JaD22DKtlZaUvGUTG51jHvEJPzDpQ,8802
122
122
  schemathesis/specs/openapi/media_types.py,sha256=ADedOaNWjbAtAekyaKmNj9fY6zBTeqcNqBEjN0EWNhI,1014
123
- schemathesis/specs/openapi/parameters.py,sha256=fmOkH-KhMVzWmE6eSw2pw2hernril5MDL7DwwEG4344,14655
124
- schemathesis/specs/openapi/patterns.py,sha256=RpvsAfpcm2dAcFYj-N6w0iQ1VdCT9h8BLdS1mrso6II,5518
123
+ schemathesis/specs/openapi/parameters.py,sha256=hv1reNpSjVuzFbtMpSTwWZ75zcWTOy5ZE0ah6AVEqAo,14565
124
+ schemathesis/specs/openapi/patterns.py,sha256=6qNZRYQkHtJ98_JMjwhqIGpeR4aR7rlxcCmr1nOHMzk,11258
125
125
  schemathesis/specs/openapi/references.py,sha256=YjD1xMlaYS7xLt6PrrVS20R72ZWHuFZFTa8Llzf54Rg,8808
126
- schemathesis/specs/openapi/schemas.py,sha256=kFihC15IMAMce_o1VtHGhZawjmczFlMkbKUj9sbnmbk,53692
126
+ schemathesis/specs/openapi/schemas.py,sha256=VSeacEAVJJ6EKJ-llwOaX4aalzUTXyWP8s4wbxTqtWc,54720
127
127
  schemathesis/specs/openapi/security.py,sha256=6UWYMhL-dPtkTineqqBFNKca1i4EuoTduw-EOLeE0aQ,7149
128
128
  schemathesis/specs/openapi/serialization.py,sha256=JFxMqCr8YWwPT4BVrbvVytcAmkzGXyL1_Q1xR1JKBPs,11464
129
129
  schemathesis/specs/openapi/utils.py,sha256=ER4vJkdFVDIE7aKyxyYatuuHVRNutytezgE52pqZNE8,900
130
- schemathesis/specs/openapi/expressions/__init__.py,sha256=7W6Nv6sWusiBr7MxEhG_MoTKimuY6B7vJMGB80FPzV0,1691
130
+ schemathesis/specs/openapi/expressions/__init__.py,sha256=hfuRtXD75tQFhzSo6QgDZ3zByyWeZRKevB8edszAVj4,2272
131
131
  schemathesis/specs/openapi/expressions/errors.py,sha256=YLVhps-sYcslgVaahfcUYxUSHlIfWL-rQMeT5PZSMZ8,219
132
132
  schemathesis/specs/openapi/expressions/extractors.py,sha256=Py3of3_vBACP4ljiZIcgd-xQCrWIpcMsfQFc0EtAUoA,470
133
133
  schemathesis/specs/openapi/expressions/lexer.py,sha256=LeVE6fgYT9-fIsXrv0-YrRHnI4VPisbwsexyh9Q5YU0,3982
134
- schemathesis/specs/openapi/expressions/nodes.py,sha256=Lfy1CcSSoYUnX-C_S5T-IqQOszRCteallLBaMnsNwVs,4076
135
- schemathesis/specs/openapi/expressions/parser.py,sha256=gM_Ob-TlTGxpgjZGRHNyPhBj1YAvRgRoSlNCrE7-djk,4452
134
+ schemathesis/specs/openapi/expressions/nodes.py,sha256=YvpbAi8OFdb6RqqrqReGBeADpAmFaoyWN-lGiyYOXTc,4072
135
+ schemathesis/specs/openapi/expressions/parser.py,sha256=e-ZxshrGE_5CVbgcZLYgdGSjdifgyzgKkLQp0dI0cJY,4503
136
136
  schemathesis/specs/openapi/negative/__init__.py,sha256=60QqVBTXPTsAojcf7GDs7v8WbOE_k3g_VC_DBeQUqBw,3749
137
137
  schemathesis/specs/openapi/negative/mutations.py,sha256=7jTjD9rt5vxWSVBL5Hx8Avj4WhTA63frDQiFMKysrUU,19248
138
138
  schemathesis/specs/openapi/negative/types.py,sha256=a7buCcVxNBG6ILBM3A7oNTAX0lyDseEtZndBuej8MbI,174
139
139
  schemathesis/specs/openapi/negative/utils.py,sha256=ozcOIuASufLqZSgnKUACjX-EOZrrkuNdXX0SDnLoGYA,168
140
- schemathesis/specs/openapi/stateful/__init__.py,sha256=W1CwDtYYiy4hwpMFEqD6Ya9Sif_shQo7mbeWgo-XJXA,9728
140
+ schemathesis/specs/openapi/stateful/__init__.py,sha256=0pu_iGjRiKuqUDN3ewz1zUOt6f1SdvSxVtHC5uK-CYw,14750
141
+ schemathesis/specs/openapi/stateful/control.py,sha256=QaXLSbwQWtai5lxvvVtQV3BLJ8n5ePqSKB00XFxp-MA,3695
142
+ schemathesis/specs/openapi/stateful/links.py,sha256=8oHpmb-yBa3kZKoCv9ytndpOp80dG1vVis2-EpbkeVA,11432
141
143
  schemathesis/transport/__init__.py,sha256=z-mRNSOlMBKwQyaEIhpmYv0plWTmK5dJqc9UmQOry80,3949
142
144
  schemathesis/transport/asgi.py,sha256=qTClt6oT_xUEWnRHokACN_uqCNNUZrRPT6YG0PjbElY,926
143
145
  schemathesis/transport/prepare.py,sha256=qQ6zXBw5NN2AIM0bzLAc5Ryc3dmMb0R6xN14lnR49pU,3826
144
146
  schemathesis/transport/requests.py,sha256=OObRvcTL72-BZ7AfuDUrZZU9nZtfBqr22oF8nkzaOLE,8389
145
147
  schemathesis/transport/serialization.py,sha256=jIMra1LqRGav0OX3Hx7mvORt38ll4cd2DKit2D58FN0,10531
146
148
  schemathesis/transport/wsgi.py,sha256=RWSuUXPrl91GxAy8a4jyNNozOWVMRBxKx_tljlWA_Lo,5697
147
- schemathesis-4.0.0a2.dist-info/METADATA,sha256=IcvZ7pOCr48wivV_O6DKm6HGqsXvZzkMpYVkM_lv88M,12292
148
- schemathesis-4.0.0a2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
149
- schemathesis-4.0.0a2.dist-info/entry_points.txt,sha256=hiK3un-xfgPdwj9uj16YVDtTNpO128bmk0U82SMv8ZQ,152
150
- schemathesis-4.0.0a2.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
151
- schemathesis-4.0.0a2.dist-info/RECORD,,
149
+ schemathesis-4.0.0a4.dist-info/METADATA,sha256=dCVDX4dbQi5yTEg-CRNkZBEuWl3s0lDOKs6w-BNakzI,12292
150
+ schemathesis-4.0.0a4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
151
+ schemathesis-4.0.0a4.dist-info/entry_points.txt,sha256=hiK3un-xfgPdwj9uj16YVDtTNpO128bmk0U82SMv8ZQ,152
152
+ schemathesis-4.0.0a4.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
153
+ schemathesis-4.0.0a4.dist-info/RECORD,,