schemathesis 3.15.4__py3-none-any.whl → 4.4.2__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.
- schemathesis/__init__.py +53 -25
- schemathesis/auths.py +507 -0
- schemathesis/checks.py +190 -25
- schemathesis/cli/__init__.py +27 -1219
- schemathesis/cli/__main__.py +4 -0
- schemathesis/cli/commands/__init__.py +133 -0
- schemathesis/cli/commands/data.py +10 -0
- schemathesis/cli/commands/run/__init__.py +602 -0
- schemathesis/cli/commands/run/context.py +228 -0
- schemathesis/cli/commands/run/events.py +60 -0
- schemathesis/cli/commands/run/executor.py +157 -0
- schemathesis/cli/commands/run/filters.py +53 -0
- schemathesis/cli/commands/run/handlers/__init__.py +46 -0
- schemathesis/cli/commands/run/handlers/base.py +45 -0
- schemathesis/cli/commands/run/handlers/cassettes.py +464 -0
- schemathesis/cli/commands/run/handlers/junitxml.py +60 -0
- schemathesis/cli/commands/run/handlers/output.py +1750 -0
- schemathesis/cli/commands/run/loaders.py +118 -0
- schemathesis/cli/commands/run/validation.py +256 -0
- schemathesis/cli/constants.py +5 -0
- schemathesis/cli/core.py +19 -0
- schemathesis/cli/ext/fs.py +16 -0
- schemathesis/cli/ext/groups.py +203 -0
- schemathesis/cli/ext/options.py +81 -0
- schemathesis/config/__init__.py +202 -0
- schemathesis/config/_auth.py +51 -0
- schemathesis/config/_checks.py +268 -0
- schemathesis/config/_diff_base.py +101 -0
- schemathesis/config/_env.py +21 -0
- schemathesis/config/_error.py +163 -0
- schemathesis/config/_generation.py +157 -0
- schemathesis/config/_health_check.py +24 -0
- schemathesis/config/_operations.py +335 -0
- schemathesis/config/_output.py +171 -0
- schemathesis/config/_parameters.py +19 -0
- schemathesis/config/_phases.py +253 -0
- schemathesis/config/_projects.py +543 -0
- schemathesis/config/_rate_limit.py +17 -0
- schemathesis/config/_report.py +120 -0
- schemathesis/config/_validator.py +9 -0
- schemathesis/config/_warnings.py +89 -0
- schemathesis/config/schema.json +975 -0
- schemathesis/core/__init__.py +72 -0
- schemathesis/core/adapter.py +34 -0
- schemathesis/core/compat.py +32 -0
- schemathesis/core/control.py +2 -0
- schemathesis/core/curl.py +100 -0
- schemathesis/core/deserialization.py +210 -0
- schemathesis/core/errors.py +588 -0
- schemathesis/core/failures.py +316 -0
- schemathesis/core/fs.py +19 -0
- schemathesis/core/hooks.py +20 -0
- schemathesis/core/jsonschema/__init__.py +13 -0
- schemathesis/core/jsonschema/bundler.py +183 -0
- schemathesis/core/jsonschema/keywords.py +40 -0
- schemathesis/core/jsonschema/references.py +222 -0
- schemathesis/core/jsonschema/types.py +41 -0
- schemathesis/core/lazy_import.py +15 -0
- schemathesis/core/loaders.py +107 -0
- schemathesis/core/marks.py +66 -0
- schemathesis/core/media_types.py +79 -0
- schemathesis/core/output/__init__.py +46 -0
- schemathesis/core/output/sanitization.py +54 -0
- schemathesis/core/parameters.py +45 -0
- schemathesis/core/rate_limit.py +60 -0
- schemathesis/core/registries.py +34 -0
- schemathesis/core/result.py +27 -0
- schemathesis/core/schema_analysis.py +17 -0
- schemathesis/core/shell.py +203 -0
- schemathesis/core/transforms.py +144 -0
- schemathesis/core/transport.py +223 -0
- schemathesis/core/validation.py +73 -0
- schemathesis/core/version.py +7 -0
- schemathesis/engine/__init__.py +28 -0
- schemathesis/engine/context.py +152 -0
- schemathesis/engine/control.py +44 -0
- schemathesis/engine/core.py +201 -0
- schemathesis/engine/errors.py +446 -0
- schemathesis/engine/events.py +284 -0
- schemathesis/engine/observations.py +42 -0
- schemathesis/engine/phases/__init__.py +108 -0
- schemathesis/engine/phases/analysis.py +28 -0
- schemathesis/engine/phases/probes.py +172 -0
- schemathesis/engine/phases/stateful/__init__.py +68 -0
- schemathesis/engine/phases/stateful/_executor.py +364 -0
- schemathesis/engine/phases/stateful/context.py +85 -0
- schemathesis/engine/phases/unit/__init__.py +220 -0
- schemathesis/engine/phases/unit/_executor.py +459 -0
- schemathesis/engine/phases/unit/_pool.py +82 -0
- schemathesis/engine/recorder.py +254 -0
- schemathesis/errors.py +47 -0
- schemathesis/filters.py +395 -0
- schemathesis/generation/__init__.py +25 -0
- schemathesis/generation/case.py +478 -0
- schemathesis/generation/coverage.py +1528 -0
- schemathesis/generation/hypothesis/__init__.py +121 -0
- schemathesis/generation/hypothesis/builder.py +992 -0
- schemathesis/generation/hypothesis/examples.py +56 -0
- schemathesis/generation/hypothesis/given.py +66 -0
- schemathesis/generation/hypothesis/reporting.py +285 -0
- schemathesis/generation/meta.py +227 -0
- schemathesis/generation/metrics.py +93 -0
- schemathesis/generation/modes.py +20 -0
- schemathesis/generation/overrides.py +127 -0
- schemathesis/generation/stateful/__init__.py +37 -0
- schemathesis/generation/stateful/state_machine.py +294 -0
- schemathesis/graphql/__init__.py +15 -0
- schemathesis/graphql/checks.py +109 -0
- schemathesis/graphql/loaders.py +285 -0
- schemathesis/hooks.py +270 -91
- schemathesis/openapi/__init__.py +13 -0
- schemathesis/openapi/checks.py +467 -0
- schemathesis/openapi/generation/__init__.py +0 -0
- schemathesis/openapi/generation/filters.py +72 -0
- schemathesis/openapi/loaders.py +315 -0
- schemathesis/pytest/__init__.py +5 -0
- schemathesis/pytest/control_flow.py +7 -0
- schemathesis/pytest/lazy.py +341 -0
- schemathesis/pytest/loaders.py +36 -0
- schemathesis/pytest/plugin.py +357 -0
- schemathesis/python/__init__.py +0 -0
- schemathesis/python/asgi.py +12 -0
- schemathesis/python/wsgi.py +12 -0
- schemathesis/schemas.py +682 -257
- schemathesis/specs/graphql/__init__.py +0 -1
- schemathesis/specs/graphql/nodes.py +26 -2
- schemathesis/specs/graphql/scalars.py +77 -12
- schemathesis/specs/graphql/schemas.py +367 -148
- schemathesis/specs/graphql/validation.py +33 -0
- schemathesis/specs/openapi/__init__.py +9 -1
- schemathesis/specs/openapi/_hypothesis.py +555 -318
- schemathesis/specs/openapi/adapter/__init__.py +10 -0
- schemathesis/specs/openapi/adapter/parameters.py +729 -0
- schemathesis/specs/openapi/adapter/protocol.py +59 -0
- schemathesis/specs/openapi/adapter/references.py +19 -0
- schemathesis/specs/openapi/adapter/responses.py +368 -0
- schemathesis/specs/openapi/adapter/security.py +144 -0
- schemathesis/specs/openapi/adapter/v2.py +30 -0
- schemathesis/specs/openapi/adapter/v3_0.py +30 -0
- schemathesis/specs/openapi/adapter/v3_1.py +30 -0
- schemathesis/specs/openapi/analysis.py +96 -0
- schemathesis/specs/openapi/checks.py +748 -82
- schemathesis/specs/openapi/converter.py +176 -37
- schemathesis/specs/openapi/definitions.py +599 -4
- schemathesis/specs/openapi/examples.py +581 -165
- schemathesis/specs/openapi/expressions/__init__.py +52 -5
- schemathesis/specs/openapi/expressions/extractors.py +25 -0
- schemathesis/specs/openapi/expressions/lexer.py +34 -31
- schemathesis/specs/openapi/expressions/nodes.py +97 -46
- schemathesis/specs/openapi/expressions/parser.py +35 -13
- schemathesis/specs/openapi/formats.py +122 -0
- schemathesis/specs/openapi/media_types.py +75 -0
- schemathesis/specs/openapi/negative/__init__.py +93 -73
- schemathesis/specs/openapi/negative/mutations.py +294 -103
- schemathesis/specs/openapi/negative/utils.py +0 -9
- schemathesis/specs/openapi/patterns.py +458 -0
- schemathesis/specs/openapi/references.py +60 -81
- schemathesis/specs/openapi/schemas.py +647 -666
- schemathesis/specs/openapi/serialization.py +53 -30
- schemathesis/specs/openapi/stateful/__init__.py +403 -68
- schemathesis/specs/openapi/stateful/control.py +87 -0
- schemathesis/specs/openapi/stateful/dependencies/__init__.py +232 -0
- schemathesis/specs/openapi/stateful/dependencies/inputs.py +428 -0
- schemathesis/specs/openapi/stateful/dependencies/models.py +341 -0
- schemathesis/specs/openapi/stateful/dependencies/naming.py +491 -0
- schemathesis/specs/openapi/stateful/dependencies/outputs.py +34 -0
- schemathesis/specs/openapi/stateful/dependencies/resources.py +339 -0
- schemathesis/specs/openapi/stateful/dependencies/schemas.py +447 -0
- schemathesis/specs/openapi/stateful/inference.py +254 -0
- schemathesis/specs/openapi/stateful/links.py +219 -78
- schemathesis/specs/openapi/types/__init__.py +3 -0
- schemathesis/specs/openapi/types/common.py +23 -0
- schemathesis/specs/openapi/types/v2.py +129 -0
- schemathesis/specs/openapi/types/v3.py +134 -0
- schemathesis/specs/openapi/utils.py +7 -6
- schemathesis/specs/openapi/warnings.py +75 -0
- schemathesis/transport/__init__.py +224 -0
- schemathesis/transport/asgi.py +26 -0
- schemathesis/transport/prepare.py +126 -0
- schemathesis/transport/requests.py +278 -0
- schemathesis/transport/serialization.py +329 -0
- schemathesis/transport/wsgi.py +175 -0
- schemathesis-4.4.2.dist-info/METADATA +213 -0
- schemathesis-4.4.2.dist-info/RECORD +192 -0
- {schemathesis-3.15.4.dist-info → schemathesis-4.4.2.dist-info}/WHEEL +1 -1
- schemathesis-4.4.2.dist-info/entry_points.txt +6 -0
- {schemathesis-3.15.4.dist-info → schemathesis-4.4.2.dist-info/licenses}/LICENSE +1 -1
- schemathesis/_compat.py +0 -57
- schemathesis/_hypothesis.py +0 -123
- schemathesis/auth.py +0 -214
- schemathesis/cli/callbacks.py +0 -240
- schemathesis/cli/cassettes.py +0 -351
- schemathesis/cli/context.py +0 -38
- schemathesis/cli/debug.py +0 -21
- schemathesis/cli/handlers.py +0 -11
- schemathesis/cli/junitxml.py +0 -41
- schemathesis/cli/options.py +0 -70
- schemathesis/cli/output/__init__.py +0 -1
- schemathesis/cli/output/default.py +0 -521
- schemathesis/cli/output/short.py +0 -40
- schemathesis/constants.py +0 -88
- schemathesis/exceptions.py +0 -257
- schemathesis/extra/_aiohttp.py +0 -27
- schemathesis/extra/_flask.py +0 -10
- schemathesis/extra/_server.py +0 -16
- schemathesis/extra/pytest_plugin.py +0 -251
- schemathesis/failures.py +0 -145
- schemathesis/fixups/__init__.py +0 -29
- schemathesis/fixups/fast_api.py +0 -30
- schemathesis/graphql.py +0 -5
- schemathesis/internal.py +0 -6
- schemathesis/lazy.py +0 -301
- schemathesis/models.py +0 -1113
- schemathesis/parameters.py +0 -91
- schemathesis/runner/__init__.py +0 -470
- schemathesis/runner/events.py +0 -242
- schemathesis/runner/impl/__init__.py +0 -3
- schemathesis/runner/impl/core.py +0 -791
- schemathesis/runner/impl/solo.py +0 -85
- schemathesis/runner/impl/threadpool.py +0 -367
- schemathesis/runner/serialization.py +0 -206
- schemathesis/serializers.py +0 -253
- schemathesis/service/__init__.py +0 -18
- schemathesis/service/auth.py +0 -10
- schemathesis/service/client.py +0 -62
- schemathesis/service/constants.py +0 -25
- schemathesis/service/events.py +0 -39
- schemathesis/service/handler.py +0 -46
- schemathesis/service/hosts.py +0 -74
- schemathesis/service/metadata.py +0 -42
- schemathesis/service/models.py +0 -21
- schemathesis/service/serialization.py +0 -184
- schemathesis/service/worker.py +0 -39
- schemathesis/specs/graphql/loaders.py +0 -215
- schemathesis/specs/openapi/constants.py +0 -7
- schemathesis/specs/openapi/expressions/context.py +0 -12
- schemathesis/specs/openapi/expressions/pointers.py +0 -29
- schemathesis/specs/openapi/filters.py +0 -44
- schemathesis/specs/openapi/links.py +0 -303
- schemathesis/specs/openapi/loaders.py +0 -453
- schemathesis/specs/openapi/parameters.py +0 -430
- schemathesis/specs/openapi/security.py +0 -129
- schemathesis/specs/openapi/validation.py +0 -24
- schemathesis/stateful.py +0 -358
- schemathesis/targets.py +0 -32
- schemathesis/types.py +0 -38
- schemathesis/utils.py +0 -475
- schemathesis-3.15.4.dist-info/METADATA +0 -202
- schemathesis-3.15.4.dist-info/RECORD +0 -99
- schemathesis-3.15.4.dist-info/entry_points.txt +0 -7
- /schemathesis/{extra → cli/ext}/__init__.py +0 -0
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import json
|
|
2
|
-
from typing import Any, Callable, Dict, Generator, List
|
|
4
|
+
from typing import Any, Callable, Dict, Generator, List
|
|
3
5
|
|
|
4
|
-
from
|
|
6
|
+
from schemathesis.core.parameters import LOCATION_TO_CONTAINER
|
|
7
|
+
from schemathesis.schemas import APIOperation
|
|
5
8
|
|
|
6
9
|
Generated = Dict[str, Any]
|
|
7
10
|
Definition = Dict[str, Any]
|
|
@@ -9,21 +12,38 @@ DefinitionList = List[Definition]
|
|
|
9
12
|
MapFunction = Callable[[Generated], Generated]
|
|
10
13
|
|
|
11
14
|
|
|
15
|
+
def get_serializers_for_operation(operation: APIOperation) -> dict[str, Callable]:
|
|
16
|
+
serializers = {}
|
|
17
|
+
for location, container in LOCATION_TO_CONTAINER.items():
|
|
18
|
+
serializer = operation.get_parameter_serializer(location)
|
|
19
|
+
if serializer is not None:
|
|
20
|
+
serializers[container] = serializer
|
|
21
|
+
return serializers
|
|
22
|
+
|
|
23
|
+
|
|
12
24
|
def make_serializer(
|
|
13
|
-
func: Callable[[DefinitionList], Generator[
|
|
14
|
-
) -> Callable[[DefinitionList],
|
|
25
|
+
func: Callable[[DefinitionList], Generator[Callable | None, None, None]],
|
|
26
|
+
) -> Callable[[DefinitionList], Callable | None]:
|
|
15
27
|
"""A maker function to avoid code duplication."""
|
|
16
28
|
|
|
17
|
-
def _wrapper(definitions: DefinitionList) ->
|
|
18
|
-
|
|
19
|
-
if
|
|
20
|
-
return
|
|
21
|
-
|
|
29
|
+
def _wrapper(definitions: DefinitionList) -> Callable | None:
|
|
30
|
+
functions = list(func(definitions))
|
|
31
|
+
if not functions:
|
|
32
|
+
return None
|
|
33
|
+
|
|
34
|
+
def composed(x: Any) -> Any:
|
|
35
|
+
result = x
|
|
36
|
+
for func in reversed(functions):
|
|
37
|
+
if func is not None:
|
|
38
|
+
result = func(result)
|
|
39
|
+
return result
|
|
40
|
+
|
|
41
|
+
return composed
|
|
22
42
|
|
|
23
43
|
return _wrapper
|
|
24
44
|
|
|
25
45
|
|
|
26
|
-
def _serialize_openapi3(definitions: DefinitionList) -> Generator[
|
|
46
|
+
def _serialize_openapi3(definitions: DefinitionList) -> Generator[Callable | None, None, None]:
|
|
27
47
|
"""Different collection styles for Open API 3.0."""
|
|
28
48
|
for definition in definitions:
|
|
29
49
|
name = definition["name"]
|
|
@@ -37,7 +57,11 @@ def _serialize_openapi3(definitions: DefinitionList) -> Generator[Optional[Calla
|
|
|
37
57
|
# Simple serialization
|
|
38
58
|
style = definition.get("style")
|
|
39
59
|
explode = definition.get("explode")
|
|
40
|
-
|
|
60
|
+
schema = definition.get("schema", {})
|
|
61
|
+
if isinstance(schema, dict):
|
|
62
|
+
type_ = schema.get("type")
|
|
63
|
+
else:
|
|
64
|
+
type_ = None
|
|
41
65
|
if definition["in"] == "path":
|
|
42
66
|
yield from _serialize_path_openapi3(name, type_, style, explode)
|
|
43
67
|
elif definition["in"] == "query":
|
|
@@ -49,9 +73,8 @@ def _serialize_openapi3(definitions: DefinitionList) -> Generator[Optional[Calla
|
|
|
49
73
|
|
|
50
74
|
|
|
51
75
|
def _serialize_path_openapi3(
|
|
52
|
-
name: str, type_: str, style:
|
|
53
|
-
) -> Generator[
|
|
54
|
-
# pylint: disable=too-many-branches
|
|
76
|
+
name: str, type_: str | None, style: str | None, explode: bool | None
|
|
77
|
+
) -> Generator[Callable | None, None, None]:
|
|
55
78
|
if style == "simple":
|
|
56
79
|
if type_ == "object":
|
|
57
80
|
if explode is False:
|
|
@@ -77,8 +100,8 @@ def _serialize_path_openapi3(
|
|
|
77
100
|
|
|
78
101
|
|
|
79
102
|
def _serialize_query_openapi3(
|
|
80
|
-
name: str, type_: str, style:
|
|
81
|
-
) -> Generator[
|
|
103
|
+
name: str, type_: str | None, style: str | None, explode: bool | None
|
|
104
|
+
) -> Generator[Callable | None, None, None]:
|
|
82
105
|
if type_ == "object":
|
|
83
106
|
if style == "deepObject":
|
|
84
107
|
yield deep_object(name)
|
|
@@ -97,8 +120,8 @@ def _serialize_query_openapi3(
|
|
|
97
120
|
|
|
98
121
|
|
|
99
122
|
def _serialize_header_openapi3(
|
|
100
|
-
name: str, type_: str, explode:
|
|
101
|
-
) -> Generator[
|
|
123
|
+
name: str, type_: str | None, explode: bool | None
|
|
124
|
+
) -> Generator[Callable | None, None, None]:
|
|
102
125
|
# Headers should be coerced to a string so we can check it for validity later
|
|
103
126
|
yield to_string(name)
|
|
104
127
|
# Header parameters always use the "simple" style, that is, comma-separated values
|
|
@@ -112,8 +135,8 @@ def _serialize_header_openapi3(
|
|
|
112
135
|
|
|
113
136
|
|
|
114
137
|
def _serialize_cookie_openapi3(
|
|
115
|
-
name: str, type_: str, explode:
|
|
116
|
-
) -> Generator[
|
|
138
|
+
name: str, type_: str | None, explode: bool | None
|
|
139
|
+
) -> Generator[Callable | None, None, None]:
|
|
117
140
|
# Cookies should be coerced to a string so we can check it for validity later
|
|
118
141
|
yield to_string(name)
|
|
119
142
|
# Cookie parameters always use the "form" style
|
|
@@ -130,7 +153,7 @@ def _serialize_cookie_openapi3(
|
|
|
130
153
|
yield comma_delimited_object(name)
|
|
131
154
|
|
|
132
155
|
|
|
133
|
-
def _serialize_swagger2(definitions: DefinitionList) -> Generator[
|
|
156
|
+
def _serialize_swagger2(definitions: DefinitionList) -> Generator[Callable | None, None, None]:
|
|
134
157
|
"""Different collection formats for Open API 2.0."""
|
|
135
158
|
for definition in definitions:
|
|
136
159
|
name = definition["name"]
|
|
@@ -166,11 +189,11 @@ def conversion(func: Callable[..., None]) -> Callable:
|
|
|
166
189
|
return _wrapper
|
|
167
190
|
|
|
168
191
|
|
|
169
|
-
def make_delimited(data:
|
|
192
|
+
def make_delimited(data: dict[str, Any] | None, delimiter: str = ",") -> str:
|
|
170
193
|
return delimiter.join(f"{key}={value}" for key, value in force_dict(data or {}).items())
|
|
171
194
|
|
|
172
195
|
|
|
173
|
-
def force_iterable(value: Any) ->
|
|
196
|
+
def force_iterable(value: Any) -> list | tuple:
|
|
174
197
|
"""Converts the value to a list or a tuple.
|
|
175
198
|
|
|
176
199
|
Only relevant for negative test scenarios where the original types might be changed.
|
|
@@ -180,7 +203,7 @@ def force_iterable(value: Any) -> Union[List, Tuple]:
|
|
|
180
203
|
return [value]
|
|
181
204
|
|
|
182
205
|
|
|
183
|
-
def force_dict(value: Any) ->
|
|
206
|
+
def force_dict(value: Any) -> dict:
|
|
184
207
|
"""Converts the value to a dictionary.
|
|
185
208
|
|
|
186
209
|
Only relevant for negative test scenarios where the original types might be changed.
|
|
@@ -198,7 +221,7 @@ def to_json(item: Generated, name: str) -> None:
|
|
|
198
221
|
|
|
199
222
|
@conversion
|
|
200
223
|
def delimited(item: Generated, name: str, delimiter: str) -> None:
|
|
201
|
-
item[name] = delimiter.join(map(str, force_iterable(item[name]
|
|
224
|
+
item[name] = delimiter.join(map(str, force_iterable(item[name] if item[name] is not None else ())))
|
|
202
225
|
|
|
203
226
|
|
|
204
227
|
@conversion
|
|
@@ -228,7 +251,7 @@ def delimited_object(item: Generated, name: str) -> None:
|
|
|
228
251
|
def extracted_object(item: Generated, name: str) -> None:
|
|
229
252
|
"""Merge a child node to the parent one."""
|
|
230
253
|
generated = item.pop(name)
|
|
231
|
-
if generated:
|
|
254
|
+
if generated and isinstance(generated, dict):
|
|
232
255
|
item.update(generated)
|
|
233
256
|
else:
|
|
234
257
|
item[name] = ""
|
|
@@ -248,7 +271,7 @@ def label_primitive(item: Generated, name: str) -> None:
|
|
|
248
271
|
|
|
249
272
|
|
|
250
273
|
@conversion
|
|
251
|
-
def label_array(item: Generated, name: str, explode:
|
|
274
|
+
def label_array(item: Generated, name: str, explode: bool | None) -> None:
|
|
252
275
|
"""Serialize an array with the `label` style.
|
|
253
276
|
|
|
254
277
|
Explode=True
|
|
@@ -271,7 +294,7 @@ def label_array(item: Generated, name: str, explode: Optional[bool]) -> None:
|
|
|
271
294
|
|
|
272
295
|
|
|
273
296
|
@conversion
|
|
274
|
-
def label_object(item: Generated, name: str, explode:
|
|
297
|
+
def label_object(item: Generated, name: str, explode: bool | None) -> None:
|
|
275
298
|
"""Serialize an object with the `label` style.
|
|
276
299
|
|
|
277
300
|
Explode=True
|
|
@@ -307,7 +330,7 @@ def matrix_primitive(item: Generated, name: str) -> None:
|
|
|
307
330
|
|
|
308
331
|
|
|
309
332
|
@conversion
|
|
310
|
-
def matrix_array(item: Generated, name: str, explode:
|
|
333
|
+
def matrix_array(item: Generated, name: str, explode: bool | None) -> None:
|
|
311
334
|
"""Serialize an array with the `matrix` style.
|
|
312
335
|
|
|
313
336
|
Explode=True
|
|
@@ -329,7 +352,7 @@ def matrix_array(item: Generated, name: str, explode: Optional[bool]) -> None:
|
|
|
329
352
|
|
|
330
353
|
|
|
331
354
|
@conversion
|
|
332
|
-
def matrix_object(item: Generated, name: str, explode:
|
|
355
|
+
def matrix_object(item: Generated, name: str, explode: bool | None) -> None:
|
|
333
356
|
"""Serialize an object with the `matrix` style.
|
|
334
357
|
|
|
335
358
|
Explode=True
|