Skip to content

Commit 7030a2e

Browse files
committed
fix model_generic.mustache
allow inline Enums add to_json / to_dict/ to_str ./mvnw clean package || exit ./bin/generate-samples.sh ./bin/configs/*.yaml || exit ./bin/utils/export_docs_generators.sh || exit
1 parent 0ab86bf commit 7030a2e

384 files changed

Lines changed: 1038 additions & 622 deletions

File tree

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/model_anyof.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ class {{classname}}(RootModel[Union[{{#anyOf}}{{.}}{{^-last}}, {{/-last}}{{/anyO
1414
{{{description}}}{{^description}}{{{classname}}}{{/description}}
1515
"""
1616

17-
root: Union[{{#anyOf}}{{.}}{{^-last}}, {{/-last}}{{/anyOf}}] = Field(
18-
...{{#discriminator}}, discriminator="{{discriminatorName}}"{{/discriminator}}
17+
root: Union[{{#anyOf}}{{.}}{{^-last}}, {{/-last}}{{/anyOf}}{{#isNullable}}, None{{/isNullable}}] = Field(
18+
{{#isNullable}}None{{/isNullable}}{{^isNullable}}...{{/isNullable}}{{#discriminator}}, discriminator="{{discriminatorName}}"{{/discriminator}}
1919
)
2020

2121
def __getattr__(self, name):

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

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ import json
99
{{#vendorExtensions.x-py-model-imports}}
1010
{{{.}}}
1111
{{/vendorExtensions.x-py-model-imports}}
12-
from typing import Optional, Set, Literal, Self
12+
from typing import Optional, Set, Literal
13+
from typing import Self
1314
from pydantic import Field
1415

1516
{{#hasChildren}}
@@ -37,12 +38,13 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
3738
{{! Single value enum - use Literal }}
3839
{{name}}: Literal[{{#isString}}"{{{.}}}"{{/isString}}{{^isString}}{{{.}}}{{/isString}}] = Field(
3940
{{#required}}...{{/required}}{{^required}}None{{/required}},
40-
description="{{description}}{{^description}}{{{name}}} of the {{classname}}{{/description}}"
41+
description="{{description}}{{^description}}{{{name}}} of the {{classname}}{{/description}}",
42+
alias="{{{baseName}}}"
4143
)
4244
{{/-last}}
4345
{{^-last}}
44-
{{! Multiple value enum - use enum class }}
45-
{{name}}: {{#required}}{{datatypeWithEnum}}{{/required}}{{^required}}Optional[{{datatypeWithEnum}}]{{/required}} = Field(
46+
{{! Multiple value enum - use Literal for inline enums }}
47+
{{name}}: {{#required}}Literal[{{#allowableValues}}{{#enumVars}}{{#isString}}"{{{value}}}"{{/isString}}{{^isString}}{{{value}}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}]{{/required}}{{^required}}Optional[Literal[{{#allowableValues}}{{#enumVars}}{{#isString}}"{{{value}}}"{{/isString}}{{^isString}}{{{value}}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}]]{{/required}} = Field(
4648
{{#required}}...{{/required}}{{^required}}None{{/required}},
4749
description="{{description}}{{^description}}{{{name}}} of the {{classname}}{{/description}}"
4850
)
@@ -51,8 +53,8 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
5153
{{/values}}
5254
{{/isArray}}
5355
{{#isArray}}
54-
{{! Array enum - use List[enum type] }}
55-
{{name}}: {{#required}}List[{{datatypeWithEnum}}]{{/required}}{{^required}}Optional[List[{{datatypeWithEnum}}]]{{/required}} = Field(
56+
{{! Array enum - use List[Literal] }}
57+
{{name}}: {{#required}}List[Literal[{{#allowableValues}}{{#enumVars}}{{#isString}}"{{{value}}}"{{/isString}}{{^isString}}{{{value}}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}]]{{/required}}{{^required}}Optional[List[Literal[{{#allowableValues}}{{#enumVars}}{{#isString}}"{{{value}}}"{{/isString}}{{^isString}}{{{value}}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}]]]{{/required}} = Field(
5658
{{#required}}...{{/required}}{{^required}}None{{/required}},
5759
description="{{description}}{{^description}}{{{name}}} of the {{classname}}{{/description}}"
5860
)
@@ -109,18 +111,18 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}}
109111
{{#isContainer}}
110112
{{#isArray}}
111113
for i in value:
112-
if i not in set([{{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}]):
113-
raise ValueError("each list item must be one of ({{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}})")
114+
if i not in set([{{#allowableValues}}{{#enumVars}}{{#isString}}"{{{value}}}"{{/isString}}{{^isString}}{{{value}}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}]):
115+
raise ValueError("each list item must be one of ({{#allowableValues}}{{#enumVars}}{{#isString}}"{{{value}}}"{{/isString}}{{^isString}}{{{value}}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}})")
114116
{{/isArray}}
115117
{{#isMap}}
116118
for i in value.values():
117-
if i not in set([{{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}]):
118-
raise ValueError("dict values must be one of enum values ({{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}})")
119+
if i not in set([{{#allowableValues}}{{#enumVars}}{{#isString}}"{{{value}}}"{{/isString}}{{^isString}}{{{value}}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}]):
120+
raise ValueError("dict values must be one of enum values ({{#allowableValues}}{{#enumVars}}{{#isString}}"{{{value}}}"{{/isString}}{{^isString}}{{{value}}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}})")
119121
{{/isMap}}
120122
{{/isContainer}}
121123
{{^isContainer}}
122-
if value not in set([{{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}]):
123-
raise ValueError("must be one of enum values ({{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}})")
124+
if value not in set([{{#allowableValues}}{{#enumVars}}{{#isString}}"{{{value}}}"{{/isString}}{{^isString}}{{{value}}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}]):
125+
raise ValueError("must be one of enum values ({{#allowableValues}}{{#enumVars}}{{#isString}}"{{{value}}}"{{/isString}}{{^isString}}{{{value}}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}})")
124126
{{/isContainer}}
125127
return value
126128
{{/isEnum}}

samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/models/bird.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020

2121
from pydantic import BaseModel, ConfigDict, StrictStr
2222
from typing import Any, ClassVar, Dict, List, Optional
23-
from typing import Optional, Set, Literal, Self
23+
from typing import Optional, Set, Literal
24+
from typing import Self
2425
from pydantic import Field
2526

2627
class Bird(BaseModel):

samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/models/category.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020

2121
from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
2222
from typing import Any, ClassVar, Dict, List, Optional
23-
from typing import Optional, Set, Literal, Self
23+
from typing import Optional, Set, Literal
24+
from typing import Self
2425
from pydantic import Field
2526

2627
class Category(BaseModel):

samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/models/data_query.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
from pydantic import ConfigDict, Field, StrictStr
2323
from typing import Any, ClassVar, Dict, List, Optional
2424
from openapi_client.models.query import Query
25-
from typing import Optional, Set, Literal, Self
25+
from typing import Optional, Set, Literal
26+
from typing import Self
2627
from pydantic import Field
2728

2829
class DataQuery(Query):

samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/models/default_value.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,16 @@
2121
from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr, field_validator
2222
from typing import Any, ClassVar, Dict, List, Optional
2323
from openapi_client.models.string_enum_ref import StringEnumRef
24-
from typing import Optional, Set, Literal, Self
24+
from typing import Optional, Set, Literal
25+
from typing import Self
2526
from pydantic import Field
2627

2728
class DefaultValue(BaseModel):
2829
"""
2930
to test the default value of properties
3031
""" # noqa: E501
3132
array_string_enum_ref_default: Optional[List[StringEnumRef]] = None
32-
array_string_enum_default: Optional[List[List[Array_string_enum_defaultEnum]]] = Field(
33+
array_string_enum_default: Optional[List[Literal["'success'", "'failure'", "'unclassified'"]]] = Field(
3334
None,
3435
description="array_string_enum_default of the DefaultValue"
3536
)
@@ -48,8 +49,8 @@ def array_string_enum_default_validate_enum(cls, value):
4849
return value
4950

5051
for i in value:
51-
if i not in set(['success', 'failure', 'unclassified']):
52-
raise ValueError("each list item must be one of ('success', 'failure', 'unclassified')")
52+
if i not in set(["'success'", "'failure'", "'unclassified'"]):
53+
raise ValueError("each list item must be one of ("'success'", "'failure'", "'unclassified'")")
5354
return value
5455

5556
model_config = ConfigDict(

samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/models/number_properties_only.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt
2222
from typing import Any, ClassVar, Dict, List, Optional, Union
2323
from typing_extensions import Annotated
24-
from typing import Optional, Set, Literal, Self
24+
from typing import Optional, Set, Literal
25+
from typing import Self
2526
from pydantic import Field
2627

2728
class NumberPropertiesOnly(BaseModel):

samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/models/pet.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
from typing import Any, ClassVar, Dict, List, Optional
2323
from openapi_client.models.category import Category
2424
from openapi_client.models.tag import Tag
25-
from typing import Optional, Set, Literal, Self
25+
from typing import Optional, Set, Literal
26+
from typing import Self
2627
from pydantic import Field
2728

2829
class Pet(BaseModel):
@@ -34,7 +35,7 @@ class Pet(BaseModel):
3435
category: Optional[Category] = None
3536
photo_urls: List[StrictStr] = Field(alias="photoUrls")
3637
tags: Optional[List[Tag]] = None
37-
status: Optional[StatusEnum] = Field(
38+
status: Optional[Literal["'available'", "'pending'", "'sold'"]] = Field(
3839
None,
3940
description="pet status in the store"
4041
)
@@ -46,8 +47,8 @@ def status_validate_enum(cls, value):
4647
if value is None:
4748
return value
4849

49-
if value not in set(['available', 'pending', 'sold']):
50-
raise ValueError("must be one of enum values ('available', 'pending', 'sold')")
50+
if value not in set(["'available'", "'pending'", "'sold'"]):
51+
raise ValueError("must be one of enum values ("'available'", "'pending'", "'sold'")")
5152
return value
5253

5354
model_config = ConfigDict(

samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/models/query.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,16 @@
2020

2121
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator
2222
from typing import Any, ClassVar, Dict, List, Optional
23-
from typing import Optional, Set, Literal, Self
23+
from typing import Optional, Set, Literal
24+
from typing import Self
2425
from pydantic import Field
2526

2627
class Query(BaseModel):
2728
"""
2829
Query
2930
""" # noqa: E501
3031
id: Optional[StrictInt] = Field(default=None, description="Query")
31-
outcomes: Optional[List[List[OutcomesEnum]]] = Field(
32+
outcomes: Optional[List[Literal["'SUCCESS'", "'FAILURE'", "'SKIPPED'"]]] = Field(
3233
None,
3334
description="outcomes of the Query"
3435
)
@@ -41,8 +42,8 @@ def outcomes_validate_enum(cls, value):
4142
return value
4243

4344
for i in value:
44-
if i not in set(['SUCCESS', 'FAILURE', 'SKIPPED']):
45-
raise ValueError("each list item must be one of ('SUCCESS', 'FAILURE', 'SKIPPED')")
45+
if i not in set(["'SUCCESS'", "'FAILURE'", "'SKIPPED'"]):
46+
raise ValueError("each list item must be one of ("'SUCCESS'", "'FAILURE'", "'SKIPPED'")")
4647
return value
4748

4849
model_config = ConfigDict(

samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/models/tag.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020

2121
from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
2222
from typing import Any, ClassVar, Dict, List, Optional
23-
from typing import Optional, Set, Literal, Self
23+
from typing import Optional, Set, Literal
24+
from typing import Self
2425
from pydantic import Field
2526

2627
class Tag(BaseModel):

0 commit comments

Comments
 (0)