Skip to content

Commit aa63b86

Browse files
committed
fix: Update for rebase on main
1 parent 7dece0f commit aa63b86

File tree

4 files changed

+39
-39
lines changed

4 files changed

+39
-39
lines changed

end_to_end_tests/golden-record/my_test_api_client/api/parameters/delete_common_parameters_overriding_param.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88

99
def _get_kwargs(
10+
param_path: str,
1011
*,
1112
client: Client,
12-
param_path: str,
1313
param_query: Union[Unset, None, str] = UNSET,
1414
) -> Dict[str, Any]:
1515
url = "{}/common_parameters_overriding/{param}".format(client.base_url, param=param_path)
@@ -41,14 +41,14 @@ def _build_response(*, response: httpx.Response) -> Response[Any]:
4141

4242

4343
def sync_detailed(
44+
param_path: str,
4445
*,
4546
client: Client,
46-
param_path: str,
4747
param_query: Union[Unset, None, str] = UNSET,
4848
) -> Response[Any]:
4949
kwargs = _get_kwargs(
50-
client=client,
5150
param_path=param_path,
51+
client=client,
5252
param_query=param_query,
5353
)
5454

@@ -60,14 +60,14 @@ def sync_detailed(
6060

6161

6262
async def asyncio_detailed(
63+
param_path: str,
6364
*,
6465
client: Client,
65-
param_path: str,
6666
param_query: Union[Unset, None, str] = UNSET,
6767
) -> Response[Any]:
6868
kwargs = _get_kwargs(
69-
client=client,
7069
param_path=param_path,
70+
client=client,
7171
param_query=param_query,
7272
)
7373

end_to_end_tests/golden-record/my_test_api_client/api/parameters/get_common_parameters_overriding_param.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88

99
def _get_kwargs(
10+
param_path: str,
1011
*,
1112
client: Client,
12-
param_path: str,
1313
param_query: str = "overriden_in_GET",
1414
) -> Dict[str, Any]:
1515
url = "{}/common_parameters_overriding/{param}".format(client.base_url, param=param_path)
@@ -41,14 +41,14 @@ def _build_response(*, response: httpx.Response) -> Response[Any]:
4141

4242

4343
def sync_detailed(
44+
param_path: str,
4445
*,
4546
client: Client,
46-
param_path: str,
4747
param_query: str = "overriden_in_GET",
4848
) -> Response[Any]:
4949
kwargs = _get_kwargs(
50-
client=client,
5150
param_path=param_path,
51+
client=client,
5252
param_query=param_query,
5353
)
5454

@@ -60,14 +60,14 @@ def sync_detailed(
6060

6161

6262
async def asyncio_detailed(
63+
param_path: str,
6364
*,
6465
client: Client,
65-
param_path: str,
6666
param_query: str = "overriden_in_GET",
6767
) -> Response[Any]:
6868
kwargs = _get_kwargs(
69-
client=client,
7069
param_path=param_path,
70+
client=client,
7171
param_query=param_query,
7272
)
7373

openapi_python_client/parser/openapi.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import itertools
21
import re
2+
from collections import OrderedDict
33
from copy import deepcopy
44
from dataclasses import dataclass, field
55
from typing import Any, Dict, Iterator, List, Optional, Set, Tuple, Union
@@ -55,6 +55,8 @@ def from_data(
5555
endpoint, schemas = Endpoint.add_parameters(
5656
endpoint=endpoint, data=path_data, schemas=schemas, config=config
5757
)
58+
if not isinstance(endpoint, ParseError):
59+
endpoint = Endpoint.sort_parameters(endpoint=endpoint)
5860
if isinstance(endpoint, ParseError):
5961
endpoint.header = (
6062
f"ERROR parsing {method.upper()} {path} within {tag}. Endpoint will not be generated."
@@ -64,7 +66,6 @@ def from_data(
6466
for error in endpoint.errors:
6567
error.header = f"WARNING parsing {method.upper()} {path} within {tag}."
6668
collection.parse_errors.append(error)
67-
endpoint = Endpoint.sort_parameters(endpoint=endpoint, path=path)
6869
collection.endpoints.append(endpoint)
6970

7071
return endpoints_by_tag, schemas
@@ -95,7 +96,7 @@ class Endpoint:
9596
summary: Optional[str] = ""
9697
relative_imports: Set[str] = field(default_factory=set)
9798
query_parameters: Dict[str, Property] = field(default_factory=dict)
98-
path_parameters: Dict[str, Property] = field(default_factory=dict)
99+
path_parameters: OrderedDict[str, Property] = field(default_factory=OrderedDict)
99100
header_parameters: Dict[str, Property] = field(default_factory=dict)
100101
cookie_parameters: Dict[str, Property] = field(default_factory=dict)
101102
responses: List[Response] = field(default_factory=list)
@@ -331,10 +332,13 @@ def sort_parameters(*, endpoint: "Endpoint") -> Union["Endpoint", ParseError]:
331332
endpoint = deepcopy(endpoint)
332333
parameters_from_path = re.findall(_PATH_PARAM_REGEX, endpoint.path)
333334
try:
334-
endpoint.path_parameters.sort(key=lambda p: parameters_from_path.index(p.name))
335+
sorted_params = sorted(
336+
endpoint.path_parameters.values(), key=lambda param: parameters_from_path.index(param.name)
337+
)
338+
endpoint.path_parameters = OrderedDict((param.name, param) for param in sorted_params)
335339
except ValueError:
336340
pass # We're going to catch the difference down below
337-
path_parameter_names = [p.name for p in endpoint.path_parameters]
341+
path_parameter_names = [name for name in endpoint.path_parameters]
338342
if parameters_from_path != path_parameter_names:
339343
return ParseError(
340344
detail=f"Incorrect path templating for {endpoint.path} (Path parameters do not match with path)",

tests/test_parser/test_openapi.py

+20-24
Original file line numberDiff line numberDiff line change
@@ -530,22 +530,20 @@ def test_add_parameters_parse_error(self, mocker):
530530
property_schemas,
531531
)
532532

533-
def test_add_parameters_parse_error_on_non_required_path_param(self, mocker):
534-
from openapi_python_client.parser.openapi import Endpoint, Schemas
535-
533+
def test__add_parameters_parse_error_on_non_required_path_param(self):
536534
endpoint = self.make_endpoint()
537-
parsed_schemas = mocker.MagicMock()
538-
mocker.patch(f"{MODULE_NAME}.property_from_data", return_value=(mocker.MagicMock(), parsed_schemas))
539535
param = oai.Parameter.construct(
540-
name="test", required=False, param_schema=mocker.MagicMock(), param_in=oai.ParameterLocation.PATH
536+
name="test",
537+
required=False,
538+
param_schema=oai.Schema.construct(type="string"),
539+
param_in=oai.ParameterLocation.PATH,
541540
)
542541
schemas = Schemas()
543-
config = MagicMock()
544542

545543
result = Endpoint.add_parameters(
546-
endpoint=endpoint, data=oai.Operation.construct(parameters=[param]), schemas=schemas, config=config
544+
endpoint=endpoint, data=oai.Operation.construct(parameters=[param]), schemas=schemas, config=Config()
547545
)
548-
assert result == (ParseError(data=param, detail="Path parameter must be required"), parsed_schemas)
546+
assert result == (ParseError(data=param, detail="Path parameter must be required"), schemas)
549547

550548
def test_validation_error_when_location_not_supported(self, mocker):
551549
parsed_schemas = mocker.MagicMock()
@@ -656,7 +654,7 @@ def test__add_parameters_skips_references(self):
656654
]
657655
)
658656

659-
(endpoint, _) = endpoint._add_parameters(endpoint=endpoint, data=data, schemas=Schemas(), config=Config())
657+
(endpoint, _) = endpoint.add_parameters(endpoint=endpoint, data=data, schemas=Schemas(), config=Config())
660658

661659
assert isinstance(endpoint, Endpoint)
662660
assert (
@@ -679,7 +677,7 @@ def test__add_parameters_skips_params_without_schemas(self):
679677
]
680678
)
681679

682-
(endpoint, _) = endpoint._add_parameters(endpoint=endpoint, data=data, schemas=Schemas(), config=Config())
680+
(endpoint, _) = endpoint.add_parameters(endpoint=endpoint, data=data, schemas=Schemas(), config=Config())
683681

684682
assert isinstance(endpoint, Endpoint)
685683
assert len(endpoint.path_parameters) == 0
@@ -692,11 +690,13 @@ def test__add_parameters_same_identifier_conflict(self):
692690
name="param",
693691
param_in="path",
694692
param_schema=oai.Schema.construct(nullable=False, type="string"),
693+
required=True,
695694
),
696695
oai.Parameter.construct(
697696
name="param_path",
698697
param_in="path",
699698
param_schema=oai.Schema.construct(nullable=False, type="string"),
699+
required=True,
700700
),
701701
oai.Parameter.construct(
702702
name="param",
@@ -706,7 +706,7 @@ def test__add_parameters_same_identifier_conflict(self):
706706
]
707707
)
708708

709-
(err, _) = endpoint._add_parameters(endpoint=endpoint, data=data, schemas=Schemas(), config=Config())
709+
(err, _) = endpoint.add_parameters(endpoint=endpoint, data=data, schemas=Schemas(), config=Config())
710710

711711
assert isinstance(err, ParseError)
712712
assert "param_path" in err.detail
@@ -742,7 +742,7 @@ def test__add_parameters_query_optionality(self):
742742
]
743743
)
744744

745-
(endpoint, _) = endpoint._add_parameters(endpoint=endpoint, data=data, schemas=Schemas(), config=Config())
745+
(endpoint, _) = endpoint.add_parameters(endpoint=endpoint, data=data, schemas=Schemas(), config=Config())
746746

747747
assert len(endpoint.query_parameters) == 4, "Not all query params were added"
748748
for param in endpoint.query_parameters.values():
@@ -798,33 +798,29 @@ def test_add_parameters_duplicate_properties_different_location(self):
798798
assert result.path_parameters["test"].name == "test"
799799
assert result.query_parameters["test"].name == "test"
800800

801-
def test_sort_parameters(self, mocker):
801+
def test_sort_parameters(self, string_property_factory):
802802
from openapi_python_client.parser.openapi import Endpoint
803803

804804
endpoint = self.make_endpoint()
805805
endpoint.path = "/multiple-path-parameters/{param4}/{param2}/{param1}/{param3}"
806806

807807
for i in range(1, 5):
808-
param = oai.Parameter.construct(
809-
name=f"param{i}", required=True, param_schema=mocker.MagicMock(), param_in=oai.ParameterLocation.PATH
810-
)
811-
endpoint.path_parameters.append(param)
808+
prop = string_property_factory(name=f"param{i}")
809+
endpoint.path_parameters[prop.name] = prop
812810

813811
result = Endpoint.sort_parameters(endpoint=endpoint)
814-
result_names = [p.name for p in result.path_parameters]
812+
result_names = [name for name in result.path_parameters]
815813
expected_names = [f"param{i}" for i in (4, 2, 1, 3)]
816814

817815
assert result_names == expected_names
818816

819-
def test_sort_parameters_invalid_path_templating(self, mocker):
817+
def test_sort_parameters_invalid_path_templating(self, string_property_factory):
820818
from openapi_python_client.parser.openapi import Endpoint
821819

822820
endpoint = self.make_endpoint()
823821
endpoint.path = "/multiple-path-parameters/{param1}/{param2}"
824-
param = oai.Parameter.construct(
825-
name="param1", required=True, param_schema=mocker.MagicMock(), param_in=oai.ParameterLocation.PATH
826-
)
827-
endpoint.path_parameters.append(param)
822+
param = string_property_factory(name="param1")
823+
endpoint.path_parameters[param.name] = param
828824

829825
result = Endpoint.sort_parameters(endpoint=endpoint)
830826

0 commit comments

Comments
 (0)