Skip to content

Commit f9f0963

Browse files
fix: Deserialization of unions (#332). Thanks @forest-benchling!
* Fix tests * Manually apply diff * Regenerate tests * Fix tests * Fix tests * Remove unnecessary check * Address union of one type * Fix union of inline models * Fix union * More tests * Change parse annotation to object * Address suggestions * Make inner types into a set, fix List type string, add tests * Add more E2E tests * Add tests * Change item to type * Add another unit test
1 parent 2861a34 commit f9f0963

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1434
-305
lines changed

end_to_end_tests/golden-record-custom/custom_e2e/api/tests/defaults_tests_defaults_post.py

+51-13
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
Client = httpx.Client
88

99
import datetime
10-
from typing import Dict, List, Union
10+
from typing import Dict, List, Optional, Union
1111

1212
from dateutil.parser import isoparse
1313

@@ -42,28 +42,45 @@ def httpx_request(
4242
*,
4343
client: Client,
4444
string_prop: Union[Unset, str] = "the default string",
45-
datetime_prop: Union[Unset, datetime.datetime] = isoparse("1010-10-10T00:00:00"),
45+
not_required_not_nullable_datetime_prop: Union[Unset, datetime.datetime] = isoparse("1010-10-10T00:00:00"),
46+
not_required_nullable_datetime_prop: Union[Unset, None, datetime.datetime] = isoparse("1010-10-10T00:00:00"),
47+
required_not_nullable_datetime_prop: datetime.datetime = isoparse("1010-10-10T00:00:00"),
48+
required_nullable_datetime_prop: Optional[datetime.datetime] = isoparse("1010-10-10T00:00:00"),
4649
date_prop: Union[Unset, datetime.date] = isoparse("1010-10-10").date(),
4750
float_prop: Union[Unset, float] = 3.14,
4851
int_prop: Union[Unset, int] = 7,
4952
boolean_prop: Union[Unset, bool] = False,
5053
list_prop: Union[Unset, List[AnEnum]] = UNSET,
5154
union_prop: Union[Unset, float, str] = "not a float",
52-
union_prop_with_ref: Union[Unset, float, AnEnum] = 0.6,
55+
union_prop_with_ref: Union[AnEnum, Unset, float] = 0.6,
5356
enum_prop: Union[Unset, AnEnum] = UNSET,
54-
model_prop: Union[ModelWithUnionProperty, Unset] = UNSET,
57+
model_prop: Union[Unset, ModelWithUnionProperty] = UNSET,
5558
required_model_prop: ModelWithUnionProperty,
59+
nullable_model_prop: Union[ModelWithUnionProperty, None, Unset] = UNSET,
60+
nullable_required_model_prop: Union[ModelWithUnionProperty, None],
5661
) -> Response[Union[None, HTTPValidationError]]:
5762

58-
json_datetime_prop: Union[Unset, str] = UNSET
59-
if not isinstance(datetime_prop, Unset):
60-
json_datetime_prop = datetime_prop.isoformat()
63+
json_not_required_not_nullable_datetime_prop: Union[Unset, str] = UNSET
64+
if not isinstance(not_required_not_nullable_datetime_prop, Unset):
65+
json_not_required_not_nullable_datetime_prop = not_required_not_nullable_datetime_prop.isoformat()
66+
67+
json_not_required_nullable_datetime_prop: Union[Unset, None, str] = UNSET
68+
if not isinstance(not_required_nullable_datetime_prop, Unset):
69+
json_not_required_nullable_datetime_prop = (
70+
not_required_nullable_datetime_prop.isoformat() if not_required_nullable_datetime_prop else None
71+
)
72+
73+
json_required_not_nullable_datetime_prop = required_not_nullable_datetime_prop.isoformat()
74+
75+
json_required_nullable_datetime_prop = (
76+
required_nullable_datetime_prop.isoformat() if required_nullable_datetime_prop else None
77+
)
6178

6279
json_date_prop: Union[Unset, str] = UNSET
6380
if not isinstance(date_prop, Unset):
6481
json_date_prop = date_prop.isoformat()
6582

66-
json_list_prop: Union[Unset, List[Any]] = UNSET
83+
json_list_prop: Union[Unset, List[str]] = UNSET
6784
if not isinstance(list_prop, Unset):
6885
json_list_prop = []
6986
for list_prop_item_data in list_prop:
@@ -77,30 +94,49 @@ def httpx_request(
7794
else:
7895
json_union_prop = union_prop
7996

80-
json_union_prop_with_ref: Union[Unset, float, AnEnum]
97+
json_union_prop_with_ref: Union[Unset, float, str]
8198
if isinstance(union_prop_with_ref, Unset):
8299
json_union_prop_with_ref = UNSET
83100
elif isinstance(union_prop_with_ref, AnEnum):
84101
json_union_prop_with_ref = UNSET
85102
if not isinstance(union_prop_with_ref, Unset):
86-
json_union_prop_with_ref = union_prop_with_ref
103+
json_union_prop_with_ref = union_prop_with_ref.value
87104

88105
else:
89106
json_union_prop_with_ref = union_prop_with_ref
90107

91-
json_enum_prop: Union[Unset, AnEnum] = UNSET
108+
json_enum_prop: Union[Unset, str] = UNSET
92109
if not isinstance(enum_prop, Unset):
93-
json_enum_prop = enum_prop
110+
json_enum_prop = enum_prop.value
94111

95112
json_model_prop: Union[Unset, Dict[str, Any]] = UNSET
96113
if not isinstance(model_prop, Unset):
97114
json_model_prop = model_prop.to_dict()
98115

99116
json_required_model_prop = required_model_prop.to_dict()
100117

118+
json_nullable_model_prop: Union[Dict[str, Any], None, Unset]
119+
if isinstance(nullable_model_prop, Unset):
120+
json_nullable_model_prop = UNSET
121+
elif nullable_model_prop is None:
122+
json_nullable_model_prop = None
123+
else:
124+
json_nullable_model_prop = UNSET
125+
if not isinstance(nullable_model_prop, Unset):
126+
json_nullable_model_prop = nullable_model_prop.to_dict()
127+
128+
json_nullable_required_model_prop: Union[Dict[str, Any], None]
129+
if nullable_required_model_prop is None:
130+
json_nullable_required_model_prop = None
131+
else:
132+
json_nullable_required_model_prop = nullable_required_model_prop.to_dict()
133+
101134
params: Dict[str, Any] = {
102135
"string_prop": string_prop,
103-
"datetime_prop": json_datetime_prop,
136+
"not_required_not_nullable_datetime_prop": json_not_required_not_nullable_datetime_prop,
137+
"not_required_nullable_datetime_prop": json_not_required_nullable_datetime_prop,
138+
"required_not_nullable_datetime_prop": json_required_not_nullable_datetime_prop,
139+
"required_nullable_datetime_prop": json_required_nullable_datetime_prop,
104140
"date_prop": json_date_prop,
105141
"float_prop": float_prop,
106142
"int_prop": int_prop,
@@ -109,6 +145,8 @@ def httpx_request(
109145
"union_prop": json_union_prop,
110146
"union_prop_with_ref": json_union_prop_with_ref,
111147
"enum_prop": json_enum_prop,
148+
"nullable_model_prop": json_nullable_model_prop,
149+
"nullable_required_model_prop": json_nullable_required_model_prop,
112150
}
113151
if not isinstance(json_model_prop, Unset):
114152
params.update(json_model_prop)

end_to_end_tests/golden-record-custom/custom_e2e/api/tests/optional_value_tests_optional_query_param.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def httpx_request(
3939
query_param: Union[Unset, List[str]] = UNSET,
4040
) -> Response[Union[None, HTTPValidationError]]:
4141

42-
json_query_param: Union[Unset, List[Any]] = UNSET
42+
json_query_param: Union[Unset, List[str]] = UNSET
4343
if not isinstance(query_param, Unset):
4444
json_query_param = query_param
4545

end_to_end_tests/golden-record-custom/custom_e2e/models/__init__.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,13 @@
1717
)
1818
from .model_with_additional_properties_refed import ModelWithAdditionalPropertiesRefed
1919
from .model_with_any_json_properties import ModelWithAnyJsonProperties
20-
from .model_with_any_json_properties_additional_property import ModelWithAnyJsonPropertiesAdditionalProperty
20+
from .model_with_any_json_properties_additional_property_type0 import ModelWithAnyJsonPropertiesAdditionalPropertyType0
2121
from .model_with_primitive_additional_properties import ModelWithPrimitiveAdditionalProperties
2222
from .model_with_primitive_additional_properties_a_date_holder import ModelWithPrimitiveAdditionalPropertiesADateHolder
2323
from .model_with_union_property import ModelWithUnionProperty
24+
from .model_with_union_property_inlined import ModelWithUnionPropertyInlined
25+
from .model_with_union_property_inlined_fruit_type0 import ModelWithUnionPropertyInlinedFruitType0
26+
from .model_with_union_property_inlined_fruit_type1 import ModelWithUnionPropertyInlinedFruitType1
2427
from .test_inline_objects_json_body import TestInlineObjectsJsonBody
2528
from .test_inline_objects_response_200 import TestInlineObjectsResponse_200
2629
from .validation_error import ValidationError

0 commit comments

Comments
 (0)