2121from openapi_python_generator .models import TypeConversion
2222
2323
24- def type_converter (schema : Schema , model_name : str | None = None , required : bool = False ) -> TypeConversion :
24+ def type_converter (schema : Schema , required : bool = False , model_name : str | None = None ,) -> TypeConversion :
2525 """
2626 Converts an OpenAPI type to a Python type.
2727 :param schema: Schema containing the type to be converted
@@ -131,10 +131,10 @@ def type_converter(schema: Schema, model_name: str | None = None, required: bool
131131 elif schema .type == "array" :
132132 retVal = pre_type + "List["
133133 if isinstance (schema .items , Reference ):
134- import_type = schema . items . ref . split ( "/" )[ - 1 ]
135- import_types = [ f"from . { import_type } import { import_type } " ]
136- original_type = "array<" + schema . items . ref . split ( "/" )[ - 1 ] + ">"
137- retVal += schema . items . ref . split ( "/" )[ - 1 ]
134+ converted_reference = _generate_property_from_reference ( model_name , "" , schema . items , schema )
135+ import_types = converted_reference . type . import_types
136+ original_type = "array<" + converted_reference . type . original_type + ">"
137+ retVal += converted_reference . type . converted_type
138138 elif isinstance (schema .items , Schema ):
139139 original_type = "array<" + str (schema .items .type ) + ">"
140140 retVal += type_converter (schema .items , True ).converted_type
@@ -176,14 +176,14 @@ def _generate_property_from_schema(
176176 )
177177 return Property (
178178 name = name ,
179- type = type_converter (schema , model_name , required ),
179+ type = type_converter (schema , required , model_name ),
180180 required = required ,
181181 default = None if required else "None" ,
182182 )
183183
184184
185185def _generate_property_from_reference (
186- name : str , reference : Reference , parent_schema : Optional [Schema ] = None
186+ model_name : str , name : str , reference : Reference , parent_schema : Optional [Schema ] = None ,
187187) -> Property :
188188 """
189189 Generates a property from a reference. It takes the name of the reference as the type, and then
@@ -200,11 +200,18 @@ def _generate_property_from_reference(
200200 )
201201 import_model = reference .ref .split ("/" )[- 1 ]
202202
203- type_conv = TypeConversion (
204- original_type = reference .ref ,
205- converted_type = import_model if required else "Optional[" + import_model + "]" ,
206- import_types = [f"from .{ import_model } import { import_model } " ],
207- )
203+ if import_model == model_name :
204+ type_conv = TypeConversion (
205+ original_type = reference .ref ,
206+ converted_type = import_model if required else 'Optional["' + import_model + '"]' ,
207+ import_types = None
208+ )
209+ else :
210+ type_conv = TypeConversion (
211+ original_type = reference .ref ,
212+ converted_type = import_model if required else "Optional[" + import_model + "]" ,
213+ import_types = [f"from .{ import_model } import { import_model } " ],
214+ )
208215 return Property (
209216 name = name ,
210217 type = type_conv ,
@@ -261,7 +268,7 @@ def generate_models(components: Components) -> List[Model]:
261268 for prop_name , property in property_iterator :
262269 if isinstance (property , Reference ):
263270 conv_property = _generate_property_from_reference (
264- prop_name , property , schema_or_reference
271+ name , prop_name , property , schema_or_reference
265272 )
266273 else :
267274 conv_property = _generate_property_from_schema (
0 commit comments