Skip to content

Commit 7e3676d

Browse files
authored
fix: Naming conflicts when properties are named "field" or "define" (#781, #793). Thanks @david-dotorigin
* fix: Naming conflicts when properties are named "field" or "define" Closes #781 * Add missing generated files --------- Co-authored-by: Dylan Anthony <[email protected]>
1 parent 4f9a3c1 commit 7e3676d

File tree

64 files changed

+574
-167
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+574
-167
lines changed

end_to_end_tests/custom-templates-golden-record/my_test_api_client/api/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from .default import DefaultEndpoints
66
from .location import LocationEndpoints
7+
from .naming import NamingEndpoints
78
from .parameter_references import ParameterReferencesEndpoints
89
from .parameters import ParametersEndpoints
910
from .responses import ResponsesEndpoints
@@ -41,6 +42,10 @@ def location(cls) -> Type[LocationEndpoints]:
4142
def true_(cls) -> Type[True_Endpoints]:
4243
return True_Endpoints
4344

45+
@classmethod
46+
def naming(cls) -> Type[NamingEndpoints]:
47+
return NamingEndpoints
48+
4449
@classmethod
4550
def parameter_references(cls) -> Type[ParameterReferencesEndpoints]:
4651
return ParameterReferencesEndpoints
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
""" Contains methods for accessing the API Endpoints """
2+
3+
import types
4+
5+
from . import post_naming_property_conflict_with_import
6+
7+
8+
class NamingEndpoints:
9+
@classmethod
10+
def post_naming_property_conflict_with_import(cls) -> types.ModuleType:
11+
return post_naming_property_conflict_with_import

end_to_end_tests/golden-record/my_test_api_client/api/naming/__init__.py

Whitespace-only changes.
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
from http import HTTPStatus
2+
from typing import Any, Dict, Optional, Union
3+
4+
import httpx
5+
6+
from ... import errors
7+
from ...client import AuthenticatedClient, Client
8+
from ...models.post_naming_property_conflict_with_import_json_body import PostNamingPropertyConflictWithImportJsonBody
9+
from ...models.post_naming_property_conflict_with_import_response_200 import (
10+
PostNamingPropertyConflictWithImportResponse200,
11+
)
12+
from ...types import Response
13+
14+
15+
def _get_kwargs(
16+
*,
17+
json_body: PostNamingPropertyConflictWithImportJsonBody,
18+
) -> Dict[str, Any]:
19+
pass
20+
21+
json_json_body = json_body.to_dict()
22+
23+
return {
24+
"method": "post",
25+
"url": "/naming/property-conflict-with-import",
26+
"json": json_json_body,
27+
}
28+
29+
30+
def _parse_response(
31+
*, client: Union[AuthenticatedClient, Client], response: httpx.Response
32+
) -> Optional[PostNamingPropertyConflictWithImportResponse200]:
33+
if response.status_code == HTTPStatus.OK:
34+
response_200 = PostNamingPropertyConflictWithImportResponse200.from_dict(response.json())
35+
36+
return response_200
37+
if client.raise_on_unexpected_status:
38+
raise errors.UnexpectedStatus(response.status_code, response.content)
39+
else:
40+
return None
41+
42+
43+
def _build_response(
44+
*, client: Union[AuthenticatedClient, Client], response: httpx.Response
45+
) -> Response[PostNamingPropertyConflictWithImportResponse200]:
46+
return Response(
47+
status_code=HTTPStatus(response.status_code),
48+
content=response.content,
49+
headers=response.headers,
50+
parsed=_parse_response(client=client, response=response),
51+
)
52+
53+
54+
def sync_detailed(
55+
*,
56+
client: Union[AuthenticatedClient, Client],
57+
json_body: PostNamingPropertyConflictWithImportJsonBody,
58+
) -> Response[PostNamingPropertyConflictWithImportResponse200]:
59+
"""
60+
Args:
61+
json_body (PostNamingPropertyConflictWithImportJsonBody):
62+
63+
Raises:
64+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
65+
httpx.TimeoutException: If the request takes longer than Client.timeout.
66+
67+
Returns:
68+
Response[PostNamingPropertyConflictWithImportResponse200]
69+
"""
70+
71+
kwargs = _get_kwargs(
72+
json_body=json_body,
73+
)
74+
75+
response = client.get_httpx_client().request(
76+
**kwargs,
77+
)
78+
79+
return _build_response(client=client, response=response)
80+
81+
82+
def sync(
83+
*,
84+
client: Union[AuthenticatedClient, Client],
85+
json_body: PostNamingPropertyConflictWithImportJsonBody,
86+
) -> Optional[PostNamingPropertyConflictWithImportResponse200]:
87+
"""
88+
Args:
89+
json_body (PostNamingPropertyConflictWithImportJsonBody):
90+
91+
Raises:
92+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
93+
httpx.TimeoutException: If the request takes longer than Client.timeout.
94+
95+
Returns:
96+
PostNamingPropertyConflictWithImportResponse200
97+
"""
98+
99+
return sync_detailed(
100+
client=client,
101+
json_body=json_body,
102+
).parsed
103+
104+
105+
async def asyncio_detailed(
106+
*,
107+
client: Union[AuthenticatedClient, Client],
108+
json_body: PostNamingPropertyConflictWithImportJsonBody,
109+
) -> Response[PostNamingPropertyConflictWithImportResponse200]:
110+
"""
111+
Args:
112+
json_body (PostNamingPropertyConflictWithImportJsonBody):
113+
114+
Raises:
115+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
116+
httpx.TimeoutException: If the request takes longer than Client.timeout.
117+
118+
Returns:
119+
Response[PostNamingPropertyConflictWithImportResponse200]
120+
"""
121+
122+
kwargs = _get_kwargs(
123+
json_body=json_body,
124+
)
125+
126+
response = await client.get_async_httpx_client().request(**kwargs)
127+
128+
return _build_response(client=client, response=response)
129+
130+
131+
async def asyncio(
132+
*,
133+
client: Union[AuthenticatedClient, Client],
134+
json_body: PostNamingPropertyConflictWithImportJsonBody,
135+
) -> Optional[PostNamingPropertyConflictWithImportResponse200]:
136+
"""
137+
Args:
138+
json_body (PostNamingPropertyConflictWithImportJsonBody):
139+
140+
Raises:
141+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
142+
httpx.TimeoutException: If the request takes longer than Client.timeout.
143+
144+
Returns:
145+
PostNamingPropertyConflictWithImportResponse200
146+
"""
147+
148+
return (
149+
await asyncio_detailed(
150+
client=client,
151+
json_body=json_body,
152+
)
153+
).parsed

end_to_end_tests/golden-record/my_test_api_client/models/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@
6464
from .model_with_union_property_inlined_fruit_type_1 import ModelWithUnionPropertyInlinedFruitType1
6565
from .none import None_
6666
from .post_form_data_inline_data import PostFormDataInlineData
67+
from .post_naming_property_conflict_with_import_json_body import PostNamingPropertyConflictWithImportJsonBody
68+
from .post_naming_property_conflict_with_import_response_200 import PostNamingPropertyConflictWithImportResponse200
6769
from .post_responses_unions_simple_before_complex_response_200 import PostResponsesUnionsSimpleBeforeComplexResponse200
6870
from .post_responses_unions_simple_before_complex_response_200a_type_1 import (
6971
PostResponsesUnionsSimpleBeforeComplexResponse200AType1,
@@ -129,6 +131,8 @@
129131
"ModelWithUnionPropertyInlinedFruitType1",
130132
"None_",
131133
"PostFormDataInlineData",
134+
"PostNamingPropertyConflictWithImportJsonBody",
135+
"PostNamingPropertyConflictWithImportResponse200",
132136
"PostResponsesUnionsSimpleBeforeComplexResponse200",
133137
"PostResponsesUnionsSimpleBeforeComplexResponse200AType1",
134138
"TestInlineObjectsJsonBody",

end_to_end_tests/golden-record/my_test_api_client/models/a_form_data.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
from typing import Any, Dict, List, Type, TypeVar, Union
22

3-
from attrs import define, field
3+
from attrs import define as _attrs_define
4+
from attrs import field as _attrs_field
45

56
from ..types import UNSET, Unset
67

78
T = TypeVar("T", bound="AFormData")
89

910

10-
@define
11+
@_attrs_define
1112
class AFormData:
1213
"""
1314
Attributes:
@@ -17,7 +18,7 @@ class AFormData:
1718

1819
an_required_field: str
1920
an_optional_field: Union[Unset, str] = UNSET
20-
additional_properties: Dict[str, Any] = field(init=False, factory=dict)
21+
additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)
2122

2223
def to_dict(self) -> Dict[str, Any]:
2324
an_required_field = self.an_required_field

end_to_end_tests/golden-record/my_test_api_client/models/a_model.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import datetime
22
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Type, TypeVar, Union, cast
33

4-
from attrs import define
4+
from attrs import define as _attrs_define
55
from dateutil.parser import isoparse
66

77
from ..models.an_all_of_enum import AnAllOfEnum
@@ -17,7 +17,7 @@
1717
T = TypeVar("T", bound="AModel")
1818

1919

20-
@define
20+
@_attrs_define
2121
class AModel:
2222
"""A Model for testing all the ways custom objects can be used
2323

end_to_end_tests/golden-record/my_test_api_client/models/a_model_with_properties_reference_that_are_not_object.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
from io import BytesIO
33
from typing import Any, Dict, List, Type, TypeVar, cast
44

5-
from attrs import define, field
5+
from attrs import define as _attrs_define
6+
from attrs import field as _attrs_field
67
from dateutil.parser import isoparse
78

89
from ..models.an_enum import AnEnum
@@ -11,7 +12,7 @@
1112
T = TypeVar("T", bound="AModelWithPropertiesReferenceThatAreNotObject")
1213

1314

14-
@define
15+
@_attrs_define
1516
class AModelWithPropertiesReferenceThatAreNotObject:
1617
"""
1718
Attributes:
@@ -77,7 +78,7 @@ class AModelWithPropertiesReferenceThatAreNotObject:
7778
double_property_ref: float
7879
file_property_ref: File
7980
bytestream_property_ref: str
80-
additional_properties: Dict[str, Any] = field(init=False, factory=dict)
81+
additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)
8182

8283
def to_dict(self) -> Dict[str, Any]:
8384
enum_properties_ref = []

end_to_end_tests/golden-record/my_test_api_client/models/all_of_has_properties_but_no_type.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
from typing import Any, Dict, List, Type, TypeVar, Union
22

3-
from attrs import define, field
3+
from attrs import define as _attrs_define
4+
from attrs import field as _attrs_field
45

56
from ..models.all_of_has_properties_but_no_type_type_enum import AllOfHasPropertiesButNoTypeTypeEnum
67
from ..types import UNSET, Unset
78

89
T = TypeVar("T", bound="AllOfHasPropertiesButNoType")
910

1011

11-
@define
12+
@_attrs_define
1213
class AllOfHasPropertiesButNoType:
1314
"""
1415
Attributes:
@@ -20,7 +21,7 @@ class AllOfHasPropertiesButNoType:
2021
a_sub_property: Union[Unset, str] = UNSET
2122
type: Union[Unset, str] = UNSET
2223
type_enum: Union[Unset, AllOfHasPropertiesButNoTypeTypeEnum] = UNSET
23-
additional_properties: Dict[str, Any] = field(init=False, factory=dict)
24+
additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)
2425

2526
def to_dict(self) -> Dict[str, Any]:
2627
a_sub_property = self.a_sub_property

end_to_end_tests/golden-record/my_test_api_client/models/all_of_sub_model.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
from typing import Any, Dict, List, Type, TypeVar, Union
22

3-
from attrs import define, field
3+
from attrs import define as _attrs_define
4+
from attrs import field as _attrs_field
45

56
from ..models.all_of_sub_model_type_enum import AllOfSubModelTypeEnum
67
from ..types import UNSET, Unset
78

89
T = TypeVar("T", bound="AllOfSubModel")
910

1011

11-
@define
12+
@_attrs_define
1213
class AllOfSubModel:
1314
"""
1415
Attributes:
@@ -20,7 +21,7 @@ class AllOfSubModel:
2021
a_sub_property: Union[Unset, str] = UNSET
2122
type: Union[Unset, str] = UNSET
2223
type_enum: Union[Unset, AllOfSubModelTypeEnum] = UNSET
23-
additional_properties: Dict[str, Any] = field(init=False, factory=dict)
24+
additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)
2425

2526
def to_dict(self) -> Dict[str, Any]:
2627
a_sub_property = self.a_sub_property

end_to_end_tests/golden-record/my_test_api_client/models/an_array_with_a_circular_ref_in_items_object_a_item.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar, Union
22

3-
from attrs import define, field
3+
from attrs import define as _attrs_define
4+
from attrs import field as _attrs_field
45

56
from ..types import UNSET, Unset
67

@@ -11,15 +12,15 @@
1112
T = TypeVar("T", bound="AnArrayWithACircularRefInItemsObjectAItem")
1213

1314

14-
@define
15+
@_attrs_define
1516
class AnArrayWithACircularRefInItemsObjectAItem:
1617
"""
1718
Attributes:
1819
circular (Union[Unset, List['AnArrayWithACircularRefInItemsObjectBItem']]):
1920
"""
2021

2122
circular: Union[Unset, List["AnArrayWithACircularRefInItemsObjectBItem"]] = UNSET
22-
additional_properties: Dict[str, Any] = field(init=False, factory=dict)
23+
additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)
2324

2425
def to_dict(self) -> Dict[str, Any]:
2526
circular: Union[Unset, List[Dict[str, Any]]] = UNSET

end_to_end_tests/golden-record/my_test_api_client/models/an_array_with_a_circular_ref_in_items_object_additional_properties_a_item.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import TYPE_CHECKING, Any, Dict, List, Type, TypeVar
22

3-
from attrs import define, field
3+
from attrs import define as _attrs_define
4+
from attrs import field as _attrs_field
45

56
if TYPE_CHECKING:
67
from ..models.an_array_with_a_circular_ref_in_items_object_additional_properties_b_item import (
@@ -11,13 +12,13 @@
1112
T = TypeVar("T", bound="AnArrayWithACircularRefInItemsObjectAdditionalPropertiesAItem")
1213

1314

14-
@define
15+
@_attrs_define
1516
class AnArrayWithACircularRefInItemsObjectAdditionalPropertiesAItem:
1617
""" """
1718

18-
additional_properties: Dict[str, List["AnArrayWithACircularRefInItemsObjectAdditionalPropertiesBItem"]] = field(
19-
init=False, factory=dict
20-
)
19+
additional_properties: Dict[
20+
str, List["AnArrayWithACircularRefInItemsObjectAdditionalPropertiesBItem"]
21+
] = _attrs_field(init=False, factory=dict)
2122

2223
def to_dict(self) -> Dict[str, Any]:
2324
pass

0 commit comments

Comments
 (0)