schemathesis 3.37.0__py3-none-any.whl → 3.38.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.
Files changed (35) hide show
  1. schemathesis/_hypothesis.py +18 -8
  2. schemathesis/_patches.py +21 -0
  3. schemathesis/cli/__init__.py +1 -1
  4. schemathesis/cli/cassettes.py +6 -0
  5. schemathesis/extra/pytest_plugin.py +1 -1
  6. schemathesis/generation/_hypothesis.py +2 -0
  7. schemathesis/generation/coverage.py +257 -59
  8. schemathesis/hooks.py +4 -0
  9. schemathesis/internal/checks.py +4 -2
  10. schemathesis/internal/diff.py +15 -0
  11. schemathesis/models.py +65 -3
  12. schemathesis/parameters.py +5 -0
  13. schemathesis/runner/impl/context.py +10 -1
  14. schemathesis/runner/impl/core.py +14 -4
  15. schemathesis/runner/serialization.py +6 -3
  16. schemathesis/serializers.py +3 -0
  17. schemathesis/service/extensions.py +1 -1
  18. schemathesis/service/metadata.py +3 -3
  19. schemathesis/specs/openapi/_hypothesis.py +7 -46
  20. schemathesis/specs/openapi/checks.py +7 -2
  21. schemathesis/specs/openapi/converter.py +27 -11
  22. schemathesis/specs/openapi/formats.py +44 -0
  23. schemathesis/specs/openapi/links.py +4 -0
  24. schemathesis/specs/openapi/negative/mutations.py +5 -0
  25. schemathesis/specs/openapi/parameters.py +21 -14
  26. schemathesis/specs/openapi/schemas.py +6 -2
  27. schemathesis/stateful/context.py +1 -1
  28. schemathesis/stateful/runner.py +6 -2
  29. schemathesis/transports/__init__.py +4 -0
  30. schemathesis/utils.py +6 -4
  31. {schemathesis-3.37.0.dist-info → schemathesis-3.38.0.dist-info}/METADATA +2 -1
  32. {schemathesis-3.37.0.dist-info → schemathesis-3.38.0.dist-info}/RECORD +35 -33
  33. {schemathesis-3.37.0.dist-info → schemathesis-3.38.0.dist-info}/WHEEL +0 -0
  34. {schemathesis-3.37.0.dist-info → schemathesis-3.38.0.dist-info}/entry_points.txt +0 -0
  35. {schemathesis-3.37.0.dist-info → schemathesis-3.38.0.dist-info}/licenses/LICENSE +0 -0
@@ -9,6 +9,8 @@ from ...parameters import Parameter
9
9
  from .converter import to_json_schema_recursive
10
10
 
11
11
  if TYPE_CHECKING:
12
+ from hypothesis.vendor.pretty import RepresentationPrinter
13
+
12
14
  from ...models import APIOperation
13
15
 
14
16
 
@@ -21,6 +23,9 @@ class OpenAPIParameter(Parameter):
21
23
  nullable_field: ClassVar[str]
22
24
  supported_jsonschema_keywords: ClassVar[tuple[str, ...]]
23
25
 
26
+ def _repr_pretty_(self, printer: RepresentationPrinter, cycle: bool) -> None:
27
+ return None
28
+
24
29
  @property
25
30
  def description(self) -> str | None:
26
31
  """A brief parameter description."""
@@ -52,7 +57,7 @@ class OpenAPIParameter(Parameter):
52
57
  def is_header(self) -> bool:
53
58
  return self.location in ("header", "cookie")
54
59
 
55
- def as_json_schema(self, operation: APIOperation) -> dict[str, Any]:
60
+ def as_json_schema(self, operation: APIOperation, *, update_quantifiers: bool = True) -> dict[str, Any]:
56
61
  """Convert parameter's definition to JSON Schema."""
57
62
  # JSON Schema allows `examples` as an array
58
63
  examples = []
@@ -65,11 +70,11 @@ class OpenAPIParameter(Parameter):
65
70
  schema = self.from_open_api_to_json_schema(operation, self.definition)
66
71
  if examples:
67
72
  schema["examples"] = examples
68
- return self.transform_keywords(schema)
73
+ return self.transform_keywords(schema, update_quantifiers=update_quantifiers)
69
74
 
70
- def transform_keywords(self, schema: dict[str, Any]) -> dict[str, Any]:
75
+ def transform_keywords(self, schema: dict[str, Any], *, update_quantifiers: bool = True) -> dict[str, Any]:
71
76
  """Transform Open API specific keywords into JSON Schema compatible form."""
72
- definition = to_json_schema_recursive(schema, self.nullable_field)
77
+ definition = to_json_schema_recursive(schema, self.nullable_field, update_quantifiers=update_quantifiers)
73
78
  # Headers are strings, but it is not always explicitly defined in the schema. By preparing them properly, we
74
79
  # can achieve significant performance improvements for such cases.
75
80
  # For reference (my machine) - running a single test with 100 examples with the resulting strategy:
@@ -231,11 +236,11 @@ class OpenAPI20Body(OpenAPIBody, OpenAPI20Parameter):
231
236
  # NOTE. For Open API 2.0 bodies, we still give `x-example` precedence over the schema-level `example` field to keep
232
237
  # the precedence rules consistent.
233
238
 
234
- def as_json_schema(self, operation: APIOperation) -> dict[str, Any]:
239
+ def as_json_schema(self, operation: APIOperation, *, update_quantifiers: bool = True) -> dict[str, Any]:
235
240
  """Convert body definition to JSON Schema."""
236
241
  # `schema` is required in Open API 2.0 when the `in` keyword is `body`
237
242
  schema = self.definition["schema"]
238
- return self.transform_keywords(schema)
243
+ return self.transform_keywords(schema, update_quantifiers=update_quantifiers)
239
244
 
240
245
 
241
246
  FORM_MEDIA_TYPES = ("multipart/form-data", "application/x-www-form-urlencoded")
@@ -254,13 +259,13 @@ class OpenAPI30Body(OpenAPIBody, OpenAPI30Parameter):
254
259
  required: bool = False
255
260
  description: str | None = None
256
261
 
257
- def as_json_schema(self, operation: APIOperation) -> dict[str, Any]:
262
+ def as_json_schema(self, operation: APIOperation, *, update_quantifiers: bool = True) -> dict[str, Any]:
258
263
  """Convert body definition to JSON Schema."""
259
264
  schema = get_media_type_schema(self.definition)
260
- return self.transform_keywords(schema)
265
+ return self.transform_keywords(schema, update_quantifiers=update_quantifiers)
261
266
 
262
- def transform_keywords(self, schema: dict[str, Any]) -> dict[str, Any]:
263
- definition = super().transform_keywords(schema)
267
+ def transform_keywords(self, schema: dict[str, Any], *, update_quantifiers: bool = True) -> dict[str, Any]:
268
+ definition = super().transform_keywords(schema, update_quantifiers=update_quantifiers)
264
269
  if self.is_form:
265
270
  # It significantly reduces the "filtering" part of data generation.
266
271
  definition.setdefault("type", "object")
@@ -298,12 +303,14 @@ class OpenAPI20CompositeBody(OpenAPIBody, OpenAPI20Parameter):
298
303
  # We generate an object for formData - it is always required.
299
304
  return bool(self.definition)
300
305
 
301
- def as_json_schema(self, operation: APIOperation) -> dict[str, Any]:
306
+ def as_json_schema(self, operation: APIOperation, *, update_quantifiers: bool = True) -> dict[str, Any]:
302
307
  """The composite body is transformed into an "object" JSON Schema."""
303
- return parameters_to_json_schema(operation, self.definition)
308
+ return parameters_to_json_schema(operation, self.definition, update_quantifiers=update_quantifiers)
304
309
 
305
310
 
306
- def parameters_to_json_schema(operation: APIOperation, parameters: Iterable[OpenAPIParameter]) -> dict[str, Any]:
311
+ def parameters_to_json_schema(
312
+ operation: APIOperation, parameters: Iterable[OpenAPIParameter], *, update_quantifiers: bool = True
313
+ ) -> dict[str, Any]:
307
314
  """Create an "object" JSON schema from a list of Open API parameters.
308
315
 
309
316
  :param List[OpenAPIParameter] parameters: A list of Open API parameters related to the same location. All of
@@ -343,7 +350,7 @@ def parameters_to_json_schema(operation: APIOperation, parameters: Iterable[Open
343
350
  required = []
344
351
  for parameter in parameters:
345
352
  name = parameter.name
346
- properties[name] = parameter.as_json_schema(operation)
353
+ properties[name] = parameter.as_json_schema(operation, update_quantifiers=update_quantifiers)
347
354
  # If parameter names are duplicated, we need to avoid duplicate entries in `required` anyway
348
355
  if parameter.is_required and name not in required:
349
356
  required.append(name)
@@ -986,7 +986,9 @@ class SwaggerV20(BaseOpenAPISchema):
986
986
  return scopes, None
987
987
  # Extra conversion to JSON Schema is needed here if there was one $ref in the input
988
988
  # because it is not converted
989
- return scopes, to_json_schema_recursive(schema, self.nullable_name, is_response_schema=True)
989
+ return scopes, to_json_schema_recursive(
990
+ schema, self.nullable_name, is_response_schema=True, update_quantifiers=False
991
+ )
990
992
 
991
993
  def get_content_types(self, operation: APIOperation, response: GenericResponse) -> list[str]:
992
994
  produces = operation.definition.raw.get("produces", None)
@@ -1137,7 +1139,9 @@ class OpenApi30(SwaggerV20):
1137
1139
  if option and "schema" in option:
1138
1140
  # Extra conversion to JSON Schema is needed here if there was one $ref in the input
1139
1141
  # because it is not converted
1140
- return scopes, to_json_schema_recursive(option["schema"], self.nullable_name, is_response_schema=True)
1142
+ return scopes, to_json_schema_recursive(
1143
+ option["schema"], self.nullable_name, is_response_schema=True, update_quantifiers=False
1144
+ )
1141
1145
  return scopes, None
1142
1146
 
1143
1147
  def get_strategies_from_examples(
@@ -18,7 +18,7 @@ FailureKey = Union[Type[CheckFailed], Tuple[str, int]]
18
18
 
19
19
 
20
20
  def _failure_cache_key(exc: CheckFailed | AssertionError) -> FailureKey:
21
- """Create a ket to identify unique failures."""
21
+ """Create a key to identify unique failures."""
22
22
  from hypothesis.internal.escalation import get_trimmed_traceback
23
23
 
24
24
  # For CheckFailed, we already have all distinctive information about the failure, which is contained
@@ -69,7 +69,7 @@ class StatefulTestRunner:
69
69
  try:
70
70
  event = self.event_queue.get(timeout=EVENT_QUEUE_TIMEOUT)
71
71
  # Set the run status based on the suite status
72
- # ERROR & INTERRPUTED statuses are terminal, therefore they should not be overridden
72
+ # ERROR & INTERRUPTED statuses are terminal, therefore they should not be overridden
73
73
  if isinstance(event, events.SuiteFinished):
74
74
  if event.status == events.SuiteStatus.FAILURE:
75
75
  run_status = events.RunStatus.FAILURE
@@ -131,7 +131,11 @@ def _execute_state_machine_loop(
131
131
  if config.auth is not None:
132
132
  session.auth = config.auth
133
133
  call_kwargs["session"] = session
134
- check_ctx = CheckContext(auth=config.auth, headers=CaseInsensitiveDict(config.headers) if config.headers else None)
134
+ check_ctx = CheckContext(
135
+ override=config.override,
136
+ auth=config.auth,
137
+ headers=CaseInsensitiveDict(config.headers) if config.headers else None,
138
+ )
135
139
 
136
140
  class _InstrumentedStateMachine(state_machine): # type: ignore[valid-type,misc]
137
141
  """State machine with additional hooks for emitting events."""
@@ -21,6 +21,7 @@ if TYPE_CHECKING:
21
21
  import requests
22
22
  import werkzeug
23
23
  from _typeshed.wsgi import WSGIApplication
24
+ from hypothesis.vendor.pretty import RepresentationPrinter
24
25
  from starlette_testclient._testclient import ASGI2App, ASGI3App
25
26
 
26
27
  from ..models import Case
@@ -34,6 +35,9 @@ class RequestConfig:
34
35
  proxy: str | None = None
35
36
  cert: RequestCert | None = None
36
37
 
38
+ def _repr_pretty_(self, printer: RepresentationPrinter, cycle: bool) -> None:
39
+ return None
40
+
37
41
  @property
38
42
  def prepared_timeout(self) -> float | None:
39
43
  return prepare_timeout(self.timeout)
schemathesis/utils.py CHANGED
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- import functools
4
3
  from contextlib import contextmanager
5
4
  from inspect import getfullargspec
6
5
  from pathlib import Path
@@ -143,10 +142,13 @@ def validate_given_args(func: GenericTest, args: tuple, kwargs: dict[str, Any])
143
142
  def compose(*functions: Callable) -> Callable:
144
143
  """Compose multiple functions into a single one."""
145
144
 
146
- def noop(x: Any) -> Any:
147
- return x
145
+ def composed(x: Any) -> Any:
146
+ result = x
147
+ for func in reversed(functions):
148
+ result = func(result)
149
+ return result
148
150
 
149
- return functools.reduce(lambda f, g: lambda x: f(g(x)), functions, noop)
151
+ return composed
150
152
 
151
153
 
152
154
  def skip(operation_name: str) -> NoReturn:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: schemathesis
3
- Version: 3.37.0
3
+ Version: 3.38.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
@@ -25,6 +25,7 @@ Classifier: Programming Language :: Python :: 3.9
25
25
  Classifier: Programming Language :: Python :: 3.10
26
26
  Classifier: Programming Language :: Python :: 3.11
27
27
  Classifier: Programming Language :: Python :: 3.12
28
+ Classifier: Programming Language :: Python :: 3.13
28
29
  Classifier: Programming Language :: Python :: Implementation :: CPython
29
30
  Classifier: Topic :: Software Development :: Testing
30
31
  Requires-Python: >=3.8
@@ -1,9 +1,10 @@
1
1
  schemathesis/__init__.py,sha256=UW2Bq8hDDkcBeAAA7PzpBFXkOOxkmHox-mfQwzHDjL0,1914
2
2
  schemathesis/_compat.py,sha256=y4RZd59i2NCnZ91VQhnKeMn_8t3SgvLOk2Xm8nymUHY,1837
3
3
  schemathesis/_dependency_versions.py,sha256=pjEkkGAfOQJYNb-9UOo84V8nj_lKHr_TGDVdFwY2UU0,816
4
- schemathesis/_hypothesis.py,sha256=Vk38ROENT5yOo38qS2s6JSjRCLDzTmnzQ1sy0ZoZ1C8,14930
4
+ schemathesis/_hypothesis.py,sha256=VZp_ttyI1y2Vx_Bu8S1pxZG8iHxA1pFgfP-jduzSjrk,15269
5
5
  schemathesis/_lazy_import.py,sha256=aMhWYgbU2JOltyWBb32vnWBb6kykOghucEzI_F70yVE,470
6
6
  schemathesis/_override.py,sha256=TAjYB3eJQmlw9K_xiR9ptt9Wj7if4U7UFlUhGjpBAoM,1625
7
+ schemathesis/_patches.py,sha256=Hsbpn4UVeXUQD2Kllrbq01CSWsTYENWa0VJTyhX5C2k,895
7
8
  schemathesis/_rate_limiter.py,sha256=q_XWst5hzuAyXQRiZc4s_bx7-JlPYZM_yKDmeavt3oo,242
8
9
  schemathesis/_xml.py,sha256=lwRaKEMQvl6SUySnhGgooNsdmXPnDh11YSPpbsW8dR8,6923
9
10
  schemathesis/auths.py,sha256=De97IS_iOlC36-jRhkZ2DUndjUpXYgsd8R-nA-iHn88,16837
@@ -14,23 +15,23 @@ schemathesis/exceptions.py,sha256=5zjPlyVoQNJGbwufplL6ZVV7FEBPBNPHGdlQRJ7xnhE,20
14
15
  schemathesis/failures.py,sha256=fybNkCF2rqH90e3KW_XwpgZnSM6f7_FERcxHT9Pd3NM,7911
15
16
  schemathesis/filters.py,sha256=f3c_yXIBwIin-9Y0qU2TkcC1NEM_Mw34jGUHQc0BOyw,17026
16
17
  schemathesis/graphql.py,sha256=XiuKcfoOB92iLFC8zpz2msLkM0_V0TLdxPNBqrrGZ8w,216
17
- schemathesis/hooks.py,sha256=ORbrF6xKx7CQJio97Yo9BSpgKFTQ0mTmSooToX_vXAY,14787
18
+ schemathesis/hooks.py,sha256=f0AUPxyBenpe1YGIWDY_uwSRoT2mE4Tp4Qase7f0L08,14953
18
19
  schemathesis/lazy.py,sha256=Ddhkk7Tpc_VcRGYkCtKDmP2gpjxVmEZ3b01ZTNjbm8I,19004
19
20
  schemathesis/loaders.py,sha256=MoEhcdOEBJxNRn5X-ZNhWB9jZDHQQNpkNfEdQjf_NDw,4590
20
- schemathesis/models.py,sha256=mgufFwK6pVWn6hjfJIJwbk0qZM-XUeUaVVaOOEPaR50,46646
21
- schemathesis/parameters.py,sha256=PndmqQRlEYsCt1kWjSShPsFf6vj7X_7FRdz_-A95eNg,2258
21
+ schemathesis/models.py,sha256=s69MSs_y3ZNxmAiMl8h4ifuBPc8JW5FZHzDHU8Ebl4A,49204
22
+ schemathesis/parameters.py,sha256=_LN3NL5XwoRfvjcU8o2ArrNFK9sbBZo25UFdxuywkRw,2425
22
23
  schemathesis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
24
  schemathesis/sanitization.py,sha256=Lycn1VVfula9B6XpzkxTHja7CZ7RHqbUh9kBic0Yi4M,9056
24
25
  schemathesis/schemas.py,sha256=3xTZOZ1lLdAdwLAkiW0eakRb96mQ0MpbcwmrT-XO4KA,20457
25
- schemathesis/serializers.py,sha256=O0ALsdzCrN2_iwyBNOQZrF5hyS21IXhEZjAPDOkiAgo,11676
26
+ schemathesis/serializers.py,sha256=HyYVSVR71FhWfIErnH6OoGLOa4tkh9mTeVUTIpzEW24,11739
26
27
  schemathesis/targets.py,sha256=XIGRghvEzbmEJjse9aZgNEj67L3jAbiazm2rxURWgDE,2351
27
28
  schemathesis/throttling.py,sha256=aisUc4MJDGIOGUAs9L2DlWWpdd4KyAFuNVKhYoaUC9M,1719
28
29
  schemathesis/types.py,sha256=Tem2Q_zyMCd0Clp5iGKv6Fu13wdcbxVE8tCVH9WWt7A,1065
29
- schemathesis/utils.py,sha256=8RkTZ9Ft5IUaGkxABhh34oU7WO2ouMsfgtvFPTx9alI,4875
30
- schemathesis/cli/__init__.py,sha256=qtoLaYmgkxZ_o4JYe-KTYcVHxR8Tus-vDexRYAbTbXA,74566
30
+ schemathesis/utils.py,sha256=LwqxqoAKmRiAdj-qUbNmgQgsamc49V5lc5TnOIDuuMA,4904
31
+ schemathesis/cli/__init__.py,sha256=rAebJYQrORWsl4WR6sLUseJCQQZbDEsaQex52kmn6kI,74536
31
32
  schemathesis/cli/__main__.py,sha256=MWaenjaUTZIfNPFzKmnkTiawUri7DVldtg3mirLwzU8,92
32
33
  schemathesis/cli/callbacks.py,sha256=-VA_I_mVma9WxFNtUR8d2KNICKJD5ScayfSdKKPEP5Y,16321
33
- schemathesis/cli/cassettes.py,sha256=jD1JTkkEALUUEyzyuJ-KuxgntfGodILUuOu3C9HKjIw,19412
34
+ schemathesis/cli/cassettes.py,sha256=ZRWFoJVwrEOymQYlraEFR8blemog1FnpWeZgtMx0kCE,19648
34
35
  schemathesis/cli/constants.py,sha256=wk-0GsoJIel8wFFerQ6Kf_6eAYUtIWkwMFwyAqv3yj4,1635
35
36
  schemathesis/cli/context.py,sha256=j_lvYQiPa6Q7P4P_IGCM9V2y2gJSpDbpxIIzR5oFB2I,2567
36
37
  schemathesis/cli/debug.py,sha256=_YA-bX1ujHl4bqQDEum7M-I2XHBTEGbvgkhvcvKhmgU,658
@@ -53,19 +54,20 @@ schemathesis/extra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
53
54
  schemathesis/extra/_aiohttp.py,sha256=-bIY0ucv7pfK3gA9PHiO4n7ajtZJJM9pS3EY3cLau9c,957
54
55
  schemathesis/extra/_flask.py,sha256=lpKQxg_kdEFo59Q8sV5T78IJYhgx6p4SCwIohJYSycw,345
55
56
  schemathesis/extra/_server.py,sha256=JFJTgJjpZu_eVZkI16rLaXJSv55Awbl7JNqegCLnQBg,541
56
- schemathesis/extra/pytest_plugin.py,sha256=xF91GhYvfpVevirIWCfEG3kXOfjftxmjnrsVQabNJsA,12594
57
+ schemathesis/extra/pytest_plugin.py,sha256=3FF7pcqK26J__FGq6uOZdaD-1tZ-khQEwpdwb1ueFPc,12617
57
58
  schemathesis/fixups/__init__.py,sha256=RP5QYJVJhp8LXjhH89fCRaIVU26dHCy74jD9seoYMuc,967
58
59
  schemathesis/fixups/fast_api.py,sha256=mn-KzBqnR8jl4W5fY-_ZySabMDMUnpzCIESMHnlvE1c,1304
59
60
  schemathesis/fixups/utf8_bom.py,sha256=lWT9RNmJG8i-l5AXIpaCT3qCPUwRgzXPW3eoOjmZETA,745
60
61
  schemathesis/generation/__init__.py,sha256=29Zys_tD6kfngaC4zHeC6TOBZQcmo7CWm7KDSYsHStQ,1581
61
- schemathesis/generation/_hypothesis.py,sha256=Aaol5w3TEOVZn8znrnnJCYfrll8eALW0dCRtz3k0Eis,1661
62
+ schemathesis/generation/_hypothesis.py,sha256=74fzLPHugZgMQXerWYFAMqCAjtAXz5E4gek7Gnkhli4,1756
62
63
  schemathesis/generation/_methods.py,sha256=r8oVlJ71_gXcnEhU-byw2E0R2RswQQFm8U7yGErSqbw,1204
63
- schemathesis/generation/coverage.py,sha256=S8qxFHpIkHr87vZQQSmhttRvmlfRZIL445gj_p2GjoQ,29070
64
+ schemathesis/generation/coverage.py,sha256=hMtISl3fYaTmE78sFCBd42BPJfPvgSEZJztlXnKxTRo,38310
64
65
  schemathesis/internal/__init__.py,sha256=93HcdG3LF0BbQKbCteOsFMa1w6nXl8yTmx87QLNJOik,161
65
- schemathesis/internal/checks.py,sha256=0NudOP1vpz76n3OjnN4OkNC2d5bNKAkZLFzTG2k4NBY,2352
66
+ schemathesis/internal/checks.py,sha256=wUApc22zY6_tAWMEA3kAYLQRwHIhy4AngZYREy0AiPw,2413
66
67
  schemathesis/internal/copy.py,sha256=DcL56z-d69kKR_5u8mlHvjSL1UTyUKNMAwexrwHFY1s,1031
67
68
  schemathesis/internal/datetime.py,sha256=zPLBL0XXLNfP-KYel3H2m8pnsxjsA_4d-zTOhJg2EPQ,136
68
69
  schemathesis/internal/deprecation.py,sha256=Ty5VBFBlufkITpP0WWTPIPbnB7biDi0kQgXVYWZp820,1273
70
+ schemathesis/internal/diff.py,sha256=upGqM6s9WDT653wzxK_tqclFCxqkzB0j4wsO1foq5_k,466
69
71
  schemathesis/internal/extensions.py,sha256=h0aHRK_PTKfiAufkeBziegQS8537TL-Gr1hPW48q8Yc,790
70
72
  schemathesis/internal/jsonschema.py,sha256=-7tF15cXo1ZdhiRFYYfEClXihX2Svc5Loi_Dz1x201k,1157
71
73
  schemathesis/internal/output.py,sha256=zMaG5knIuBieVH8CrcmPJgbmQukDs2xdekX0BrK7BZs,1989
@@ -75,10 +77,10 @@ schemathesis/internal/validation.py,sha256=G7i8jIMUpAeOnDsDF_eWYvRZe_yMprRswx0QA
75
77
  schemathesis/runner/__init__.py,sha256=b96aoJQo9Kash0GNKI-uCiLMEKOI8cxKjKCKQlWxkUw,21925
76
78
  schemathesis/runner/events.py,sha256=cRKKSDvHvKLBIyFBz-J0JtAKshbGGKco9eaMyLCgzsY,11734
77
79
  schemathesis/runner/probes.py,sha256=no5AfO3kse25qvHevjeUfB0Q3C860V2AYzschUW3QMQ,5688
78
- schemathesis/runner/serialization.py,sha256=jHpfm1PgPAmorNkF8_rkzIYoeA43jpbSKeh5Hm5nqF0,20495
80
+ schemathesis/runner/serialization.py,sha256=SOmdLJSr0YPHptBiqMaiiW3xzXOyBcA5jwiZy-9ZUjY,20593
79
81
  schemathesis/runner/impl/__init__.py,sha256=1E2iME8uthYPBh9MjwVBCTFV-P3fi7AdphCCoBBspjs,199
80
- schemathesis/runner/impl/context.py,sha256=xVxHnXerSoOl-I6IzrdA-bRhaYQDKS4TuShFULsa154,2716
81
- schemathesis/runner/impl/core.py,sha256=qnALY8PCkU2mmjZlEY6Jboa9pZNLmyCakh0gkuKg43c,47466
82
+ schemathesis/runner/impl/context.py,sha256=hjJoDHpL9wUXVUGlC-Mx82tUpNAi7qecEB847T-XEvY,3043
83
+ schemathesis/runner/impl/core.py,sha256=3bCwPcZB1br-clz3oQz8KV9yF9hZK7t3F29ZEq2ErBQ,47642
82
84
  schemathesis/runner/impl/solo.py,sha256=y5QSxgK8nBCEjZVD5BpFvYUXmB6tEjk6TwxAo__NejA,2911
83
85
  schemathesis/runner/impl/threadpool.py,sha256=yNR5LYE8f3N_4t42OwSgy0_qdGgBPM7d11F9c9oEAAs,15075
84
86
  schemathesis/service/__init__.py,sha256=cDVTCFD1G-vvhxZkJUwiToTAEQ-0ByIoqwXvJBCf_V8,472
@@ -87,9 +89,9 @@ schemathesis/service/ci.py,sha256=3m9xSWFhrpWA6mI_8bXI7sspND9RSqXFM9UseO5nIiM,67
87
89
  schemathesis/service/client.py,sha256=9h-y7-GGO3lsuOfSVSMKeHH8nw91rk3Bi06gr23r3E4,5222
88
90
  schemathesis/service/constants.py,sha256=Q1bhtLRkmhso4KSVAtWl0u446Wlbk3ShOL3ZdbPoJOM,1502
89
91
  schemathesis/service/events.py,sha256=YHhVB66bRODx2ZnG4vjE6lVg3LqzOrsMb8O8vtc8SpE,1294
90
- schemathesis/service/extensions.py,sha256=HNniIkMk6D1eBFqq8OIIGCjh_kZHYdMmIISEoCulDeM,7819
92
+ schemathesis/service/extensions.py,sha256=9TBvH762I4DKUQEE551oTH4cHRlVsRXBMDdMVwaFjQk,7805
91
93
  schemathesis/service/hosts.py,sha256=gg4xObk3G9p39bkmAvX3gJpZ3Anx-Fnwm9T03qov0LE,3161
92
- schemathesis/service/metadata.py,sha256=x2LeCED1mdPf-YQJmjY8xtcIKHfD1ap5V0BGl-UgqNo,2087
94
+ schemathesis/service/metadata.py,sha256=6CEyYbf2GkoqUHzC0U1br6DkrF12VBbjr8yhOfRZ0fM,2086
93
95
  schemathesis/service/models.py,sha256=nUf38yf2AK8-B56KHjviVlVe-fjos9Dp-M8YAWOIkrc,6572
94
96
  schemathesis/service/report.py,sha256=FHIlt0UcDQkwRlqsnURuBD7O6PdXlAMJlCdWdukIoiY,8302
95
97
  schemathesis/service/serialization.py,sha256=20APAy8CZ561agg4FP17PIEX8hB0LXtk_p7dpO1Z-JI,6278
@@ -104,20 +106,20 @@ schemathesis/specs/graphql/schemas.py,sha256=b7QwglKbcYQCMjuYmqDsVoFu2o4xaA_kduU
104
106
  schemathesis/specs/graphql/validation.py,sha256=uINIOt-2E7ZuQV2CxKzwez-7L9tDtqzMSpnVoRWvxy0,1635
105
107
  schemathesis/specs/openapi/__init__.py,sha256=HDcx3bqpa6qWPpyMrxAbM3uTo0Lqpg-BUNZhDJSJKnw,279
106
108
  schemathesis/specs/openapi/_cache.py,sha256=PAiAu4X_a2PQgD2lG5H3iisXdyg4SaHpU46bRZvfNkM,4320
107
- schemathesis/specs/openapi/_hypothesis.py,sha256=Ym1d3GXlabOSbDk_AEkmkZGl9EMIDpumciLZtfYNdUI,24323
108
- schemathesis/specs/openapi/checks.py,sha256=eRNSs8wGNOqe4Zxt1DsCUQBU9OgaVceu1uioeRTI1XU,23650
109
+ schemathesis/specs/openapi/_hypothesis.py,sha256=uKcWfiiCNcIBLilzUc6EDxll1hv7CTiBz3ZhKtE_-j4,22916
110
+ schemathesis/specs/openapi/checks.py,sha256=ugo7-6iAu2fX8OmQgyvSunMO9Nt9cr6PNdT3vyX8Z4I,23914
109
111
  schemathesis/specs/openapi/constants.py,sha256=JqM_FHOenqS_MuUE9sxVQ8Hnw0DNM8cnKDwCwPLhID4,783
110
- schemathesis/specs/openapi/converter.py,sha256=NkrzBNjtmVwQTeE73NOtwB_puvQTjxxqqrc7gD_yscc,3241
112
+ schemathesis/specs/openapi/converter.py,sha256=Yxw9lS_JKEyi-oJuACT07fm04bqQDlAu-iHwzkeDvE4,3546
111
113
  schemathesis/specs/openapi/definitions.py,sha256=WTkWwCgTc3OMxfKsqh6YDoGfZMTThSYrHGp8h0vLAK0,93935
112
114
  schemathesis/specs/openapi/examples.py,sha256=FwhPWca7bpdHpUp_LRoK09DVgusojO3aXXhXYrK373I,20354
113
- schemathesis/specs/openapi/formats.py,sha256=JmmkQWNAj5XreXb7Edgj4LADAf4m86YulR_Ec8evpJ4,1220
114
- schemathesis/specs/openapi/links.py,sha256=a8JmWM9aZhrR5CfyIh6t2SkfonMLfYKOScXY2XlZYN0,17749
115
+ schemathesis/specs/openapi/formats.py,sha256=3KtEC-8nQRwMErS-WpMadXsr8R0O-NzYwFisZqMuc-8,2761
116
+ schemathesis/specs/openapi/links.py,sha256=C4Uir2P_EcpqME8ee_a1vdUM8Tm3ZcKNn2YsGjZiMUQ,17935
115
117
  schemathesis/specs/openapi/loaders.py,sha256=5B1cgYEBj3h2psPQxzrQ5Xq5owLVGw-u9HsCQIx7yFE,25705
116
118
  schemathesis/specs/openapi/media_types.py,sha256=dNTxpRQbY3SubdVjh4Cjb38R6Bc9MF9BsRQwPD87x0g,1017
117
- schemathesis/specs/openapi/parameters.py,sha256=CqJdS4d14l25_yEbqkLCnfIdDTlodRhJpxD8EXdaFwM,14059
119
+ schemathesis/specs/openapi/parameters.py,sha256=ri_LBnGHLHxDFBw-tExJ54kCfnhgECWRd-tIceCGHiE,14757
118
120
  schemathesis/specs/openapi/patterns.py,sha256=IK2BkXI1xByEz5if6jvydFE07nq5rDa4k_-2xX7ifG8,4715
119
121
  schemathesis/specs/openapi/references.py,sha256=euxM02kQGMHh4Ss1jWjOY_gyw_HazafKITIsvOEiAvI,9831
120
- schemathesis/specs/openapi/schemas.py,sha256=t3Gz2q-d9b8Oy-hDhz0rNfjYT3Nx-uOeLOmjO9hpRM0,53741
122
+ schemathesis/specs/openapi/schemas.py,sha256=MLU2h9DrQNCDkk74MFFSj-8BsKjkJsf9lJQHPxLFVps,53845
121
123
  schemathesis/specs/openapi/security.py,sha256=Z-6pk2Ga1PTUtBe298KunjVHsNh5A-teegeso7zcPIE,7138
122
124
  schemathesis/specs/openapi/serialization.py,sha256=5qGdFHZ3n80UlbSXrO_bkr4Al_7ci_Z3aSUjZczNDQY,11384
123
125
  schemathesis/specs/openapi/utils.py,sha256=ER4vJkdFVDIE7aKyxyYatuuHVRNutytezgE52pqZNE8,900
@@ -130,7 +132,7 @@ schemathesis/specs/openapi/expressions/lexer.py,sha256=LeVE6fgYT9-fIsXrv0-YrRHnI
130
132
  schemathesis/specs/openapi/expressions/nodes.py,sha256=UOVrK8fRHACv0T460CPSyO6OU5aeKnE2eKX4HF9SiFs,3990
131
133
  schemathesis/specs/openapi/expressions/parser.py,sha256=gM_Ob-TlTGxpgjZGRHNyPhBj1YAvRgRoSlNCrE7-djk,4452
132
134
  schemathesis/specs/openapi/negative/__init__.py,sha256=MG0tx3a7BYx0mVg0pjTojq1fLufMmd_x4zppR3oz-Mk,3739
133
- schemathesis/specs/openapi/negative/mutations.py,sha256=nojP0TTDshr4c-jfDrPaGigJTBpc5U5hEUEefvYyTX8,19028
135
+ schemathesis/specs/openapi/negative/mutations.py,sha256=_BfeqOeqlEo8KuPuFLv3Z7kAR_9G7dvTtyMyMGlkp6o,19244
134
136
  schemathesis/specs/openapi/negative/types.py,sha256=a7buCcVxNBG6ILBM3A7oNTAX0lyDseEtZndBuej8MbI,174
135
137
  schemathesis/specs/openapi/negative/utils.py,sha256=ozcOIuASufLqZSgnKUACjX-EOZrrkuNdXX0SDnLoGYA,168
136
138
  schemathesis/specs/openapi/stateful/__init__.py,sha256=Iu77XE4iUuiz32UoYFqIe7H3yLEC4HKflG0ZX0JCyHg,9451
@@ -138,21 +140,21 @@ schemathesis/specs/openapi/stateful/statistic.py,sha256=xV_I2Oy-H7K_53nedLMy0rR6
138
140
  schemathesis/specs/openapi/stateful/types.py,sha256=DtxmxdvCbzlgoyecudXP84qF7NuCv3fRal3oJJs7eAU,456
139
141
  schemathesis/stateful/__init__.py,sha256=HBg-h131EI8IipHQgufSaXe-CrFTKmffPVsoEFjPUmE,5100
140
142
  schemathesis/stateful/config.py,sha256=huYzqDoD6x20p_VNAR79NgxPwUFO8UXoc3_z4BEuHqU,3586
141
- schemathesis/stateful/context.py,sha256=vJ9nxTTjI5wo7A6PBGCvVVO_7y-ELs3XERi9PxLzykA,5085
143
+ schemathesis/stateful/context.py,sha256=lpCOVhJEbPOp8F_Z_YvU5ptVTgaKJsllvI1NK28Dtvs,5085
142
144
  schemathesis/stateful/events.py,sha256=CyYvyQebOaeTn6UevaB7HXOrUhxCWbqXMfQ7pZK7fV8,6727
143
- schemathesis/stateful/runner.py,sha256=e3vvRrx0NwN20RdC0cC4mZjcsYezwkhoDwE1cCVOAlw,12615
145
+ schemathesis/stateful/runner.py,sha256=3tRRmWcXp5GCeRWGOtQ9-W0rxljoR06qSCKC4r7EQyY,12672
144
146
  schemathesis/stateful/sink.py,sha256=bHYlgh-fMwg1Srxk_XGs0-WV34YccotwH9PGrxCK57A,2474
145
147
  schemathesis/stateful/state_machine.py,sha256=PFztY82W5enuXjO6k4Mz8fbHmDJ7Z8OLYZRWtuBeyjg,12956
146
148
  schemathesis/stateful/statistic.py,sha256=2-uU5xpT9CbMulKgJWLZN6MUpC0Fskf5yXTt4ef4NFA,542
147
149
  schemathesis/stateful/validation.py,sha256=23qSZjC1_xRmtCX4OqsyG6pGxdlo6IZYid695ZpDQyU,3747
148
- schemathesis/transports/__init__.py,sha256=ybH90TrGwODO5s94UMEX2P2HX-6Jb66X5UUOgKTbZz8,12882
150
+ schemathesis/transports/__init__.py,sha256=kFM_0RcBjjw5Jg5ddBhWi98pvC0WrVsR_irJNAb4FQs,13048
149
151
  schemathesis/transports/asgi.py,sha256=bwW9vMd1h89Jh7I4jHJVwSNUQzHvc7-JOD5u4hSHZd8,212
150
152
  schemathesis/transports/auth.py,sha256=urSTO9zgFO1qU69xvnKHPFQV0SlJL3d7_Ojl0tLnZwo,1143
151
153
  schemathesis/transports/content_types.py,sha256=MiKOm-Hy5i75hrROPdpiBZPOTDzOwlCdnthJD12AJzI,2187
152
154
  schemathesis/transports/headers.py,sha256=hr_AIDOfUxsJxpHfemIZ_uNG3_vzS_ZeMEKmZjbYiBE,990
153
155
  schemathesis/transports/responses.py,sha256=OFD4ZLqwEFpo7F9vaP_SVgjhxAqatxIj38FS4XVq8Qs,1680
154
- schemathesis-3.37.0.dist-info/METADATA,sha256=Rt0KgoLdxayzfnVhiEbj8lzthkYuWItyJvdjrMw_WxQ,12905
155
- schemathesis-3.37.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
156
- schemathesis-3.37.0.dist-info/entry_points.txt,sha256=VHyLcOG7co0nOeuk8WjgpRETk5P1E2iCLrn26Zkn5uk,158
157
- schemathesis-3.37.0.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
158
- schemathesis-3.37.0.dist-info/RECORD,,
156
+ schemathesis-3.38.0.dist-info/METADATA,sha256=xtyRXDtAqdBhey-HDZvagpAMxwIucdSFY6n4wSpyr_k,12956
157
+ schemathesis-3.38.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
158
+ schemathesis-3.38.0.dist-info/entry_points.txt,sha256=VHyLcOG7co0nOeuk8WjgpRETk5P1E2iCLrn26Zkn5uk,158
159
+ schemathesis-3.38.0.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
160
+ schemathesis-3.38.0.dist-info/RECORD,,