Skip to content

Commit f4e7b37

Browse files
committed
OpenAPI config passed to validators and unmarshallers fix
1 parent 4729584 commit f4e7b37

File tree

5 files changed

+308
-16
lines changed

5 files changed

+308
-16
lines changed

Diff for: openapi_core/app.py

+80-8
Original file line numberDiff line numberDiff line change
@@ -204,63 +204,135 @@ def request_validator(self) -> RequestValidator:
204204
if self.request_validator_cls is None:
205205
raise SpecError("Validator class not found")
206206
return self.request_validator_cls(
207-
self.spec, base_url=self.config.server_base_url
207+
self.spec,
208+
base_url=self.config.server_base_url,
209+
style_deserializers_factory=self.config.style_deserializers_factory,
210+
media_type_deserializers_factory=self.config.media_type_deserializers_factory,
211+
schema_casters_factory=self.config.schema_casters_factory,
212+
schema_validators_factory=self.config.schema_validators_factory,
213+
spec_validator_cls=self.config.spec_validator_cls,
214+
extra_format_validators=self.config.extra_format_validators,
215+
extra_media_type_deserializers=self.config.extra_media_type_deserializers,
208216
)
209217

210218
@property
211219
def response_validator(self) -> ResponseValidator:
212220
if self.response_validator_cls is None:
213221
raise SpecError("Validator class not found")
214222
return self.response_validator_cls(
215-
self.spec, base_url=self.config.server_base_url
223+
self.spec,
224+
base_url=self.config.server_base_url,
225+
style_deserializers_factory=self.config.style_deserializers_factory,
226+
media_type_deserializers_factory=self.config.media_type_deserializers_factory,
227+
schema_casters_factory=self.config.schema_casters_factory,
228+
schema_validators_factory=self.config.schema_validators_factory,
229+
spec_validator_cls=self.config.spec_validator_cls,
230+
extra_format_validators=self.config.extra_format_validators,
231+
extra_media_type_deserializers=self.config.extra_media_type_deserializers,
216232
)
217233

218234
@property
219235
def webhook_request_validator(self) -> WebhookRequestValidator:
220236
if self.webhook_request_validator_cls is None:
221237
raise SpecError("Validator class not found")
222238
return self.webhook_request_validator_cls(
223-
self.spec, base_url=self.config.server_base_url
239+
self.spec,
240+
base_url=self.config.server_base_url,
241+
style_deserializers_factory=self.config.style_deserializers_factory,
242+
media_type_deserializers_factory=self.config.media_type_deserializers_factory,
243+
schema_casters_factory=self.config.schema_casters_factory,
244+
schema_validators_factory=self.config.schema_validators_factory,
245+
spec_validator_cls=self.config.spec_validator_cls,
246+
extra_format_validators=self.config.extra_format_validators,
247+
extra_media_type_deserializers=self.config.extra_media_type_deserializers,
224248
)
225249

226250
@property
227251
def webhook_response_validator(self) -> WebhookResponseValidator:
228252
if self.webhook_response_validator_cls is None:
229253
raise SpecError("Validator class not found")
230254
return self.webhook_response_validator_cls(
231-
self.spec, base_url=self.config.server_base_url
255+
self.spec,
256+
base_url=self.config.server_base_url,
257+
style_deserializers_factory=self.config.style_deserializers_factory,
258+
media_type_deserializers_factory=self.config.media_type_deserializers_factory,
259+
schema_casters_factory=self.config.schema_casters_factory,
260+
schema_validators_factory=self.config.schema_validators_factory,
261+
spec_validator_cls=self.config.spec_validator_cls,
262+
extra_format_validators=self.config.extra_format_validators,
263+
extra_media_type_deserializers=self.config.extra_media_type_deserializers,
232264
)
233265

234266
@property
235267
def request_unmarshaller(self) -> RequestUnmarshaller:
236268
if self.request_unmarshaller_cls is None:
237269
raise SpecError("Unmarshaller class not found")
238270
return self.request_unmarshaller_cls(
239-
self.spec, base_url=self.config.server_base_url
271+
self.spec,
272+
base_url=self.config.server_base_url,
273+
style_deserializers_factory=self.config.style_deserializers_factory,
274+
media_type_deserializers_factory=self.config.media_type_deserializers_factory,
275+
schema_casters_factory=self.config.schema_casters_factory,
276+
schema_validators_factory=self.config.schema_validators_factory,
277+
spec_validator_cls=self.config.spec_validator_cls,
278+
extra_format_validators=self.config.extra_format_validators,
279+
extra_media_type_deserializers=self.config.extra_media_type_deserializers,
280+
schema_unmarshallers_factory=self.config.schema_unmarshallers_factory,
281+
extra_format_unmarshallers=self.config.extra_format_unmarshallers,
240282
)
241283

242284
@property
243285
def response_unmarshaller(self) -> ResponseUnmarshaller:
244286
if self.response_unmarshaller_cls is None:
245287
raise SpecError("Unmarshaller class not found")
246288
return self.response_unmarshaller_cls(
247-
self.spec, base_url=self.config.server_base_url
289+
self.spec,
290+
base_url=self.config.server_base_url,
291+
style_deserializers_factory=self.config.style_deserializers_factory,
292+
media_type_deserializers_factory=self.config.media_type_deserializers_factory,
293+
schema_casters_factory=self.config.schema_casters_factory,
294+
schema_validators_factory=self.config.schema_validators_factory,
295+
spec_validator_cls=self.config.spec_validator_cls,
296+
extra_format_validators=self.config.extra_format_validators,
297+
extra_media_type_deserializers=self.config.extra_media_type_deserializers,
298+
schema_unmarshallers_factory=self.config.schema_unmarshallers_factory,
299+
extra_format_unmarshallers=self.config.extra_format_unmarshallers,
248300
)
249301

250302
@property
251303
def webhook_request_unmarshaller(self) -> WebhookRequestUnmarshaller:
252304
if self.webhook_request_unmarshaller_cls is None:
253305
raise SpecError("Unmarshaller class not found")
254306
return self.webhook_request_unmarshaller_cls(
255-
self.spec, base_url=self.config.server_base_url
307+
self.spec,
308+
base_url=self.config.server_base_url,
309+
style_deserializers_factory=self.config.style_deserializers_factory,
310+
media_type_deserializers_factory=self.config.media_type_deserializers_factory,
311+
schema_casters_factory=self.config.schema_casters_factory,
312+
schema_validators_factory=self.config.schema_validators_factory,
313+
spec_validator_cls=self.config.spec_validator_cls,
314+
extra_format_validators=self.config.extra_format_validators,
315+
extra_media_type_deserializers=self.config.extra_media_type_deserializers,
316+
schema_unmarshallers_factory=self.config.schema_unmarshallers_factory,
317+
extra_format_unmarshallers=self.config.extra_format_unmarshallers,
256318
)
257319

258320
@property
259321
def webhook_response_unmarshaller(self) -> WebhookResponseUnmarshaller:
260322
if self.webhook_response_unmarshaller_cls is None:
261323
raise SpecError("Unmarshaller class not found")
262324
return self.webhook_response_unmarshaller_cls(
263-
self.spec, base_url=self.config.server_base_url
325+
self.spec,
326+
base_url=self.config.server_base_url,
327+
style_deserializers_factory=self.config.style_deserializers_factory,
328+
media_type_deserializers_factory=self.config.media_type_deserializers_factory,
329+
schema_casters_factory=self.config.schema_casters_factory,
330+
schema_validators_factory=self.config.schema_validators_factory,
331+
spec_validator_cls=self.config.spec_validator_cls,
332+
extra_format_validators=self.config.extra_format_validators,
333+
extra_media_type_deserializers=self.config.extra_media_type_deserializers,
334+
schema_unmarshallers_factory=self.config.schema_unmarshallers_factory,
335+
extra_format_unmarshallers=self.config.extra_format_unmarshallers,
264336
)
265337

266338
def validate_request(self, request: AnyRequest) -> None:

Diff for: openapi_core/unmarshalling/request/protocols.py

+67-2
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,60 @@
44
from typing import runtime_checkable
55

66
from jsonschema_path import SchemaPath
7+
from openapi_spec_validator.validation.types import SpecValidatorType
78

9+
from openapi_core.casting.schemas.factories import SchemaCastersFactory
10+
from openapi_core.deserializing.media_types import (
11+
media_type_deserializers_factory,
12+
)
13+
from openapi_core.deserializing.media_types.datatypes import (
14+
MediaTypeDeserializersDict,
15+
)
16+
from openapi_core.deserializing.media_types.factories import (
17+
MediaTypeDeserializersFactory,
18+
)
19+
from openapi_core.deserializing.styles import style_deserializers_factory
20+
from openapi_core.deserializing.styles.factories import (
21+
StyleDeserializersFactory,
22+
)
823
from openapi_core.protocols import Request
924
from openapi_core.protocols import WebhookRequest
25+
from openapi_core.security import security_provider_factory
26+
from openapi_core.security.factories import SecurityProviderFactory
1027
from openapi_core.unmarshalling.request.datatypes import RequestUnmarshalResult
28+
from openapi_core.unmarshalling.schemas.datatypes import (
29+
FormatUnmarshallersDict,
30+
)
31+
from openapi_core.unmarshalling.schemas.factories import (
32+
SchemaUnmarshallersFactory,
33+
)
34+
from openapi_core.validation.schemas.datatypes import FormatValidatorsDict
35+
from openapi_core.validation.schemas.factories import SchemaValidatorsFactory
1136

1237

1338
@runtime_checkable
1439
class RequestUnmarshaller(Protocol):
15-
def __init__(self, spec: SchemaPath, base_url: Optional[str] = None):
40+
def __init__(
41+
self,
42+
spec: SchemaPath,
43+
base_url: Optional[str] = None,
44+
style_deserializers_factory: StyleDeserializersFactory = style_deserializers_factory,
45+
media_type_deserializers_factory: MediaTypeDeserializersFactory = media_type_deserializers_factory,
46+
schema_casters_factory: Optional[SchemaCastersFactory] = None,
47+
schema_validators_factory: Optional[SchemaValidatorsFactory] = None,
48+
spec_validator_cls: Optional[SpecValidatorType] = None,
49+
format_validators: Optional[FormatValidatorsDict] = None,
50+
extra_format_validators: Optional[FormatValidatorsDict] = None,
51+
extra_media_type_deserializers: Optional[
52+
MediaTypeDeserializersDict
53+
] = None,
54+
security_provider_factory: SecurityProviderFactory = security_provider_factory,
55+
schema_unmarshallers_factory: Optional[
56+
SchemaUnmarshallersFactory
57+
] = None,
58+
format_unmarshallers: Optional[FormatUnmarshallersDict] = None,
59+
extra_format_unmarshallers: Optional[FormatUnmarshallersDict] = None,
60+
):
1661
...
1762

1863
def unmarshal(
@@ -24,7 +69,27 @@ def unmarshal(
2469

2570
@runtime_checkable
2671
class WebhookRequestUnmarshaller(Protocol):
27-
def __init__(self, spec: SchemaPath, base_url: Optional[str] = None):
72+
def __init__(
73+
self,
74+
spec: SchemaPath,
75+
base_url: Optional[str] = None,
76+
style_deserializers_factory: StyleDeserializersFactory = style_deserializers_factory,
77+
media_type_deserializers_factory: MediaTypeDeserializersFactory = media_type_deserializers_factory,
78+
schema_casters_factory: Optional[SchemaCastersFactory] = None,
79+
schema_validators_factory: Optional[SchemaValidatorsFactory] = None,
80+
spec_validator_cls: Optional[SpecValidatorType] = None,
81+
format_validators: Optional[FormatValidatorsDict] = None,
82+
extra_format_validators: Optional[FormatValidatorsDict] = None,
83+
extra_media_type_deserializers: Optional[
84+
MediaTypeDeserializersDict
85+
] = None,
86+
security_provider_factory: SecurityProviderFactory = security_provider_factory,
87+
schema_unmarshallers_factory: Optional[
88+
SchemaUnmarshallersFactory
89+
] = None,
90+
format_unmarshallers: Optional[FormatUnmarshallersDict] = None,
91+
extra_format_unmarshallers: Optional[FormatUnmarshallersDict] = None,
92+
):
2893
...
2994

3095
def unmarshal(

Diff for: openapi_core/unmarshalling/response/protocols.py

+63-2
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,60 @@
44
from typing import runtime_checkable
55

66
from jsonschema_path import SchemaPath
7+
from openapi_spec_validator.validation.types import SpecValidatorType
78

9+
from openapi_core.casting.schemas.factories import SchemaCastersFactory
10+
from openapi_core.deserializing.media_types import (
11+
media_type_deserializers_factory,
12+
)
13+
from openapi_core.deserializing.media_types.datatypes import (
14+
MediaTypeDeserializersDict,
15+
)
16+
from openapi_core.deserializing.media_types.factories import (
17+
MediaTypeDeserializersFactory,
18+
)
19+
from openapi_core.deserializing.styles import style_deserializers_factory
20+
from openapi_core.deserializing.styles.factories import (
21+
StyleDeserializersFactory,
22+
)
823
from openapi_core.protocols import Request
924
from openapi_core.protocols import Response
1025
from openapi_core.protocols import WebhookRequest
1126
from openapi_core.unmarshalling.response.datatypes import (
1227
ResponseUnmarshalResult,
1328
)
29+
from openapi_core.unmarshalling.schemas.datatypes import (
30+
FormatUnmarshallersDict,
31+
)
32+
from openapi_core.unmarshalling.schemas.factories import (
33+
SchemaUnmarshallersFactory,
34+
)
35+
from openapi_core.validation.schemas.datatypes import FormatValidatorsDict
36+
from openapi_core.validation.schemas.factories import SchemaValidatorsFactory
1437

1538

1639
@runtime_checkable
1740
class ResponseUnmarshaller(Protocol):
18-
def __init__(self, spec: SchemaPath, base_url: Optional[str] = None):
41+
def __init__(
42+
self,
43+
spec: SchemaPath,
44+
base_url: Optional[str] = None,
45+
style_deserializers_factory: StyleDeserializersFactory = style_deserializers_factory,
46+
media_type_deserializers_factory: MediaTypeDeserializersFactory = media_type_deserializers_factory,
47+
schema_casters_factory: Optional[SchemaCastersFactory] = None,
48+
schema_validators_factory: Optional[SchemaValidatorsFactory] = None,
49+
spec_validator_cls: Optional[SpecValidatorType] = None,
50+
format_validators: Optional[FormatValidatorsDict] = None,
51+
extra_format_validators: Optional[FormatValidatorsDict] = None,
52+
extra_media_type_deserializers: Optional[
53+
MediaTypeDeserializersDict
54+
] = None,
55+
schema_unmarshallers_factory: Optional[
56+
SchemaUnmarshallersFactory
57+
] = None,
58+
format_unmarshallers: Optional[FormatUnmarshallersDict] = None,
59+
extra_format_unmarshallers: Optional[FormatUnmarshallersDict] = None,
60+
):
1961
...
2062

2163
def unmarshal(
@@ -28,7 +70,26 @@ def unmarshal(
2870

2971
@runtime_checkable
3072
class WebhookResponseUnmarshaller(Protocol):
31-
def __init__(self, spec: SchemaPath, base_url: Optional[str] = None):
73+
def __init__(
74+
self,
75+
spec: SchemaPath,
76+
base_url: Optional[str] = None,
77+
style_deserializers_factory: StyleDeserializersFactory = style_deserializers_factory,
78+
media_type_deserializers_factory: MediaTypeDeserializersFactory = media_type_deserializers_factory,
79+
schema_casters_factory: Optional[SchemaCastersFactory] = None,
80+
schema_validators_factory: Optional[SchemaValidatorsFactory] = None,
81+
spec_validator_cls: Optional[SpecValidatorType] = None,
82+
format_validators: Optional[FormatValidatorsDict] = None,
83+
extra_format_validators: Optional[FormatValidatorsDict] = None,
84+
extra_media_type_deserializers: Optional[
85+
MediaTypeDeserializersDict
86+
] = None,
87+
schema_unmarshallers_factory: Optional[
88+
SchemaUnmarshallersFactory
89+
] = None,
90+
format_unmarshallers: Optional[FormatUnmarshallersDict] = None,
91+
extra_format_unmarshallers: Optional[FormatUnmarshallersDict] = None,
92+
):
3293
...
3394

3495
def unmarshal(

Diff for: openapi_core/validation/request/protocols.py

+51-2
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,48 @@
55
from typing import runtime_checkable
66

77
from jsonschema_path import SchemaPath
8+
from openapi_spec_validator.validation.types import SpecValidatorType
89

10+
from openapi_core.casting.schemas.factories import SchemaCastersFactory
11+
from openapi_core.deserializing.media_types import (
12+
media_type_deserializers_factory,
13+
)
14+
from openapi_core.deserializing.media_types.datatypes import (
15+
MediaTypeDeserializersDict,
16+
)
17+
from openapi_core.deserializing.media_types.factories import (
18+
MediaTypeDeserializersFactory,
19+
)
20+
from openapi_core.deserializing.styles import style_deserializers_factory
21+
from openapi_core.deserializing.styles.factories import (
22+
StyleDeserializersFactory,
23+
)
924
from openapi_core.protocols import Request
1025
from openapi_core.protocols import WebhookRequest
26+
from openapi_core.security import security_provider_factory
27+
from openapi_core.security.factories import SecurityProviderFactory
28+
from openapi_core.validation.schemas.datatypes import FormatValidatorsDict
29+
from openapi_core.validation.schemas.factories import SchemaValidatorsFactory
1130

1231

1332
@runtime_checkable
1433
class RequestValidator(Protocol):
15-
def __init__(self, spec: SchemaPath, base_url: Optional[str] = None):
34+
def __init__(
35+
self,
36+
spec: SchemaPath,
37+
base_url: Optional[str] = None,
38+
style_deserializers_factory: StyleDeserializersFactory = style_deserializers_factory,
39+
media_type_deserializers_factory: MediaTypeDeserializersFactory = media_type_deserializers_factory,
40+
schema_casters_factory: Optional[SchemaCastersFactory] = None,
41+
schema_validators_factory: Optional[SchemaValidatorsFactory] = None,
42+
spec_validator_cls: Optional[SpecValidatorType] = None,
43+
format_validators: Optional[FormatValidatorsDict] = None,
44+
extra_format_validators: Optional[FormatValidatorsDict] = None,
45+
extra_media_type_deserializers: Optional[
46+
MediaTypeDeserializersDict
47+
] = None,
48+
security_provider_factory: SecurityProviderFactory = security_provider_factory,
49+
):
1650
...
1751

1852
def iter_errors(
@@ -30,7 +64,22 @@ def validate(
3064

3165
@runtime_checkable
3266
class WebhookRequestValidator(Protocol):
33-
def __init__(self, spec: SchemaPath, base_url: Optional[str] = None):
67+
def __init__(
68+
self,
69+
spec: SchemaPath,
70+
base_url: Optional[str] = None,
71+
style_deserializers_factory: StyleDeserializersFactory = style_deserializers_factory,
72+
media_type_deserializers_factory: MediaTypeDeserializersFactory = media_type_deserializers_factory,
73+
schema_casters_factory: Optional[SchemaCastersFactory] = None,
74+
schema_validators_factory: Optional[SchemaValidatorsFactory] = None,
75+
spec_validator_cls: Optional[SpecValidatorType] = None,
76+
format_validators: Optional[FormatValidatorsDict] = None,
77+
extra_format_validators: Optional[FormatValidatorsDict] = None,
78+
extra_media_type_deserializers: Optional[
79+
MediaTypeDeserializersDict
80+
] = None,
81+
security_provider_factory: SecurityProviderFactory = security_provider_factory,
82+
):
3483
...
3584

3685
def iter_errors(

0 commit comments

Comments
 (0)