|
9 | 9 | from typing import Type
|
10 | 10 |
|
11 | 11 | from openapi_core.extensions.models.types import Field
|
| 12 | +from openapi_core.spec import Spec |
12 | 13 |
|
13 | 14 |
|
14 | 15 | class DictFactory:
|
15 | 16 |
|
16 | 17 | base_class = dict
|
17 | 18 |
|
18 |
| - def create(self, fields: Iterable[Field]) -> Type[Dict[Any, Any]]: |
| 19 | + def create( |
| 20 | + self, schema: Spec, fields: Iterable[Field] |
| 21 | + ) -> Type[Dict[Any, Any]]: |
19 | 22 | return self.base_class
|
20 | 23 |
|
21 | 24 |
|
22 |
| -class DataClassFactory(DictFactory): |
| 25 | +class ModelFactory(DictFactory): |
23 | 26 | def create(
|
24 | 27 | self,
|
| 28 | + schema: Spec, |
25 | 29 | fields: Iterable[Field],
|
26 |
| - name: str = "Model", |
27 | 30 | ) -> Type[Any]:
|
| 31 | + name = schema.getkey("x-model") |
| 32 | + if name is None: |
| 33 | + return super().create(schema, fields) |
| 34 | + |
28 | 35 | return make_dataclass(name, fields, frozen=True)
|
29 | 36 |
|
30 | 37 |
|
31 |
| -class ModelClassImporter(DataClassFactory): |
| 38 | +class ModelPathFactory(ModelFactory): |
32 | 39 | def create(
|
33 | 40 | self,
|
| 41 | + schema: Spec, |
34 | 42 | fields: Iterable[Field],
|
35 |
| - name: str = "Model", |
36 |
| - model: Optional[str] = None, |
37 | 43 | ) -> Any:
|
38 |
| - if model is None: |
39 |
| - return super().create(fields, name=name) |
40 |
| - |
41 |
| - model_class = self._get_class(model) |
42 |
| - if model_class is not None: |
43 |
| - return model_class |
44 |
| - |
45 |
| - return super().create(fields, name=model) |
| 44 | + model_class_path = schema.getkey("x-model-path") |
| 45 | + if model_class_path is None: |
| 46 | + return super().create(schema, fields) |
46 | 47 |
|
47 |
| - def _get_class(self, model_class_path: str) -> Optional[object]: |
48 |
| - try: |
49 |
| - return locate(model_class_path) |
50 |
| - except ErrorDuringImport: |
51 |
| - return None |
| 48 | + return locate(model_class_path) |
0 commit comments