Skip to content

Commit 33ebc7d

Browse files
dbantyNementon
andcommitted
feat(parser): Allow references to non-object, non-enum types [openapi-generators#371][openapi-generators#418][openapi-generators#425]. Thanks @p1-ra!
* parser / properties / do not restrict reference pointer type to `enum` or `object` * e2e / update `openapi.json` and golden-record * tpl / model / add missing typing import: `Tuple,Optional,BinaryIO,TextIO` * test: Make big ref test model properties required to lessen generated code Co-authored-by: Nementon <[email protected]>
1 parent 79d10fa commit 33ebc7d

File tree

5 files changed

+723
-47
lines changed

5 files changed

+723
-47
lines changed

Diff for: end_to_end_tests/golden-record/my_test_api_client/models/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
""" Contains all the data models used in inputs/outputs """
22

33
from .a_model import AModel
4+
from .a_model_with_properties_reference_that_are_not_object import AModelWithPropertiesReferenceThatAreNotObject
45
from .all_of_sub_model import AllOfSubModel
56
from .an_all_of_enum import AnAllOfEnum
67
from .an_enum import AnEnum
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,341 @@
1+
import datetime
2+
from io import BytesIO
3+
from typing import Any, Dict, List, Type, TypeVar, cast
4+
5+
import attr
6+
from dateutil.parser import isoparse
7+
8+
from ..models.an_enum import AnEnum
9+
from ..types import File
10+
11+
T = TypeVar("T", bound="AModelWithPropertiesReferenceThatAreNotObject")
12+
13+
14+
@attr.s(auto_attribs=True)
15+
class AModelWithPropertiesReferenceThatAreNotObject:
16+
""" """
17+
18+
enum_properties_ref: List[AnEnum]
19+
str_properties_ref: List[str]
20+
date_properties_ref: List[datetime.date]
21+
datetime_properties_ref: List[datetime.datetime]
22+
int_32_properties_ref: List[int]
23+
int_64_properties_ref: List[int]
24+
float_properties_ref: List[float]
25+
double_properties_ref: List[float]
26+
file_properties_ref: List[File]
27+
bytestream_properties_ref: List[str]
28+
enum_properties: List[AnEnum]
29+
str_properties: List[str]
30+
date_properties: List[datetime.date]
31+
datetime_properties: List[datetime.datetime]
32+
int_32_properties: List[int]
33+
int_64_properties: List[int]
34+
float_properties: List[float]
35+
double_properties: List[float]
36+
file_properties: List[File]
37+
bytestream_properties: List[str]
38+
enum_property_ref: AnEnum
39+
str_property_ref: str
40+
date_property_ref: datetime.date
41+
datetime_property_ref: datetime.datetime
42+
int_32_property_ref: int
43+
int_64_property_ref: int
44+
float_property_ref: float
45+
double_property_ref: float
46+
file_property_ref: File
47+
bytestream_property_ref: str
48+
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
49+
50+
def to_dict(self) -> Dict[str, Any]:
51+
enum_properties_ref = []
52+
for componentsschemas_an_other_array_of_enum_item_data in self.enum_properties_ref:
53+
componentsschemas_an_other_array_of_enum_item = componentsschemas_an_other_array_of_enum_item_data.value
54+
55+
enum_properties_ref.append(componentsschemas_an_other_array_of_enum_item)
56+
57+
str_properties_ref = self.str_properties_ref
58+
59+
date_properties_ref = []
60+
for componentsschemas_an_other_array_of_date_item_data in self.date_properties_ref:
61+
componentsschemas_an_other_array_of_date_item = (
62+
componentsschemas_an_other_array_of_date_item_data.isoformat()
63+
)
64+
date_properties_ref.append(componentsschemas_an_other_array_of_date_item)
65+
66+
datetime_properties_ref = []
67+
for componentsschemas_an_other_array_of_date_time_item_data in self.datetime_properties_ref:
68+
componentsschemas_an_other_array_of_date_time_item = (
69+
componentsschemas_an_other_array_of_date_time_item_data.isoformat()
70+
)
71+
72+
datetime_properties_ref.append(componentsschemas_an_other_array_of_date_time_item)
73+
74+
int_32_properties_ref = self.int_32_properties_ref
75+
76+
int_64_properties_ref = self.int_64_properties_ref
77+
78+
float_properties_ref = self.float_properties_ref
79+
80+
double_properties_ref = self.double_properties_ref
81+
82+
file_properties_ref = []
83+
for componentsschemas_an_other_array_of_file_item_data in self.file_properties_ref:
84+
componentsschemas_an_other_array_of_file_item = (
85+
componentsschemas_an_other_array_of_file_item_data.to_tuple()
86+
)
87+
88+
file_properties_ref.append(componentsschemas_an_other_array_of_file_item)
89+
90+
bytestream_properties_ref = self.bytestream_properties_ref
91+
92+
enum_properties = []
93+
for componentsschemas_an_array_of_enum_item_data in self.enum_properties:
94+
componentsschemas_an_array_of_enum_item = componentsschemas_an_array_of_enum_item_data.value
95+
96+
enum_properties.append(componentsschemas_an_array_of_enum_item)
97+
98+
str_properties = self.str_properties
99+
100+
date_properties = []
101+
for componentsschemas_an_array_of_date_item_data in self.date_properties:
102+
componentsschemas_an_array_of_date_item = componentsschemas_an_array_of_date_item_data.isoformat()
103+
date_properties.append(componentsschemas_an_array_of_date_item)
104+
105+
datetime_properties = []
106+
for componentsschemas_an_array_of_date_time_item_data in self.datetime_properties:
107+
componentsschemas_an_array_of_date_time_item = componentsschemas_an_array_of_date_time_item_data.isoformat()
108+
109+
datetime_properties.append(componentsschemas_an_array_of_date_time_item)
110+
111+
int_32_properties = self.int_32_properties
112+
113+
int_64_properties = self.int_64_properties
114+
115+
float_properties = self.float_properties
116+
117+
double_properties = self.double_properties
118+
119+
file_properties = []
120+
for componentsschemas_an_array_of_file_item_data in self.file_properties:
121+
componentsschemas_an_array_of_file_item = componentsschemas_an_array_of_file_item_data.to_tuple()
122+
123+
file_properties.append(componentsschemas_an_array_of_file_item)
124+
125+
bytestream_properties = self.bytestream_properties
126+
127+
enum_property_ref = self.enum_property_ref.value
128+
129+
str_property_ref = self.str_property_ref
130+
date_property_ref = self.date_property_ref.isoformat()
131+
datetime_property_ref = self.datetime_property_ref.isoformat()
132+
133+
int_32_property_ref = self.int_32_property_ref
134+
int_64_property_ref = self.int_64_property_ref
135+
float_property_ref = self.float_property_ref
136+
double_property_ref = self.double_property_ref
137+
file_property_ref = self.file_property_ref.to_tuple()
138+
139+
bytestream_property_ref = self.bytestream_property_ref
140+
141+
field_dict: Dict[str, Any] = {}
142+
field_dict.update(self.additional_properties)
143+
field_dict.update(
144+
{
145+
"enum_properties_ref": enum_properties_ref,
146+
"str_properties_ref": str_properties_ref,
147+
"date_properties_ref": date_properties_ref,
148+
"datetime_properties_ref": datetime_properties_ref,
149+
"int32_properties_ref": int_32_properties_ref,
150+
"int64_properties_ref": int_64_properties_ref,
151+
"float_properties_ref": float_properties_ref,
152+
"double_properties_ref": double_properties_ref,
153+
"file_properties_ref": file_properties_ref,
154+
"bytestream_properties_ref": bytestream_properties_ref,
155+
"enum_properties": enum_properties,
156+
"str_properties": str_properties,
157+
"date_properties": date_properties,
158+
"datetime_properties": datetime_properties,
159+
"int32_properties": int_32_properties,
160+
"int64_properties": int_64_properties,
161+
"float_properties": float_properties,
162+
"double_properties": double_properties,
163+
"file_properties": file_properties,
164+
"bytestream_properties": bytestream_properties,
165+
"enum_property_ref": enum_property_ref,
166+
"str_property_ref": str_property_ref,
167+
"date_property_ref": date_property_ref,
168+
"datetime_property_ref": datetime_property_ref,
169+
"int32_property_ref": int_32_property_ref,
170+
"int64_property_ref": int_64_property_ref,
171+
"float_property_ref": float_property_ref,
172+
"double_property_ref": double_property_ref,
173+
"file_property_ref": file_property_ref,
174+
"bytestream_property_ref": bytestream_property_ref,
175+
}
176+
)
177+
178+
return field_dict
179+
180+
@classmethod
181+
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
182+
d = src_dict.copy()
183+
enum_properties_ref = []
184+
_enum_properties_ref = d.pop("enum_properties_ref")
185+
for componentsschemas_an_other_array_of_enum_item_data in _enum_properties_ref:
186+
componentsschemas_an_other_array_of_enum_item = AnEnum(componentsschemas_an_other_array_of_enum_item_data)
187+
188+
enum_properties_ref.append(componentsschemas_an_other_array_of_enum_item)
189+
190+
str_properties_ref = cast(List[str], d.pop("str_properties_ref"))
191+
192+
date_properties_ref = []
193+
_date_properties_ref = d.pop("date_properties_ref")
194+
for componentsschemas_an_other_array_of_date_item_data in _date_properties_ref:
195+
componentsschemas_an_other_array_of_date_item = isoparse(
196+
componentsschemas_an_other_array_of_date_item_data
197+
).date()
198+
199+
date_properties_ref.append(componentsschemas_an_other_array_of_date_item)
200+
201+
datetime_properties_ref = []
202+
_datetime_properties_ref = d.pop("datetime_properties_ref")
203+
for componentsschemas_an_other_array_of_date_time_item_data in _datetime_properties_ref:
204+
componentsschemas_an_other_array_of_date_time_item = isoparse(
205+
componentsschemas_an_other_array_of_date_time_item_data
206+
)
207+
208+
datetime_properties_ref.append(componentsschemas_an_other_array_of_date_time_item)
209+
210+
int_32_properties_ref = cast(List[int], d.pop("int32_properties_ref"))
211+
212+
int_64_properties_ref = cast(List[int], d.pop("int64_properties_ref"))
213+
214+
float_properties_ref = cast(List[float], d.pop("float_properties_ref"))
215+
216+
double_properties_ref = cast(List[float], d.pop("double_properties_ref"))
217+
218+
file_properties_ref = []
219+
_file_properties_ref = d.pop("file_properties_ref")
220+
for componentsschemas_an_other_array_of_file_item_data in _file_properties_ref:
221+
componentsschemas_an_other_array_of_file_item = File(
222+
payload=BytesIO(componentsschemas_an_other_array_of_file_item_data)
223+
)
224+
225+
file_properties_ref.append(componentsschemas_an_other_array_of_file_item)
226+
227+
bytestream_properties_ref = cast(List[str], d.pop("bytestream_properties_ref"))
228+
229+
enum_properties = []
230+
_enum_properties = d.pop("enum_properties")
231+
for componentsschemas_an_array_of_enum_item_data in _enum_properties:
232+
componentsschemas_an_array_of_enum_item = AnEnum(componentsschemas_an_array_of_enum_item_data)
233+
234+
enum_properties.append(componentsschemas_an_array_of_enum_item)
235+
236+
str_properties = cast(List[str], d.pop("str_properties"))
237+
238+
date_properties = []
239+
_date_properties = d.pop("date_properties")
240+
for componentsschemas_an_array_of_date_item_data in _date_properties:
241+
componentsschemas_an_array_of_date_item = isoparse(componentsschemas_an_array_of_date_item_data).date()
242+
243+
date_properties.append(componentsschemas_an_array_of_date_item)
244+
245+
datetime_properties = []
246+
_datetime_properties = d.pop("datetime_properties")
247+
for componentsschemas_an_array_of_date_time_item_data in _datetime_properties:
248+
componentsschemas_an_array_of_date_time_item = isoparse(componentsschemas_an_array_of_date_time_item_data)
249+
250+
datetime_properties.append(componentsschemas_an_array_of_date_time_item)
251+
252+
int_32_properties = cast(List[int], d.pop("int32_properties"))
253+
254+
int_64_properties = cast(List[int], d.pop("int64_properties"))
255+
256+
float_properties = cast(List[float], d.pop("float_properties"))
257+
258+
double_properties = cast(List[float], d.pop("double_properties"))
259+
260+
file_properties = []
261+
_file_properties = d.pop("file_properties")
262+
for componentsschemas_an_array_of_file_item_data in _file_properties:
263+
componentsschemas_an_array_of_file_item = File(
264+
payload=BytesIO(componentsschemas_an_array_of_file_item_data)
265+
)
266+
267+
file_properties.append(componentsschemas_an_array_of_file_item)
268+
269+
bytestream_properties = cast(List[str], d.pop("bytestream_properties"))
270+
271+
enum_property_ref = AnEnum(d.pop("enum_property_ref"))
272+
273+
str_property_ref = d.pop("str_property_ref")
274+
275+
date_property_ref = isoparse(d.pop("date_property_ref")).date()
276+
277+
datetime_property_ref = isoparse(d.pop("datetime_property_ref"))
278+
279+
int_32_property_ref = d.pop("int32_property_ref")
280+
281+
int_64_property_ref = d.pop("int64_property_ref")
282+
283+
float_property_ref = d.pop("float_property_ref")
284+
285+
double_property_ref = d.pop("double_property_ref")
286+
287+
file_property_ref = File(payload=BytesIO(d.pop("file_property_ref")))
288+
289+
bytestream_property_ref = d.pop("bytestream_property_ref")
290+
291+
a_model_with_properties_reference_that_are_not_object = cls(
292+
enum_properties_ref=enum_properties_ref,
293+
str_properties_ref=str_properties_ref,
294+
date_properties_ref=date_properties_ref,
295+
datetime_properties_ref=datetime_properties_ref,
296+
int_32_properties_ref=int_32_properties_ref,
297+
int_64_properties_ref=int_64_properties_ref,
298+
float_properties_ref=float_properties_ref,
299+
double_properties_ref=double_properties_ref,
300+
file_properties_ref=file_properties_ref,
301+
bytestream_properties_ref=bytestream_properties_ref,
302+
enum_properties=enum_properties,
303+
str_properties=str_properties,
304+
date_properties=date_properties,
305+
datetime_properties=datetime_properties,
306+
int_32_properties=int_32_properties,
307+
int_64_properties=int_64_properties,
308+
float_properties=float_properties,
309+
double_properties=double_properties,
310+
file_properties=file_properties,
311+
bytestream_properties=bytestream_properties,
312+
enum_property_ref=enum_property_ref,
313+
str_property_ref=str_property_ref,
314+
date_property_ref=date_property_ref,
315+
datetime_property_ref=datetime_property_ref,
316+
int_32_property_ref=int_32_property_ref,
317+
int_64_property_ref=int_64_property_ref,
318+
float_property_ref=float_property_ref,
319+
double_property_ref=double_property_ref,
320+
file_property_ref=file_property_ref,
321+
bytestream_property_ref=bytestream_property_ref,
322+
)
323+
324+
a_model_with_properties_reference_that_are_not_object.additional_properties = d
325+
return a_model_with_properties_reference_that_are_not_object
326+
327+
@property
328+
def additional_keys(self) -> List[str]:
329+
return list(self.additional_properties.keys())
330+
331+
def __getitem__(self, key: str) -> Any:
332+
return self.additional_properties[key]
333+
334+
def __setitem__(self, key: str, value: Any) -> None:
335+
self.additional_properties[key] = value
336+
337+
def __delitem__(self, key: str) -> None:
338+
del self.additional_properties[key]
339+
340+
def __contains__(self, key: str) -> bool:
341+
return key in self.additional_properties

0 commit comments

Comments
 (0)