schemathesis 4.3.13__py3-none-any.whl → 4.3.14__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.

Potentially problematic release.


This version of schemathesis might be problematic. Click here for more details.

@@ -128,9 +128,6 @@ class EngineErrorInfo:
128
128
  if self._kind == RuntimeErrorKind.HYPOTHESIS_HEALTH_CHECK_LARGE_BASE_EXAMPLE:
129
129
  return HEALTH_CHECK_MESSAGE_LARGE_BASE_EXAMPLE
130
130
 
131
- if self._kind == RuntimeErrorKind.HYPOTHESIS_UNSATISFIABLE:
132
- return f"{self._error}. Possible reasons:"
133
-
134
131
  if self._kind in (
135
132
  RuntimeErrorKind.SCHEMA_INVALID_REGULAR_EXPRESSION,
136
133
  RuntimeErrorKind.SCHEMA_GENERIC,
@@ -147,13 +144,6 @@ class EngineErrorInfo:
147
144
  if isinstance(self._error, requests.RequestException):
148
145
  return get_request_error_extras(self._error)
149
146
 
150
- if self._kind == RuntimeErrorKind.HYPOTHESIS_UNSATISFIABLE:
151
- return [
152
- "- Contradictory schema constraints, such as a minimum value exceeding the maximum.",
153
- "- Invalid schema definitions for headers or cookies, for example allowing for non-ASCII characters.",
154
- "- Excessive schema complexity, which hinders parameter generation.",
155
- ]
156
-
157
147
  return []
158
148
 
159
149
  @cached_property
@@ -247,7 +237,7 @@ def get_runtime_error_suggestion(error_type: RuntimeErrorKind, bold: Callable[[s
247
237
 
248
238
  return {
249
239
  RuntimeErrorKind.CONNECTION_SSL: f"Bypass SSL verification with {bold('`--tls-verify=false`')}.",
250
- RuntimeErrorKind.HYPOTHESIS_UNSATISFIABLE: "Examine the schema for inconsistencies and consider simplifying it.",
240
+ RuntimeErrorKind.HYPOTHESIS_UNSATISFIABLE: "Review all parameters and request body schemas for conflicting constraints.",
251
241
  RuntimeErrorKind.SCHEMA_NO_LINKS_FOUND: "Review your endpoint filters to include linked operations",
252
242
  RuntimeErrorKind.SCHEMA_INVALID_REGULAR_EXPRESSION: "Ensure your regex is compatible with Python's syntax.\n"
253
243
  "For guidance, visit: https://docs.python.org/3/library/re.html",
@@ -54,7 +54,7 @@ from schemathesis.generation.hypothesis.builder import (
54
54
  UnresolvableReferenceMark,
55
55
  UnsatisfiableExampleMark,
56
56
  )
57
- from schemathesis.generation.hypothesis.reporting import ignore_hypothesis_output
57
+ from schemathesis.generation.hypothesis.reporting import build_unsatisfiable_error, ignore_hypothesis_output
58
58
 
59
59
  if TYPE_CHECKING:
60
60
  from schemathesis.schemas import APIOperation
@@ -165,7 +165,7 @@ def run_test(
165
165
  except hypothesis.errors.Unsatisfiable:
166
166
  # We need more clear error message here
167
167
  status = Status.ERROR
168
- yield non_fatal_error(hypothesis.errors.Unsatisfiable("Failed to generate test cases for this API operation"))
168
+ yield non_fatal_error(build_unsatisfiable_error(operation, with_tip=False))
169
169
  except KeyboardInterrupt:
170
170
  yield scenario_finished(Status.INTERRUPTED)
171
171
  yield events.Interrupted(phase=phase)
@@ -121,6 +121,8 @@ def create_test(
121
121
  kwargs=config.given_kwargs,
122
122
  )
123
123
 
124
+ ApiOperationMark.set(hypothesis_test, operation)
125
+
124
126
  if config.seed is not None:
125
127
  hypothesis_test = hypothesis.seed(config.seed)(hypothesis_test)
126
128
 
@@ -957,3 +959,4 @@ InvalidHeadersExampleMark = Mark[dict[str, str]](attr_name="invalid_example_head
957
959
  MissingPathParameters = Mark[InvalidSchema](attr_name="missing_path_parameters")
958
960
  InfiniteRecursiveReferenceMark = Mark[InfiniteRecursiveReference](attr_name="infinite_recursive_reference")
959
961
  UnresolvableReferenceMark = Mark[UnresolvableReference](attr_name="unresolvable_reference")
962
+ ApiOperationMark = Mark[APIOperation](attr_name="api_operation")
@@ -1,8 +1,21 @@
1
+ from __future__ import annotations
2
+
1
3
  from contextlib import contextmanager
2
- from typing import Generator
4
+ from dataclasses import dataclass
5
+ from typing import TYPE_CHECKING, Any, Generator
3
6
 
7
+ from hypothesis.errors import Unsatisfiable
4
8
  from hypothesis.reporting import with_reporter
5
9
 
10
+ from schemathesis.config import OutputConfig
11
+ from schemathesis.core.jsonschema.types import JsonSchema
12
+ from schemathesis.core.output import truncate_json
13
+ from schemathesis.core.parameters import ParameterLocation
14
+ from schemathesis.generation.hypothesis.examples import generate_one
15
+
16
+ if TYPE_CHECKING:
17
+ from schemathesis.schemas import APIOperation
18
+
6
19
 
7
20
  def ignore(_: str) -> None:
8
21
  pass
@@ -12,3 +25,121 @@ def ignore(_: str) -> None:
12
25
  def ignore_hypothesis_output() -> Generator:
13
26
  with with_reporter(ignore): # type: ignore
14
27
  yield
28
+
29
+
30
+ UNSATISFIABILITY_CAUSE = """ - Type mismatch (e.g., enum with strings but type: integer)
31
+ - Contradictory constraints (e.g., minimum > maximum)
32
+ - Regex that's too complex to generate values for"""
33
+
34
+ GENERIC_UNSATISFIABLE_MESSAGE = f"""Cannot generate test data for this operation
35
+
36
+ Unable to identify the specific parameter. Common causes:
37
+ {UNSATISFIABILITY_CAUSE}"""
38
+
39
+
40
+ @dataclass
41
+ class UnsatisfiableParameter:
42
+ location: ParameterLocation
43
+ name: str
44
+ schema: JsonSchema
45
+
46
+ __slots__ = ("location", "name", "schema")
47
+
48
+ def get_error_message(self, config: OutputConfig) -> str:
49
+ formatted_schema = truncate_json(self.schema, config=config)
50
+
51
+ if self.location == ParameterLocation.BODY:
52
+ # For body, name is the media type
53
+ location = f"request body ({self.name})"
54
+ else:
55
+ location = f"{self.location.value} parameter '{self.name}'"
56
+
57
+ return f"""Cannot generate test data for {location}
58
+ Schema:
59
+
60
+ {formatted_schema}
61
+
62
+ This usually means:
63
+ {UNSATISFIABILITY_CAUSE}"""
64
+
65
+
66
+ def find_unsatisfiable_parameter(operation: APIOperation) -> UnsatisfiableParameter | None:
67
+ from hypothesis_jsonschema import from_schema
68
+
69
+ for location, container in (
70
+ (ParameterLocation.QUERY, operation.query),
71
+ (ParameterLocation.PATH, operation.path_parameters),
72
+ (ParameterLocation.HEADER, operation.headers),
73
+ (ParameterLocation.COOKIE, operation.cookies),
74
+ (ParameterLocation.BODY, operation.body),
75
+ ):
76
+ for parameter in container:
77
+ try:
78
+ generate_one(from_schema(parameter.optimized_schema))
79
+ except Unsatisfiable:
80
+ if location == ParameterLocation.BODY:
81
+ name = parameter.media_type
82
+ else:
83
+ name = parameter.name
84
+ schema = unbundle_schema_refs(parameter.optimized_schema, parameter.name_to_uri)
85
+ return UnsatisfiableParameter(location=location, name=name, schema=schema)
86
+ return None
87
+
88
+
89
+ def unbundle_schema_refs(schema: JsonSchema | list[JsonSchema], name_to_uri: dict[str, str]) -> JsonSchema:
90
+ if isinstance(schema, dict):
91
+ result: dict[str, Any] = {}
92
+ for key, value in schema.items():
93
+ if key == "$ref" and isinstance(value, str) and value.startswith("#/x-bundled/"):
94
+ # Extract bundled name (e.g., "schema1" from "#/x-bundled/schema1")
95
+ bundled_name = value.split("/")[-1]
96
+ if bundled_name in name_to_uri:
97
+ original_uri = name_to_uri[bundled_name]
98
+ # Extract fragment after # (e.g., "#/components/schemas/ObjectType")
99
+ if "#" in original_uri:
100
+ result[key] = "#" + original_uri.split("#", 1)[1]
101
+ else:
102
+ # Fallback if no fragment
103
+ result[key] = value
104
+ else:
105
+ result[key] = value
106
+ elif key == "x-bundled" and isinstance(value, dict):
107
+ # Replace x-bundled with proper components/schemas structure
108
+ components: dict[str, dict[str, Any]] = {"schemas": {}}
109
+ for bundled_name, bundled_schema in value.items():
110
+ if bundled_name in name_to_uri:
111
+ original_uri = name_to_uri[bundled_name]
112
+ # Extract schema name (e.g., "ObjectType" from "...#/components/schemas/ObjectType")
113
+ if "#/components/schemas/" in original_uri:
114
+ schema_name = original_uri.split("#/components/schemas/")[1]
115
+ components["schemas"][schema_name] = unbundle_schema_refs(bundled_schema, name_to_uri)
116
+ else:
117
+ # Fallback: keep bundled name if URI doesn't match expected pattern
118
+ components["schemas"][bundled_name] = unbundle_schema_refs(bundled_schema, name_to_uri)
119
+ else:
120
+ components["schemas"][bundled_name] = unbundle_schema_refs(bundled_schema, name_to_uri)
121
+ result["components"] = components
122
+ elif isinstance(value, (dict, list)):
123
+ # Recursively process all other values
124
+ result[key] = unbundle_schema_refs(value, name_to_uri)
125
+ else:
126
+ result[key] = value
127
+ return result
128
+ elif isinstance(schema, list):
129
+ return [unbundle_schema_refs(item, name_to_uri) for item in schema] # type: ignore
130
+ return schema
131
+
132
+
133
+ def build_unsatisfiable_error(operation: APIOperation, *, with_tip: bool) -> Unsatisfiable:
134
+ __tracebackhide__ = True
135
+ unsatisfiable = find_unsatisfiable_parameter(operation)
136
+
137
+ if unsatisfiable is not None:
138
+ message = unsatisfiable.get_error_message(operation.schema.config.output)
139
+ else:
140
+ message = GENERIC_UNSATISFIABLE_MESSAGE
141
+
142
+ if with_tip:
143
+ message += "\n\nTip: Review all parameters and request body schemas for conflicting constraints"
144
+
145
+ return Unsatisfiable(message)
@@ -34,7 +34,7 @@ from schemathesis.generation.hypothesis.given import (
34
34
  merge_given_args,
35
35
  validate_given_args,
36
36
  )
37
- from schemathesis.generation.hypothesis.reporting import ignore_hypothesis_output
37
+ from schemathesis.generation.hypothesis.reporting import build_unsatisfiable_error, ignore_hypothesis_output
38
38
  from schemathesis.pytest.control_flow import fail_on_no_matches
39
39
  from schemathesis.schemas import APIOperation
40
40
 
@@ -293,6 +293,7 @@ def pytest_pyfunc_call(pyfuncitem): # type:ignore
293
293
  For example - kwargs validation is failed for some strategy.
294
294
  """
295
295
  from schemathesis.generation.hypothesis.builder import (
296
+ ApiOperationMark,
296
297
  InvalidHeadersExampleMark,
297
298
  InvalidRegexMark,
298
299
  MissingPathParameters,
@@ -327,6 +328,10 @@ def pytest_pyfunc_call(pyfuncitem): # type:ignore
327
328
  if invalid_headers is not None:
328
329
  raise InvalidHeadersExample.from_headers(invalid_headers) from None
329
330
  pytest.skip(exc.args[0])
331
+ except Unsatisfiable:
332
+ operation = ApiOperationMark.get(pyfuncitem.obj)
333
+ assert operation is not None
334
+ raise build_unsatisfiable_error(operation, with_tip=True) from None
330
335
  except SchemaError as exc:
331
336
  raise InvalidRegexPattern.from_schema_error(exc, from_examples=False) from exc
332
337
 
@@ -19,9 +19,7 @@ from typing import (
19
19
  )
20
20
  from urllib.parse import urlsplit
21
21
 
22
- import graphql
23
22
  from hypothesis import strategies as st
24
- from hypothesis_graphql import strategies as gql_st
25
23
  from requests.structures import CaseInsensitiveDict
26
24
 
27
25
  from schemathesis import auths
@@ -52,6 +50,7 @@ from schemathesis.schemas import (
52
50
  from .scalars import CUSTOM_SCALARS, get_extra_scalar_strategies
53
51
 
54
52
  if TYPE_CHECKING:
53
+ import graphql
55
54
  from hypothesis.strategies import SearchStrategy
56
55
 
57
56
  from schemathesis.auths import AuthStorage
@@ -143,6 +142,8 @@ class GraphQLSchema(BaseSchema):
143
142
 
144
143
  @property
145
144
  def client_schema(self) -> graphql.GraphQLSchema:
145
+ import graphql
146
+
146
147
  if not hasattr(self, "_client_schema"):
147
148
  self._client_schema = graphql.build_client_schema(self.raw_schema)
148
149
  return self._client_schema
@@ -336,6 +337,9 @@ def graphql_cases(
336
337
  media_type: str | None = None,
337
338
  phase: TestPhase = TestPhase.FUZZING,
338
339
  ) -> Any:
340
+ import graphql
341
+ from hypothesis_graphql import strategies as gql_st
342
+
339
343
  start = time.monotonic()
340
344
  definition = cast(GraphQLOperationDefinition, operation.definition)
341
345
  strategy_factory = {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: schemathesis
3
- Version: 4.3.13
3
+ Version: 4.3.14
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://github.com/schemathesis/schemathesis/blob/master/CHANGELOG.md
@@ -79,7 +79,7 @@ schemathesis/engine/__init__.py,sha256=QaFE-FinaTAaarteADo2RRMJ-Sz6hZB9TzD5KjMin
79
79
  schemathesis/engine/context.py,sha256=YaBfwTUyTCZaMq7-jtAKFQj-Eh1aQdbZ0UNcC5d_epU,5792
80
80
  schemathesis/engine/control.py,sha256=FXzP8dxL47j1Giqpy2-Bsr_MdMw9YiATSK_UfpFwDtk,1348
81
81
  schemathesis/engine/core.py,sha256=qlPHnZVq2RrUe93fOciXd1hC3E1gVyF2BIWMPMeLIj8,6655
82
- schemathesis/engine/errors.py,sha256=FlpEk44WRLzRkdK9m37z93EQuY3kbeMIQRGwU5e3Qm4,19005
82
+ schemathesis/engine/errors.py,sha256=Vg64E97RS--IH6bXPPkQTDl2vw1DbasveCfL037JALU,18478
83
83
  schemathesis/engine/events.py,sha256=jpCtMkWWfNe2jUeZh_Ly_wfZEF44EOodL-I_W4C9rgg,6594
84
84
  schemathesis/engine/observations.py,sha256=T-5R8GeVIqvxpCMxc6vZ04UUxUTx3w7689r3Dc6bIcE,1416
85
85
  schemathesis/engine/recorder.py,sha256=KWyWkGkZxIwSDU92jNWCJXU4G4E5WqfhLM6G1Yi7Jyo,8636
@@ -89,7 +89,7 @@ schemathesis/engine/phases/stateful/__init__.py,sha256=Lz1rgNqCfUSIz173XqCGsiMuU
89
89
  schemathesis/engine/phases/stateful/_executor.py,sha256=yRpUJqKLTKMVRy7hEXPwmI23CtgGIprz341lCJwvTrU,15613
90
90
  schemathesis/engine/phases/stateful/context.py,sha256=A7X1SLDOWFpCvFN9IiIeNVZM0emjqatmJL_k9UsO7vM,2946
91
91
  schemathesis/engine/phases/unit/__init__.py,sha256=9dDcxyj887pktnE9YDIPNaR-vc7iqKQWIrFr77SbUTQ,8786
92
- schemathesis/engine/phases/unit/_executor.py,sha256=4wr7POpPfeI7_Mx6i2pk2efyK1FxKGjXdMwi_MURTDU,17427
92
+ schemathesis/engine/phases/unit/_executor.py,sha256=8ryOJuAXulDum3NDR2w-ey1x7wSrEmdR9dnpL8vOcsY,17419
93
93
  schemathesis/engine/phases/unit/_pool.py,sha256=iU0hdHDmohPnEv7_S1emcabuzbTf-Cznqwn0pGQ5wNQ,2480
94
94
  schemathesis/generation/__init__.py,sha256=tvNO2FLiY8z3fZ_kL_QJhSgzXfnT4UqwSXMHCwfLI0g,645
95
95
  schemathesis/generation/case.py,sha256=SLMw6zkzmeiZdaIij8_0tjTF70BrMlRSWREaqWii0uM,12508
@@ -99,10 +99,10 @@ schemathesis/generation/metrics.py,sha256=cZU5HdeAMcLFEDnTbNE56NuNq4P0N4ew-g1NEz
99
99
  schemathesis/generation/modes.py,sha256=Q1fhjWr3zxabU5qdtLvKfpMFZJAwlW9pnxgenjeXTyU,481
100
100
  schemathesis/generation/overrides.py,sha256=xI2djHsa42fzP32xpxgxO52INixKagf5DjDAWJYswM8,3890
101
101
  schemathesis/generation/hypothesis/__init__.py,sha256=68BHULoXQC1WjFfw03ga5lvDGZ-c-J7H_fNEuUzFWRw,4976
102
- schemathesis/generation/hypothesis/builder.py,sha256=pnPfJIXBYKyju98xiGUvavh5W2xvuO89RO_NOsvdxYQ,38443
102
+ schemathesis/generation/hypothesis/builder.py,sha256=N9UiJfwUplmrCLsROHQtirm1UPt_TDqUiLv4as2qAjU,38562
103
103
  schemathesis/generation/hypothesis/examples.py,sha256=6eGaKUEC3elmKsaqfKj1sLvM8EHc-PWT4NRBq4NI0Rs,1409
104
104
  schemathesis/generation/hypothesis/given.py,sha256=sTZR1of6XaHAPWtHx2_WLlZ50M8D5Rjux0GmWkWjDq4,2337
105
- schemathesis/generation/hypothesis/reporting.py,sha256=uDVow6Ya8YFkqQuOqRsjbzsbyP4KKfr3jA7ZaY4FuKY,279
105
+ schemathesis/generation/hypothesis/reporting.py,sha256=8MUT_HC_iUJ8aVfxEVQ7aPTLx2ZwqOMnTucxfP5qblM,5863
106
106
  schemathesis/generation/stateful/__init__.py,sha256=s7jiJEnguIj44IsRyMi8afs-8yjIUuBbzW58bH5CHjs,1042
107
107
  schemathesis/generation/stateful/state_machine.py,sha256=CiVtpBEeotpNOUkYO3vJLKRe89gdT1kjguZ88vbfqs0,9500
108
108
  schemathesis/graphql/__init__.py,sha256=_eO6MAPHGgiADVGRntnwtPxmuvk666sAh-FAU4cG9-0,326
@@ -117,7 +117,7 @@ schemathesis/pytest/__init__.py,sha256=7W0q-Thcw03IAQfXE_Mo8JPZpUdHJzfu85fjK1Zdf
117
117
  schemathesis/pytest/control_flow.py,sha256=F8rAPsPeNv_sJiJgbZYtTpwKWjauZmqFUaKroY2GmQI,217
118
118
  schemathesis/pytest/lazy.py,sha256=wP0sqcVFcD-OjDIFUpYdJdFQ-BY18CVyL0iB6eHiWRw,11088
119
119
  schemathesis/pytest/loaders.py,sha256=Sbv8e5F77_x4amLP50iwubfm6kpOhx7LhLFGsVXW5Ys,925
120
- schemathesis/pytest/plugin.py,sha256=8VaaYoO4RtgtZLOAHiheFNjd0xceyKe0U1n6AV5s9kY,14253
120
+ schemathesis/pytest/plugin.py,sha256=j93P7Bp6V2kjkw4Xg9ZoNgd9txcDiQFHByP6rMkI2R0,14518
121
121
  schemathesis/python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
122
  schemathesis/python/asgi.py,sha256=5PyvuTBaivvyPUEi3pwJni91K1kX5Zc0u9c6c1D8a1Q,287
123
123
  schemathesis/python/wsgi.py,sha256=uShAgo_NChbfYaV1117e6UHp0MTg7jaR0Sy_to3Jmf8,219
@@ -125,7 +125,7 @@ schemathesis/specs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
125
125
  schemathesis/specs/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
126
  schemathesis/specs/graphql/nodes.py,sha256=bE3G1kNmqJ8OV4igBvIK-UORrkQA6Nofduf87O3TD9I,541
127
127
  schemathesis/specs/graphql/scalars.py,sha256=6lew8mnwhrtg23leiEbG43mLGPLlRln8mClCY94XpDA,2680
128
- schemathesis/specs/graphql/schemas.py,sha256=GKJcnTAT1wUzzUr3r6wiTfiAdFLcgFQjYRRz7x4VQl0,14457
128
+ schemathesis/specs/graphql/schemas.py,sha256=oNbluhfxpbxRWVIMoLn3_g-bUaVLCea29jOZiHN1MT0,14509
129
129
  schemathesis/specs/graphql/validation.py,sha256=-W1Noc1MQmTb4RX-gNXMeU2qkgso4mzVfHxtdLkCPKM,1422
130
130
  schemathesis/specs/openapi/__init__.py,sha256=C5HOsfuDJGq_3mv8CRBvRvb0Diy1p0BFdqyEXMS-loE,238
131
131
  schemathesis/specs/openapi/_hypothesis.py,sha256=O8vN-koBjzBVZfpD3pmgIt6ecU4ddAPHOxTAORd23Lo,22642
@@ -178,8 +178,8 @@ schemathesis/transport/prepare.py,sha256=erYXRaxpQokIDzaIuvt_csHcw72iHfCyNq8VNEz
178
178
  schemathesis/transport/requests.py,sha256=wriRI9fprTplE_qEZLEz1TerX6GwkE3pwr6ZnU2o6vQ,10648
179
179
  schemathesis/transport/serialization.py,sha256=GwO6OAVTmL1JyKw7HiZ256tjV4CbrRbhQN0ep1uaZwI,11157
180
180
  schemathesis/transport/wsgi.py,sha256=kQtasFre6pjdJWRKwLA_Qb-RyQHCFNpaey9ubzlFWKI,5907
181
- schemathesis-4.3.13.dist-info/METADATA,sha256=n-G9iaIj5lgmV9oro_G7FL4f2tAeI9xOXaLe95r6WnA,8566
182
- schemathesis-4.3.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
183
- schemathesis-4.3.13.dist-info/entry_points.txt,sha256=hiK3un-xfgPdwj9uj16YVDtTNpO128bmk0U82SMv8ZQ,152
184
- schemathesis-4.3.13.dist-info/licenses/LICENSE,sha256=2Ve4J8v5jMQAWrT7r1nf3bI8Vflk3rZVQefiF2zpxwg,1121
185
- schemathesis-4.3.13.dist-info/RECORD,,
181
+ schemathesis-4.3.14.dist-info/METADATA,sha256=TvgjAcKH_S1rOrvKQsipJY2hJbJE1s_yzxNxKATSEfM,8566
182
+ schemathesis-4.3.14.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
183
+ schemathesis-4.3.14.dist-info/entry_points.txt,sha256=hiK3un-xfgPdwj9uj16YVDtTNpO128bmk0U82SMv8ZQ,152
184
+ schemathesis-4.3.14.dist-info/licenses/LICENSE,sha256=2Ve4J8v5jMQAWrT7r1nf3bI8Vflk3rZVQefiF2zpxwg,1121
185
+ schemathesis-4.3.14.dist-info/RECORD,,