Skip to content

Commit 5d0245e

Browse files
api-clients-generation-pipeline[bot]therveci.datadog-api-spec
authored
Fix python handling of primitive types in oneOfs (#621)
* Fix unparsed check on primitive types * Fix logic * Add test * Regenerate client from commit 52f8e03 of spec repo Co-authored-by: Thomas Hervé <[email protected]> Co-authored-by: ci.datadog-api-spec <[email protected]> Co-authored-by: api-clients-generation-pipeline[bot] <54105614+api-clients-generation-pipeline[bot]@users.noreply.github.com>
1 parent 4d711b1 commit 5d0245e

File tree

8 files changed

+30
-14
lines changed

8 files changed

+30
-14
lines changed

.apigentools-info

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
"spec_versions": {
55
"v1": {
66
"apigentools_version": "1.5.1.dev2",
7-
"regenerated": "2021-10-12 09:01:06.740298",
8-
"spec_repo_commit": "06c7795"
7+
"regenerated": "2021-10-14 09:42:22.698222",
8+
"spec_repo_commit": "52f8e03"
99
},
1010
"v2": {
1111
"apigentools_version": "1.5.1.dev2",
12-
"regenerated": "2021-10-12 09:01:40.970217",
13-
"spec_repo_commit": "06c7795"
12+
"regenerated": "2021-10-14 09:43:03.256268",
13+
"spec_repo_commit": "52f8e03"
1414
}
1515
}
1616
}

.generator/templates/api_client.mustache

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,12 +208,11 @@ class ApiClient(object):
208208

209209
if not _preload_content:
210210
{{^tornado}}
211-
return (return_data)
211+
return return_data
212212
{{/tornado}}
213213
{{#tornado}}
214214
raise tornado.gen.Return(return_data)
215215
{{/tornado}}
216-
return return_data
217216

218217
# deserialize response data
219218
if response_type:

.generator/templates/model_utils.mustache

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1651,9 +1651,13 @@ def get_oneof_instance(cls, model_kwargs, constant_kwargs, model_arg=None):
16511651
oneof_instance = oneof_class._from_openapi_data(**model_kwargs, **constant_kwargs)
16521652
else:
16531653
oneof_instance = oneof_class(**model_kwargs, **constant_kwargs)
1654+
if not oneof_instance._unparsed:
1655+
oneof_instances.append(oneof_instance)
16541656
else:
16551657
if issubclass(oneof_class, ModelSimple):
16561658
oneof_instance = oneof_class(model_arg, **constant_kwargs)
1659+
if not oneof_instance._unparsed:
1660+
oneof_instances.append(oneof_instance)
16571661
elif oneof_class in PRIMITIVE_TYPES:
16581662
oneof_instance = validate_and_convert_types(
16591663
model_arg,
@@ -1663,8 +1667,7 @@ def get_oneof_instance(cls, model_kwargs, constant_kwargs, model_arg=None):
16631667
constant_kwargs['_check_type'],
16641668
configuration=constant_kwargs['_configuration']
16651669
)
1666-
if not oneof_instance._unparsed:
1667-
oneof_instances.append(oneof_instance)
1670+
oneof_instances.append(oneof_instance)
16681671
except Exception:
16691672
pass
16701673
if len(oneof_instances) != 1:

src/datadog_api_client/v1/api_client.py

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/datadog_api_client/v1/model_utils.py

Lines changed: 5 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/datadog_api_client/v2/api_client.py

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/datadog_api_client/v2/model_utils.py

Lines changed: 5 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/test_deserialization.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from datadog_api_client.v1.model.synthetics_test_request import SyntheticsTestRequest
66
from datadog_api_client.v1.model_utils import validate_and_convert_types
77
from datadog_api_client.v1 import Configuration as Configuration
8+
from datadog_api_client.v2.model.logs_aggregate_response import LogsAggregateResponse
89
from datadog_api_client.v2.model.logs_archive import LogsArchive
910
from datadog_api_client.v2.model.logs_archive_destination import LogsArchiveDestination
1011
from datadog_api_client.v2.model_utils import validate_and_convert_types as validate_and_convert_types_v2
@@ -267,3 +268,12 @@ def test_unknown_nested_one_of():
267268
assert isinstance(deserialized_data.data.attributes.destination, LogsArchiveDestination)
268269
assert deserialized_data.data.attributes.destination.type == "A non existent destination"
269270
assert deserialized_data.data.attributes.destination._composed_instances[0]._unparsed
271+
272+
273+
def test_one_of_primitive_types():
274+
body = """{"data": {"buckets": [{"by": {}, "computes": {"c0": 435.3}}]}}"""
275+
config = ConfigurationV2()
276+
deserialized_data = validate_and_convert_types_v2(
277+
json.loads(body), (LogsAggregateResponse,), ["received_data"], True, True, config)
278+
assert isinstance(deserialized_data, LogsAggregateResponse)
279+
assert deserialized_data.data.buckets[0].computes["c0"] == 435.3

0 commit comments

Comments
 (0)