Skip to content

Commit 81fab15

Browse files
authored
[PYTHON] Fix for failing to lookup discriminator value using AllOf and discriminator (#18498)
* fix issue 18495 * add tests and update samples * update samples
1 parent bd02e65 commit 81fab15

56 files changed

Lines changed: 2185 additions & 2 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
237237
# look up the object type based on discriminator mapping
238238
object_type = cls.get_discriminator_value(obj)
239239
{{#mappedModels}}
240-
if object_type == '{{{mappingName}}}':
240+
if object_type == '{{{modelName}}}':
241241
return import_module("{{packageName}}.models.{{model.classVarName}}").{{modelName}}.from_dict(obj)
242242
{{/mappedModels}}
243243
raise ValueError("{{{classname}}} failed to lookup discriminator value from " +

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
253253
# look up the object type based on discriminator mapping
254254
object_type = cls.get_discriminator_value(obj)
255255
{{#mappedModels}}
256-
if object_type == '{{{mappingName}}}':
256+
if object_type == '{{{modelName}}}':
257257
return import_module("{{packageName}}.models.{{model.classVarName}}").{{modelName}}.from_dict(obj)
258258
{{/mappedModels}}
259259

modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing.yaml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2741,3 +2741,26 @@ components:
27412741
_name:
27422742
type: string
27432743
type: object
2744+
Info:
2745+
allOf:
2746+
- $ref: '#/components/schemas/BaseDiscriminator'
2747+
- properties:
2748+
val:
2749+
$ref: '#/components/schemas/BaseDiscriminator'
2750+
type: object
2751+
BaseDiscriminator:
2752+
discriminator:
2753+
mapping:
2754+
string: '#/components/schemas/PrimitiveString'
2755+
propertyName: _typeName
2756+
properties:
2757+
_typeName:
2758+
type: string
2759+
type: object
2760+
PrimitiveString:
2761+
allOf:
2762+
- $ref: '#/components/schemas/BaseDiscriminator'
2763+
- properties:
2764+
_value:
2765+
type: string
2766+
type: object

samples/openapi3/client/petstore/python-aiohttp/.openapi-generator/FILES

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ docs/ArrayOfArrayOfModel.md
1717
docs/ArrayOfArrayOfNumberOnly.md
1818
docs/ArrayOfNumberOnly.md
1919
docs/ArrayTest.md
20+
docs/BaseDiscriminator.md
2021
docs/BasquePig.md
2122
docs/Bathing.md
2223
docs/Capitalization.md
@@ -53,6 +54,7 @@ docs/FormatTest.md
5354
docs/HasOnlyReadOnly.md
5455
docs/HealthCheckResult.md
5556
docs/ImportTestDatetimeApi.md
57+
docs/Info.md
5658
docs/InnerDictWithProperty.md
5759
docs/InputAllOf.md
5860
docs/IntOrString.md
@@ -84,6 +86,7 @@ docs/Pet.md
8486
docs/PetApi.md
8587
docs/Pig.md
8688
docs/PoopCleaning.md
89+
docs/PrimitiveString.md
8790
docs/PropertyMap.md
8891
docs/PropertyNameCollision.md
8992
docs/ReadOnlyFirst.md
@@ -137,6 +140,7 @@ petstore_api/models/array_of_array_of_model.py
137140
petstore_api/models/array_of_array_of_number_only.py
138141
petstore_api/models/array_of_number_only.py
139142
petstore_api/models/array_test.py
143+
petstore_api/models/base_discriminator.py
140144
petstore_api/models/basque_pig.py
141145
petstore_api/models/bathing.py
142146
petstore_api/models/capitalization.py
@@ -169,6 +173,7 @@ petstore_api/models/foo_get_default_response.py
169173
petstore_api/models/format_test.py
170174
petstore_api/models/has_only_read_only.py
171175
petstore_api/models/health_check_result.py
176+
petstore_api/models/info.py
172177
petstore_api/models/inner_dict_with_property.py
173178
petstore_api/models/input_all_of.py
174179
petstore_api/models/int_or_string.py
@@ -199,6 +204,7 @@ petstore_api/models/parent_with_optional_dict.py
199204
petstore_api/models/pet.py
200205
petstore_api/models/pig.py
201206
petstore_api/models/poop_cleaning.py
207+
petstore_api/models/primitive_string.py
202208
petstore_api/models/property_map.py
203209
petstore_api/models/property_name_collision.py
204210
petstore_api/models/read_only_first.py

samples/openapi3/client/petstore/python-aiohttp/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ Class | Method | HTTP request | Description
163163
- [ArrayOfArrayOfNumberOnly](docs/ArrayOfArrayOfNumberOnly.md)
164164
- [ArrayOfNumberOnly](docs/ArrayOfNumberOnly.md)
165165
- [ArrayTest](docs/ArrayTest.md)
166+
- [BaseDiscriminator](docs/BaseDiscriminator.md)
166167
- [BasquePig](docs/BasquePig.md)
167168
- [Bathing](docs/Bathing.md)
168169
- [Capitalization](docs/Capitalization.md)
@@ -195,6 +196,7 @@ Class | Method | HTTP request | Description
195196
- [FormatTest](docs/FormatTest.md)
196197
- [HasOnlyReadOnly](docs/HasOnlyReadOnly.md)
197198
- [HealthCheckResult](docs/HealthCheckResult.md)
199+
- [Info](docs/Info.md)
198200
- [InnerDictWithProperty](docs/InnerDictWithProperty.md)
199201
- [InputAllOf](docs/InputAllOf.md)
200202
- [IntOrString](docs/IntOrString.md)
@@ -225,6 +227,7 @@ Class | Method | HTTP request | Description
225227
- [Pet](docs/Pet.md)
226228
- [Pig](docs/Pig.md)
227229
- [PoopCleaning](docs/PoopCleaning.md)
230+
- [PrimitiveString](docs/PrimitiveString.md)
228231
- [PropertyMap](docs/PropertyMap.md)
229232
- [PropertyNameCollision](docs/PropertyNameCollision.md)
230233
- [ReadOnlyFirst](docs/ReadOnlyFirst.md)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# BaseDiscriminator
2+
3+
4+
## Properties
5+
6+
Name | Type | Description | Notes
7+
------------ | ------------- | ------------- | -------------
8+
**type_name** | **str** | | [optional]
9+
10+
## Example
11+
12+
```python
13+
from petstore_api.models.base_discriminator import BaseDiscriminator
14+
15+
# TODO update the JSON string below
16+
json = "{}"
17+
# create an instance of BaseDiscriminator from a JSON string
18+
base_discriminator_instance = BaseDiscriminator.from_json(json)
19+
# print the JSON string representation of the object
20+
print(BaseDiscriminator.to_json())
21+
22+
# convert the object into a dict
23+
base_discriminator_dict = base_discriminator_instance.to_dict()
24+
# create an instance of BaseDiscriminator from a dict
25+
base_discriminator_from_dict = BaseDiscriminator.from_dict(base_discriminator_dict)
26+
```
27+
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
28+
29+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Info
2+
3+
4+
## Properties
5+
6+
Name | Type | Description | Notes
7+
------------ | ------------- | ------------- | -------------
8+
**val** | [**BaseDiscriminator**](BaseDiscriminator.md) | | [optional]
9+
10+
## Example
11+
12+
```python
13+
from petstore_api.models.info import Info
14+
15+
# TODO update the JSON string below
16+
json = "{}"
17+
# create an instance of Info from a JSON string
18+
info_instance = Info.from_json(json)
19+
# print the JSON string representation of the object
20+
print(Info.to_json())
21+
22+
# convert the object into a dict
23+
info_dict = info_instance.to_dict()
24+
# create an instance of Info from a dict
25+
info_from_dict = Info.from_dict(info_dict)
26+
```
27+
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
28+
29+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# PrimitiveString
2+
3+
4+
## Properties
5+
6+
Name | Type | Description | Notes
7+
------------ | ------------- | ------------- | -------------
8+
**value** | **str** | | [optional]
9+
10+
## Example
11+
12+
```python
13+
from petstore_api.models.primitive_string import PrimitiveString
14+
15+
# TODO update the JSON string below
16+
json = "{}"
17+
# create an instance of PrimitiveString from a JSON string
18+
primitive_string_instance = PrimitiveString.from_json(json)
19+
# print the JSON string representation of the object
20+
print(PrimitiveString.to_json())
21+
22+
# convert the object into a dict
23+
primitive_string_dict = primitive_string_instance.to_dict()
24+
# create an instance of PrimitiveString from a dict
25+
primitive_string_from_dict = PrimitiveString.from_dict(primitive_string_dict)
26+
```
27+
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
28+
29+

samples/openapi3/client/petstore/python-aiohttp/petstore_api/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
from petstore_api.models.array_of_array_of_number_only import ArrayOfArrayOfNumberOnly
5353
from petstore_api.models.array_of_number_only import ArrayOfNumberOnly
5454
from petstore_api.models.array_test import ArrayTest
55+
from petstore_api.models.base_discriminator import BaseDiscriminator
5556
from petstore_api.models.basque_pig import BasquePig
5657
from petstore_api.models.bathing import Bathing
5758
from petstore_api.models.capitalization import Capitalization
@@ -84,6 +85,7 @@
8485
from petstore_api.models.format_test import FormatTest
8586
from petstore_api.models.has_only_read_only import HasOnlyReadOnly
8687
from petstore_api.models.health_check_result import HealthCheckResult
88+
from petstore_api.models.info import Info
8789
from petstore_api.models.inner_dict_with_property import InnerDictWithProperty
8890
from petstore_api.models.input_all_of import InputAllOf
8991
from petstore_api.models.int_or_string import IntOrString
@@ -114,6 +116,7 @@
114116
from petstore_api.models.pet import Pet
115117
from petstore_api.models.pig import Pig
116118
from petstore_api.models.poop_cleaning import PoopCleaning
119+
from petstore_api.models.primitive_string import PrimitiveString
117120
from petstore_api.models.property_map import PropertyMap
118121
from petstore_api.models.property_name_collision import PropertyNameCollision
119122
from petstore_api.models.read_only_first import ReadOnlyFirst

samples/openapi3/client/petstore/python-aiohttp/petstore_api/models/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from petstore_api.models.array_of_array_of_number_only import ArrayOfArrayOfNumberOnly
2828
from petstore_api.models.array_of_number_only import ArrayOfNumberOnly
2929
from petstore_api.models.array_test import ArrayTest
30+
from petstore_api.models.base_discriminator import BaseDiscriminator
3031
from petstore_api.models.basque_pig import BasquePig
3132
from petstore_api.models.bathing import Bathing
3233
from petstore_api.models.capitalization import Capitalization
@@ -59,6 +60,7 @@
5960
from petstore_api.models.format_test import FormatTest
6061
from petstore_api.models.has_only_read_only import HasOnlyReadOnly
6162
from petstore_api.models.health_check_result import HealthCheckResult
63+
from petstore_api.models.info import Info
6264
from petstore_api.models.inner_dict_with_property import InnerDictWithProperty
6365
from petstore_api.models.input_all_of import InputAllOf
6466
from petstore_api.models.int_or_string import IntOrString
@@ -89,6 +91,7 @@
8991
from petstore_api.models.pet import Pet
9092
from petstore_api.models.pig import Pig
9193
from petstore_api.models.poop_cleaning import PoopCleaning
94+
from petstore_api.models.primitive_string import PrimitiveString
9295
from petstore_api.models.property_map import PropertyMap
9396
from petstore_api.models.property_name_collision import PropertyNameCollision
9497
from petstore_api.models.read_only_first import ReadOnlyFirst

0 commit comments

Comments
 (0)