Skip to content

Commit b24bcbf

Browse files
author
Constantinos Symeonides
committed
fix: allOf behaviour
1 parent fd5393f commit b24bcbf

17 files changed

+210
-390
lines changed

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

+13-10
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def _get_kwargs(
2727
union_prop: Union[Unset, float, str] = "not a float",
2828
union_prop_with_ref: Union[AnEnum, Unset, float] = 0.6,
2929
enum_prop: Union[Unset, AnEnum] = UNSET,
30-
model_prop: Union[Unset, ModelWithUnionProperty] = UNSET,
30+
model_prop: Union[ModelWithUnionProperty, Unset] = UNSET,
3131
required_model_prop: ModelWithUnionProperty,
3232
nullable_model_prop: Union[ModelWithUnionProperty, None, Unset] = UNSET,
3333
nullable_required_model_prop: Union[ModelWithUnionProperty, None],
@@ -86,9 +86,13 @@ def _get_kwargs(
8686
if not isinstance(enum_prop, Unset):
8787
json_enum_prop = enum_prop.value
8888

89-
json_model_prop: Union[Unset, Dict[str, Any]] = UNSET
90-
if not isinstance(model_prop, Unset):
91-
json_model_prop = model_prop.to_dict()
89+
json_model_prop: Union[Dict[str, Any], Unset]
90+
if isinstance(model_prop, Unset):
91+
json_model_prop = UNSET
92+
else:
93+
json_model_prop = UNSET
94+
if not isinstance(model_prop, Unset):
95+
json_model_prop = model_prop.to_dict()
9296

9397
json_required_model_prop = required_model_prop.to_dict()
9498

@@ -122,11 +126,10 @@ def _get_kwargs(
122126
"union_prop": json_union_prop,
123127
"union_prop_with_ref": json_union_prop_with_ref,
124128
"enum_prop": json_enum_prop,
129+
"model_prop": json_model_prop,
125130
"nullable_model_prop": json_nullable_model_prop,
126131
"nullable_required_model_prop": json_nullable_required_model_prop,
127132
}
128-
if not isinstance(json_model_prop, Unset):
129-
params.update(json_model_prop)
130133
params.update(json_required_model_prop)
131134
params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
132135

@@ -176,7 +179,7 @@ def sync_detailed(
176179
union_prop: Union[Unset, float, str] = "not a float",
177180
union_prop_with_ref: Union[AnEnum, Unset, float] = 0.6,
178181
enum_prop: Union[Unset, AnEnum] = UNSET,
179-
model_prop: Union[Unset, ModelWithUnionProperty] = UNSET,
182+
model_prop: Union[ModelWithUnionProperty, Unset] = UNSET,
180183
required_model_prop: ModelWithUnionProperty,
181184
nullable_model_prop: Union[ModelWithUnionProperty, None, Unset] = UNSET,
182185
nullable_required_model_prop: Union[ModelWithUnionProperty, None],
@@ -225,7 +228,7 @@ def sync(
225228
union_prop: Union[Unset, float, str] = "not a float",
226229
union_prop_with_ref: Union[AnEnum, Unset, float] = 0.6,
227230
enum_prop: Union[Unset, AnEnum] = UNSET,
228-
model_prop: Union[Unset, ModelWithUnionProperty] = UNSET,
231+
model_prop: Union[ModelWithUnionProperty, Unset] = UNSET,
229232
required_model_prop: ModelWithUnionProperty,
230233
nullable_model_prop: Union[ModelWithUnionProperty, None, Unset] = UNSET,
231234
nullable_required_model_prop: Union[ModelWithUnionProperty, None],
@@ -270,7 +273,7 @@ async def asyncio_detailed(
270273
union_prop: Union[Unset, float, str] = "not a float",
271274
union_prop_with_ref: Union[AnEnum, Unset, float] = 0.6,
272275
enum_prop: Union[Unset, AnEnum] = UNSET,
273-
model_prop: Union[Unset, ModelWithUnionProperty] = UNSET,
276+
model_prop: Union[ModelWithUnionProperty, Unset] = UNSET,
274277
required_model_prop: ModelWithUnionProperty,
275278
nullable_model_prop: Union[ModelWithUnionProperty, None, Unset] = UNSET,
276279
nullable_required_model_prop: Union[ModelWithUnionProperty, None],
@@ -318,7 +321,7 @@ async def asyncio(
318321
union_prop: Union[Unset, float, str] = "not a float",
319322
union_prop_with_ref: Union[AnEnum, Unset, float] = 0.6,
320323
enum_prop: Union[Unset, AnEnum] = UNSET,
321-
model_prop: Union[Unset, ModelWithUnionProperty] = UNSET,
324+
model_prop: Union[ModelWithUnionProperty, Unset] = UNSET,
322325
required_model_prop: ModelWithUnionProperty,
323326
nullable_model_prop: Union[ModelWithUnionProperty, None, Unset] = UNSET,
324327
nullable_required_model_prop: Union[ModelWithUnionProperty, None],

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

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
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
4+
from .a_model_an_all_of_enum import AModelAnAllOfEnum
5+
from .a_model_model_with_union_property import AModelModelWithUnionProperty
86
from .all_of_sub_model import AllOfSubModel
7+
from .an_all_of_enum import AnAllOfEnum
98
from .an_enum import AnEnum
109
from .an_int_enum import AnIntEnum
1110
from .another_all_of_sub_model import AnotherAllOfSubModel

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

+57-25
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@
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
7+
from ..models.a_model_an_all_of_enum import AModelAnAllOfEnum
8+
from ..models.a_model_model_with_union_property import AModelModelWithUnionProperty
119
from ..models.an_enum import AnEnum
1210
from ..models.different_enum import DifferentEnum
1311
from ..models.free_form_model import FreeFormModel
@@ -26,24 +24,27 @@ class AModel:
2624
a_date: datetime.date
2725
required_not_nullable: str
2826
one_of_models: Union[FreeFormModel, ModelWithUnionProperty]
29-
model: AModelModel
27+
model: AModelModelWithUnionProperty
3028
a_nullable_date: Optional[datetime.date]
3129
required_nullable: Optional[str]
3230
nullable_one_of_models: Union[FreeFormModel, ModelWithUnionProperty, None]
33-
nullable_model: Optional[AModelNullableModel]
31+
nullable_model: Union[ModelWithUnionProperty, None]
32+
an_allof_enum_value: AModelAnAllOfEnum = AModelAnAllOfEnum.OVERRIDDEN_DEFAULT
3433
nested_list_of_enums: Union[Unset, List[List[DifferentEnum]]] = UNSET
3534
a_not_required_date: Union[Unset, datetime.date] = UNSET
3635
attr_1_leading_digit: Union[Unset, str] = UNSET
3736
not_required_nullable: Union[Unset, None, str] = UNSET
3837
not_required_not_nullable: Union[Unset, str] = UNSET
3938
not_required_one_of_models: Union[FreeFormModel, ModelWithUnionProperty, Unset] = UNSET
4039
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
40+
not_required_model: Union[Unset, AModelModelWithUnionProperty] = UNSET
41+
not_required_nullable_model: Union[ModelWithUnionProperty, None, Unset] = UNSET
4342

4443
def to_dict(self) -> Dict[str, Any]:
4544
an_enum_value = self.an_enum_value.value
4645

46+
an_allof_enum_value = self.an_allof_enum_value.value
47+
4748
if isinstance(self.a_camel_date_time, datetime.datetime):
4849
a_camel_date_time = self.a_camel_date_time.isoformat()
4950

@@ -121,22 +122,31 @@ def to_dict(self) -> Dict[str, Any]:
121122
else:
122123
not_required_nullable_one_of_models = self.not_required_nullable_one_of_models
123124

124-
nullable_model = self.nullable_model.to_dict() if self.nullable_model else None
125+
nullable_model: Union[Dict[str, Any], None]
126+
if self.nullable_model is None:
127+
nullable_model = None
128+
else:
129+
nullable_model = self.nullable_model.to_dict()
125130

126131
not_required_model: Union[Unset, Dict[str, Any]] = UNSET
127132
if not isinstance(self.not_required_model, Unset):
128133
not_required_model = self.not_required_model.to_dict()
129134

130-
not_required_nullable_model: Union[Unset, None, Dict[str, Any]] = UNSET
131-
if not isinstance(self.not_required_nullable_model, Unset):
132-
not_required_nullable_model = (
133-
self.not_required_nullable_model.to_dict() if self.not_required_nullable_model else None
134-
)
135+
not_required_nullable_model: Union[Dict[str, Any], None, Unset]
136+
if isinstance(self.not_required_nullable_model, Unset):
137+
not_required_nullable_model = UNSET
138+
elif self.not_required_nullable_model is None:
139+
not_required_nullable_model = None
140+
else:
141+
not_required_nullable_model = UNSET
142+
if not isinstance(self.not_required_nullable_model, Unset):
143+
not_required_nullable_model = self.not_required_nullable_model.to_dict()
135144

136145
field_dict: Dict[str, Any] = {}
137146
field_dict.update(
138147
{
139148
"an_enum_value": an_enum_value,
149+
"an_allof_enum_value": an_allof_enum_value,
140150
"aCamelDateTime": a_camel_date_time,
141151
"a_date": a_date,
142152
"required_not_nullable": required_not_nullable,
@@ -174,6 +184,8 @@ def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
174184
d = src_dict.copy()
175185
an_enum_value = AnEnum(d.pop("an_enum_value"))
176186

187+
an_allof_enum_value = AModelAnAllOfEnum(d.pop("an_allof_enum_value"))
188+
177189
def _parse_a_camel_date_time(data: object) -> Union[datetime.date, datetime.datetime]:
178190
try:
179191
a_camel_date_time_type0: datetime.datetime
@@ -216,7 +228,7 @@ def _parse_one_of_models(data: object) -> Union[FreeFormModel, ModelWithUnionPro
216228

217229
one_of_models = _parse_one_of_models(d.pop("one_of_models"))
218230

219-
model = AModelModel.from_dict(d.pop("model"))
231+
model = AModelModelWithUnionProperty.from_dict(d.pop("model"))
220232

221233
nested_list_of_enums = []
222234
_nested_list_of_enums = d.pop("nested_list_of_enums", UNSET)
@@ -337,23 +349,43 @@ def _parse_not_required_nullable_one_of_models(
337349
d.pop("not_required_nullable_one_of_models", UNSET)
338350
)
339351

340-
nullable_model = None
341-
_nullable_model = d.pop("nullable_model")
342-
if _nullable_model is not None:
343-
nullable_model = AModelNullableModel.from_dict(_nullable_model)
352+
def _parse_nullable_model(data: object) -> Union[ModelWithUnionProperty, None]:
353+
if data is None:
354+
return data
355+
if not isinstance(data, dict):
356+
raise TypeError()
357+
nullable_model_type0: ModelWithUnionProperty
358+
nullable_model_type0 = ModelWithUnionProperty.from_dict(data)
359+
360+
return nullable_model_type0
344361

345-
not_required_model: Union[Unset, AModelNotRequiredModel] = UNSET
362+
nullable_model = _parse_nullable_model(d.pop("nullable_model"))
363+
364+
not_required_model: Union[Unset, AModelModelWithUnionProperty] = UNSET
346365
_not_required_model = d.pop("not_required_model", UNSET)
347366
if not isinstance(_not_required_model, Unset):
348-
not_required_model = AModelNotRequiredModel.from_dict(_not_required_model)
367+
not_required_model = AModelModelWithUnionProperty.from_dict(_not_required_model)
368+
369+
def _parse_not_required_nullable_model(data: object) -> Union[ModelWithUnionProperty, None, Unset]:
370+
if data is None:
371+
return data
372+
if isinstance(data, Unset):
373+
return data
374+
if not isinstance(data, dict):
375+
raise TypeError()
376+
not_required_nullable_model_type0: Union[Unset, ModelWithUnionProperty]
377+
not_required_nullable_model_type0 = UNSET
378+
_not_required_nullable_model_type0 = data
379+
if not isinstance(_not_required_nullable_model_type0, Unset):
380+
not_required_nullable_model_type0 = ModelWithUnionProperty.from_dict(_not_required_nullable_model_type0)
381+
382+
return not_required_nullable_model_type0
349383

350-
not_required_nullable_model = None
351-
_not_required_nullable_model = d.pop("not_required_nullable_model", UNSET)
352-
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)
384+
not_required_nullable_model = _parse_not_required_nullable_model(d.pop("not_required_nullable_model", UNSET))
354385

355386
a_model = cls(
356387
an_enum_value=an_enum_value,
388+
an_allof_enum_value=an_allof_enum_value,
357389
a_camel_date_time=a_camel_date_time,
358390
a_date=a_date,
359391
required_not_nullable=required_not_nullable,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from enum import Enum
2+
3+
4+
class AModelAnAllOfEnum(str, Enum):
5+
FOO = "foo"
6+
BAR = "bar"
7+
A_DEFAULT = "a_default"
8+
OVERRIDDEN_DEFAULT = "overridden_default"
9+
10+
def __str__(self) -> str:
11+
return str(self.value)

end_to_end_tests/golden-record/my_test_api_client/models/a_model_model.py renamed to end_to_end_tests/golden-record/my_test_api_client/models/a_model_model_with_union_property.py

+5-24
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
1-
from typing import Any, Dict, List, Type, TypeVar, Union
1+
from typing import Any, Dict, Type, TypeVar, Union
22

33
import attr
44

55
from ..models.an_enum import AnEnum
66
from ..models.an_int_enum import AnIntEnum
77
from ..types import UNSET, Unset
88

9-
T = TypeVar("T", bound="AModelModel")
9+
T = TypeVar("T", bound="AModelModelWithUnionProperty")
1010

1111

1212
@attr.s(auto_attribs=True)
13-
class AModelModel:
13+
class AModelModelWithUnionProperty:
1414
""" """
1515

1616
a_property: Union[AnEnum, AnIntEnum, Unset] = UNSET
17-
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
1817

1918
def to_dict(self) -> Dict[str, Any]:
2019
a_property: Union[Unset, int, str]
@@ -31,7 +30,6 @@ def to_dict(self) -> Dict[str, Any]:
3130
a_property = self.a_property.value
3231

3332
field_dict: Dict[str, Any] = {}
34-
field_dict.update(self.additional_properties)
3533
field_dict.update({})
3634
if a_property is not UNSET:
3735
field_dict["a_property"] = a_property
@@ -69,25 +67,8 @@ def _parse_a_property(data: object) -> Union[AnEnum, AnIntEnum, Unset]:
6967

7068
a_property = _parse_a_property(d.pop("a_property", UNSET))
7169

72-
a_model_model = cls(
70+
a_model_model_with_union_property = cls(
7371
a_property=a_property,
7472
)
7573

76-
a_model_model.additional_properties = d
77-
return a_model_model
78-
79-
@property
80-
def additional_keys(self) -> List[str]:
81-
return list(self.additional_properties.keys())
82-
83-
def __getitem__(self, key: str) -> Any:
84-
return self.additional_properties[key]
85-
86-
def __setitem__(self, key: str, value: Any) -> None:
87-
self.additional_properties[key] = value
88-
89-
def __delitem__(self, key: str) -> None:
90-
del self.additional_properties[key]
91-
92-
def __contains__(self, key: str) -> bool:
93-
return key in self.additional_properties
74+
return a_model_model_with_union_property

0 commit comments

Comments
 (0)