Skip to content

Commit 10ca9c7

Browse files
committed
Handle optional correctly
1 parent 4e14809 commit 10ca9c7

File tree

4 files changed

+54
-2
lines changed

4 files changed

+54
-2
lines changed

end_to_end_tests/baseline_openapi_3.0.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,19 @@
162162
"in": "query",
163163
"explode": false
164164
},
165+
{
166+
"required": false,
167+
"schema": {
168+
"title": "Optional non exploded array",
169+
"type": "array",
170+
"items": {
171+
"type": "string"
172+
}
173+
},
174+
"name": "optional_non_exploded_array",
175+
"in": "query",
176+
"explode": false
177+
},
165178
{
166179
"required": true,
167180
"schema": {

end_to_end_tests/baseline_openapi_3.1.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,20 @@ info:
158158
"in": "query",
159159
"explode": false
160160
},
161+
162+
{
163+
"required": false,
164+
"schema": {
165+
"title": "Optional non exploded array",
166+
"type": "array",
167+
"items": {
168+
"type": "string"
169+
}
170+
},
171+
"name": "optional_non_exploded_array",
172+
"in": "query",
173+
"explode": false
174+
},
161175
{
162176
"required": true,
163177
"schema": {

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

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from ...models.an_enum import AnEnum
1111
from ...models.an_enum_with_null import AnEnumWithNull
1212
from ...models.http_validation_error import HTTPValidationError
13-
from ...types import UNSET, Response
13+
from ...types import UNSET, Response, Unset
1414

1515

1616
def _get_kwargs(
@@ -19,6 +19,7 @@ def _get_kwargs(
1919
an_enum_value_with_null: list[Union[AnEnumWithNull, None]],
2020
an_enum_value_with_only_null: list[None],
2121
non_exploded_array: list[str],
22+
optional_non_exploded_array: Union[Unset, list[str]] = UNSET,
2223
some_date: Union[datetime.date, datetime.datetime],
2324
) -> dict[str, Any]:
2425
params: dict[str, Any] = {}
@@ -49,6 +50,13 @@ def _get_kwargs(
4950

5051
params["non_exploded_array"] = ",".join(str(item) for item in json_non_exploded_array)
5152

53+
json_optional_non_exploded_array: Union[Unset, list[str]] = UNSET
54+
if not isinstance(optional_non_exploded_array, Unset):
55+
json_optional_non_exploded_array = optional_non_exploded_array
56+
57+
if not isinstance(json_optional_non_exploded_array, Unset):
58+
params["optional_non_exploded_array"] = ",".join(str(item) for item in json_optional_non_exploded_array)
59+
5260
json_some_date: str
5361
if isinstance(some_date, datetime.date):
5462
json_some_date = some_date.isoformat()
@@ -112,6 +120,7 @@ def sync_detailed(
112120
an_enum_value_with_null: list[Union[AnEnumWithNull, None]],
113121
an_enum_value_with_only_null: list[None],
114122
non_exploded_array: list[str],
123+
optional_non_exploded_array: Union[Unset, list[str]] = UNSET,
115124
some_date: Union[datetime.date, datetime.datetime],
116125
) -> Response[Union[HTTPValidationError, list["AModel"]]]:
117126
"""Get List
@@ -123,6 +132,7 @@ def sync_detailed(
123132
an_enum_value_with_null (list[Union[AnEnumWithNull, None]]):
124133
an_enum_value_with_only_null (list[None]):
125134
non_exploded_array (list[str]):
135+
optional_non_exploded_array (Union[Unset, list[str]]):
126136
some_date (Union[datetime.date, datetime.datetime]):
127137
128138
Raises:
@@ -138,6 +148,7 @@ def sync_detailed(
138148
an_enum_value_with_null=an_enum_value_with_null,
139149
an_enum_value_with_only_null=an_enum_value_with_only_null,
140150
non_exploded_array=non_exploded_array,
151+
optional_non_exploded_array=optional_non_exploded_array,
141152
some_date=some_date,
142153
)
143154

@@ -155,6 +166,7 @@ def sync(
155166
an_enum_value_with_null: list[Union[AnEnumWithNull, None]],
156167
an_enum_value_with_only_null: list[None],
157168
non_exploded_array: list[str],
169+
optional_non_exploded_array: Union[Unset, list[str]] = UNSET,
158170
some_date: Union[datetime.date, datetime.datetime],
159171
) -> Optional[Union[HTTPValidationError, list["AModel"]]]:
160172
"""Get List
@@ -166,6 +178,7 @@ def sync(
166178
an_enum_value_with_null (list[Union[AnEnumWithNull, None]]):
167179
an_enum_value_with_only_null (list[None]):
168180
non_exploded_array (list[str]):
181+
optional_non_exploded_array (Union[Unset, list[str]]):
169182
some_date (Union[datetime.date, datetime.datetime]):
170183
171184
Raises:
@@ -182,6 +195,7 @@ def sync(
182195
an_enum_value_with_null=an_enum_value_with_null,
183196
an_enum_value_with_only_null=an_enum_value_with_only_null,
184197
non_exploded_array=non_exploded_array,
198+
optional_non_exploded_array=optional_non_exploded_array,
185199
some_date=some_date,
186200
).parsed
187201

@@ -193,6 +207,7 @@ async def asyncio_detailed(
193207
an_enum_value_with_null: list[Union[AnEnumWithNull, None]],
194208
an_enum_value_with_only_null: list[None],
195209
non_exploded_array: list[str],
210+
optional_non_exploded_array: Union[Unset, list[str]] = UNSET,
196211
some_date: Union[datetime.date, datetime.datetime],
197212
) -> Response[Union[HTTPValidationError, list["AModel"]]]:
198213
"""Get List
@@ -204,6 +219,7 @@ async def asyncio_detailed(
204219
an_enum_value_with_null (list[Union[AnEnumWithNull, None]]):
205220
an_enum_value_with_only_null (list[None]):
206221
non_exploded_array (list[str]):
222+
optional_non_exploded_array (Union[Unset, list[str]]):
207223
some_date (Union[datetime.date, datetime.datetime]):
208224
209225
Raises:
@@ -219,6 +235,7 @@ async def asyncio_detailed(
219235
an_enum_value_with_null=an_enum_value_with_null,
220236
an_enum_value_with_only_null=an_enum_value_with_only_null,
221237
non_exploded_array=non_exploded_array,
238+
optional_non_exploded_array=optional_non_exploded_array,
222239
some_date=some_date,
223240
)
224241

@@ -234,6 +251,7 @@ async def asyncio(
234251
an_enum_value_with_null: list[Union[AnEnumWithNull, None]],
235252
an_enum_value_with_only_null: list[None],
236253
non_exploded_array: list[str],
254+
optional_non_exploded_array: Union[Unset, list[str]] = UNSET,
237255
some_date: Union[datetime.date, datetime.datetime],
238256
) -> Optional[Union[HTTPValidationError, list["AModel"]]]:
239257
"""Get List
@@ -245,6 +263,7 @@ async def asyncio(
245263
an_enum_value_with_null (list[Union[AnEnumWithNull, None]]):
246264
an_enum_value_with_only_null (list[None]):
247265
non_exploded_array (list[str]):
266+
optional_non_exploded_array (Union[Unset, list[str]]):
248267
some_date (Union[datetime.date, datetime.datetime]):
249268
250269
Raises:
@@ -262,6 +281,7 @@ async def asyncio(
262281
an_enum_value_with_null=an_enum_value_with_null,
263282
an_enum_value_with_only_null=an_enum_value_with_only_null,
264283
non_exploded_array=non_exploded_array,
284+
optional_non_exploded_array=optional_non_exploded_array,
265285
some_date=some_date,
266286
)
267287
).parsed

openapi_python_client/templates/endpoint_macros.py.jinja

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,14 @@ params: dict[str, Any] = {}
4646
{% set destination = "json_" + property.python_name %}
4747
{{ prop_template.transform(property, property.python_name, destination) }}
4848
{% endif %}
49-
{%- if not property.json_is_dict %}
49+
{%- if not property.json_is_dict %}
5050
{% if property.explode == False %}
51+
{% if property.required %}
5152
params["{{ property.name }}"] = ",".join(str(item) for item in {{ destination }})
53+
{% else %}
54+
if not isinstance({{ destination }}, Unset):
55+
params["{{ property.name }}"] = ",".join(str(item) for item in {{ destination }})
56+
{% endif %}
5257
{% else %}
5358
params["{{ property.name }}"] = {{ destination }}
5459
{% endif %}

0 commit comments

Comments
 (0)