3
3
import typer
4
4
from openapi_schema_pydantic import Components , Reference , Schema
5
5
6
- from openapi_python_generator .language_converters .python .jinja_config import JINJA_ENV , MODELS_TEMPLATE
6
+ from openapi_python_generator .language_converters .python .jinja_config import JINJA_ENV , MODELS_TEMPLATE , ENUM_TEMPLATE
7
7
from openapi_python_generator .models import Model , Property
8
8
9
-
10
9
def type_converter (schema : Schema , required : bool = False ) -> str :
11
10
"""
12
11
Converts an OpenAPI type to a Python type.
@@ -40,10 +39,9 @@ def type_converter(schema: Schema, required: bool = False) -> str:
40
39
retVal += schema .items .ref .split ("/" )[- 1 ]
41
40
elif isinstance (schema .items , Schema ):
42
41
retVal += type_converter (schema .items , True )
43
- elif schema .items is None :
44
- retVal += "Any"
45
42
else :
46
- raise Exception (f"Unknown item type: { type (schema .items )} " )
43
+ retVal += "Any"
44
+
47
45
return retVal + "]" + post_type
48
46
elif schema .type == "object" :
49
47
return pre_type + "Dict[str, Any]" + post_type
@@ -103,18 +101,29 @@ def generate_models(components: Components) -> List[Model]:
103
101
104
102
for name , schema in components .schemas .items ():
105
103
if schema .enum is not None :
106
- continue # TODO generate enum class using different template
104
+ m = Model (
105
+ file_name = name ,
106
+ content = JINJA_ENV .get_template (ENUM_TEMPLATE ).render (name = name ,** schema .dict ()),
107
+ openapi_object = schema ,
108
+ references = [],
109
+ properties = [],
110
+ )
111
+ try :
112
+ compile (m .content , "<string>" , "exec" )
113
+ models .append (m )
114
+ except SyntaxError as e : #pragma: no cover
115
+ typer .echo (f"Error in model { name } : { e } " )
116
+
117
+ continue #pragma: no cover
107
118
108
119
import_models = []
109
120
properties = []
110
121
for prop_name , property in schema .properties .items ():
111
122
if isinstance (property , Reference ):
112
123
conv_property , import_model = _generate_property_from_reference (prop_name , property , schema )
113
124
import_models .append (import_model )
114
- elif isinstance (property , Schema ):
115
- conv_property = _generate_property_from_schema (prop_name , property , schema )
116
125
else :
117
- raise Exception ( f"Unknown property type: { type ( property ) } " )
126
+ conv_property = _generate_property_from_schema ( prop_name , property , schema )
118
127
properties .append (conv_property )
119
128
120
129
generated_content = JINJA_ENV .get_template (MODELS_TEMPLATE ).render (
@@ -126,9 +135,8 @@ def generate_models(components: Components) -> List[Model]:
126
135
127
136
try :
128
137
compile (generated_content , "<string>" , "exec" )
129
- except SyntaxError as e :
130
- typer .echo (f"Error in model { name } : { e } " )
131
- typer .Exit ()
138
+ except SyntaxError as e : #pragma: no cover
139
+ typer .echo (f"Error in model { name } : { e } " ) #pragma: no cover
132
140
133
141
models .append (Model (
134
142
file_name = name ,
0 commit comments