Skip to content

Commit 45fa438

Browse files
authored
[python] Check if the given input is a container (Array or Map) when validating enum values (#19316)
* checks if input is Array or Map in validate_enum * update samples
1 parent ea4b17c commit 45fa438

3 files changed

Lines changed: 15 additions & 6 deletions

File tree

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,22 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
7373

7474
{{/isNullable}}
7575
{{/required}}
76+
{{#isContainer}}
7677
{{#isArray}}
7778
for i in value:
7879
if i not in set([{{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}]):
7980
raise ValueError("each list item must be one of ({{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}})")
8081
{{/isArray}}
81-
{{^isArray}}
82+
{{#isMap}}
83+
for i in value.values():
84+
if i not in set([{{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}]):
85+
raise ValueError("dict values must be one of enum values ({{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}})")
86+
{{/isMap}}
87+
{{/isContainer}}
88+
{{^isContainer}}
8289
if value not in set([{{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}]):
8390
raise ValueError("must be one of enum values ({{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}})")
84-
{{/isArray}}
91+
{{/isContainer}}
8592
return value
8693
{{/isEnum}}
8794
{{/vars}}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ def map_of_enum_string_validate_enum(cls, value):
3838
if value is None:
3939
return value
4040

41-
if value not in set(['UPPER', 'lower']):
42-
raise ValueError("must be one of enum values ('UPPER', 'lower')")
41+
for i in value.values():
42+
if i not in set(['UPPER', 'lower']):
43+
raise ValueError("dict values must be one of enum values ('UPPER', 'lower')")
4344
return value
4445

4546
model_config = ConfigDict(

samples/openapi3/client/petstore/python/petstore_api/models/map_test.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ def map_of_enum_string_validate_enum(cls, value):
3939
if value is None:
4040
return value
4141

42-
if value not in set(['UPPER', 'lower']):
43-
raise ValueError("must be one of enum values ('UPPER', 'lower')")
42+
for i in value.values():
43+
if i not in set(['UPPER', 'lower']):
44+
raise ValueError("dict values must be one of enum values ('UPPER', 'lower')")
4445
return value
4546

4647
model_config = ConfigDict(

0 commit comments

Comments
 (0)