1
1
"""OpenAPI X-Model extension factories module"""
2
+ from pydoc import ErrorDuringImport
3
+ from pydoc import locate
2
4
from typing import Any
3
5
from typing import Dict
4
6
from typing import Optional
@@ -22,12 +24,36 @@ def __init__(
22
24
self .model_class_factory = model_class_factory or ModelClassFactory ()
23
25
24
26
def create (
25
- self , properties : Optional [Dict [str , Any ]], name : Optional [str ] = None
27
+ self ,
28
+ name : str ,
29
+ ** properties : Any ,
26
30
) -> Model :
27
- name = name or "Model"
28
-
29
31
model_class = self ._create_class (name )
30
- return model_class (properties )
32
+ return model_class (** properties )
31
33
32
34
def _create_class (self , name : str ) -> Type [Model ]:
33
35
return self .model_class_factory .create (name )
36
+
37
+
38
+ class ModelImporter (ModelFactory ):
39
+ def __init__ (
40
+ self ,
41
+ model_class_factory : Optional [ModelClassFactory ] = None ,
42
+ models : Optional [Dict [str , Any ]] = None ,
43
+ ):
44
+ super ().__init__ (model_class_factory )
45
+ self .registry = models or {}
46
+
47
+ def create (self , name : str , ** properties : Any ):
48
+ model_class = self ._get_class (name )
49
+
50
+ if model_class is None :
51
+ model_class = self ._create_class (name )
52
+
53
+ return model_class (** properties )
54
+
55
+ def _get_class (self , name : str ):
56
+ try :
57
+ return locate (name )
58
+ except ErrorDuringImport :
59
+ return None
0 commit comments