Skip to content

Commit 078b417

Browse files
fix!: If a schema references exactly one other schema in allOf, oneOf, or anyOf that referenced generated model will be used directly instead of generating a copy with another name. (openapi-generators#361)
1 parent 3db46ec commit 078b417

File tree

9 files changed

+97
-423
lines changed

9 files changed

+97
-423
lines changed

end_to_end_tests/golden-record/my_test_api_client/api/tests/defaults_tests_defaults_post.py

+18-26
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ def _get_kwargs(
2929
enum_prop: Union[Unset, AnEnum] = UNSET,
3030
model_prop: Union[Unset, ModelWithUnionProperty] = UNSET,
3131
required_model_prop: ModelWithUnionProperty,
32-
nullable_model_prop: Union[ModelWithUnionProperty, None, Unset] = UNSET,
33-
nullable_required_model_prop: Union[ModelWithUnionProperty, None],
32+
nullable_model_prop: Union[Unset, None, ModelWithUnionProperty] = UNSET,
33+
nullable_required_model_prop: Optional[ModelWithUnionProperty],
3434
) -> Dict[str, Any]:
3535
url = "{}/tests/defaults".format(client.base_url)
3636

@@ -92,21 +92,11 @@ def _get_kwargs(
9292

9393
json_required_model_prop = required_model_prop.to_dict()
9494

95-
json_nullable_model_prop: Union[Dict[str, Any], None, Unset]
96-
if isinstance(nullable_model_prop, Unset):
97-
json_nullable_model_prop = UNSET
98-
elif nullable_model_prop is None:
99-
json_nullable_model_prop = None
100-
else:
101-
json_nullable_model_prop = UNSET
102-
if not isinstance(nullable_model_prop, Unset):
103-
json_nullable_model_prop = nullable_model_prop.to_dict()
95+
json_nullable_model_prop: Union[Unset, None, Dict[str, Any]] = UNSET
96+
if not isinstance(nullable_model_prop, Unset):
97+
json_nullable_model_prop = nullable_model_prop.to_dict() if nullable_model_prop else None
10498

105-
json_nullable_required_model_prop: Union[Dict[str, Any], None]
106-
if nullable_required_model_prop is None:
107-
json_nullable_required_model_prop = None
108-
else:
109-
json_nullable_required_model_prop = nullable_required_model_prop.to_dict()
99+
json_nullable_required_model_prop = nullable_required_model_prop.to_dict() if nullable_required_model_prop else None
110100

111101
params: Dict[str, Any] = {
112102
"string_prop": string_prop,
@@ -122,12 +112,14 @@ def _get_kwargs(
122112
"union_prop": json_union_prop,
123113
"union_prop_with_ref": json_union_prop_with_ref,
124114
"enum_prop": json_enum_prop,
125-
"nullable_model_prop": json_nullable_model_prop,
126-
"nullable_required_model_prop": json_nullable_required_model_prop,
127115
}
128116
if not isinstance(json_model_prop, Unset):
129117
params.update(json_model_prop)
130118
params.update(json_required_model_prop)
119+
if not isinstance(json_nullable_model_prop, Unset) and json_nullable_model_prop is not None:
120+
params.update(json_nullable_model_prop)
121+
if json_nullable_required_model_prop is not None:
122+
params.update(json_nullable_required_model_prop)
131123
params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
132124

133125
return {
@@ -178,8 +170,8 @@ def sync_detailed(
178170
enum_prop: Union[Unset, AnEnum] = UNSET,
179171
model_prop: Union[Unset, ModelWithUnionProperty] = UNSET,
180172
required_model_prop: ModelWithUnionProperty,
181-
nullable_model_prop: Union[ModelWithUnionProperty, None, Unset] = UNSET,
182-
nullable_required_model_prop: Union[ModelWithUnionProperty, None],
173+
nullable_model_prop: Union[Unset, None, ModelWithUnionProperty] = UNSET,
174+
nullable_required_model_prop: Optional[ModelWithUnionProperty],
183175
) -> Response[Union[None, HTTPValidationError]]:
184176
kwargs = _get_kwargs(
185177
client=client,
@@ -227,8 +219,8 @@ def sync(
227219
enum_prop: Union[Unset, AnEnum] = UNSET,
228220
model_prop: Union[Unset, ModelWithUnionProperty] = UNSET,
229221
required_model_prop: ModelWithUnionProperty,
230-
nullable_model_prop: Union[ModelWithUnionProperty, None, Unset] = UNSET,
231-
nullable_required_model_prop: Union[ModelWithUnionProperty, None],
222+
nullable_model_prop: Union[Unset, None, ModelWithUnionProperty] = UNSET,
223+
nullable_required_model_prop: Optional[ModelWithUnionProperty],
232224
) -> Optional[Union[None, HTTPValidationError]]:
233225
""" """
234226

@@ -272,8 +264,8 @@ async def asyncio_detailed(
272264
enum_prop: Union[Unset, AnEnum] = UNSET,
273265
model_prop: Union[Unset, ModelWithUnionProperty] = UNSET,
274266
required_model_prop: ModelWithUnionProperty,
275-
nullable_model_prop: Union[ModelWithUnionProperty, None, Unset] = UNSET,
276-
nullable_required_model_prop: Union[ModelWithUnionProperty, None],
267+
nullable_model_prop: Union[Unset, None, ModelWithUnionProperty] = UNSET,
268+
nullable_required_model_prop: Optional[ModelWithUnionProperty],
277269
) -> Response[Union[None, HTTPValidationError]]:
278270
kwargs = _get_kwargs(
279271
client=client,
@@ -320,8 +312,8 @@ async def asyncio(
320312
enum_prop: Union[Unset, AnEnum] = UNSET,
321313
model_prop: Union[Unset, ModelWithUnionProperty] = UNSET,
322314
required_model_prop: ModelWithUnionProperty,
323-
nullable_model_prop: Union[ModelWithUnionProperty, None, Unset] = UNSET,
324-
nullable_required_model_prop: Union[ModelWithUnionProperty, None],
315+
nullable_model_prop: Union[Unset, None, ModelWithUnionProperty] = UNSET,
316+
nullable_required_model_prop: Optional[ModelWithUnionProperty],
325317
) -> Optional[Union[None, HTTPValidationError]]:
326318
""" """
327319

end_to_end_tests/golden-record/my_test_api_client/models/__init__.py

-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
""" Contains all the data models used in inputs/outputs """
22

33
from .a_model import AModel
4-
from .a_model_model import AModelModel
5-
from .a_model_not_required_model import AModelNotRequiredModel
6-
from .a_model_not_required_nullable_model import AModelNotRequiredNullableModel
7-
from .a_model_nullable_model import AModelNullableModel
84
from .all_of_sub_model import AllOfSubModel
95
from .an_enum import AnEnum
106
from .an_int_enum import AnIntEnum

end_to_end_tests/golden-record/my_test_api_client/models/a_model.py

+9-13
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@
44
import attr
55
from dateutil.parser import isoparse
66

7-
from ..models.a_model_model import AModelModel
8-
from ..models.a_model_not_required_model import AModelNotRequiredModel
9-
from ..models.a_model_not_required_nullable_model import AModelNotRequiredNullableModel
10-
from ..models.a_model_nullable_model import AModelNullableModel
117
from ..models.an_enum import AnEnum
128
from ..models.different_enum import DifferentEnum
139
from ..models.free_form_model import FreeFormModel
@@ -26,20 +22,20 @@ class AModel:
2622
a_date: datetime.date
2723
required_not_nullable: str
2824
one_of_models: Union[FreeFormModel, ModelWithUnionProperty]
29-
model: AModelModel
25+
model: ModelWithUnionProperty
3026
a_nullable_date: Optional[datetime.date]
3127
required_nullable: Optional[str]
3228
nullable_one_of_models: Union[FreeFormModel, ModelWithUnionProperty, None]
33-
nullable_model: Optional[AModelNullableModel]
29+
nullable_model: Optional[ModelWithUnionProperty]
3430
nested_list_of_enums: Union[Unset, List[List[DifferentEnum]]] = UNSET
3531
a_not_required_date: Union[Unset, datetime.date] = UNSET
3632
attr_1_leading_digit: Union[Unset, str] = UNSET
3733
not_required_nullable: Union[Unset, None, str] = UNSET
3834
not_required_not_nullable: Union[Unset, str] = UNSET
3935
not_required_one_of_models: Union[FreeFormModel, ModelWithUnionProperty, Unset] = UNSET
4036
not_required_nullable_one_of_models: Union[FreeFormModel, ModelWithUnionProperty, None, Unset, str] = UNSET
41-
not_required_model: Union[Unset, AModelNotRequiredModel] = UNSET
42-
not_required_nullable_model: Union[Unset, None, AModelNotRequiredNullableModel] = UNSET
37+
not_required_model: Union[Unset, ModelWithUnionProperty] = UNSET
38+
not_required_nullable_model: Union[Unset, None, ModelWithUnionProperty] = UNSET
4339

4440
def to_dict(self) -> Dict[str, Any]:
4541
an_enum_value = self.an_enum_value.value
@@ -216,7 +212,7 @@ def _parse_one_of_models(data: object) -> Union[FreeFormModel, ModelWithUnionPro
216212

217213
one_of_models = _parse_one_of_models(d.pop("one_of_models"))
218214

219-
model = AModelModel.from_dict(d.pop("model"))
215+
model = ModelWithUnionProperty.from_dict(d.pop("model"))
220216

221217
nested_list_of_enums = []
222218
_nested_list_of_enums = d.pop("nested_list_of_enums", UNSET)
@@ -340,17 +336,17 @@ def _parse_not_required_nullable_one_of_models(
340336
nullable_model = None
341337
_nullable_model = d.pop("nullable_model")
342338
if _nullable_model is not None:
343-
nullable_model = AModelNullableModel.from_dict(_nullable_model)
339+
nullable_model = ModelWithUnionProperty.from_dict(_nullable_model)
344340

345-
not_required_model: Union[Unset, AModelNotRequiredModel] = UNSET
341+
not_required_model: Union[Unset, ModelWithUnionProperty] = UNSET
346342
_not_required_model = d.pop("not_required_model", UNSET)
347343
if not isinstance(_not_required_model, Unset):
348-
not_required_model = AModelNotRequiredModel.from_dict(_not_required_model)
344+
not_required_model = ModelWithUnionProperty.from_dict(_not_required_model)
349345

350346
not_required_nullable_model = None
351347
_not_required_nullable_model = d.pop("not_required_nullable_model", UNSET)
352348
if _not_required_nullable_model is not None and not isinstance(_not_required_nullable_model, Unset):
353-
not_required_nullable_model = AModelNotRequiredNullableModel.from_dict(_not_required_nullable_model)
349+
not_required_nullable_model = ModelWithUnionProperty.from_dict(_not_required_nullable_model)
354350

355351
a_model = cls(
356352
an_enum_value=an_enum_value,

end_to_end_tests/golden-record/my_test_api_client/models/a_model_model.py

-93
This file was deleted.

end_to_end_tests/golden-record/my_test_api_client/models/a_model_not_required_model.py

-93
This file was deleted.

0 commit comments

Comments
 (0)