|
5 | 5 | from typing import Union
|
6 | 6 |
|
7 | 7 | from jsonschema_path import SchemaPath
|
| 8 | +from openapi_spec_validator.versions import consts as versions |
| 9 | +from openapi_spec_validator.versions.datatypes import SpecVersion |
| 10 | +from openapi_spec_validator.versions.exceptions import OpenAPIVersionNotFound |
| 11 | +from openapi_spec_validator.versions.shortcuts import get_spec_version |
8 | 12 |
|
9 | 13 | from openapi_core.exceptions import SpecError
|
10 |
| -from openapi_core.finders import SpecClasses |
11 |
| -from openapi_core.finders import SpecFinder |
12 |
| -from openapi_core.finders import SpecVersion |
13 | 14 | from openapi_core.protocols import Request
|
14 | 15 | from openapi_core.protocols import Response
|
15 | 16 | from openapi_core.protocols import WebhookRequest
|
16 | 17 | from openapi_core.spec import Spec
|
| 18 | +from openapi_core.types import SpecClasses |
17 | 19 | from openapi_core.unmarshalling.request import V30RequestUnmarshaller
|
18 | 20 | from openapi_core.unmarshalling.request import V31RequestUnmarshaller
|
19 | 21 | from openapi_core.unmarshalling.request import V31WebhookRequestUnmarshaller
|
|
63 | 65 |
|
64 | 66 | AnyRequest = Union[Request, WebhookRequest]
|
65 | 67 |
|
66 |
| -SPECS: Dict[SpecVersion, SpecClasses] = { |
67 |
| - SpecVersion("openapi", "3.0"): SpecClasses( |
| 68 | +SPEC2CLASSES: Dict[SpecVersion, SpecClasses] = { |
| 69 | + versions.OPENAPIV30: SpecClasses( |
68 | 70 | V30RequestValidator,
|
69 | 71 | V30ResponseValidator,
|
70 | 72 | None,
|
|
74 | 76 | None,
|
75 | 77 | None,
|
76 | 78 | ),
|
77 |
| - SpecVersion("openapi", "3.1"): SpecClasses( |
| 79 | + versions.OPENAPIV31: SpecClasses( |
78 | 80 | V31RequestValidator,
|
79 | 81 | V31ResponseValidator,
|
80 | 82 | V31WebhookRequestValidator,
|
|
88 | 90 |
|
89 | 91 |
|
90 | 92 | def get_classes(spec: SchemaPath) -> SpecClasses:
|
91 |
| - return SpecFinder(SPECS).get_classes(spec) |
| 93 | + try: |
| 94 | + spec_version = get_spec_version(spec.contents()) |
| 95 | + # backward compatibility |
| 96 | + except OpenAPIVersionNotFound: |
| 97 | + raise SpecError("Spec schema version not detected") |
| 98 | + try: |
| 99 | + return SPEC2CLASSES[spec_version] |
| 100 | + except KeyError: |
| 101 | + raise SpecError("Spec schema version not supported") |
92 | 102 |
|
93 | 103 |
|
94 | 104 | def unmarshal_apicall_request(
|
|
0 commit comments