Skip to content

Commit 3731cc1

Browse files
committed
Fix python template for list and dicts of dicts
1 parent 1283d1b commit 3731cc1

1 file changed

Lines changed: 45 additions & 4 deletions

File tree

modules/openapi-generator/src/main/resources/python/model_generic.mustache

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,21 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
182182
_dict['{{{baseName}}}'] = _items
183183
{{/items.items.isPrimitiveType}}
184184
{{/items.isArray}}
185+
{{#items.isMap}}
186+
{{^items.items.isPrimitiveType}}
187+
# override the default output from pydantic by calling `to_dict()` of each item in {{{name}}} (list of dict)
188+
_items = []
189+
if self.{{{name}}}:
190+
for _item_{{{name}}} in self.{{{name}}}:
191+
if _item_{{{name}}}:
192+
_items.append(
193+
{_inner_key: _inner_value.to_dict() for _inner_key, _inner_value in _item_{{{name}}}.items()}
194+
)
195+
_dict['{{{baseName}}}'] = _items
196+
{{/items.items.isPrimitiveType}}
197+
{{/items.isMap}}
185198
{{^items.isArray}}
199+
{{^items.isMap}}
186200
{{^items.isPrimitiveType}}
187201
{{^items.isEnumOrRef}}
188202
# override the default output from pydantic by calling `to_dict()` of each item in {{{name}}} (list)
@@ -194,6 +208,7 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
194208
_dict['{{{baseName}}}'] = _items
195209
{{/items.isEnumOrRef}}
196210
{{/items.isPrimitiveType}}
211+
{{/items.isMap}}
197212
{{/items.isArray}}
198213
{{/isArray}}
199214
{{#isMap}}
@@ -210,6 +225,18 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
210225
_dict['{{{baseName}}}'] = _field_dict_of_array
211226
{{/items.items.isPrimitiveType}}
212227
{{/items.isArray}}
228+
{{#items.isMap}}
229+
# override the default output from pydantic by calling `to_dict()` of each value in {{{name}}} (dict of dict)
230+
_field_dict_of_dict = {}
231+
if self.{{{name}}}:
232+
for _key_{{{name}}}, _value_{{{name}}} in self.{{{name}}}.items():
233+
if _value_{{{name}}} is not None:
234+
_field_dict_of_dict[_key_{{{name}}}] = {
235+
_key: _value.to_dict() for _key, _value in _value_{{{name}}}.items()
236+
}
237+
_dict['{{{baseName}}}'] = _field_dict_of_dict
238+
{{/items.isMap}}
239+
{{^items.isMap}}
213240
{{^items.isArray}}
214241
{{^items.isPrimitiveType}}
215242
{{^items.isEnumOrRef}}
@@ -223,6 +250,7 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
223250
{{/items.isEnumOrRef}}
224251
{{/items.isPrimitiveType}}
225252
{{/items.isArray}}
253+
{{/items.isMap}}
226254
{{/isMap}}
227255
{{/isContainer}}
228256
{{^isContainer}}
@@ -293,6 +321,7 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
293321
{{#allVars}}
294322
{{#isContainer}}
295323
{{#isArray}}
324+
{{#items.isContainer}}
296325
{{#items.isArray}}
297326
{{#items.items.isPrimitiveType}}
298327
"{{{baseName}}}": obj.get("{{{baseName}}}"){{^-last}},{{/-last}}
@@ -304,7 +333,19 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
304333
] if obj.get("{{{baseName}}}") is not None else None{{^-last}},{{/-last}}
305334
{{/items.items.isPrimitiveType}}
306335
{{/items.isArray}}
307-
{{^items.isArray}}
336+
{{#items.isMap}}
337+
{{#items.items.isPrimitiveType}}
338+
"{{{baseName}}}": obj.get("{{{baseName}}}"){{^-last}},{{/-last}}
339+
{{/items.items.isPrimitiveType}}
340+
{{^items.items.isPrimitiveType}}
341+
"{{{baseName}}}": [
342+
{_inner_key: {{{items.items.dataType}}}.from_dict(_inner_value) for _inner_key, _inner_value in _item.items()}
343+
for _item in obj["{{{baseName}}}"]
344+
] if obj.get("{{{baseName}}}") is not None else None{{^-last}},{{/-last}}
345+
{{/items.items.isPrimitiveType}}
346+
{{/items.isMap}}
347+
{{/items.isContainer}}
348+
{{^items.isContainer}}
308349
{{^items.isPrimitiveType}}
309350
{{#items.isEnumOrRef}}
310351
"{{{baseName}}}": obj.get("{{{baseName}}}"){{^-last}},{{/-last}}
@@ -316,7 +357,7 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
316357
{{#items.isPrimitiveType}}
317358
"{{{baseName}}}": obj.get("{{{baseName}}}"){{^-last}},{{/-last}}
318359
{{/items.isPrimitiveType}}
319-
{{/items.isArray}}
360+
{{/items.isContainer}}
320361
{{/isArray}}
321362
{{#isMap}}
322363
{{^items.isPrimitiveType}}
@@ -331,9 +372,9 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
331372
if _v is not None
332373
else None
333374
)
334-
for _k, _v in obj.get("{{{baseName}}}").items()
375+
for _k, _v in obj["{{{baseName}}}"].items()
335376
)
336-
if obj.get("{{{baseName}}}") is not None
377+
if "{{{baseName}}}" in obj
337378
else None{{^-last}},{{/-last}}
338379
{{/items.isMap}}
339380
{{#items.isArray}}

0 commit comments

Comments
 (0)