Skip to content

feat: Change optional Open API query parameters to allow `None #40

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

Merged
merged 5 commits into from
Jan 28, 2021
Merged
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,7 +7,7 @@
Client = httpx.Client

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

from dateutil.parser import isoparse

Expand Down Expand Up @@ -41,65 +41,101 @@ 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,
model_prop: Union[ModelWithUnionProperty, Unset] = 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, Dict[str, Any]] = UNSET
json_model_prop: Union[Unset, None, Dict[str, Any]] = UNSET
if not isinstance(model_prop, Unset):
json_model_prop = model_prop.to_dict()
json_model_prop = model_prop.to_dict() if model_prop else None

params: Dict[str, Any] = {}
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 not isinstance(json_datetime_prop, Unset) and json_datetime_prop is not None:
params["datetime_prop"] = json_datetime_prop
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 not isinstance(float_prop, Unset) and float_prop is not None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,15 @@ 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 not isinstance(json_query_param, Unset) and json_query_param is not None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ class AModel:
nullable_model: Optional[AModelNullableModel]
nested_list_of_enums: Union[Unset, List[List[DifferentEnum]]] = UNSET
attr_1_leading_digit: Union[Unset, str] = UNSET
not_required_nullable: Union[Unset, Optional[str]] = UNSET
not_required_nullable: Union[Unset, None, str] = UNSET
not_required_not_nullable: Union[Unset, str] = UNSET
not_required_model: Union[AModelNotRequiredModel, Unset] = UNSET
not_required_nullable_model: Union[Optional[AModelNotRequiredNullableModel], Unset] = UNSET
not_required_model: Union[Unset, AModelNotRequiredModel] = UNSET
not_required_nullable_model: Union[Unset, None, AModelNotRequiredNullableModel] = UNSET

def to_dict(self) -> Dict[str, Any]:
an_enum_value = self.an_enum_value.value
Expand Down Expand Up @@ -68,7 +68,7 @@ def to_dict(self) -> Dict[str, Any]:
if not isinstance(self.not_required_model, Unset):
not_required_model = self.not_required_model.to_dict()

not_required_nullable_model: Union[None, Unset, Dict[str, Any]] = UNSET
not_required_nullable_model: Union[Unset, None, Dict[str, Any]] = UNSET
if not isinstance(self.not_required_nullable_model, Unset):
not_required_nullable_model = (
self.not_required_nullable_model.to_dict() if self.not_required_nullable_model else None
Expand Down Expand Up @@ -158,7 +158,7 @@ def _parse_a_camel_date_time(data: Any) -> Union[datetime.datetime, datetime.dat
if _nullable_model is not None:
nullable_model = AModelNullableModel.from_dict(cast(Dict[str, Any], _nullable_model))

not_required_model: Union[AModelNotRequiredModel, Unset] = UNSET
not_required_model: Union[Unset, AModelNotRequiredModel] = UNSET
_not_required_model = d.pop("not_required_model", UNSET)
if not isinstance(_not_required_model, Unset):
not_required_model = AModelNotRequiredModel.from_dict(cast(Dict[str, Any], _not_required_model))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,18 @@ class AModelModel:
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)

def to_dict(self) -> Dict[str, Any]:
a_property: Union[Unset, AnEnum, AnIntEnum]
a_property: Union[Unset, int]
if isinstance(self.a_property, Unset):
a_property = UNSET
elif isinstance(self.a_property, AnEnum):
a_property = UNSET
if not isinstance(self.a_property, Unset):
a_property = self.a_property
a_property = self.a_property.value

else:
a_property = UNSET
if not isinstance(self.a_property, Unset):
a_property = self.a_property
a_property = self.a_property.value

field_dict: Dict[str, Any] = {}
field_dict.update(self.additional_properties)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,18 @@ class AModelNotRequiredModel:
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)

def to_dict(self) -> Dict[str, Any]:
a_property: Union[Unset, AnEnum, AnIntEnum]
a_property: Union[Unset, int]
if isinstance(self.a_property, Unset):
a_property = UNSET
elif isinstance(self.a_property, AnEnum):
a_property = UNSET
if not isinstance(self.a_property, Unset):
a_property = self.a_property
a_property = self.a_property.value

else:
a_property = UNSET
if not isinstance(self.a_property, Unset):
a_property = self.a_property
a_property = self.a_property.value

field_dict: Dict[str, Any] = {}
field_dict.update(self.additional_properties)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,18 @@ class AModelNotRequiredNullableModel:
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)

def to_dict(self) -> Dict[str, Any]:
a_property: Union[Unset, AnEnum, AnIntEnum]
a_property: Union[Unset, int]
if isinstance(self.a_property, Unset):
a_property = UNSET
elif isinstance(self.a_property, AnEnum):
a_property = UNSET
if not isinstance(self.a_property, Unset):
a_property = self.a_property
a_property = self.a_property.value

else:
a_property = UNSET
if not isinstance(self.a_property, Unset):
a_property = self.a_property
a_property = self.a_property.value

field_dict: Dict[str, Any] = {}
field_dict.update(self.additional_properties)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,18 @@ class AModelNullableModel:
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)

def to_dict(self) -> Dict[str, Any]:
a_property: Union[Unset, AnEnum, AnIntEnum]
a_property: Union[Unset, int]
if isinstance(self.a_property, Unset):
a_property = UNSET
elif isinstance(self.a_property, AnEnum):
a_property = UNSET
if not isinstance(self.a_property, Unset):
a_property = self.a_property
a_property = self.a_property.value

else:
a_property = UNSET
if not isinstance(self.a_property, Unset):
a_property = self.a_property
a_property = self.a_property.value

field_dict: Dict[str, Any] = {}
field_dict.update(self.additional_properties)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
class ModelWithPrimitiveAdditionalProperties:
""" """

a_date_holder: Union[ModelWithPrimitiveAdditionalPropertiesADateHolder, Unset] = UNSET
a_date_holder: Union[Unset, ModelWithPrimitiveAdditionalPropertiesADateHolder] = UNSET
additional_properties: Dict[str, str] = attr.ib(init=False, factory=dict)

def to_dict(self) -> Dict[str, Any]:
Expand All @@ -31,7 +31,7 @@ def to_dict(self) -> Dict[str, Any]:
@staticmethod
def from_dict(src_dict: Dict[str, Any]) -> "ModelWithPrimitiveAdditionalProperties":
d = src_dict.copy()
a_date_holder: Union[ModelWithPrimitiveAdditionalPropertiesADateHolder, Unset] = UNSET
a_date_holder: Union[Unset, ModelWithPrimitiveAdditionalPropertiesADateHolder] = UNSET
_a_date_holder = d.pop("a_date_holder", UNSET)
if not isinstance(_a_date_holder, Unset):
a_date_holder = ModelWithPrimitiveAdditionalPropertiesADateHolder.from_dict(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,18 @@ class ModelWithUnionProperty:
a_property: Union[Unset, AnEnum, AnIntEnum] = UNSET

def to_dict(self) -> Dict[str, Any]:
a_property: Union[Unset, AnEnum, AnIntEnum]
a_property: Union[Unset, int]
if isinstance(self.a_property, Unset):
a_property = UNSET
elif isinstance(self.a_property, AnEnum):
a_property = UNSET
if not isinstance(self.a_property, Unset):
a_property = self.a_property
a_property = self.a_property.value

else:
a_property = UNSET
if not isinstance(self.a_property, Unset):
a_property = self.a_property
a_property = self.a_property.value

field_dict: Dict[str, Any] = {}
field_dict.update({})
Expand Down
5 changes: 4 additions & 1 deletion end_to_end_tests/golden-record-custom/custom_e2e/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ def __bool__(self) -> bool:

UNSET: Unset = Unset()

# Used as `FileProperty._json_type_string`
FileJsonType = Tuple[Optional[str], Union[BinaryIO, TextIO], Optional[str]]


@attr.s(auto_attribs=True)
class File:
Expand All @@ -20,7 +23,7 @@ class File:
file_name: Optional[str] = None
mime_type: Optional[str] = None

def to_tuple(self) -> Tuple[Optional[str], Union[BinaryIO, TextIO], Optional[str]]:
def to_tuple(self) -> FileJsonType:
""" Return a tuple representation that httpx will accept for multipart/form-data """
return self.file_name, self.payload, self.mime_type

Expand Down
Loading