@@ -1335,12 +1335,20 @@ def model_to_dict(model_instance, serialize=True):
1335
1335
model_instances = [model_instance]
1336
1336
if model_instance._composed_schemas:
1337
1337
model_instances.extend(model_instance._composed_instances)
1338
+ seen_json_attribute_names = set()
1339
+ used_fallback_python_attribute_names = set()
1340
+ py_to_json_map = { }
1338
1341
for model_instance in model_instances:
1339
1342
for attr, value in model_instance._data_store.items():
1340
1343
if serialize:
1341
1344
# we use get here because additional property key names do not
1342
1345
# exist in attribute_map
1343
- attr = model_instance.attribute_map.get(attr, attr)
1346
+ try:
1347
+ attr = model_instance.attribute_map[attr]
1348
+ py_to_json_map.update(model_instance.attribute_map)
1349
+ seen_json_attribute_names.add(attr)
1350
+ except KeyError:
1351
+ used_fallback_python_attribute_names.add(attr)
1344
1352
if isinstance(value, list):
1345
1353
if not value:
1346
1354
# empty list or None
@@ -1368,6 +1376,16 @@ def model_to_dict(model_instance, serialize=True):
1368
1376
result[attr] = model_to_dict(value, serialize=serialize)
1369
1377
else:
1370
1378
result[attr] = value
1379
+ if serialize:
1380
+ for python_key in used_fallback_python_attribute_names:
1381
+ json_key = py_to_json_map.get(python_key)
1382
+ if json_key is None:
1383
+ continue
1384
+ if python_key == json_key:
1385
+ continue
1386
+ json_key_assigned_no_need_for_python_key = json_key in seen_json_attribute_names
1387
+ if json_key_assigned_no_need_for_python_key:
1388
+ del result[python_key]
1371
1389
1372
1390
return result
1373
1391
0 commit comments