Skip to content

Commit 555ff10

Browse files
fix: Respect required field in parameters included with $ref (#737)
1 parent 302cd02 commit 555ff10

File tree

3 files changed

+31
-36
lines changed

3 files changed

+31
-36
lines changed

end_to_end_tests/golden-record/my_test_api_client/api/parameter_references/get_parameter_references_path_param.py

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,32 @@
11
from http import HTTPStatus
2-
from typing import Any, Dict, Optional
2+
from typing import Any, Dict, Optional, Union
33

44
import httpx
55

66
from ... import errors
77
from ...client import Client
8-
from ...types import UNSET, Response
8+
from ...types import UNSET, Response, Unset
99

1010

1111
def _get_kwargs(
1212
path_param: str,
1313
*,
1414
client: Client,
15-
string_param: str,
16-
integer_param: int = 0,
17-
header_param: str,
18-
cookie_param: str,
15+
string_param: Union[Unset, None, str] = UNSET,
16+
integer_param: Union[Unset, None, int] = 0,
17+
header_param: Union[Unset, str] = UNSET,
18+
cookie_param: Union[Unset, str] = UNSET,
1919
) -> Dict[str, Any]:
2020
url = "{}/parameter-references/{path_param}".format(client.base_url, path_param=path_param)
2121

2222
headers: Dict[str, str] = client.get_headers()
2323
cookies: Dict[str, Any] = client.get_cookies()
2424

25-
headers["header param"] = header_param
25+
if not isinstance(header_param, Unset):
26+
headers["header param"] = header_param
2627

27-
cookies["cookie param"] = cookie_param
28+
if cookie_param is not UNSET:
29+
cookies["cookie param"] = cookie_param
2830

2931
params: Dict[str, Any] = {}
3032
params["string param"] = string_param
@@ -65,19 +67,19 @@ def sync_detailed(
6567
path_param: str,
6668
*,
6769
client: Client,
68-
string_param: str,
69-
integer_param: int = 0,
70-
header_param: str,
71-
cookie_param: str,
70+
string_param: Union[Unset, None, str] = UNSET,
71+
integer_param: Union[Unset, None, int] = 0,
72+
header_param: Union[Unset, str] = UNSET,
73+
cookie_param: Union[Unset, str] = UNSET,
7274
) -> Response[Any]:
7375
"""Test different types of parameter references
7476
7577
Args:
7678
path_param (str):
77-
string_param (str):
78-
integer_param (int):
79-
header_param (str):
80-
cookie_param (str):
79+
string_param (Union[Unset, None, str]):
80+
integer_param (Union[Unset, None, int]):
81+
header_param (Union[Unset, str]):
82+
cookie_param (Union[Unset, str]):
8183
8284
Raises:
8385
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
@@ -108,19 +110,19 @@ async def asyncio_detailed(
108110
path_param: str,
109111
*,
110112
client: Client,
111-
string_param: str,
112-
integer_param: int = 0,
113-
header_param: str,
114-
cookie_param: str,
113+
string_param: Union[Unset, None, str] = UNSET,
114+
integer_param: Union[Unset, None, int] = 0,
115+
header_param: Union[Unset, str] = UNSET,
116+
cookie_param: Union[Unset, str] = UNSET,
115117
) -> Response[Any]:
116118
"""Test different types of parameter references
117119
118120
Args:
119121
path_param (str):
120-
string_param (str):
121-
integer_param (int):
122-
header_param (str):
123-
cookie_param (str):
122+
string_param (Union[Unset, None, str]):
123+
integer_param (Union[Unset, None, int]):
124+
header_param (Union[Unset, str]):
125+
cookie_param (Union[Unset, str]):
124126
125127
Raises:
126128
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.

openapi_python_client/parser/properties/schemas.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ class Parameters:
147147
def parameter_from_data(
148148
*,
149149
name: str,
150-
required: bool,
151150
data: Union[oai.Reference, oai.Parameter],
152151
parameters: Parameters,
153152
) -> Tuple[Union[Parameter, ParameterError], Parameters]:
@@ -161,7 +160,7 @@ def parameter_from_data(
161160

162161
new_param = Parameter(
163162
name=name,
164-
required=required,
163+
required=data.required,
165164
explode=data.explode,
166165
style=data.style,
167166
param_schema=data.param_schema,
@@ -188,7 +187,7 @@ def update_parameters_with_data(
188187
See Also:
189188
- https://swagger.io/docs/specification/using-ref/
190189
"""
191-
param, parameters = parameter_from_data(data=data, name=data.name, parameters=parameters, required=True)
190+
param, parameters = parameter_from_data(data=data, name=data.name, parameters=parameters)
192191

193192
if isinstance(param, ParameterError):
194193
param.detail = f"{param.header}: {param.detail}"

tests/test_parser/test_properties/test_schemas.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,7 @@ def test_cannot_parse_parameters_by_reference(self):
4848

4949
ref = Reference.construct(ref="#/components/parameters/a_param")
5050
parameters = Parameters()
51-
param_or_error, new_parameters = parameter_from_data(
52-
name="a_param", required=True, data=ref, parameters=parameters
53-
)
51+
param_or_error, new_parameters = parameter_from_data(name="a_param", data=ref, parameters=parameters)
5452
assert param_or_error == ParameterError("Unable to resolve another reference")
5553
assert new_parameters == parameters
5654

@@ -61,9 +59,7 @@ def test_parameters_without_schema_are_ignored(self):
6159

6260
param = Parameter(name="a_schemaless_param", param_in=ParameterLocation.QUERY)
6361
parameters = Parameters()
64-
param_or_error, new_parameters = parameter_from_data(
65-
name=param.name, required=param.required, data=param, parameters=parameters
66-
)
62+
param_or_error, new_parameters = parameter_from_data(name=param.name, data=param, parameters=parameters)
6763
assert param_or_error == ParameterError("Parameter has no schema")
6864
assert new_parameters == parameters
6965

@@ -74,9 +70,7 @@ def test_registers_new_parameters(self):
7470

7571
param = Parameter.construct(name="a_param", param_in=ParameterLocation.QUERY, param_schema=Schema.construct())
7672
parameters = Parameters()
77-
param_or_error, new_parameters = parameter_from_data(
78-
name=param.name, required=param.required, data=param, parameters=parameters
79-
)
73+
param_or_error, new_parameters = parameter_from_data(name=param.name, data=param, parameters=parameters)
8074
assert param_or_error == param
8175
assert new_parameters.classes_by_name[param.name] == param
8276

0 commit comments

Comments
 (0)