Skip to content

Fix deserialization of unions #319

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@
Client = httpx.Client

import datetime
from typing import Dict, List, Union
from typing import Dict, List, Optional, Union

from dateutil.parser import isoparse

from ...models.an_enum import AnEnum
from ...models.http_validation_error import HTTPValidationError
from ...models.model_with_union_property import ModelWithUnionProperty
from ...types import UNSET, Unset


Expand Down Expand Up @@ -40,76 +41,119 @@ def _build_response(*, response: httpx.Response) -> Response[Union[None, HTTPVal
def httpx_request(
*,
client: Client,
string_prop: Union[Unset, str] = "the default string",
datetime_prop: Union[Unset, datetime.datetime] = isoparse("1010-10-10T00:00:00"),
date_prop: Union[Unset, datetime.date] = isoparse("1010-10-10").date(),
float_prop: Union[Unset, float] = 3.14,
int_prop: Union[Unset, int] = 7,
boolean_prop: Union[Unset, bool] = False,
list_prop: Union[Unset, List[AnEnum]] = UNSET,
union_prop: Union[Unset, float, str] = "not a float",
union_prop_with_ref: Union[Unset, float, AnEnum] = 0.6,
enum_prop: Union[Unset, AnEnum] = UNSET,
string_prop: Union[Unset, None, str] = "the default string",
not_required_not_nullable_datetime_prop: Union[Unset, None, datetime.datetime] = isoparse("1010-10-10T00:00:00"),
not_required_nullable_datetime_prop: Union[Unset, None, datetime.datetime] = isoparse("1010-10-10T00:00:00"),
required_not_nullable_datetime_prop: datetime.datetime = isoparse("1010-10-10T00:00:00"),
required_nullable_datetime_prop: Optional[datetime.datetime] = isoparse("1010-10-10T00:00:00"),
date_prop: Union[Unset, None, datetime.date] = isoparse("1010-10-10").date(),
float_prop: Union[Unset, None, float] = 3.14,
int_prop: Union[Unset, None, int] = 7,
boolean_prop: Union[Unset, None, bool] = False,
list_prop: Union[Unset, None, List[AnEnum]] = UNSET,
union_prop: Union[Unset, None, float, str] = "not a float",
union_prop_with_ref: Union[Unset, None, float, AnEnum] = 0.6,
enum_prop: Union[Unset, None, AnEnum] = UNSET,
model_prop: Union[Unset, None, ModelWithUnionProperty] = UNSET,
) -> Response[Union[None, HTTPValidationError]]:

json_datetime_prop: Union[Unset, str] = UNSET
if not isinstance(datetime_prop, Unset):
json_datetime_prop = datetime_prop.isoformat()
json_not_required_not_nullable_datetime_prop: Union[Unset, None, str] = UNSET
if not isinstance(not_required_not_nullable_datetime_prop, Unset):
json_not_required_not_nullable_datetime_prop = (
not_required_not_nullable_datetime_prop.isoformat() if not_required_not_nullable_datetime_prop else None
)

json_date_prop: Union[Unset, str] = UNSET
json_not_required_nullable_datetime_prop: Union[Unset, None, str] = UNSET
if not isinstance(not_required_nullable_datetime_prop, Unset):
json_not_required_nullable_datetime_prop = (
not_required_nullable_datetime_prop.isoformat() if not_required_nullable_datetime_prop else None
)

json_required_not_nullable_datetime_prop = required_not_nullable_datetime_prop.isoformat()

json_required_nullable_datetime_prop = (
required_nullable_datetime_prop.isoformat() if required_nullable_datetime_prop else None
)

json_date_prop: Union[Unset, None, str] = UNSET
if not isinstance(date_prop, Unset):
json_date_prop = date_prop.isoformat()
json_date_prop = date_prop.isoformat() if date_prop else None

json_list_prop: Union[Unset, List[Any]] = UNSET
json_list_prop: Union[Unset, None, List[Any]] = UNSET
if not isinstance(list_prop, Unset):
json_list_prop = []
for list_prop_item_data in list_prop:
list_prop_item = list_prop_item_data.value
if list_prop is None:
json_list_prop = None
else:
json_list_prop = []
for list_prop_item_data in list_prop:
list_prop_item = list_prop_item_data.value

json_list_prop.append(list_prop_item)
json_list_prop.append(list_prop_item)

json_union_prop: Union[Unset, float, str]
json_union_prop: Union[Unset, None, float, str]
if isinstance(union_prop, Unset):
json_union_prop = UNSET
elif union_prop is None:
json_union_prop = None
else:
json_union_prop = union_prop

json_union_prop_with_ref: Union[Unset, float, AnEnum]
json_union_prop_with_ref: Union[Unset, None, float, int]
if isinstance(union_prop_with_ref, Unset):
json_union_prop_with_ref = UNSET
elif union_prop_with_ref is None:
json_union_prop_with_ref = None
elif isinstance(union_prop_with_ref, AnEnum):
json_union_prop_with_ref = UNSET
if not isinstance(union_prop_with_ref, Unset):
json_union_prop_with_ref = union_prop_with_ref
json_union_prop_with_ref = union_prop_with_ref.value

else:
json_union_prop_with_ref = union_prop_with_ref

json_enum_prop: Union[Unset, AnEnum] = UNSET
json_enum_prop: Union[Unset, None, int] = UNSET
if not isinstance(enum_prop, Unset):
json_enum_prop = enum_prop
json_enum_prop = enum_prop.value if enum_prop else None

json_model_prop: Union[Unset, None, Dict[str, Any]] = UNSET
if not isinstance(model_prop, Unset):
json_model_prop = model_prop.to_dict() if model_prop else None

params: Dict[str, Any] = {}
if string_prop is not UNSET:
params: Dict[str, Any] = {
"required_not_nullable_datetime_prop": json_required_not_nullable_datetime_prop,
}
if not isinstance(string_prop, Unset) and string_prop is not None:
params["string_prop"] = string_prop
if datetime_prop is not UNSET:
params["datetime_prop"] = json_datetime_prop
if date_prop is not UNSET:
if (
not isinstance(json_not_required_not_nullable_datetime_prop, Unset)
and json_not_required_not_nullable_datetime_prop is not None
):
params["not_required_not_nullable_datetime_prop"] = json_not_required_not_nullable_datetime_prop
if (
not isinstance(json_not_required_nullable_datetime_prop, Unset)
and json_not_required_nullable_datetime_prop is not None
):
params["not_required_nullable_datetime_prop"] = json_not_required_nullable_datetime_prop
if json_required_nullable_datetime_prop is not None:
params["required_nullable_datetime_prop"] = json_required_nullable_datetime_prop
if not isinstance(json_date_prop, Unset) and json_date_prop is not None:
params["date_prop"] = json_date_prop
if float_prop is not UNSET:
if not isinstance(float_prop, Unset) and float_prop is not None:
params["float_prop"] = float_prop
if int_prop is not UNSET:
if not isinstance(int_prop, Unset) and int_prop is not None:
params["int_prop"] = int_prop
if boolean_prop is not UNSET:
if not isinstance(boolean_prop, Unset) and boolean_prop is not None:
params["boolean_prop"] = boolean_prop
if list_prop is not UNSET:
if not isinstance(json_list_prop, Unset) and json_list_prop is not None:
params["list_prop"] = json_list_prop
if union_prop is not UNSET:
if not isinstance(json_union_prop, Unset) and json_union_prop is not None:
params["union_prop"] = json_union_prop
if union_prop_with_ref is not UNSET:
if not isinstance(json_union_prop_with_ref, Unset) and json_union_prop_with_ref is not None:
params["union_prop_with_ref"] = json_union_prop_with_ref
if enum_prop is not UNSET:
if not isinstance(json_enum_prop, Unset) and json_enum_prop is not None:
params["enum_prop"] = json_enum_prop
if not isinstance(json_model_prop, Unset) and json_model_prop is not None:
params.update(json_model_prop)

response = client.request(
"post",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,18 @@ def _build_response(*, response: httpx.Response) -> Response[Union[None, HTTPVal
def httpx_request(
*,
client: Client,
query_param: Union[Unset, List[str]] = UNSET,
query_param: Union[Unset, None, List[str]] = UNSET,
) -> Response[Union[None, HTTPValidationError]]:

json_query_param: Union[Unset, List[Any]] = UNSET
json_query_param: Union[Unset, None, List[Any]] = UNSET
if not isinstance(query_param, Unset):
json_query_param = query_param
if query_param is None:
json_query_param = None
else:
json_query_param = query_param

params: Dict[str, Any] = {}
if query_param is not UNSET:
if not isinstance(json_query_param, Unset) and json_query_param is not None:
params["query_param"] = json_query_param

response = client.request(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
""" Contains all the data models used in inputs/outputs """

from .a_model import AModel
from .a_model_model import AModelModel
from .a_model_not_required_model import AModelNotRequiredModel
from .a_model_not_required_nullable_model import AModelNotRequiredNullableModel
from .a_model_nullable_model import AModelNullableModel
from .an_enum import AnEnum
from .an_int_enum import AnIntEnum
from .body_upload_file_tests_upload_post import BodyUploadFileTestsUploadPost
Expand Down
Loading