schemathesis 4.0.0a3__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 (40) hide show
  1. schemathesis/cli/__init__.py +3 -3
  2. schemathesis/cli/commands/run/__init__.py +148 -94
  3. schemathesis/cli/commands/run/context.py +72 -2
  4. schemathesis/cli/commands/run/executor.py +32 -12
  5. schemathesis/cli/commands/run/filters.py +1 -0
  6. schemathesis/cli/commands/run/handlers/cassettes.py +27 -46
  7. schemathesis/cli/commands/run/handlers/junitxml.py +1 -1
  8. schemathesis/cli/commands/run/handlers/output.py +72 -16
  9. schemathesis/cli/commands/run/hypothesis.py +30 -19
  10. schemathesis/cli/commands/run/reports.py +72 -0
  11. schemathesis/cli/commands/run/validation.py +18 -12
  12. schemathesis/cli/ext/groups.py +42 -13
  13. schemathesis/cli/ext/options.py +15 -8
  14. schemathesis/core/errors.py +79 -11
  15. schemathesis/core/failures.py +2 -1
  16. schemathesis/core/transforms.py +1 -1
  17. schemathesis/engine/errors.py +8 -3
  18. schemathesis/engine/phases/stateful/_executor.py +1 -1
  19. schemathesis/engine/phases/unit/__init__.py +2 -3
  20. schemathesis/engine/phases/unit/_executor.py +16 -13
  21. schemathesis/errors.py +6 -2
  22. schemathesis/filters.py +8 -0
  23. schemathesis/generation/coverage.py +6 -1
  24. schemathesis/generation/stateful/state_machine.py +49 -3
  25. schemathesis/pytest/lazy.py +2 -3
  26. schemathesis/pytest/plugin.py +2 -3
  27. schemathesis/schemas.py +1 -1
  28. schemathesis/specs/openapi/checks.py +27 -10
  29. schemathesis/specs/openapi/expressions/__init__.py +22 -6
  30. schemathesis/specs/openapi/expressions/nodes.py +15 -21
  31. schemathesis/specs/openapi/expressions/parser.py +1 -1
  32. schemathesis/specs/openapi/parameters.py +0 -2
  33. schemathesis/specs/openapi/schemas.py +13 -13
  34. schemathesis/specs/openapi/stateful/__init__.py +96 -23
  35. schemathesis/specs/openapi/{links.py → stateful/links.py} +60 -16
  36. {schemathesis-4.0.0a3.dist-info → schemathesis-4.0.0a4.dist-info}/METADATA +1 -1
  37. {schemathesis-4.0.0a3.dist-info → schemathesis-4.0.0a4.dist-info}/RECORD +40 -39
  38. {schemathesis-4.0.0a3.dist-info → schemathesis-4.0.0a4.dist-info}/WHEEL +0 -0
  39. {schemathesis-4.0.0a3.dist-info → schemathesis-4.0.0a4.dist-info}/entry_points.txt +0 -0
  40. {schemathesis-4.0.0a3.dist-info → schemathesis-4.0.0a4.dist-info}/licenses/LICENSE +0 -0
@@ -5,14 +5,13 @@ from functools import lru_cache
5
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 InvalidLinkDefinition, InvalidSchema, OperationNotFound
8
+ from schemathesis.core.errors import InvalidTransition, OperationNotFound, TransitionValidationError
9
9
  from schemathesis.core.result import Err, Ok, Result
10
10
  from schemathesis.generation.stateful.state_machine import ExtractedParam, StepOutput, Transition
11
11
  from schemathesis.schemas import APIOperation
12
-
13
- from . import expressions
14
- from .constants import LOCATION_TO_CONTAINER
15
- 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
16
15
 
17
16
  if TYPE_CHECKING:
18
17
  from jsonschema import RefResolver
@@ -55,6 +54,7 @@ class OpenApiLink:
55
54
  self.status_code = status_code
56
55
  self.source = source
57
56
  assert isinstance(source.schema, BaseOpenAPISchema)
57
+ errors = []
58
58
 
59
59
  get_operation: Callable[[str], APIOperation]
60
60
  if "operationId" in definition:
@@ -66,19 +66,30 @@ class OpenApiLink:
66
66
 
67
67
  try:
68
68
  self.target = get_operation(operation_reference)
69
- except OperationNotFound as exc:
70
- raise InvalidLinkDefinition(
71
- f"Link '{name}' references non-existent operation '{operation_reference}' from {status_code} response of '{source.label}'"
72
- ) from exc
69
+ target = self.target.label
70
+ except OperationNotFound:
71
+ target = operation_reference
72
+ errors.append(TransitionValidationError(f"Operation '{operation_reference}' not found"))
73
73
 
74
74
  extension = definition.get(SCHEMATHESIS_LINK_EXTENSION)
75
- self.parameters = self._normalize_parameters(definition.get("parameters", {}))
75
+ self.parameters = self._normalize_parameters(definition.get("parameters", {}), errors)
76
76
  self.body = definition.get("requestBody", NOT_SET)
77
77
  self.merge_body = extension.get("merge_body", True) if extension else True
78
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
+
79
88
  self._cached_extract = lru_cache(8)(self._extract_impl)
80
89
 
81
- 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]:
82
93
  """Process link parameters and resolve their container locations.
83
94
 
84
95
  Handles both explicit locations (e.g., "path.id") and implicit ones resolved from target operation.
@@ -94,7 +105,34 @@ class OpenApiLink:
94
105
  location = None
95
106
  name = parameter
96
107
 
97
- 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
98
136
  result.append(NormalizedParameter(location, name, expression, container_name))
99
137
  return result
100
138
 
@@ -106,7 +144,7 @@ class OpenApiLink:
106
144
  for param in self.target.iter_parameters():
107
145
  if param.name == name:
108
146
  return LOCATION_TO_CONTAINER[param.location]
109
- raise InvalidSchema(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}`")
110
148
 
111
149
  def extract(self, output: StepOutput) -> Transition:
112
150
  return self._cached_extract(StepOutputWrapper(output))
@@ -114,7 +152,7 @@ class OpenApiLink:
114
152
  def _extract_impl(self, wrapper: StepOutputWrapper) -> Transition:
115
153
  output = wrapper.output
116
154
  return Transition(
117
- id=f"{self.source.label} - {self.status_code} - {self.name}",
155
+ id=f"{self.source.label} -> [{self.status_code}] {self.name} -> {self.target.label}",
118
156
  parent_id=output.case.id,
119
157
  parameters=self.extract_parameters(output),
120
158
  request_body=self.extract_body(output),
@@ -162,11 +200,17 @@ class StepOutputWrapper:
162
200
  return self.output.case.id == other.output.case.id
163
201
 
164
202
 
165
- 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]:
166
206
  for status_code, definition in operation.definition.raw["responses"].items():
167
207
  definition = operation.schema.resolver.resolve_all(definition, RECURSION_DEPTH_LIMIT - 8) # type: ignore[attr-defined]
168
208
  for name, link_definition in definition.get(operation.schema.links_field, {}).items(): # type: ignore
169
- 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)
170
214
 
171
215
 
172
216
  StatusCode = Union[str, int]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: schemathesis
3
- Version: 4.0.0a3
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=R_GkKg9o-XYWsU4f-Devn_clIrhMi5ZXpiAjqi5Tupw,791
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=cT8DmZYudre1a0cX2KOBytquJ85CMdmMnqqMZsIATJU,822
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
17
+ schemathesis/cli/commands/run/context.py,sha256=fXt7kMZc-O1cddknb_NCs23SP7JZ05eVhEn00TxXass,7187
18
18
  schemathesis/cli/commands/run/events.py,sha256=Dj-xvIr-Hkms8kvh4whNwKSk1Q2Hx4NIENi_4A8nQO8,1224
19
- schemathesis/cli/commands/run/executor.py,sha256=pozPf5kzizsQtCzssE_5M8AV2lgzPcE3o9xxoOA1n78,4816
20
- schemathesis/cli/commands/run/filters.py,sha256=vBYH_Q1Gc2yjo4pysd1nSKfNVQADh5POFoAExvUPmqQ,7390
21
- schemathesis/cli/commands/run/hypothesis.py,sha256=3PkcUSe-P6zgkhPJbN8RstjGNzgcY76AVlJ7ayu44Eg,3582
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=KlT_omUWRWzygvqz_nwRvXJXjtbmzTYhfWqPCLOQTBw,51917
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=ocwWs8xtoiTtzGn8eCdCtb_Hrdn-jHi_d_TNl29UIkI,13656
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
@@ -59,21 +60,21 @@ schemathesis/engine/config.py,sha256=vWwtaWuSLvE-w0S9n4_MlJADjN58zlgSp84ZQS2z0ls
59
60
  schemathesis/engine/context.py,sha256=HeLX-0aqSAbXJe_ZlkqVfg3QlhmbCrazbb9-ZPbi0h0,3723
60
61
  schemathesis/engine/control.py,sha256=QKUOs5VMphe7EcAIro_DDo9ZqdOU6ZVwTU1gMNndHWw,1006
61
62
  schemathesis/engine/core.py,sha256=_Z89tc_aWQ0kHajVXmoTaEbIRYeERvb1s0rD82XpYxg,5085
62
- schemathesis/engine/errors.py,sha256=EtgqS-6ngtFg6TtloN_g07t3wYPMF6JOSesZ3C2VyXY,16576
63
+ schemathesis/engine/errors.py,sha256=8PHYsuq2qIEJHm2FDf_UnWa4IDc-DRFTPckLAr22yhE,16895
63
64
  schemathesis/engine/events.py,sha256=7tpxCxptKx_WvcFgv9_6v0E-5wiQfDs1O5bsOH46xb8,5989
64
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
68
  schemathesis/engine/phases/stateful/__init__.py,sha256=lWo2RLrutNblHvohTzofQqL22GORwBRA8bf6jvLuGPg,2391
68
- schemathesis/engine/phases/stateful/_executor.py,sha256=oZSfgvGUmiyjVDGpTeZCRv8KLjesYXJeE3cs0OTkQ1E,12428
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=yQwazaxhKacHU3sA8shMPWQ1JhLE_90YgIZjvAymsG8,39133
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
@@ -85,7 +86,7 @@ schemathesis/generation/hypothesis/given.py,sha256=sTZR1of6XaHAPWtHx2_WLlZ50M8D5
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=S-mTOyLEeiO3PMv9LfSxQWSi8KxD5URptDxRpkO5Fmw,10947
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,41 +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=R-vehTWC6ZcVYVfKiXVdYHnZBTosMpZQzPPBsJ2dt-Y,26909
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=eVlZVnlIcBUSSnYEEb_Bes3tfY5F_BNsOo0IZCBb-io,9452
122
122
  schemathesis/specs/openapi/media_types.py,sha256=ADedOaNWjbAtAekyaKmNj9fY6zBTeqcNqBEjN0EWNhI,1014
123
- schemathesis/specs/openapi/parameters.py,sha256=fmOkH-KhMVzWmE6eSw2pw2hernril5MDL7DwwEG4344,14655
123
+ schemathesis/specs/openapi/parameters.py,sha256=hv1reNpSjVuzFbtMpSTwWZ75zcWTOy5ZE0ah6AVEqAo,14565
124
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=UAukxlH2bVlpZNnx_4EzhDefPpsEtC2ieWz_x336-SQ,54906
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=Tk9ahg6VVXwVw8yfFmrz9xhDWskBUaKEeBobdtd44HU,12020
140
+ schemathesis/specs/openapi/stateful/__init__.py,sha256=0pu_iGjRiKuqUDN3ewz1zUOt6f1SdvSxVtHC5uK-CYw,14750
141
141
  schemathesis/specs/openapi/stateful/control.py,sha256=QaXLSbwQWtai5lxvvVtQV3BLJ8n5ePqSKB00XFxp-MA,3695
142
+ schemathesis/specs/openapi/stateful/links.py,sha256=8oHpmb-yBa3kZKoCv9ytndpOp80dG1vVis2-EpbkeVA,11432
142
143
  schemathesis/transport/__init__.py,sha256=z-mRNSOlMBKwQyaEIhpmYv0plWTmK5dJqc9UmQOry80,3949
143
144
  schemathesis/transport/asgi.py,sha256=qTClt6oT_xUEWnRHokACN_uqCNNUZrRPT6YG0PjbElY,926
144
145
  schemathesis/transport/prepare.py,sha256=qQ6zXBw5NN2AIM0bzLAc5Ryc3dmMb0R6xN14lnR49pU,3826
145
146
  schemathesis/transport/requests.py,sha256=OObRvcTL72-BZ7AfuDUrZZU9nZtfBqr22oF8nkzaOLE,8389
146
147
  schemathesis/transport/serialization.py,sha256=jIMra1LqRGav0OX3Hx7mvORt38ll4cd2DKit2D58FN0,10531
147
148
  schemathesis/transport/wsgi.py,sha256=RWSuUXPrl91GxAy8a4jyNNozOWVMRBxKx_tljlWA_Lo,5697
148
- schemathesis-4.0.0a3.dist-info/METADATA,sha256=80kE1Tg6m91KKgpuMEUsuPEPYJzCxeXcGthSlW1_BYs,12292
149
- schemathesis-4.0.0a3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
150
- schemathesis-4.0.0a3.dist-info/entry_points.txt,sha256=hiK3un-xfgPdwj9uj16YVDtTNpO128bmk0U82SMv8ZQ,152
151
- schemathesis-4.0.0a3.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
152
- schemathesis-4.0.0a3.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,,