schemathesis 3.37.1__py3-none-any.whl → 3.38.1__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 (31) hide show
  1. schemathesis/_hypothesis.py +44 -8
  2. schemathesis/_patches.py +21 -0
  3. schemathesis/cli/__init__.py +1 -1
  4. schemathesis/cli/cassettes.py +18 -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/internal/checks.py +5 -3
  9. schemathesis/internal/diff.py +15 -0
  10. schemathesis/models.py +76 -4
  11. schemathesis/runner/impl/context.py +5 -1
  12. schemathesis/runner/impl/core.py +14 -4
  13. schemathesis/runner/serialization.py +10 -3
  14. schemathesis/serializers.py +3 -0
  15. schemathesis/service/extensions.py +1 -1
  16. schemathesis/service/metadata.py +3 -3
  17. schemathesis/specs/openapi/_hypothesis.py +9 -46
  18. schemathesis/specs/openapi/checks.py +7 -2
  19. schemathesis/specs/openapi/converter.py +27 -11
  20. schemathesis/specs/openapi/formats.py +44 -0
  21. schemathesis/specs/openapi/negative/mutations.py +5 -0
  22. schemathesis/specs/openapi/parameters.py +16 -14
  23. schemathesis/specs/openapi/schemas.py +6 -2
  24. schemathesis/stateful/context.py +1 -1
  25. schemathesis/stateful/runner.py +6 -2
  26. schemathesis/utils.py +6 -4
  27. {schemathesis-3.37.1.dist-info → schemathesis-3.38.1.dist-info}/METADATA +2 -1
  28. {schemathesis-3.37.1.dist-info → schemathesis-3.38.1.dist-info}/RECORD +31 -29
  29. {schemathesis-3.37.1.dist-info → schemathesis-3.38.1.dist-info}/WHEEL +0 -0
  30. {schemathesis-3.37.1.dist-info → schemathesis-3.38.1.dist-info}/entry_points.txt +0 -0
  31. {schemathesis-3.37.1.dist-info → schemathesis-3.38.1.dist-info}/licenses/LICENSE +0 -0
@@ -57,7 +57,7 @@ class OpenAPIParameter(Parameter):
57
57
  def is_header(self) -> bool:
58
58
  return self.location in ("header", "cookie")
59
59
 
60
- 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]:
61
61
  """Convert parameter's definition to JSON Schema."""
62
62
  # JSON Schema allows `examples` as an array
63
63
  examples = []
@@ -70,11 +70,11 @@ class OpenAPIParameter(Parameter):
70
70
  schema = self.from_open_api_to_json_schema(operation, self.definition)
71
71
  if examples:
72
72
  schema["examples"] = examples
73
- return self.transform_keywords(schema)
73
+ return self.transform_keywords(schema, update_quantifiers=update_quantifiers)
74
74
 
75
- 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]:
76
76
  """Transform Open API specific keywords into JSON Schema compatible form."""
77
- definition = to_json_schema_recursive(schema, self.nullable_field)
77
+ definition = to_json_schema_recursive(schema, self.nullable_field, update_quantifiers=update_quantifiers)
78
78
  # Headers are strings, but it is not always explicitly defined in the schema. By preparing them properly, we
79
79
  # can achieve significant performance improvements for such cases.
80
80
  # For reference (my machine) - running a single test with 100 examples with the resulting strategy:
@@ -236,11 +236,11 @@ class OpenAPI20Body(OpenAPIBody, OpenAPI20Parameter):
236
236
  # NOTE. For Open API 2.0 bodies, we still give `x-example` precedence over the schema-level `example` field to keep
237
237
  # the precedence rules consistent.
238
238
 
239
- 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]:
240
240
  """Convert body definition to JSON Schema."""
241
241
  # `schema` is required in Open API 2.0 when the `in` keyword is `body`
242
242
  schema = self.definition["schema"]
243
- return self.transform_keywords(schema)
243
+ return self.transform_keywords(schema, update_quantifiers=update_quantifiers)
244
244
 
245
245
 
246
246
  FORM_MEDIA_TYPES = ("multipart/form-data", "application/x-www-form-urlencoded")
@@ -259,13 +259,13 @@ class OpenAPI30Body(OpenAPIBody, OpenAPI30Parameter):
259
259
  required: bool = False
260
260
  description: str | None = None
261
261
 
262
- 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]:
263
263
  """Convert body definition to JSON Schema."""
264
264
  schema = get_media_type_schema(self.definition)
265
- return self.transform_keywords(schema)
265
+ return self.transform_keywords(schema, update_quantifiers=update_quantifiers)
266
266
 
267
- def transform_keywords(self, schema: dict[str, Any]) -> dict[str, Any]:
268
- 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)
269
269
  if self.is_form:
270
270
  # It significantly reduces the "filtering" part of data generation.
271
271
  definition.setdefault("type", "object")
@@ -303,12 +303,14 @@ class OpenAPI20CompositeBody(OpenAPIBody, OpenAPI20Parameter):
303
303
  # We generate an object for formData - it is always required.
304
304
  return bool(self.definition)
305
305
 
306
- 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]:
307
307
  """The composite body is transformed into an "object" JSON Schema."""
308
- return parameters_to_json_schema(operation, self.definition)
308
+ return parameters_to_json_schema(operation, self.definition, update_quantifiers=update_quantifiers)
309
309
 
310
310
 
311
- 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]:
312
314
  """Create an "object" JSON schema from a list of Open API parameters.
313
315
 
314
316
  :param List[OpenAPIParameter] parameters: A list of Open API parameters related to the same location. All of
@@ -348,7 +350,7 @@ def parameters_to_json_schema(operation: APIOperation, parameters: Iterable[Open
348
350
  required = []
349
351
  for parameter in parameters:
350
352
  name = parameter.name
351
- properties[name] = parameter.as_json_schema(operation)
353
+ properties[name] = parameter.as_json_schema(operation, update_quantifiers=update_quantifiers)
352
354
  # If parameter names are duplicated, we need to avoid duplicate entries in `required` anyway
353
355
  if parameter.is_required and name not in required:
354
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."""
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.1
3
+ Version: 3.38.1
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=9ZwAvjvS07O9tz4LxOFI8ZfQASKIz3rocsYIfE4KTU0,16562
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
@@ -17,20 +18,20 @@ schemathesis/graphql.py,sha256=XiuKcfoOB92iLFC8zpz2msLkM0_V0TLdxPNBqrrGZ8w,216
17
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=WZZNBX5ujypy9wXislkoURIn6F_agqPedmm7-kVWIis,47018
21
+ schemathesis/models.py,sha256=2kMMJ3JVe4_91uhRxgsZ_G1FOyksxTiYAo52M5asWLA,49868
21
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=zji-B-uuwyr0Z0BzQX-DLMV6lWb58JtLExcUE1v3m4Y,20153
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=SBx2gesB-XzgVSMX_u7Mb416jSxJ68eQKtcdkWlkyOo,2441
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=vZi1wd9HX9Swp9VJ_hZFeDgy3Y726URpHra-TbPvQhk,20762
79
81
  schemathesis/runner/impl/__init__.py,sha256=1E2iME8uthYPBh9MjwVBCTFV-P3fi7AdphCCoBBspjs,199
80
- schemathesis/runner/impl/context.py,sha256=4nHFPsq0ShfuZ2jPrJUuYu-vQpD1ImGE0fmXAKC_cZw,2883
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=nU8UDn1PzGCre4IVmwIuO9-CZv1KJe1fYY0d2BojhSo,22981
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
115
+ schemathesis/specs/openapi/formats.py,sha256=3KtEC-8nQRwMErS-WpMadXsr8R0O-NzYwFisZqMuc-8,2761
114
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=Ga_g8mSl_2lFSgmuLYNEaA92JfqsAdxbhu5kMtalK_Y,14226
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,9 +140,9 @@ 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
@@ -151,8 +153,8 @@ schemathesis/transports/auth.py,sha256=urSTO9zgFO1qU69xvnKHPFQV0SlJL3d7_Ojl0tLnZ
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.1.dist-info/METADATA,sha256=I0-7WaiuMLY42hqpDEOfx1ipBOi5hAfyMM-U9CP46aY,12905
155
- schemathesis-3.37.1.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
156
- schemathesis-3.37.1.dist-info/entry_points.txt,sha256=VHyLcOG7co0nOeuk8WjgpRETk5P1E2iCLrn26Zkn5uk,158
157
- schemathesis-3.37.1.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
158
- schemathesis-3.37.1.dist-info/RECORD,,
156
+ schemathesis-3.38.1.dist-info/METADATA,sha256=uff9hJ2ktn_0hhxt3lSUCCJCzkLmVGaJ5CiuXmta8_c,12956
157
+ schemathesis-3.38.1.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
158
+ schemathesis-3.38.1.dist-info/entry_points.txt,sha256=VHyLcOG7co0nOeuk8WjgpRETk5P1E2iCLrn26Zkn5uk,158
159
+ schemathesis-3.38.1.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
160
+ schemathesis-3.38.1.dist-info/RECORD,,