schemathesis 3.25.5__py3-none-any.whl → 3.26.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 (42) hide show
  1. schemathesis/_dependency_versions.py +1 -0
  2. schemathesis/_hypothesis.py +1 -0
  3. schemathesis/_xml.py +1 -0
  4. schemathesis/auths.py +1 -0
  5. schemathesis/cli/__init__.py +39 -37
  6. schemathesis/cli/cassettes.py +4 -4
  7. schemathesis/cli/context.py +6 -0
  8. schemathesis/cli/output/default.py +185 -45
  9. schemathesis/cli/output/short.py +8 -0
  10. schemathesis/experimental/__init__.py +7 -0
  11. schemathesis/filters.py +1 -0
  12. schemathesis/models.py +5 -2
  13. schemathesis/parameters.py +1 -0
  14. schemathesis/runner/__init__.py +36 -9
  15. schemathesis/runner/events.py +33 -1
  16. schemathesis/runner/impl/core.py +99 -23
  17. schemathesis/{cli → runner}/probes.py +32 -21
  18. schemathesis/runner/serialization.py +4 -2
  19. schemathesis/schemas.py +1 -0
  20. schemathesis/serializers.py +11 -3
  21. schemathesis/service/client.py +35 -2
  22. schemathesis/service/extensions.py +224 -0
  23. schemathesis/service/hosts.py +1 -0
  24. schemathesis/service/metadata.py +24 -0
  25. schemathesis/service/models.py +210 -2
  26. schemathesis/service/serialization.py +44 -1
  27. schemathesis/specs/openapi/__init__.py +1 -0
  28. schemathesis/specs/openapi/_hypothesis.py +9 -1
  29. schemathesis/specs/openapi/examples.py +22 -24
  30. schemathesis/specs/openapi/expressions/__init__.py +1 -0
  31. schemathesis/specs/openapi/expressions/lexer.py +1 -0
  32. schemathesis/specs/openapi/expressions/nodes.py +1 -0
  33. schemathesis/specs/openapi/links.py +1 -0
  34. schemathesis/specs/openapi/media_types.py +34 -0
  35. schemathesis/specs/openapi/negative/mutations.py +1 -0
  36. schemathesis/specs/openapi/schemas.py +10 -3
  37. schemathesis/specs/openapi/security.py +5 -1
  38. {schemathesis-3.25.5.dist-info → schemathesis-3.26.0.dist-info}/METADATA +8 -5
  39. {schemathesis-3.25.5.dist-info → schemathesis-3.26.0.dist-info}/RECORD +42 -40
  40. {schemathesis-3.25.5.dist-info → schemathesis-3.26.0.dist-info}/WHEEL +0 -0
  41. {schemathesis-3.25.5.dist-info → schemathesis-3.26.0.dist-info}/entry_points.txt +0 -0
  42. {schemathesis-3.25.5.dist-info → schemathesis-3.26.0.dist-info}/licenses/LICENSE +0 -0
@@ -3,19 +3,24 @@ from __future__ import annotations
3
3
  from contextlib import suppress
4
4
  from dataclasses import dataclass
5
5
  from functools import lru_cache
6
- from itertools import islice, cycle, chain
7
- from typing import Any, Generator, Union, cast
6
+ from itertools import chain, cycle, islice
7
+ from typing import TYPE_CHECKING, Any, Generator, Union, cast
8
8
 
9
9
  import requests
10
- import hypothesis
11
- from hypothesis_jsonschema import from_schema
12
10
  from hypothesis.strategies import SearchStrategy
11
+ from hypothesis_jsonschema import from_schema
13
12
 
14
- from .parameters import OpenAPIParameter, OpenAPIBody
15
13
  from ...constants import DEFAULT_RESPONSE_TIMEOUT
16
14
  from ...models import APIOperation, Case
17
- from ._hypothesis import get_case_strategy
15
+ from ..._hypothesis import get_single_example
16
+ from ._hypothesis import get_case_strategy, get_default_format_strategies
17
+ from .formats import STRING_FORMATS
18
18
  from .constants import LOCATION_TO_CONTAINER
19
+ from .parameters import OpenAPIBody, OpenAPIParameter
20
+
21
+
22
+ if TYPE_CHECKING:
23
+ from ...generation import GenerationConfig
19
24
 
20
25
 
21
26
  @dataclass
@@ -248,7 +253,7 @@ def extract_from_schema(
248
253
  # Generated by one of `anyOf` or similar sub-schemas
249
254
  continue
250
255
  subschema = operation.schema.prepare_schema(subschema)
251
- generated = _generate_single_example(subschema)
256
+ generated = _generate_single_example(subschema, operation.schema.generation_config)
252
257
  variants[name] = [generated]
253
258
  # Calculate the maximum number of examples any property has
254
259
  total_combos = max(len(examples) for examples in variants.values())
@@ -264,24 +269,17 @@ def extract_from_schema(
264
269
  yield [value]
265
270
 
266
271
 
267
- def _generate_single_example(schema: dict[str, Any]) -> Any:
268
- examples = []
269
-
270
- @hypothesis.given(from_schema(schema)) # type: ignore
271
- @hypothesis.settings( # type: ignore
272
- database=None,
273
- max_examples=1,
274
- deadline=None,
275
- verbosity=hypothesis.Verbosity.quiet,
276
- phases=(hypothesis.Phase.generate,),
277
- suppress_health_check=list(hypothesis.HealthCheck),
272
+ def _generate_single_example(
273
+ schema: dict[str, Any],
274
+ generation_config: GenerationConfig,
275
+ ) -> Any:
276
+ strategy = from_schema(
277
+ schema,
278
+ custom_formats={**get_default_format_strategies(), **STRING_FORMATS},
279
+ allow_x00=generation_config.allow_x00,
280
+ codec=generation_config.codec,
278
281
  )
279
- def example_generating_inner_function(ex: Any) -> None:
280
- examples.append(ex)
281
-
282
- example_generating_inner_function()
283
-
284
- return examples[0]
282
+ return get_single_example(strategy)
285
283
 
286
284
 
287
285
  def produce_combinations(examples: list[Example]) -> Generator[dict[str, Any], None, None]:
@@ -2,6 +2,7 @@
2
2
 
3
3
  https://swagger.io/docs/specification/links/#runtime-expressions
4
4
  """
5
+
5
6
  from typing import Any
6
7
 
7
8
  from . import lexer, nodes, parser
@@ -1,4 +1,5 @@
1
1
  """Lexical analysis of runtime expressions."""
2
+
2
3
  from dataclasses import dataclass
3
4
  from enum import Enum, unique
4
5
  from typing import Callable, Generator
@@ -1,4 +1,5 @@
1
1
  """Expression nodes description and evaluation logic."""
2
+
2
3
  from __future__ import annotations
3
4
  from dataclasses import dataclass
4
5
  from enum import Enum, unique
@@ -2,6 +2,7 @@
2
2
 
3
3
  Based on https://swagger.io/docs/specification/links/
4
4
  """
5
+
5
6
  from __future__ import annotations
6
7
  from dataclasses import dataclass, field
7
8
  from difflib import get_close_matches
@@ -0,0 +1,34 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Any, Collection
4
+
5
+ if TYPE_CHECKING:
6
+ from hypothesis import strategies as st
7
+
8
+
9
+ MEDIA_TYPES: dict[str, st.SearchStrategy[bytes]] = {}
10
+
11
+
12
+ def register_media_type(name: str, strategy: st.SearchStrategy[bytes], *, aliases: Collection[str] = ()) -> None:
13
+ """Register a strategy for the given media type."""
14
+ from ...serializers import SerializerContext, register
15
+
16
+ @register(name, aliases=aliases)
17
+ class MediaTypeSerializer:
18
+ def as_requests(self, context: SerializerContext, value: Any) -> dict[str, Any]:
19
+ return {"data": value}
20
+
21
+ def as_werkzeug(self, context: SerializerContext, value: Any) -> dict[str, Any]:
22
+ return {"data": value}
23
+
24
+ MEDIA_TYPES[name] = strategy
25
+ for alias in aliases:
26
+ MEDIA_TYPES[alias] = strategy
27
+
28
+
29
+ def unregister_all() -> None:
30
+ from ...serializers import unregister
31
+
32
+ for media_type in MEDIA_TYPES:
33
+ unregister(media_type)
34
+ MEDIA_TYPES.clear()
@@ -1,4 +1,5 @@
1
1
  """Schema mutations."""
2
+
2
3
  from __future__ import annotations
3
4
  import enum
4
5
  from dataclasses import dataclass
@@ -33,6 +33,7 @@ from ...auths import AuthStorage
33
33
  from ...generation import DataGenerationMethod, GenerationConfig
34
34
  from ...constants import HTTP_METHODS, NOT_SET
35
35
  from ...exceptions import (
36
+ InternalError,
36
37
  OperationSchemaError,
37
38
  UsageError,
38
39
  get_missing_content_type_error,
@@ -808,7 +809,7 @@ class SwaggerV20(BaseOpenAPISchema):
808
809
 
809
810
  @property
810
811
  def spec_version(self) -> str:
811
- return self.raw_schema["swagger"]
812
+ return self.raw_schema.get("swagger", "2.0")
812
813
 
813
814
  @property
814
815
  def verbose_name(self) -> str:
@@ -1060,8 +1061,14 @@ class OpenApi30(SwaggerV20):
1060
1061
  files = []
1061
1062
  content = operation.definition.resolved["requestBody"]["content"]
1062
1063
  # Open API 3.0 requires media types to be present. We can get here only if the schema defines
1063
- # the "multipart/form-data" media type
1064
- schema = content["multipart/form-data"]["schema"]
1064
+ # the "multipart/form-data" media type, or any other more general media type that matches it (like `*/*`)
1065
+ for media_type, entry in content.items():
1066
+ main, sub = parse_content_type(media_type)
1067
+ if main in ("*", "multipart") and sub in ("*", "form-data"):
1068
+ schema = entry["schema"]
1069
+ break
1070
+ else:
1071
+ raise InternalError("No 'multipart/form-data' media type found in the schema")
1065
1072
  for name, property_schema in schema.get("properties", {}).items():
1066
1073
  if name in form_data:
1067
1074
  if isinstance(form_data[name], list):
@@ -1,4 +1,5 @@
1
1
  """Processing of ``securityDefinitions`` or ``securitySchemes`` keywords."""
2
+
2
3
  from __future__ import annotations
3
4
  from dataclasses import dataclass
4
5
  from typing import Any, ClassVar, Generator
@@ -126,7 +127,10 @@ class OpenAPISecurityProcessor(BaseSecurityProcessor):
126
127
  security_schemes = components.get("securitySchemes", {})
127
128
  if "$ref" in security_schemes:
128
129
  return resolver.resolve(security_schemes["$ref"])[1]
129
- return security_schemes
130
+ return {
131
+ key: resolver.resolve(value["$ref"])[1] if "$ref" in value else value
132
+ for key, value in security_schemes.items()
133
+ }
130
134
 
131
135
  def _make_http_auth_parameter(self, definition: dict[str, Any]) -> dict[str, Any]:
132
136
  schema = make_auth_header_schema(definition)
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: schemathesis
3
- Version: 3.25.5
3
+ Version: 3.26.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
7
7
  Project-URL: Bug Tracker, https://github.com/schemathesis/schemathesis
8
8
  Project-URL: Funding, https://github.com/sponsors/Stranger6667
9
9
  Project-URL: Source Code, https://github.com/schemathesis/schemathesis
10
- Author-email: Dmitry Dygalo <dadygalo@gmail.com>
11
- Maintainer-email: Dmitry Dygalo <dadygalo@gmail.com>
10
+ Author-email: Dmitry Dygalo <dmitry@dygalo.dev>
11
+ Maintainer-email: Dmitry Dygalo <dmitry@dygalo.dev>
12
12
  License-Expression: MIT
13
13
  License-File: LICENSE
14
14
  Keywords: graphql,hypothesis,openapi,pytest,testing
@@ -35,7 +35,8 @@ Requires-Dist: colorama<1.0,>=0.4
35
35
  Requires-Dist: httpx<1.0,>=0.22.0
36
36
  Requires-Dist: hypothesis-graphql<1,>=0.11.0
37
37
  Requires-Dist: hypothesis-jsonschema<0.24,>=0.23.1
38
- Requires-Dist: hypothesis<7,>=6.84.3
38
+ Requires-Dist: hypothesis<7,>=6.84.3; python_version > '3.8'
39
+ Requires-Dist: hypothesis[zoneinfo]<7,>=6.84.3; python_version == '3.8'
39
40
  Requires-Dist: jsonschema<5.0,>=4.18.0
40
41
  Requires-Dist: junit-xml<2.0,>=1.9
41
42
  Requires-Dist: pyrate-limiter<3.0,>=2.10
@@ -224,7 +225,9 @@ Receive automatic comments in your pull requests and updates on GitHub checks st
224
225
 
225
226
  ### Software as a Service
226
227
 
227
- If you prefer an all-in-one solution with quick setup, we have a [free tier](https://schemathesis.io/#pricing) available.
228
+ Schemathesis CLI integrates with Schemathesis.io to enhance bug detection by optimizing test case generation for efficiency and realism. It leverages various techniques to infer appropriate data generation strategies, provide support for uncommon media types, and adjust schemas for faster data generation. The integration also detects the web server being used to generate more targeted test data.
229
+
230
+ Schemathesis.io offers a user-friendly UI that simplifies viewing and analyzing test results. If you prefer an all-in-one solution with quick setup, we have a [free tier](https://schemathesis.io/#pricing) available.
228
231
 
229
232
  ## How it works
230
233
 
@@ -1,52 +1,51 @@
1
1
  schemathesis/__init__.py,sha256=WW1NBZxmc5jRR0c24xz-ZtTkJMUQG5MOw1MGVRRGc1s,1970
2
2
  schemathesis/_compat.py,sha256=VizWR0QAVj4l7WZautNe_zmo3AJ7WBl2zrJQOfJAQtk,1837
3
- schemathesis/_dependency_versions.py,sha256=_y0aBRMxa5ey6duwMy6cSaMVUAtfbJNBINjFd1ObWF0,727
4
- schemathesis/_hypothesis.py,sha256=AI7N7n4g7IPx2CeF5sHaaDkw9DJzVO-MQPkDKICnBn0,10243
3
+ schemathesis/_dependency_versions.py,sha256=sLlY3jGtnjIg2JRMbVt89lYKiD3K2zl1A5QF0_5_O08,728
4
+ schemathesis/_hypothesis.py,sha256=9qqO4xlNRXm8lYJaYN53N5HoQTHKljjZ1M3jzWKKnbU,10244
5
5
  schemathesis/_lazy_import.py,sha256=LTki2tM168fCcXet1e6qDoQq8SLgInUA3xjXgi7cXJk,469
6
6
  schemathesis/_override.py,sha256=oetGCvMGqP8plf2Suvql2E0n3P-PU9SIySKwlBjzuR4,1629
7
- schemathesis/_xml.py,sha256=VatOQxdMFzD1vDnaHFNtK69uY9R0RlICa5UplgALyMM,6921
8
- schemathesis/auths.py,sha256=09tlGuNGpl3rrsU3ua3UI3rIefqUIpaVtG89U5P6rJo,14731
7
+ schemathesis/_xml.py,sha256=5AMZuno3fS4YWPqBlrv5V-f-BmawkdwmpD3GpAsaxnA,6922
8
+ schemathesis/auths.py,sha256=tUuaHvXO96HJr22Gu9OmlSpL2wbAqKZr3TRbb9dVyA4,14732
9
9
  schemathesis/checks.py,sha256=SYts1Teecg-5kSHBo32Pzhh7YQ4a1Y7DIfldd-0VTj8,2155
10
10
  schemathesis/code_samples.py,sha256=QFwyA7dmc_ij2FRwfbe0uMRm6j2yeofQ8zXynZV3SZI,4122
11
11
  schemathesis/constants.py,sha256=gptQZnXJwEJjuLgw62n7LL_kbkE7dhxUgyyJw_dEEAc,2672
12
12
  schemathesis/exceptions.py,sha256=fAkismvT-QcIunr6rZ6OllhXFK3sHjwiZJlD63fttQw,19631
13
13
  schemathesis/failures.py,sha256=oKbIDD075ymLT4h7SQK-herHDT608d-StPX9pXmOSVU,5996
14
- schemathesis/filters.py,sha256=cNwU2TUpCpEx2W8VuEzhpXQ0s9DVSXIoTwRdlus4Eeg,10249
14
+ schemathesis/filters.py,sha256=9SJyZ8mcuDyKG2G1hp2Nfz-TvyJWP_NcntsgwFWYY_Q,10250
15
15
  schemathesis/graphql.py,sha256=YkoKWY5K8lxp7H3ikAs-IsoDbiPwJvChG7O8p3DgwtI,229
16
16
  schemathesis/hooks.py,sha256=cNJgCh7SyLWT1sYDKF5ncDC80ld08CinvKo2IqLMV4g,12396
17
17
  schemathesis/lazy.py,sha256=CivWpvesh4iYLSkatXbQPTEOruWmXvuZQ29gng5p9wM,14846
18
18
  schemathesis/loaders.py,sha256=RJnrbf-3vZ7KXmRBkmr3uqWyg0eHzOnONABuudWcTIg,4586
19
- schemathesis/models.py,sha256=OcKi__d_PyLcvjc05jCsmLNJwj5DlEdxiBktAo_HxOQ,46634
20
- schemathesis/parameters.py,sha256=xHd3DAkq7z9FAnYDJXXeeOW8XKRsCIW23qtFOPYvGVs,2256
19
+ schemathesis/models.py,sha256=F2aWZW_BqCFzgv9s7KFkRt-EGQTimhKbYaehRtqC6Lw,46757
20
+ schemathesis/parameters.py,sha256=VheEffVzoSfYaSEcG7KhPlA4ypifosG8biiHifzwL8g,2257
21
21
  schemathesis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  schemathesis/sanitization.py,sha256=WSV_MB5YRrYkp1pQRPHrzsidqsKcqYZiq64N9grKobo,8956
23
- schemathesis/schemas.py,sha256=VfNMjBzQNSY7YFhtM_IfpjI48wyff0yZ_QnXM6gA48A,18251
24
- schemathesis/serializers.py,sha256=cYWblkz-fghGClYWlBdxiebqXqksxuHVFonRBj7daL8,11296
23
+ schemathesis/schemas.py,sha256=rtlbHoEmZt5sF31E7Mn_MJdfcaCRUejVAkxFicrq3c0,18252
24
+ schemathesis/serializers.py,sha256=_xoebWkVrgbGbPjPgTgwuN-fN4YT004aj7kImyPComY,11619
25
25
  schemathesis/targets.py,sha256=tzp7VZ2-7g2nZHCooRgFzTMtOVcbl0rvtNR421hQthA,1162
26
26
  schemathesis/throttling.py,sha256=QQcS7TFpXHavUjm0kdFaCcCRhAGlgQ4y3XIbkdRoW20,1079
27
27
  schemathesis/types.py,sha256=AglR5M0bce-YXeDRkweToXTP0GjNOWVjS_mIsxLobwc,919
28
28
  schemathesis/utils.py,sha256=4HXvHysnHp-Uz2HfNgLfW5F5VjL-mtixrjjzRCEJhYo,5233
29
- schemathesis/cli/__init__.py,sha256=aijICr5cRlKISUWYAQOurcOhZOhLxk1u04pXM0cNb-U,64814
29
+ schemathesis/cli/__init__.py,sha256=MSdz9Xt2qvey-3HbWj5nfwV2nZ-rdV05u_Eh_Be9m0c,64909
30
30
  schemathesis/cli/callbacks.py,sha256=HmD0WmSYf5x8v4xeZdOKzy_8CEk23NitUlL8JQ7LHdQ,14950
31
- schemathesis/cli/cassettes.py,sha256=gPPvcuIj1WnoP-yqqvGCJNe49SWlDFu8OdQkOmY453A,12988
31
+ schemathesis/cli/cassettes.py,sha256=1ucgYyOZiNu44uOv044FdfKTzQolUyhAM2onk4m3MD0,12988
32
32
  schemathesis/cli/constants.py,sha256=XoezT0_fHuiOY2e--cmBUhNieJsepcUoW8e48QuLSDI,1544
33
- schemathesis/cli/context.py,sha256=QrNr-5-7Z8TWGNzlD87hJZau6wU--ZboYHN92cyg82k,1652
33
+ schemathesis/cli/context.py,sha256=wwfdSL_NKHEyzQnj8PcnaJdzasa_N08e2KPvy4Wl8N4,1874
34
34
  schemathesis/cli/debug.py,sha256=PDEa-oHyz5bZ8aYjRYARwQaCv_AC6HM_L43LJfe4vUM,657
35
35
  schemathesis/cli/handlers.py,sha256=62GPWPmgeGUz3pkDd01H4UCXcIy5a9yRtU7qaAeeR-A,389
36
36
  schemathesis/cli/junitxml.py,sha256=jMZzYBYpBE7Rl5n1ct3J0bhhPa1lhBeYb33lTZE1eW8,1792
37
37
  schemathesis/cli/options.py,sha256=7_dXcrPT0kWqAkm60cAT1J0IsTOcvNFxT1pcHYttBuI,2558
38
- schemathesis/cli/probes.py,sha256=HAz5kWeXL9NiRFtLC86rDvBgpwDLJ8NnCDyVU74Yp9I,5245
39
38
  schemathesis/cli/sanitization.py,sha256=v-9rsMCBpWhom0Bfzj_8c6InqxkVjSWK6kRoURa52Nk,727
40
39
  schemathesis/cli/output/__init__.py,sha256=AXaUzQ1nhQ-vXhW4-X-91vE2VQtEcCOrGtQXXNN55iQ,29
41
- schemathesis/cli/output/default.py,sha256=WUIWgqzqlRR3afBIt9EnCEwSzgT46gEs6dMtwZ1AMZg,31980
42
- schemathesis/cli/output/short.py,sha256=Ui21Ko7eY5igs4CyNFb88-KRXKmMjz776l9aCHpYq8o,1628
40
+ schemathesis/cli/output/default.py,sha256=XxnfZXXERuB1X3M8dlVBZnYUuZ0JXsQMCX4EEv5-oYg,38213
41
+ schemathesis/cli/output/short.py,sha256=MmFMOKBRqqvgq7Kmx6XJc7Vqkr9g5BrJBxRbyZ0Rh-k,2068
43
42
  schemathesis/contrib/__init__.py,sha256=FH8NL8NXgSKBFOF8Jy_EB6T4CJEaiM-tmDhz16B2o4k,187
44
43
  schemathesis/contrib/unique_data.py,sha256=zxrmAlQH7Bcil9YSfy2EazwLj2rxLzOvAE3O6QRRkFY,1317
45
44
  schemathesis/contrib/openapi/__init__.py,sha256=YMj_b2f3ohGwEt8QQXlxBT60wqvdCFS6516I4EHWVNM,217
46
45
  schemathesis/contrib/openapi/fill_missing_examples.py,sha256=dY1ygG41PWmITOegdv2uwpDm-UiBcyDSOuGCZMGxYAg,582
47
46
  schemathesis/contrib/openapi/formats/__init__.py,sha256=OpHWPW8MkTLVv83QXPYY1HVLflhmSH49hSVefm1oVV0,111
48
47
  schemathesis/contrib/openapi/formats/uuid.py,sha256=SsTH_bInSXnlGLNyYLmwUfvafVnVOTHdmhmKytQVoUQ,390
49
- schemathesis/experimental/__init__.py,sha256=9q_ok4f7djj4Ur9Ji0ABHsYsOzW_8GM5IMjbLglcMEM,1977
48
+ schemathesis/experimental/__init__.py,sha256=e4QbqDYeGU769e5XhWOK6nJeCj9GfNFqdernZw05bQs,2275
50
49
  schemathesis/extra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
50
  schemathesis/extra/_aiohttp.py,sha256=YQIV-jHdlAyyw5O4FQDQC8KTLjwKi-LWfD3U7JU4Pns,956
52
51
  schemathesis/extra/_flask.py,sha256=BHCbxBDoMlIvNS5sRNyrPN1NwHxiDQt0IsyfYwwoFes,289
@@ -64,24 +63,26 @@ schemathesis/internal/jsonschema.py,sha256=eQEkBLTdJ__U7Z0XYXB_RVBQJ4texfFO0AaOo
64
63
  schemathesis/internal/result.py,sha256=Og_ZfwwQ6JFmW79ExC1ndjVMIOHJB7o9XtrfhYIjOOs,461
65
64
  schemathesis/internal/transformation.py,sha256=ZNEtL8ezryLdP9-of4eSRBMSjjV_lBQ5DZZfoPGZFEU,449
66
65
  schemathesis/internal/validation.py,sha256=G7i8jIMUpAeOnDsDF_eWYvRZe_yMprRswx0QAtMPyEw,966
67
- schemathesis/runner/__init__.py,sha256=mEfQP6_u_HTVxJe4YlXr0ddSu3NUcEwuWfen4gqKfUA,20358
68
- schemathesis/runner/events.py,sha256=whpHGXcT7esnJ2bNsFirUrrELI3GtDAAoJ7VVTty2mc,9416
69
- schemathesis/runner/serialization.py,sha256=WvAVInu_Pe088p5lWupHvWVDMUjepcf8CIfPi0tLYdg,15900
66
+ schemathesis/runner/__init__.py,sha256=kkqjC_5G2Mrq00syLNUDHP3sXqwiId8_cusKtIlOyXM,21419
67
+ schemathesis/runner/events.py,sha256=eZc4TT8C8mWCMr9h4JvlijvQQ-x8wFry8LntdsYIL-A,10200
68
+ schemathesis/runner/probes.py,sha256=t_B38-ljy-p3Odw-dqcZUVIjYTPwBvac8KE5GaLnz4M,5546
69
+ schemathesis/runner/serialization.py,sha256=SOyEvO87ZtGCG_zfYW5uaKZBiXbVtEM7yGDuVp0wrI8,16003
70
70
  schemathesis/runner/impl/__init__.py,sha256=1E2iME8uthYPBh9MjwVBCTFV-P3fi7AdphCCoBBspjs,199
71
- schemathesis/runner/impl/core.py,sha256=koma7LEah5YJJTmqlLV9An5x-dBUMiKn1oEq1umDtTA,36760
71
+ schemathesis/runner/impl/core.py,sha256=vaw6OBgYOVT44-gR2t_EiWLArX2RmtAxITR3WZWCX8k,39558
72
72
  schemathesis/runner/impl/solo.py,sha256=Y_tNhVBVxcuxv65hN0FjxLlVSC41ebHMOM1xSzVrNk8,3358
73
73
  schemathesis/runner/impl/threadpool.py,sha256=2-2Wvw7msezZtenZY5vU_x3FGLLVlH-ywvhU9hTwAAo,15073
74
74
  schemathesis/service/__init__.py,sha256=cDVTCFD1G-vvhxZkJUwiToTAEQ-0ByIoqwXvJBCf_V8,472
75
75
  schemathesis/service/auth.py,sha256=AiZXvSNwz1Hi3fn-OCp6XD-E4GAMDlfcX8fORJ8_dLo,445
76
76
  schemathesis/service/ci.py,sha256=Nke_GHtUlbJtZA-7JmjD1Nu4aKBCtkUo8AwFwm38qpk,6781
77
- schemathesis/service/client.py,sha256=lkop8gLgv0KN4Y_vA6RWVFqIzVPUdJWn144dgZlqxo4,3953
77
+ schemathesis/service/client.py,sha256=TcUnLyiGYuU3ENZRStycx5p6tQe_iknioYKPqlEe5Xk,5218
78
78
  schemathesis/service/constants.py,sha256=Q1bhtLRkmhso4KSVAtWl0u446Wlbk3ShOL3ZdbPoJOM,1502
79
79
  schemathesis/service/events.py,sha256=oysiTeHkE1r65CZTPlyNXW3XFh0_Xt0eq9-FNBUy5U0,1237
80
- schemathesis/service/hosts.py,sha256=WEiVaLpVka3mhl-T0LjD4WJDEGC-dqOFNmiB4H7Cx5Q,3121
81
- schemathesis/service/metadata.py,sha256=jsPeif2XbrwjZgzDD3YysuUgGaSZm6Hkc4e3raDewqo,1475
82
- schemathesis/service/models.py,sha256=bY9g48TdtEPS0yO2lTKEsHtKl81Hh5vSJtMDe8kkWSI,850
80
+ schemathesis/service/extensions.py,sha256=PuG-Qfb9Y1oWOaa2Dxb8qhTH0t9CyawzZ2xkUoL7Sd4,7827
81
+ schemathesis/service/hosts.py,sha256=Qxa-BGV56z9pRHl8kUm8LNZQiW3fALDYVcgZqUMh4qQ,3122
82
+ schemathesis/service/metadata.py,sha256=ajiDb2VDquXRoYl7h9LGDoj9GWq6pKv5nN-WVtTnCIE,2086
83
+ schemathesis/service/models.py,sha256=45J7lugoFP1QbQFAEFCi9aj-yuTBKKHtil9vA8BWnfk,6577
83
84
  schemathesis/service/report.py,sha256=ua1-cfa-TgGshZgimUQ3-YQqykhZqMHCkEificBKncM,8294
84
- schemathesis/service/serialization.py,sha256=uXB-pRi1oylJ6n2CveoVyaK9m1tbQgykDcgTNPvGhHc,6781
85
+ schemathesis/service/serialization.py,sha256=si3NF9_nN7l2f2EPnVGWNN07Oc9lFh_ZhaqhO78qtWg,8305
85
86
  schemathesis/service/usage.py,sha256=Z-GCwFcW1pS6YdC-ziEOynikqgOttxp2Uyj_dfK5Q7A,2437
86
87
  schemathesis/specs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
88
  schemathesis/specs/graphql/__init__.py,sha256=fgyHtvWNUVWismBTOqxQtgLoTighTfvMv6v6QCD_Oyc,85
@@ -90,32 +91,33 @@ schemathesis/specs/graphql/nodes.py,sha256=7F5jbk96uTZZXK9Ulr86KpCAn8z6LKMBcrLrd
90
91
  schemathesis/specs/graphql/scalars.py,sha256=W5oj6AcjiXpR-Z6eSSp1oPWl0mjH2NF-w87nRFhrHHg,1805
91
92
  schemathesis/specs/graphql/schemas.py,sha256=pbonjYD2neMujoMZZMM_MXFJt-gk1qsW59Qkfed9Ltg,13967
92
93
  schemathesis/specs/graphql/validation.py,sha256=SqQbj9uymGUQxlHXc8HkQccIq25uwP5CvLF1zReb1Xg,1636
93
- schemathesis/specs/openapi/__init__.py,sha256=Ue1Qod8IpzeJ5dwxjAHNv97Nh8NVzm_6fnHR2BIzfHY,220
94
- schemathesis/specs/openapi/_hypothesis.py,sha256=bJHTlz4SYq7Z79ihxlsZ1WpK5q-1tVTJHBAaPvuq0xg,22157
94
+ schemathesis/specs/openapi/__init__.py,sha256=HDcx3bqpa6qWPpyMrxAbM3uTo0Lqpg-BUNZhDJSJKnw,279
95
+ schemathesis/specs/openapi/_hypothesis.py,sha256=Z-Zapvv734eBrZVdKukhJ-fDXqPDIPez5OOgvSCI5Sg,22716
95
96
  schemathesis/specs/openapi/checks.py,sha256=1WB_UGNqptfJThWLUNbds1Q-IzOGbbHCOYPIhBYk-zs,5411
96
97
  schemathesis/specs/openapi/constants.py,sha256=JqM_FHOenqS_MuUE9sxVQ8Hnw0DNM8cnKDwCwPLhID4,783
97
98
  schemathesis/specs/openapi/converter.py,sha256=9TKeKvNi9MVvoNMfqoPz_cODO8oNrMSTXTOwLLfjD_Q,2799
98
99
  schemathesis/specs/openapi/definitions.py,sha256=t5xffHLBnSgptBdDkSqYN1OfT-DaXoeUw2tIgNEe2q8,94057
99
- schemathesis/specs/openapi/examples.py,sha256=6SKlA3DyOTivaetWmKTata3ehlFGFaRh5pajZKNEdJ4,14917
100
+ schemathesis/specs/openapi/examples.py,sha256=igLDfMpNhRMAk7mYBqi93CtVRQTZCWjCJ2KxlQFotdA,14932
100
101
  schemathesis/specs/openapi/filters.py,sha256=Ei-QTFcGCvGSIunT-GYQrtqzB-kqvUePOcUuC7B7mT8,1436
101
102
  schemathesis/specs/openapi/formats.py,sha256=JmmkQWNAj5XreXb7Edgj4LADAf4m86YulR_Ec8evpJ4,1220
102
- schemathesis/specs/openapi/links.py,sha256=YryI35djHOhTikRV3FLafy_jhYFypF7E8Yb6dg9ksWc,14575
103
+ schemathesis/specs/openapi/links.py,sha256=FUjqEf6Sv6PeS0UX7CLL5p2VHa9vA1MGDPhx2pfYg1s,14576
103
104
  schemathesis/specs/openapi/loaders.py,sha256=Jm37MTUmbVVkOxoRAJOo_T_Ex-tWu2ir7YG7y-v-BjM,24014
105
+ schemathesis/specs/openapi/media_types.py,sha256=dNTxpRQbY3SubdVjh4Cjb38R6Bc9MF9BsRQwPD87x0g,1017
104
106
  schemathesis/specs/openapi/parameters.py,sha256=5jMZQZFsZNBFjG22Bqot-Rc65emiSA4E95rIzwImThk,13610
105
107
  schemathesis/specs/openapi/references.py,sha256=YGunHAGubYPKbMqQtpFWZm1D4AGxB8wLuiVhE6T6cWo,8978
106
- schemathesis/specs/openapi/schemas.py,sha256=QmcA7ACKRpebO3iYnWKC9hcx_jkLeEy6ll72x-eDu90,50039
107
- schemathesis/specs/openapi/security.py,sha256=lNRD4RSYe341f_ayhl_bQuYlFbGzx4luhXi6qJwzrOY,6495
108
+ schemathesis/specs/openapi/schemas.py,sha256=mIoJkuaQeF5fcrjBFGuudglQJz93vbaMc0wFVJjdVTg,50424
109
+ schemathesis/specs/openapi/security.py,sha256=nCUIaZTzI6t26HAfd8YTHW6mFxXAPN9Ds-P9UnXxmNA,6628
108
110
  schemathesis/specs/openapi/serialization.py,sha256=jajqowTIiyEVWEx-Gy4ZinXZewNg0n_ipsGzz7JXP7c,11383
109
111
  schemathesis/specs/openapi/utils.py,sha256=gmW4v6o6sZQifajfPquhFeWmZWGQM89mOOBYZvjnE7g,741
110
112
  schemathesis/specs/openapi/validation.py,sha256=UJWtW7VTRyMbbBHMRhMwNSUn92k1Hnp4p7IIVqCvqiI,998
111
- schemathesis/specs/openapi/expressions/__init__.py,sha256=7TZeRPpCPt0Bjzs5L--AkQnnIbDgTRnpkgYeJKma5Bc,660
113
+ schemathesis/specs/openapi/expressions/__init__.py,sha256=GIOeU0wU40LJ5V8vSdrDjpChAkGibZyGFijNSoF81xw,661
112
114
  schemathesis/specs/openapi/expressions/context.py,sha256=ngZQPUvN8PKqvH8SIvhM3yyDZjb_g1aPzH9hzquRsKE,350
113
115
  schemathesis/specs/openapi/expressions/errors.py,sha256=YLVhps-sYcslgVaahfcUYxUSHlIfWL-rQMeT5PZSMZ8,219
114
- schemathesis/specs/openapi/expressions/lexer.py,sha256=pYoqIlogmw2gyAwec01OTvUb_d8fG1zLiKwlCkLK8RA,3824
115
- schemathesis/specs/openapi/expressions/nodes.py,sha256=fb9yvxDWfq3WQcrtsn1dcj8GSMyzsvofW3Tn2mFOdL4,3298
116
+ schemathesis/specs/openapi/expressions/lexer.py,sha256=j-zGtpeJlaMsuZXbOvLI-m0BF2cYJMs4o0FkMN8tykg,3825
117
+ schemathesis/specs/openapi/expressions/nodes.py,sha256=YkYcMq_myhdBQrjPCYoBdxadVNtrxyt4y226HjLGGK8,3299
116
118
  schemathesis/specs/openapi/expressions/parser.py,sha256=xFA3cTTxl7VgAOiFF-vSDZ3usUFXpd3jk6ewMLeg6ao,3523
117
119
  schemathesis/specs/openapi/negative/__init__.py,sha256=Nhe6qeSCnlgf5l-Fu6yHvL--3tkAkxYyIGffuo77bLs,3696
118
- schemathesis/specs/openapi/negative/mutations.py,sha256=I2YKm6N3VoP3TpxRQMbYQze3XSVdLn1k7z8vqV1oJ4s,18642
120
+ schemathesis/specs/openapi/negative/mutations.py,sha256=SQjQR5aK-LpbSWzwrtbFX3PQ2xb5hzJV7eZXw6MlRJo,18643
119
121
  schemathesis/specs/openapi/negative/types.py,sha256=a7buCcVxNBG6ILBM3A7oNTAX0lyDseEtZndBuej8MbI,174
120
122
  schemathesis/specs/openapi/negative/utils.py,sha256=ozcOIuASufLqZSgnKUACjX-EOZrrkuNdXX0SDnLoGYA,168
121
123
  schemathesis/specs/openapi/stateful/__init__.py,sha256=R8RhPJD3rDzqL4eA9jSnUwh9Q_Mv27ka1C5FdRuyusY,4509
@@ -127,8 +129,8 @@ schemathesis/transports/auth.py,sha256=ZKFku9gjhIG6445qNC2p_64Yt9Iz_4azbvja8AMpt
127
129
  schemathesis/transports/content_types.py,sha256=xU8RZWxz-CyWRqQTI2fGYQacB7KasoY7LL_bxPQdyPY,2144
128
130
  schemathesis/transports/headers.py,sha256=EDxpm8su0AuhyqZUkMex-OFZMAJN_5NHah7fDT2HDZE,989
129
131
  schemathesis/transports/responses.py,sha256=U6z1VW5w19c9qRRoyf2ljkuXR2smTfWikmrTGqlgl18,1619
130
- schemathesis-3.25.5.dist-info/METADATA,sha256=1MNBBPfjk_19WvZfNbZDjxVBkgyNyUFxl5fA51R7rYI,15668
131
- schemathesis-3.25.5.dist-info/WHEEL,sha256=hKi7AIIx6qfnsRbr087vpeJnrVUuDokDHZacPPMW7-Y,87
132
- schemathesis-3.25.5.dist-info/entry_points.txt,sha256=VHyLcOG7co0nOeuk8WjgpRETk5P1E2iCLrn26Zkn5uk,158
133
- schemathesis-3.25.5.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
134
- schemathesis-3.25.5.dist-info/RECORD,,
132
+ schemathesis-3.26.0.dist-info/METADATA,sha256=hx0GrhFy5iphwAsc2_2SZZhNYFtr1hXSjL_xY8J_AEo,16257
133
+ schemathesis-3.26.0.dist-info/WHEEL,sha256=hKi7AIIx6qfnsRbr087vpeJnrVUuDokDHZacPPMW7-Y,87
134
+ schemathesis-3.26.0.dist-info/entry_points.txt,sha256=VHyLcOG7co0nOeuk8WjgpRETk5P1E2iCLrn26Zkn5uk,158
135
+ schemathesis-3.26.0.dist-info/licenses/LICENSE,sha256=PsPYgrDhZ7g9uwihJXNG-XVb55wj2uYhkl2DD8oAzY0,1103
136
+ schemathesis-3.26.0.dist-info/RECORD,,