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

openapi_core/app.py

Lines changed: 80 additions & 8 deletions
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:

openapi_core/unmarshalling/request/protocols.py

Lines changed: 67 additions & 2 deletions
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(

openapi_core/unmarshalling/response/protocols.py

Lines changed: 63 additions & 2 deletions
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(

openapi_core/validation/request/protocols.py

Lines changed: 51 additions & 2 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy