|
2 | 2 | from typing import Dict
|
3 | 3 | from typing import Hashable
|
4 | 4 | from typing import Mapping
|
| 5 | +from typing import Type |
| 6 | +from typing import TypeVar |
5 | 7 |
|
6 | 8 | from jsonschema.protocols import Validator
|
7 |
| -from jsonschema.validators import RefResolver |
8 |
| -from openapi_spec_validator import default_handlers |
9 |
| -from openapi_spec_validator import openapi_v3_spec_validator |
10 |
| -from openapi_spec_validator.validators import Dereferencer |
11 |
| -from pathable.paths import AccessorPath |
| 9 | +from jsonschema_spec import Spec as JsonschemaSpec |
| 10 | +from jsonschema_spec import default_handlers |
| 11 | +from openapi_spec_validator import openapi_v30_spec_validator |
12 | 12 |
|
13 |
| -from openapi_core.spec.accessors import SpecAccessor |
| 13 | +TSpec = TypeVar("TSpec", bound="Spec") |
14 | 14 |
|
15 | 15 | SPEC_SEPARATOR = "#"
|
16 | 16 |
|
17 | 17 |
|
18 |
| -class Spec(AccessorPath): |
19 |
| - @classmethod |
20 |
| - def from_dict( |
21 |
| - cls, |
22 |
| - data: Mapping[Hashable, Any], |
23 |
| - *args: Any, |
24 |
| - url: str = "", |
25 |
| - ref_resolver_handlers: Dict[str, Any] = default_handlers, |
26 |
| - separator: str = SPEC_SEPARATOR, |
27 |
| - ) -> "Spec": |
28 |
| - ref_resolver = RefResolver(url, data, handlers=ref_resolver_handlers) |
29 |
| - dereferencer = Dereferencer(ref_resolver) |
30 |
| - accessor = SpecAccessor(data, dereferencer) |
31 |
| - return cls(accessor, *args, separator=separator) |
32 |
| - |
| 18 | +class Spec(JsonschemaSpec): |
33 | 19 | @classmethod
|
34 | 20 | def create(
|
35 |
| - cls, |
| 21 | + cls: Type[TSpec], |
36 | 22 | data: Mapping[Hashable, Any],
|
37 | 23 | *args: Any,
|
38 | 24 | url: str = "",
|
39 | 25 | ref_resolver_handlers: Dict[str, Any] = default_handlers,
|
40 | 26 | separator: str = SPEC_SEPARATOR,
|
41 |
| - validator: Validator = openapi_v3_spec_validator, |
42 |
| - ) -> "Spec": |
| 27 | + validator: Validator = openapi_v30_spec_validator, |
| 28 | + ) -> TSpec: |
43 | 29 | if validator is not None:
|
44 | 30 | validator.validate(data, spec_url=url)
|
45 | 31 |
|
46 | 32 | return cls.from_dict(
|
47 | 33 | data,
|
48 | 34 | *args,
|
49 |
| - url=url, |
| 35 | + spec_url=url, |
50 | 36 | ref_resolver_handlers=ref_resolver_handlers,
|
51 | 37 | separator=separator,
|
52 | 38 | )
|
0 commit comments