Skip to content

Commit

Permalink
[Python] fix model to dict (#11234)
Browse files Browse the repository at this point in the history
* fix model to dict

* add unit test

* add unit test

* update sample files
  • Loading branch information
JoeCqupt committed Jan 25, 2022
1 parent 5d2a369 commit 8b3cad0
Show file tree
Hide file tree
Showing 14 changed files with 374 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1340,6 +1340,7 @@ def model_to_dict(model_instance, serialize=True):
attribute_map
"""
result = {}
extract_item = lambda item: (item[0], model_to_dict(item[1], serialize=serialize)) if hasattr(item[1], '_data_store') else item

model_instances = [model_instance]
if model_instance._composed_schemas:
Expand Down Expand Up @@ -1369,14 +1370,17 @@ def model_to_dict(model_instance, serialize=True):
res.append(v)
elif isinstance(v, ModelSimple):
res.append(v.value)
elif isinstance(v, dict):
res.append(dict(map(
extract_item,
v.items()
)))
else:
res.append(model_to_dict(v, serialize=serialize))
result[attr] = res
elif isinstance(value, dict):
result[attr] = dict(map(
lambda item: (item[0],
model_to_dict(item[1], serialize=serialize))
if hasattr(item[1], '_data_store') else item,
extract_item,
value.items()
))
elif isinstance(value, ModelSimple):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2494,4 +2494,13 @@ components:
BooleanEnum:
type: boolean
enum:
- true
- true
FooObject:
type: object
properties:
prop1:
type: array
items:
type: object
prop2:
type: object
10 changes: 7 additions & 3 deletions samples/client/petstore/python/petstore_api/model_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -1657,6 +1657,7 @@ def model_to_dict(model_instance, serialize=True):
attribute_map
"""
result = {}
extract_item = lambda item: (item[0], model_to_dict(item[1], serialize=serialize)) if hasattr(item[1], '_data_store') else item

model_instances = [model_instance]
if model_instance._composed_schemas:
Expand Down Expand Up @@ -1686,14 +1687,17 @@ def model_to_dict(model_instance, serialize=True):
res.append(v)
elif isinstance(v, ModelSimple):
res.append(v.value)
elif isinstance(v, dict):
res.append(dict(map(
extract_item,
v.items()
)))
else:
res.append(model_to_dict(v, serialize=serialize))
result[attr] = res
elif isinstance(value, dict):
result[attr] = dict(map(
lambda item: (item[0],
model_to_dict(item[1], serialize=serialize))
if hasattr(item[1], '_data_store') else item,
extract_item,
value.items()
))
elif isinstance(value, ModelSimple):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1657,6 +1657,7 @@ def model_to_dict(model_instance, serialize=True):
attribute_map
"""
result = {}
extract_item = lambda item: (item[0], model_to_dict(item[1], serialize=serialize)) if hasattr(item[1], '_data_store') else item

model_instances = [model_instance]
if model_instance._composed_schemas:
Expand Down Expand Up @@ -1686,14 +1687,17 @@ def model_to_dict(model_instance, serialize=True):
res.append(v)
elif isinstance(v, ModelSimple):
res.append(v.value)
elif isinstance(v, dict):
res.append(dict(map(
extract_item,
v.items()
)))
else:
res.append(model_to_dict(v, serialize=serialize))
result[attr] = res
elif isinstance(value, dict):
result[attr] = dict(map(
lambda item: (item[0],
model_to_dict(item[1], serialize=serialize))
if hasattr(item[1], '_data_store') else item,
extract_item,
value.items()
))
elif isinstance(value, ModelSimple):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1657,6 +1657,7 @@ def model_to_dict(model_instance, serialize=True):
attribute_map
"""
result = {}
extract_item = lambda item: (item[0], model_to_dict(item[1], serialize=serialize)) if hasattr(item[1], '_data_store') else item

model_instances = [model_instance]
if model_instance._composed_schemas:
Expand Down Expand Up @@ -1686,14 +1687,17 @@ def model_to_dict(model_instance, serialize=True):
res.append(v)
elif isinstance(v, ModelSimple):
res.append(v.value)
elif isinstance(v, dict):
res.append(dict(map(
extract_item,
v.items()
)))
else:
res.append(model_to_dict(v, serialize=serialize))
result[attr] = res
elif isinstance(value, dict):
result[attr] = dict(map(
lambda item: (item[0],
model_to_dict(item[1], serialize=serialize))
if hasattr(item[1], '_data_store') else item,
extract_item,
value.items()
))
elif isinstance(value, ModelSimple):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1657,6 +1657,7 @@ def model_to_dict(model_instance, serialize=True):
attribute_map
"""
result = {}
extract_item = lambda item: (item[0], model_to_dict(item[1], serialize=serialize)) if hasattr(item[1], '_data_store') else item

model_instances = [model_instance]
if model_instance._composed_schemas:
Expand Down Expand Up @@ -1686,14 +1687,17 @@ def model_to_dict(model_instance, serialize=True):
res.append(v)
elif isinstance(v, ModelSimple):
res.append(v.value)
elif isinstance(v, dict):
res.append(dict(map(
extract_item,
v.items()
)))
else:
res.append(model_to_dict(v, serialize=serialize))
result[attr] = res
elif isinstance(value, dict):
result[attr] = dict(map(
lambda item: (item[0],
model_to_dict(item[1], serialize=serialize))
if hasattr(item[1], '_data_store') else item,
extract_item,
value.items()
))
elif isinstance(value, ModelSimple):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ docs/FakePostInlineAdditionalPropertiesPayloadArrayData.md
docs/File.md
docs/FileSchemaTestClass.md
docs/Foo.md
docs/FooObject.md
docs/FormatTest.md
docs/Fruit.md
docs/FruitReq.md
Expand Down Expand Up @@ -158,6 +159,7 @@ petstore_api/model/fake_post_inline_additional_properties_payload_array_data.py
petstore_api/model/file.py
petstore_api/model/file_schema_test_class.py
petstore_api/model/foo.py
petstore_api/model/foo_object.py
petstore_api/model/format_test.py
petstore_api/model/fruit.py
petstore_api/model/fruit_req.py
Expand Down
1 change: 1 addition & 0 deletions samples/openapi3/client/petstore/python/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ Class | Method | HTTP request | Description
- [File](docs/File.md)
- [FileSchemaTestClass](docs/FileSchemaTestClass.md)
- [Foo](docs/Foo.md)
- [FooObject](docs/FooObject.md)
- [FormatTest](docs/FormatTest.md)
- [Fruit](docs/Fruit.md)
- [FruitReq](docs/FruitReq.md)
Expand Down
13 changes: 13 additions & 0 deletions samples/openapi3/client/petstore/python/docs/FooObject.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# FooObject


## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**prop1** | **[{str: (bool, date, datetime, dict, float, int, list, str, none_type)}]** | | [optional]
**prop2** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type)}** | | [optional]
**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional]

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


Loading

0 comments on commit 8b3cad0

Please sign in to comment.