Bug Report Checklist
There is no need for a detailed report. This is a simple problem with a simple fix and it applies to all versions.
Description
There is a problem with the Python family of converters when processing enums.
Basically none of them substitutes the enum var extensions.
So using a simple scheme definition
maitred_format:
type: integer
title: Message Format
enum:
- 1
- -1
- 0
x-enum-varnames:
- JSON
- Unknown
- SIBEC
x-enum-descriptions:
- JSON Descriptions
- Unknown stuff
- SIBEC Description
The python converter creates this:
class MaitredFormat(int, Enum):
"""
Encoding format of Payload.
"""
"""
allowed enum values
"""
NUMBER_1 = 1
NUMBER_MINUS_1 = -1
NUMBER_0 = 0
@classmethod
def from_json(cls, json_str: str) -> MaitredFormat:
"""Create an instance of MaitredFormat from a JSON string"""
return MaitredFormat(json.loads(json_str))
If you look at the generated model info, the relevant part is found to be.
{
...,
"model" : {
...,
"classname" : "MaitredFormat",
...,
"allowableValues" : {
"values" : [ 1, -1, 0 ],
"enumVars" : [ {
"name" : "NUMBER_1",
"isString" : false,
"enumDescription" : "JSON Descriptions",
"value" : "1"
}, {
"name" : "NUMBER_MINUS_1",
"isString" : false,
"enumDescription" : "Unknown stuff",
"value" : "-1"
}, {
"name" : "NUMBER_0",
"isString" : false,
"enumDescription" : "SIBEC Descriptions.",
"value" : "0"
} ]
},
...
}
}
This is because updateEnumVarsWithExtensions() is never called and to fix it, its a simple matter of adding
@Override
public ModelsMap postProcessModels(ModelsMap objs) {
// process enum in models
return postProcessModelsEnum(objs);
}
to the relevant Python????Codegen.java module.
There are a fair number of other language models that don't include a postProcessModels override, not sure if it matters, or not, but it probably does.
Taking a language that does include the call, in this case, csharp, you generate the correct form of enum, i.e.
namespace Org.OpenAPITools.Model
{
public enum MaitredFormat
{
JSON = 1,
Unknown = -1,
SIBEC = 0,
}
}
This is because the model has been processed and looks like this.
{
...,
"model" : {
...,
"classname" : "MaitredFormat",
...,
"allowableValues" : {
"values" : [ 1, -1, 0 ],
"enumVars" : [ {
"name" : "JSON",
"isString" : false,
"enumDescription" : "JSON Descriptions",
"value" : "1"
}, {
"name" : "Unknown",
"isString" : false,
"enumDescription" : "Unknown stuff",
"value" : "-1"
}, {
"name" : "SIBEC",
"isString" : false,
"enumDescription" : "SIBEC Descriptions.",
"value" : "0"
} ]
},
...
}
}
Suggest a fix
Repeat adding
@Override
public ModelsMap postProcessModels(ModelsMap objs) {
// process enum in models
return postProcessModelsEnum(objs);
}
to the relevant Python????Codegen.java module.
Bug Report Checklist
There is no need for a detailed report. This is a simple problem with a simple fix and it applies to all versions.
Description
There is a problem with the Python family of converters when processing
enums.Basically none of them substitutes the enum var extensions.
So using a simple scheme definition
The python converter creates this:
If you look at the generated model info, the relevant part is found to be.
{ ..., "model" : { ..., "classname" : "MaitredFormat", ..., "allowableValues" : { "values" : [ 1, -1, 0 ], "enumVars" : [ { "name" : "NUMBER_1", "isString" : false, "enumDescription" : "JSON Descriptions", "value" : "1" }, { "name" : "NUMBER_MINUS_1", "isString" : false, "enumDescription" : "Unknown stuff", "value" : "-1" }, { "name" : "NUMBER_0", "isString" : false, "enumDescription" : "SIBEC Descriptions.", "value" : "0" } ] }, ... } }This is because
updateEnumVarsWithExtensions()is never called and to fix it, its a simple matter of addingto the relevant Python????Codegen.java module.
There are a fair number of other language models that don't include a
postProcessModelsoverride, not sure if it matters, or not, but it probably does.Taking a language that does include the call, in this case, csharp, you generate the correct form of
enum, i.e.This is because the model has been processed and looks like this.
{ ..., "model" : { ..., "classname" : "MaitredFormat", ..., "allowableValues" : { "values" : [ 1, -1, 0 ], "enumVars" : [ { "name" : "JSON", "isString" : false, "enumDescription" : "JSON Descriptions", "value" : "1" }, { "name" : "Unknown", "isString" : false, "enumDescription" : "Unknown stuff", "value" : "-1" }, { "name" : "SIBEC", "isString" : false, "enumDescription" : "SIBEC Descriptions.", "value" : "0" } ] }, ... } }Suggest a fix
Repeat adding
to the relevant Python????Codegen.java module.