Fix the post processing of enums in the Python generator, such that it uses the proper variable namesfrom x-enum-varnames (#18566)

Remove sample
This commit is contained in:
0xMattijs
2024-05-11 18:40:06 +02:00
committed by GitHub
parent eec30f2cda
commit 365fcd3fb4
10 changed files with 141 additions and 5 deletions

View File

@@ -992,7 +992,10 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co
enumVars.put("name", toEnumVariableName((String) enumVars.get("value"), "str")); enumVars.put("name", toEnumVariableName((String) enumVars.get("value"), "str"));
} else { } else {
model.vendorExtensions.putIfAbsent("x-py-enum-type", "int"); model.vendorExtensions.putIfAbsent("x-py-enum-type", "int");
enumVars.put("name", toEnumVariableName((String) enumVars.get("value"), "int")); // Do not overwrite the variable name if already set through x-enum-varnames
if (model.vendorExtensions.get("x-enum-varnames") == null) {
enumVars.put("name", toEnumVariableName((String) enumVars.get("value"), "int"));
}
} }
} }
} }

View File

@@ -2060,6 +2060,35 @@ components:
enum: enum:
- 1.1 - 1.1
- -1.2 - -1.2
enum_number_vendor_ext:
type: integer
format: int32
enum:
- 42
- 18
- 56
x-enum-descriptions:
- 'Description for 42'
- 'Description for 18'
- 'Description for 56'
x-enum-varnames:
- FortyTwo
- Eigtheen
- FiftySix
enum_string_vendor_ext:
type: string
enum:
- FOO
- Bar
- baz
x-enum-descriptions:
- 'Description for FOO'
- 'Description for Bar'
- 'Description for baz'
x-enum-varnames:
- FOOVar
- BarVar
- bazVar
outerEnum: outerEnum:
$ref: '#/components/schemas/OuterEnum' $ref: '#/components/schemas/OuterEnum'
outerEnumInteger: outerEnumInteger:

View File

@@ -10,6 +10,8 @@ Name | Type | Description | Notes
**enum_integer_default** | **int** | | [optional] [default to 5] **enum_integer_default** | **int** | | [optional] [default to 5]
**enum_integer** | **int** | | [optional] **enum_integer** | **int** | | [optional]
**enum_number** | **float** | | [optional] **enum_number** | **float** | | [optional]
**enum_number_vendor_ext** | **int** | | [optional]
**enum_string_vendor_ext** | **str** | | [optional]
**outer_enum** | [**OuterEnum**](OuterEnum.md) | | [optional] **outer_enum** | [**OuterEnum**](OuterEnum.md) | | [optional]
**outer_enum_integer** | [**OuterEnumInteger**](OuterEnumInteger.md) | | [optional] **outer_enum_integer** | [**OuterEnumInteger**](OuterEnumInteger.md) | | [optional]
**outer_enum_default_value** | [**OuterEnumDefaultValue**](OuterEnumDefaultValue.md) | | [optional] **outer_enum_default_value** | [**OuterEnumDefaultValue**](OuterEnumDefaultValue.md) | | [optional]

View File

@@ -35,11 +35,13 @@ class EnumTest(BaseModel):
enum_integer_default: Optional[StrictInt] = 5 enum_integer_default: Optional[StrictInt] = 5
enum_integer: Optional[StrictInt] = None enum_integer: Optional[StrictInt] = None
enum_number: Optional[float] = None enum_number: Optional[float] = None
enum_number_vendor_ext: Optional[StrictInt] = None
enum_string_vendor_ext: Optional[StrictStr] = None
outer_enum: Optional[OuterEnum] = Field(default=None, alias="outerEnum") outer_enum: Optional[OuterEnum] = Field(default=None, alias="outerEnum")
outer_enum_integer: Optional[OuterEnumInteger] = Field(default=None, alias="outerEnumInteger") outer_enum_integer: Optional[OuterEnumInteger] = Field(default=None, alias="outerEnumInteger")
outer_enum_default_value: Optional[OuterEnumDefaultValue] = Field(default=None, alias="outerEnumDefaultValue") outer_enum_default_value: Optional[OuterEnumDefaultValue] = Field(default=None, alias="outerEnumDefaultValue")
outer_enum_integer_default_value: Optional[OuterEnumIntegerDefaultValue] = Field(default=None, alias="outerEnumIntegerDefaultValue") outer_enum_integer_default_value: Optional[OuterEnumIntegerDefaultValue] = Field(default=None, alias="outerEnumIntegerDefaultValue")
__properties: ClassVar[List[str]] = ["enum_string", "enum_string_required", "enum_integer_default", "enum_integer", "enum_number", "outerEnum", "outerEnumInteger", "outerEnumDefaultValue", "outerEnumIntegerDefaultValue"] __properties: ClassVar[List[str]] = ["enum_string", "enum_string_required", "enum_integer_default", "enum_integer", "enum_number", "enum_number_vendor_ext", "enum_string_vendor_ext", "outerEnum", "outerEnumInteger", "outerEnumDefaultValue", "outerEnumIntegerDefaultValue"]
@field_validator('enum_string') @field_validator('enum_string')
def enum_string_validate_enum(cls, value): def enum_string_validate_enum(cls, value):
@@ -88,6 +90,26 @@ class EnumTest(BaseModel):
raise ValueError("must be one of enum values (1.1, -1.2)") raise ValueError("must be one of enum values (1.1, -1.2)")
return value return value
@field_validator('enum_number_vendor_ext')
def enum_number_vendor_ext_validate_enum(cls, value):
"""Validates the enum"""
if value is None:
return value
if value not in set([42, 18, 56]):
raise ValueError("must be one of enum values (42, 18, 56)")
return value
@field_validator('enum_string_vendor_ext')
def enum_string_vendor_ext_validate_enum(cls, value):
"""Validates the enum"""
if value is None:
return value
if value not in set(['FOO', 'Bar', 'baz']):
raise ValueError("must be one of enum values ('FOO', 'Bar', 'baz')")
return value
model_config = ConfigDict( model_config = ConfigDict(
populate_by_name=True, populate_by_name=True,
validate_assignment=True, validate_assignment=True,
@@ -149,6 +171,8 @@ class EnumTest(BaseModel):
"enum_integer_default": obj.get("enum_integer_default") if obj.get("enum_integer_default") is not None else 5, "enum_integer_default": obj.get("enum_integer_default") if obj.get("enum_integer_default") is not None else 5,
"enum_integer": obj.get("enum_integer"), "enum_integer": obj.get("enum_integer"),
"enum_number": obj.get("enum_number"), "enum_number": obj.get("enum_number"),
"enum_number_vendor_ext": obj.get("enum_number_vendor_ext"),
"enum_string_vendor_ext": obj.get("enum_string_vendor_ext"),
"outerEnum": obj.get("outerEnum"), "outerEnum": obj.get("outerEnum"),
"outerEnumInteger": obj.get("outerEnumInteger"), "outerEnumInteger": obj.get("outerEnumInteger"),
"outerEnumDefaultValue": obj.get("outerEnumDefaultValue"), "outerEnumDefaultValue": obj.get("outerEnumDefaultValue"),

View File

@@ -9,6 +9,8 @@ Name | Type | Description | Notes
**enum_integer_default** | **int** | | [optional] [default to 5] **enum_integer_default** | **int** | | [optional] [default to 5]
**enum_integer** | **int** | | [optional] **enum_integer** | **int** | | [optional]
**enum_number** | **float** | | [optional] **enum_number** | **float** | | [optional]
**enum_number_vendor_ext** | **int** | | [optional]
**enum_string_vendor_ext** | **str** | | [optional]
**outer_enum** | [**OuterEnum**](OuterEnum.md) | | [optional] **outer_enum** | [**OuterEnum**](OuterEnum.md) | | [optional]
**outer_enum_integer** | [**OuterEnumInteger**](OuterEnumInteger.md) | | [optional] **outer_enum_integer** | [**OuterEnumInteger**](OuterEnumInteger.md) | | [optional]
**outer_enum_default_value** | [**OuterEnumDefaultValue**](OuterEnumDefaultValue.md) | | [optional] **outer_enum_default_value** | [**OuterEnumDefaultValue**](OuterEnumDefaultValue.md) | | [optional]

View File

@@ -34,11 +34,13 @@ class EnumTest(BaseModel):
enum_integer_default: Optional[StrictInt] = 5 enum_integer_default: Optional[StrictInt] = 5
enum_integer: Optional[StrictInt] = None enum_integer: Optional[StrictInt] = None
enum_number: Optional[float] = None enum_number: Optional[float] = None
enum_number_vendor_ext: Optional[StrictInt] = None
enum_string_vendor_ext: Optional[StrictStr] = None
outer_enum: Optional[OuterEnum] = Field(default=None, alias="outerEnum") outer_enum: Optional[OuterEnum] = Field(default=None, alias="outerEnum")
outer_enum_integer: Optional[OuterEnumInteger] = Field(default=None, alias="outerEnumInteger") outer_enum_integer: Optional[OuterEnumInteger] = Field(default=None, alias="outerEnumInteger")
outer_enum_default_value: Optional[OuterEnumDefaultValue] = Field(default=None, alias="outerEnumDefaultValue") outer_enum_default_value: Optional[OuterEnumDefaultValue] = Field(default=None, alias="outerEnumDefaultValue")
outer_enum_integer_default_value: Optional[OuterEnumIntegerDefaultValue] = Field(default=None, alias="outerEnumIntegerDefaultValue") outer_enum_integer_default_value: Optional[OuterEnumIntegerDefaultValue] = Field(default=None, alias="outerEnumIntegerDefaultValue")
__properties = ["enum_string", "enum_string_required", "enum_integer_default", "enum_integer", "enum_number", "outerEnum", "outerEnumInteger", "outerEnumDefaultValue", "outerEnumIntegerDefaultValue"] __properties = ["enum_string", "enum_string_required", "enum_integer_default", "enum_integer", "enum_number", "enum_number_vendor_ext", "enum_string_vendor_ext", "outerEnum", "outerEnumInteger", "outerEnumDefaultValue", "outerEnumIntegerDefaultValue"]
@validator('enum_string') @validator('enum_string')
def enum_string_validate_enum(cls, value): def enum_string_validate_enum(cls, value):
@@ -87,6 +89,26 @@ class EnumTest(BaseModel):
raise ValueError("must be one of enum values (1.1, -1.2)") raise ValueError("must be one of enum values (1.1, -1.2)")
return value return value
@validator('enum_number_vendor_ext')
def enum_number_vendor_ext_validate_enum(cls, value):
"""Validates the enum"""
if value is None:
return value
if value not in (42, 18, 56):
raise ValueError("must be one of enum values (42, 18, 56)")
return value
@validator('enum_string_vendor_ext')
def enum_string_vendor_ext_validate_enum(cls, value):
"""Validates the enum"""
if value is None:
return value
if value not in ('FOO', 'Bar', 'baz'):
raise ValueError("must be one of enum values ('FOO', 'Bar', 'baz')")
return value
class Config: class Config:
"""Pydantic configuration""" """Pydantic configuration"""
allow_population_by_field_name = True allow_population_by_field_name = True
@@ -133,6 +155,8 @@ class EnumTest(BaseModel):
"enum_integer_default": obj.get("enum_integer_default") if obj.get("enum_integer_default") is not None else 5, "enum_integer_default": obj.get("enum_integer_default") if obj.get("enum_integer_default") is not None else 5,
"enum_integer": obj.get("enum_integer"), "enum_integer": obj.get("enum_integer"),
"enum_number": obj.get("enum_number"), "enum_number": obj.get("enum_number"),
"enum_number_vendor_ext": obj.get("enum_number_vendor_ext"),
"enum_string_vendor_ext": obj.get("enum_string_vendor_ext"),
"outer_enum": obj.get("outerEnum"), "outer_enum": obj.get("outerEnum"),
"outer_enum_integer": obj.get("outerEnumInteger"), "outer_enum_integer": obj.get("outerEnumInteger"),
"outer_enum_default_value": obj.get("outerEnumDefaultValue"), "outer_enum_default_value": obj.get("outerEnumDefaultValue"),

View File

@@ -9,6 +9,8 @@ Name | Type | Description | Notes
**enum_integer_default** | **int** | | [optional] [default to 5] **enum_integer_default** | **int** | | [optional] [default to 5]
**enum_integer** | **int** | | [optional] **enum_integer** | **int** | | [optional]
**enum_number** | **float** | | [optional] **enum_number** | **float** | | [optional]
**enum_number_vendor_ext** | **int** | | [optional]
**enum_string_vendor_ext** | **str** | | [optional]
**outer_enum** | [**OuterEnum**](OuterEnum.md) | | [optional] **outer_enum** | [**OuterEnum**](OuterEnum.md) | | [optional]
**outer_enum_integer** | [**OuterEnumInteger**](OuterEnumInteger.md) | | [optional] **outer_enum_integer** | [**OuterEnumInteger**](OuterEnumInteger.md) | | [optional]
**outer_enum_default_value** | [**OuterEnumDefaultValue**](OuterEnumDefaultValue.md) | | [optional] **outer_enum_default_value** | [**OuterEnumDefaultValue**](OuterEnumDefaultValue.md) | | [optional]

View File

@@ -34,12 +34,14 @@ class EnumTest(BaseModel):
enum_integer_default: Optional[StrictInt] = 5 enum_integer_default: Optional[StrictInt] = 5
enum_integer: Optional[StrictInt] = None enum_integer: Optional[StrictInt] = None
enum_number: Optional[StrictFloat] = None enum_number: Optional[StrictFloat] = None
enum_number_vendor_ext: Optional[StrictInt] = None
enum_string_vendor_ext: Optional[StrictStr] = None
outer_enum: Optional[OuterEnum] = Field(default=None, alias="outerEnum") outer_enum: Optional[OuterEnum] = Field(default=None, alias="outerEnum")
outer_enum_integer: Optional[OuterEnumInteger] = Field(default=None, alias="outerEnumInteger") outer_enum_integer: Optional[OuterEnumInteger] = Field(default=None, alias="outerEnumInteger")
outer_enum_default_value: Optional[OuterEnumDefaultValue] = Field(default=None, alias="outerEnumDefaultValue") outer_enum_default_value: Optional[OuterEnumDefaultValue] = Field(default=None, alias="outerEnumDefaultValue")
outer_enum_integer_default_value: Optional[OuterEnumIntegerDefaultValue] = Field(default=None, alias="outerEnumIntegerDefaultValue") outer_enum_integer_default_value: Optional[OuterEnumIntegerDefaultValue] = Field(default=None, alias="outerEnumIntegerDefaultValue")
additional_properties: Dict[str, Any] = {} additional_properties: Dict[str, Any] = {}
__properties = ["enum_string", "enum_string_required", "enum_integer_default", "enum_integer", "enum_number", "outerEnum", "outerEnumInteger", "outerEnumDefaultValue", "outerEnumIntegerDefaultValue"] __properties = ["enum_string", "enum_string_required", "enum_integer_default", "enum_integer", "enum_number", "enum_number_vendor_ext", "enum_string_vendor_ext", "outerEnum", "outerEnumInteger", "outerEnumDefaultValue", "outerEnumIntegerDefaultValue"]
@validator('enum_string') @validator('enum_string')
def enum_string_validate_enum(cls, value): def enum_string_validate_enum(cls, value):
@@ -88,6 +90,26 @@ class EnumTest(BaseModel):
raise ValueError("must be one of enum values (1.1, -1.2)") raise ValueError("must be one of enum values (1.1, -1.2)")
return value return value
@validator('enum_number_vendor_ext')
def enum_number_vendor_ext_validate_enum(cls, value):
"""Validates the enum"""
if value is None:
return value
if value not in (42, 18, 56):
raise ValueError("must be one of enum values (42, 18, 56)")
return value
@validator('enum_string_vendor_ext')
def enum_string_vendor_ext_validate_enum(cls, value):
"""Validates the enum"""
if value is None:
return value
if value not in ('FOO', 'Bar', 'baz'):
raise ValueError("must be one of enum values ('FOO', 'Bar', 'baz')")
return value
class Config: class Config:
"""Pydantic configuration""" """Pydantic configuration"""
allow_population_by_field_name = True allow_population_by_field_name = True
@@ -140,6 +162,8 @@ class EnumTest(BaseModel):
"enum_integer_default": obj.get("enum_integer_default") if obj.get("enum_integer_default") is not None else 5, "enum_integer_default": obj.get("enum_integer_default") if obj.get("enum_integer_default") is not None else 5,
"enum_integer": obj.get("enum_integer"), "enum_integer": obj.get("enum_integer"),
"enum_number": obj.get("enum_number"), "enum_number": obj.get("enum_number"),
"enum_number_vendor_ext": obj.get("enum_number_vendor_ext"),
"enum_string_vendor_ext": obj.get("enum_string_vendor_ext"),
"outer_enum": obj.get("outerEnum"), "outer_enum": obj.get("outerEnum"),
"outer_enum_integer": obj.get("outerEnumInteger"), "outer_enum_integer": obj.get("outerEnumInteger"),
"outer_enum_default_value": obj.get("outerEnumDefaultValue"), "outer_enum_default_value": obj.get("outerEnumDefaultValue"),

View File

@@ -10,6 +10,8 @@ Name | Type | Description | Notes
**enum_integer_default** | **int** | | [optional] [default to 5] **enum_integer_default** | **int** | | [optional] [default to 5]
**enum_integer** | **int** | | [optional] **enum_integer** | **int** | | [optional]
**enum_number** | **float** | | [optional] **enum_number** | **float** | | [optional]
**enum_number_vendor_ext** | **int** | | [optional]
**enum_string_vendor_ext** | **str** | | [optional]
**outer_enum** | [**OuterEnum**](OuterEnum.md) | | [optional] **outer_enum** | [**OuterEnum**](OuterEnum.md) | | [optional]
**outer_enum_integer** | [**OuterEnumInteger**](OuterEnumInteger.md) | | [optional] **outer_enum_integer** | [**OuterEnumInteger**](OuterEnumInteger.md) | | [optional]
**outer_enum_default_value** | [**OuterEnumDefaultValue**](OuterEnumDefaultValue.md) | | [optional] **outer_enum_default_value** | [**OuterEnumDefaultValue**](OuterEnumDefaultValue.md) | | [optional]

View File

@@ -35,12 +35,14 @@ class EnumTest(BaseModel):
enum_integer_default: Optional[StrictInt] = 5 enum_integer_default: Optional[StrictInt] = 5
enum_integer: Optional[StrictInt] = None enum_integer: Optional[StrictInt] = None
enum_number: Optional[StrictFloat] = None enum_number: Optional[StrictFloat] = None
enum_number_vendor_ext: Optional[StrictInt] = None
enum_string_vendor_ext: Optional[StrictStr] = None
outer_enum: Optional[OuterEnum] = Field(default=None, alias="outerEnum") outer_enum: Optional[OuterEnum] = Field(default=None, alias="outerEnum")
outer_enum_integer: Optional[OuterEnumInteger] = Field(default=None, alias="outerEnumInteger") outer_enum_integer: Optional[OuterEnumInteger] = Field(default=None, alias="outerEnumInteger")
outer_enum_default_value: Optional[OuterEnumDefaultValue] = Field(default=None, alias="outerEnumDefaultValue") outer_enum_default_value: Optional[OuterEnumDefaultValue] = Field(default=None, alias="outerEnumDefaultValue")
outer_enum_integer_default_value: Optional[OuterEnumIntegerDefaultValue] = Field(default=None, alias="outerEnumIntegerDefaultValue") outer_enum_integer_default_value: Optional[OuterEnumIntegerDefaultValue] = Field(default=None, alias="outerEnumIntegerDefaultValue")
additional_properties: Dict[str, Any] = {} additional_properties: Dict[str, Any] = {}
__properties: ClassVar[List[str]] = ["enum_string", "enum_string_required", "enum_integer_default", "enum_integer", "enum_number", "outerEnum", "outerEnumInteger", "outerEnumDefaultValue", "outerEnumIntegerDefaultValue"] __properties: ClassVar[List[str]] = ["enum_string", "enum_string_required", "enum_integer_default", "enum_integer", "enum_number", "enum_number_vendor_ext", "enum_string_vendor_ext", "outerEnum", "outerEnumInteger", "outerEnumDefaultValue", "outerEnumIntegerDefaultValue"]
@field_validator('enum_string') @field_validator('enum_string')
def enum_string_validate_enum(cls, value): def enum_string_validate_enum(cls, value):
@@ -89,6 +91,26 @@ class EnumTest(BaseModel):
raise ValueError("must be one of enum values (1.1, -1.2)") raise ValueError("must be one of enum values (1.1, -1.2)")
return value return value
@field_validator('enum_number_vendor_ext')
def enum_number_vendor_ext_validate_enum(cls, value):
"""Validates the enum"""
if value is None:
return value
if value not in set([42, 18, 56]):
raise ValueError("must be one of enum values (42, 18, 56)")
return value
@field_validator('enum_string_vendor_ext')
def enum_string_vendor_ext_validate_enum(cls, value):
"""Validates the enum"""
if value is None:
return value
if value not in set(['FOO', 'Bar', 'baz']):
raise ValueError("must be one of enum values ('FOO', 'Bar', 'baz')")
return value
model_config = ConfigDict( model_config = ConfigDict(
populate_by_name=True, populate_by_name=True,
validate_assignment=True, validate_assignment=True,
@@ -157,6 +179,8 @@ class EnumTest(BaseModel):
"enum_integer_default": obj.get("enum_integer_default") if obj.get("enum_integer_default") is not None else 5, "enum_integer_default": obj.get("enum_integer_default") if obj.get("enum_integer_default") is not None else 5,
"enum_integer": obj.get("enum_integer"), "enum_integer": obj.get("enum_integer"),
"enum_number": obj.get("enum_number"), "enum_number": obj.get("enum_number"),
"enum_number_vendor_ext": obj.get("enum_number_vendor_ext"),
"enum_string_vendor_ext": obj.get("enum_string_vendor_ext"),
"outerEnum": obj.get("outerEnum"), "outerEnum": obj.get("outerEnum"),
"outerEnumInteger": obj.get("outerEnumInteger"), "outerEnumInteger": obj.get("outerEnumInteger"),
"outerEnumDefaultValue": obj.get("outerEnumDefaultValue"), "outerEnumDefaultValue": obj.get("outerEnumDefaultValue"),