mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-12-07 08:36:08 +00:00
Compare commits
5 Commits
update-dat
...
ranjanp75-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3a502aab8d | ||
|
|
fa242fcb46 | ||
|
|
17a184c2b0 | ||
|
|
0cee6d9419 | ||
|
|
b40e4d81b4 |
@@ -7,6 +7,7 @@ additionalProperties:
|
||||
packageName: petstore_api
|
||||
mapNumberTo: float
|
||||
poetry1: true
|
||||
enumUnknownDefaultCase: true
|
||||
nameMappings:
|
||||
_type: underscore_type
|
||||
type_: type_with_underscore
|
||||
|
||||
@@ -22,6 +22,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
||||
|dateFormat|date format for query parameters| |%Y-%m-%d|
|
||||
|datetimeFormat|datetime format for query parameters| |%Y-%m-%dT%H:%M:%S%z|
|
||||
|disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|<dl><dt>**false**</dt><dd>The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.</dd><dt>**true**</dt><dd>Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.</dd></dl>|true|
|
||||
|enumUnknownDefaultCase|If the server adds new enum cases, that are unknown by an old spec/client, the client will fail to parse the network response.With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the server sends an enum case that is not known by the client/spec, they can safely fallback to this case.| |false|
|
||||
|generateSourceCodeOnly|Specifies that only a library source code is to be generated.| |false|
|
||||
|hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true|
|
||||
|lazyImports|Enable lazy imports.| |false|
|
||||
|
||||
@@ -153,6 +153,7 @@ public class PythonClientCodegen extends AbstractPythonCodegen implements Codege
|
||||
cliOptions.add(new CliOption(CodegenConstants.USE_ONEOF_DISCRIMINATOR_LOOKUP, CodegenConstants.USE_ONEOF_DISCRIMINATOR_LOOKUP_DESC).defaultValue("false"));
|
||||
cliOptions.add(new CliOption(POETRY1_FALLBACK, "Fallback to formatting pyproject.toml to Poetry 1.x format."));
|
||||
cliOptions.add(new CliOption(LAZY_IMPORTS, "Enable lazy imports.").defaultValue(Boolean.FALSE.toString()));
|
||||
cliOptions.add(new CliOption(CodegenConstants.ENUM_UNKNOWN_DEFAULT_CASE, CodegenConstants.ENUM_UNKNOWN_DEFAULT_CASE_DESC).defaultValue("false"));
|
||||
|
||||
supportedLibraries.put("urllib3", "urllib3-based client");
|
||||
supportedLibraries.put("asyncio", "asyncio-based client");
|
||||
@@ -271,6 +272,10 @@ public class PythonClientCodegen extends AbstractPythonCodegen implements Codege
|
||||
additionalProperties.put(LAZY_IMPORTS, Boolean.valueOf(additionalProperties.get(LAZY_IMPORTS).toString()));
|
||||
}
|
||||
|
||||
if (additionalProperties.containsKey(CodegenConstants.ENUM_UNKNOWN_DEFAULT_CASE)) {
|
||||
setEnumUnknownDefaultCase(Boolean.parseBoolean(additionalProperties.get(CodegenConstants.ENUM_UNKNOWN_DEFAULT_CASE).toString()));
|
||||
}
|
||||
|
||||
String modelPath = packagePath() + File.separatorChar + modelPackage.replace('.', File.separatorChar);
|
||||
String apiPath = packagePath() + File.separatorChar + apiPackage.replace('.', File.separatorChar);
|
||||
|
||||
|
||||
@@ -24,6 +24,13 @@ class {{classname}}({{vendorExtensions.x-py-enum-type}}, Enum):
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of {{classname}} from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
{{#enumUnknownDefaultCase}}
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
{{/enumUnknownDefaultCase}}
|
||||
|
||||
{{#defaultValue}}
|
||||
|
||||
|
||||
@@ -26,6 +26,8 @@ import io.swagger.v3.parser.core.models.ParseOptions;
|
||||
import io.swagger.v3.parser.util.SchemaTypeUtil;
|
||||
import org.openapitools.codegen.*;
|
||||
import org.openapitools.codegen.config.CodegenConfigurator;
|
||||
import org.openapitools.codegen.model.ModelMap;
|
||||
import org.openapitools.codegen.model.ModelsMap;
|
||||
import org.openapitools.codegen.languages.PythonClientCodegen;
|
||||
import org.openapitools.codegen.languages.features.CXFServerFeatures;
|
||||
import org.testng.Assert;
|
||||
@@ -38,6 +40,8 @@ import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
@@ -47,6 +51,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.openapitools.codegen.TestUtils.assertFileContains;
|
||||
import static org.openapitools.codegen.TestUtils.assertFileExists;
|
||||
import static org.openapitools.codegen.TestUtils.assertFileNotContains;
|
||||
|
||||
public class PythonClientCodegenTest {
|
||||
|
||||
@@ -685,4 +690,120 @@ public class PythonClientCodegenTest {
|
||||
// Verify it does NOT use the legacy string format
|
||||
TestUtils.assertFileNotContains(pyprojectPath, "license = \"BSD-3-Clause\"");
|
||||
}
|
||||
|
||||
@Test(description = "test enumUnknownDefaultCase option")
|
||||
public void testEnumUnknownDefaultCaseOption() {
|
||||
final PythonClientCodegen codegen = new PythonClientCodegen();
|
||||
|
||||
// Test default value is false
|
||||
codegen.processOpts();
|
||||
Assert.assertEquals(codegen.getEnumUnknownDefaultCase(), Boolean.FALSE);
|
||||
|
||||
// Test setting via additionalProperties
|
||||
codegen.additionalProperties().put(CodegenConstants.ENUM_UNKNOWN_DEFAULT_CASE, "true");
|
||||
codegen.processOpts();
|
||||
Assert.assertEquals(codegen.getEnumUnknownDefaultCase(), Boolean.TRUE);
|
||||
}
|
||||
|
||||
@Test(description = "test enum model generation with enumUnknownDefaultCase")
|
||||
public void testEnumModelWithUnknownDefaultCase() {
|
||||
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/enum_unknown_default_case.yaml");
|
||||
final PythonClientCodegen codegen = new PythonClientCodegen();
|
||||
|
||||
// Enable enumUnknownDefaultCase
|
||||
codegen.additionalProperties().put(CodegenConstants.ENUM_UNKNOWN_DEFAULT_CASE, "true");
|
||||
codegen.setOpenAPI(openAPI);
|
||||
codegen.processOpts();
|
||||
|
||||
// Verify that enumUnknownDefaultCase is set
|
||||
Assert.assertEquals(codegen.getEnumUnknownDefaultCase(), Boolean.TRUE);
|
||||
|
||||
// Process all models to trigger enum processing
|
||||
Map<String, Schema> schemas = openAPI.getComponents().getSchemas();
|
||||
Map<String, ModelsMap> allModels = new HashMap<>();
|
||||
for (String modelName : schemas.keySet()) {
|
||||
Schema schema = schemas.get(modelName);
|
||||
CodegenModel cm = codegen.fromModel(modelName, schema);
|
||||
ModelsMap modelsMap = new ModelsMap();
|
||||
modelsMap.setModels(Collections.singletonList(new ModelMap(Collections.singletonMap("model", cm))));
|
||||
allModels.put(modelName, modelsMap);
|
||||
}
|
||||
|
||||
// Post-process to add enumVars
|
||||
allModels = codegen.postProcessAllModels(allModels);
|
||||
|
||||
// Get the ColorEnum model
|
||||
CodegenModel colorEnum = null;
|
||||
for (Map.Entry<String, ModelsMap> entry : allModels.entrySet()) {
|
||||
if ("ColorEnum".equals(entry.getKey())) {
|
||||
colorEnum = entry.getValue().getModels().get(0).getModel();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Assert.assertNotNull(colorEnum);
|
||||
Assert.assertNotNull(colorEnum.allowableValues);
|
||||
|
||||
List<Map<String, Object>> enumVars = (List<Map<String, Object>>) colorEnum.allowableValues.get("enumVars");
|
||||
Assert.assertNotNull(enumVars);
|
||||
|
||||
// Check that we have the expected enum values including UNKNOWN_DEFAULT_OPEN_API
|
||||
Assert.assertTrue(enumVars.stream().anyMatch(var -> "'RED'".equals(var.get("value"))));
|
||||
Assert.assertTrue(enumVars.stream().anyMatch(var -> "'GREEN'".equals(var.get("value"))));
|
||||
Assert.assertTrue(enumVars.stream().anyMatch(var -> "'BLUE'".equals(var.get("value"))));
|
||||
Assert.assertTrue(enumVars.stream().anyMatch(var -> "'YELLOW'".equals(var.get("value"))));
|
||||
Assert.assertTrue(enumVars.stream().anyMatch(var -> "'unknown_default_open_api'".equals(var.get("value"))));
|
||||
}
|
||||
|
||||
@Test(description = "test enum generation with enumUnknownDefaultCase enabled")
|
||||
public void testEnumGenerationWithUnknownDefaultCase() throws IOException {
|
||||
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
|
||||
output.deleteOnExit();
|
||||
String outputPath = output.getAbsolutePath().replace('\\', '/');
|
||||
|
||||
final CodegenConfigurator configurator = new CodegenConfigurator()
|
||||
.setGeneratorName("python")
|
||||
.setInputSpec("src/test/resources/3_0/enum_unknown_default_case.yaml")
|
||||
.setOutputDir(outputPath)
|
||||
.addAdditionalProperty(CodegenConstants.ENUM_UNKNOWN_DEFAULT_CASE, "true");
|
||||
|
||||
DefaultGenerator generator = new DefaultGenerator();
|
||||
List<File> files = generator.opts(configurator.toClientOptInput()).generate();
|
||||
files.forEach(File::deleteOnExit);
|
||||
|
||||
Path enumFile = Paths.get(outputPath, "openapi_client", "models", "color_enum.py");
|
||||
|
||||
// Check that UNKNOWN_DEFAULT_OPEN_API is added (with single quotes as Python generates)
|
||||
TestUtils.assertFileContains(enumFile, "UNKNOWN_DEFAULT_OPEN_API = 'unknown_default_open_api'");
|
||||
|
||||
// Check that _missing_ method is added
|
||||
TestUtils.assertFileContains(enumFile, "@classmethod");
|
||||
TestUtils.assertFileContains(enumFile, "def _missing_(cls, value):");
|
||||
TestUtils.assertFileContains(enumFile, "return cls.UNKNOWN_DEFAULT_OPEN_API");
|
||||
}
|
||||
|
||||
@Test(description = "test enum generation with enumUnknownDefaultCase disabled")
|
||||
public void testEnumGenerationWithoutUnknownDefaultCase() throws IOException {
|
||||
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
|
||||
output.deleteOnExit();
|
||||
String outputPath = output.getAbsolutePath().replace('\\', '/');
|
||||
|
||||
final CodegenConfigurator configurator = new CodegenConfigurator()
|
||||
.setGeneratorName("python")
|
||||
.setInputSpec("src/test/resources/3_0/enum_unknown_default_case.yaml")
|
||||
.setOutputDir(outputPath)
|
||||
.addAdditionalProperty(CodegenConstants.ENUM_UNKNOWN_DEFAULT_CASE, "false");
|
||||
|
||||
DefaultGenerator generator = new DefaultGenerator();
|
||||
List<File> files = generator.opts(configurator.toClientOptInput()).generate();
|
||||
files.forEach(File::deleteOnExit);
|
||||
|
||||
Path enumFile = Paths.get(outputPath, "openapi_client", "models", "color_enum.py");
|
||||
|
||||
// Check that UNKNOWN_DEFAULT_OPEN_API is NOT added
|
||||
TestUtils.assertFileNotContains(enumFile, "UNKNOWN_DEFAULT_OPEN_API");
|
||||
|
||||
// Check that _missing_ method is NOT added
|
||||
TestUtils.assertFileNotContains(enumFile, "def _missing_(cls, value):");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
openapi: 3.0.0
|
||||
info:
|
||||
title: Enum Test API
|
||||
description: API for testing enum generation with enumUnknownDefaultCase
|
||||
version: 1.0.0
|
||||
paths:
|
||||
/colors:
|
||||
get:
|
||||
summary: Get color
|
||||
operationId: getColor
|
||||
responses:
|
||||
'200':
|
||||
description: Successful response
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ColorResponse'
|
||||
components:
|
||||
schemas:
|
||||
ColorResponse:
|
||||
type: object
|
||||
required:
|
||||
- color
|
||||
- status
|
||||
properties:
|
||||
color:
|
||||
$ref: '#/components/schemas/ColorEnum'
|
||||
status:
|
||||
$ref: '#/components/schemas/StatusEnum'
|
||||
priority:
|
||||
$ref: '#/components/schemas/PriorityEnum'
|
||||
ColorEnum:
|
||||
type: string
|
||||
description: Available colors
|
||||
enum:
|
||||
- RED
|
||||
- GREEN
|
||||
- BLUE
|
||||
- YELLOW
|
||||
StatusEnum:
|
||||
type: string
|
||||
description: Status values
|
||||
enum:
|
||||
- PENDING
|
||||
- APPROVED
|
||||
- REJECTED
|
||||
- IN_PROGRESS
|
||||
PriorityEnum:
|
||||
type: integer
|
||||
description: Priority levels
|
||||
enum:
|
||||
- 1
|
||||
- 2
|
||||
- 3
|
||||
- 4
|
||||
- 5
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
* `XML` (value: `'XML'`)
|
||||
|
||||
* `UNKNOWN_DEFAULT_OPEN_API` (value: `'unknown_default_open_api'`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
* `LEFT_PARENTHESIS_XYZ_RIGHT_PARENTHESIS` (value: `'(xyz)'`)
|
||||
|
||||
* `UNKNOWN_DEFAULT_OPEN_API` (value: `'unknown_default_open_api'`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
* `FiftySix` (value: `56`)
|
||||
|
||||
* `unknown_default_open_api` (value: `11184809`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
|
||||
* `B` (value: `'b'`)
|
||||
|
||||
* `UNKNOWN_DEFAULT_OPEN_API` (value: `'unknown_default_open_api'`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
|
||||
* `D` (value: `'d'`)
|
||||
|
||||
* `UNKNOWN_DEFAULT_OPEN_API` (value: `'unknown_default_open_api'`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
* `bazVar_XEnumVarname` (value: `'baz'`)
|
||||
|
||||
* `'unknown_default_open_api'` (value: `'unknown_default_open_api'`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -12,6 +12,8 @@ oneOf enum strings
|
||||
|
||||
* `D` (value: `'d'`)
|
||||
|
||||
* `UNKNOWN_DEFAULT_OPEN_API` (value: `'unknown_default_open_api'`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
* `DELIVERED` (value: `'delivered'`)
|
||||
|
||||
* `UNKNOWN_DEFAULT_OPEN_API` (value: `'unknown_default_open_api'`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
* `DELIVERED` (value: `'delivered'`)
|
||||
|
||||
* `UNKNOWN_DEFAULT_OPEN_API` (value: `'unknown_default_open_api'`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
* `NUMBER_2` (value: `2`)
|
||||
|
||||
* `NUMBER_11184809` (value: `11184809`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
|
||||
* `NUMBER_2` (value: `2`)
|
||||
|
||||
* `NUMBER_11184809` (value: `11184809`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
|
||||
* `USER` (value: `'user'`)
|
||||
|
||||
* `UNKNOWN_DEFAULT_OPEN_API` (value: `'unknown_default_open_api'`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
|
||||
* `HELLO_WORLD` (value: `' hello world '`)
|
||||
|
||||
* `UNKNOWN_DEFAULT_OPEN_API` (value: `'unknown_default_open_api'`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
|
||||
* `FOUR` (value: `'foUr'`)
|
||||
|
||||
* `UNKNOWN_DEFAULT_OPEN_API` (value: `'unknown_default_open_api'`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
* `DREI` (value: `'DREI'`)
|
||||
|
||||
* `UNKNOWN_DEFAULT_OPEN_API` (value: `'unknown_default_open_api'`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
|
||||
* `NUMBER_0_DOT_25` (value: `0.25`)
|
||||
|
||||
* `NUMBER_11184809` (value: `11184809`)
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
||||
|
||||
@@ -34,15 +34,15 @@ class Bathing(BaseModel):
|
||||
@field_validator('task_name')
|
||||
def task_name_validate_enum(cls, value):
|
||||
"""Validates the enum"""
|
||||
if value not in set(['cleaning_deep']):
|
||||
raise ValueError("must be one of enum values ('cleaning_deep')")
|
||||
if value not in set(['cleaning_deep', 'unknown_default_open_api']):
|
||||
raise ValueError("must be one of enum values ('cleaning_deep', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
@field_validator('function_name')
|
||||
def function_name_validate_enum(cls, value):
|
||||
"""Validates the enum"""
|
||||
if value not in set(['care_nourish']):
|
||||
raise ValueError("must be one of enum values ('care_nourish')")
|
||||
if value not in set(['care_nourish', 'unknown_default_open_api']):
|
||||
raise ValueError("must be one of enum values ('care_nourish', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
model_config = ConfigDict(
|
||||
|
||||
@@ -29,10 +29,16 @@ class DataOutputFormat(str, Enum):
|
||||
JSON = 'JSON'
|
||||
CSV = 'CSV'
|
||||
XML = 'XML'
|
||||
UNKNOWN_DEFAULT_OPEN_API = 'unknown_default_open_api'
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of DataOutputFormat from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -36,8 +36,8 @@ class EnumArrays(BaseModel):
|
||||
if value is None:
|
||||
return value
|
||||
|
||||
if value not in set(['>=', '$']):
|
||||
raise ValueError("must be one of enum values ('>=', '$')")
|
||||
if value not in set(['>=', '$', 'unknown_default_open_api']):
|
||||
raise ValueError("must be one of enum values ('>=', '$', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
@field_validator('array_enum')
|
||||
@@ -47,8 +47,8 @@ class EnumArrays(BaseModel):
|
||||
return value
|
||||
|
||||
for i in value:
|
||||
if i not in set(['fish', 'crab']):
|
||||
raise ValueError("each list item must be one of ('fish', 'crab')")
|
||||
if i not in set(['fish', 'crab', 'unknown_default_open_api']):
|
||||
raise ValueError("each list item must be one of ('fish', 'crab', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
model_config = ConfigDict(
|
||||
|
||||
@@ -29,10 +29,16 @@ class EnumClass(str, Enum):
|
||||
ABC = '_abc'
|
||||
MINUS_EFG = '-efg'
|
||||
LEFT_PARENTHESIS_XYZ_RIGHT_PARENTHESIS = '(xyz)'
|
||||
UNKNOWN_DEFAULT_OPEN_API = 'unknown_default_open_api'
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of EnumClass from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -29,10 +29,16 @@ class EnumNumberVendorExt(int, Enum):
|
||||
FortyTwo = 42
|
||||
Eigtheen = 18
|
||||
FiftySix = 56
|
||||
unknown_default_open_api = 11184809
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of EnumNumberVendorExt from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -28,10 +28,16 @@ class EnumString1(str, Enum):
|
||||
"""
|
||||
A = 'a'
|
||||
B = 'b'
|
||||
UNKNOWN_DEFAULT_OPEN_API = 'unknown_default_open_api'
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of EnumString1 from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -28,10 +28,16 @@ class EnumString2(str, Enum):
|
||||
"""
|
||||
C = 'c'
|
||||
D = 'd'
|
||||
UNKNOWN_DEFAULT_OPEN_API = 'unknown_default_open_api'
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of EnumString2 from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -29,10 +29,16 @@ class EnumStringVendorExt(str, Enum):
|
||||
FOO_XEnumVarname = 'FOO'
|
||||
BarVar_XEnumVarname = 'Bar'
|
||||
bazVar_XEnumVarname = 'baz'
|
||||
'unknown_default_open_api' = 'unknown_default_open_api'
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of EnumStringVendorExt from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -53,15 +53,15 @@ class EnumTest(BaseModel):
|
||||
if value is None:
|
||||
return value
|
||||
|
||||
if value not in set(['UPPER', 'lower', '']):
|
||||
raise ValueError("must be one of enum values ('UPPER', 'lower', '')")
|
||||
if value not in set(['UPPER', 'lower', '', 'unknown_default_open_api']):
|
||||
raise ValueError("must be one of enum values ('UPPER', 'lower', '', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
@field_validator('enum_string_required')
|
||||
def enum_string_required_validate_enum(cls, value):
|
||||
"""Validates the enum"""
|
||||
if value not in set(['UPPER', 'lower', '']):
|
||||
raise ValueError("must be one of enum values ('UPPER', 'lower', '')")
|
||||
if value not in set(['UPPER', 'lower', '', 'unknown_default_open_api']):
|
||||
raise ValueError("must be one of enum values ('UPPER', 'lower', '', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
@field_validator('enum_integer_default')
|
||||
@@ -70,8 +70,8 @@ class EnumTest(BaseModel):
|
||||
if value is None:
|
||||
return value
|
||||
|
||||
if value not in set([1, 5, 14]):
|
||||
raise ValueError("must be one of enum values (1, 5, 14)")
|
||||
if value not in set([1, 5, 14, 11184809]):
|
||||
raise ValueError("must be one of enum values (1, 5, 14, 11184809)")
|
||||
return value
|
||||
|
||||
@field_validator('enum_integer')
|
||||
@@ -80,8 +80,8 @@ class EnumTest(BaseModel):
|
||||
if value is None:
|
||||
return value
|
||||
|
||||
if value not in set([1, -1]):
|
||||
raise ValueError("must be one of enum values (1, -1)")
|
||||
if value not in set([1, -1, 11184809]):
|
||||
raise ValueError("must be one of enum values (1, -1, 11184809)")
|
||||
return value
|
||||
|
||||
@field_validator('enum_number')
|
||||
@@ -90,8 +90,8 @@ class EnumTest(BaseModel):
|
||||
if value is None:
|
||||
return value
|
||||
|
||||
if value not in set([1.1, -1.2]):
|
||||
raise ValueError("must be one of enum values (1.1, -1.2)")
|
||||
if value not in set([1.1, -1.2, 11184809]):
|
||||
raise ValueError("must be one of enum values (1.1, -1.2, 11184809)")
|
||||
return value
|
||||
|
||||
@field_validator('enum_string_single_member')
|
||||
@@ -100,8 +100,8 @@ class EnumTest(BaseModel):
|
||||
if value is None:
|
||||
return value
|
||||
|
||||
if value not in set(['abc']):
|
||||
raise ValueError("must be one of enum values ('abc')")
|
||||
if value not in set(['abc', 'unknown_default_open_api']):
|
||||
raise ValueError("must be one of enum values ('abc', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
@field_validator('enum_integer_single_member')
|
||||
@@ -110,8 +110,8 @@ class EnumTest(BaseModel):
|
||||
if value is None:
|
||||
return value
|
||||
|
||||
if value not in set([100]):
|
||||
raise ValueError("must be one of enum values (100)")
|
||||
if value not in set([100, 11184809]):
|
||||
raise ValueError("must be one of enum values (100, 11184809)")
|
||||
return value
|
||||
|
||||
model_config = ConfigDict(
|
||||
|
||||
@@ -34,15 +34,15 @@ class Feeding(BaseModel):
|
||||
@field_validator('task_name')
|
||||
def task_name_validate_enum(cls, value):
|
||||
"""Validates the enum"""
|
||||
if value not in set(['cleaning']):
|
||||
raise ValueError("must be one of enum values ('cleaning')")
|
||||
if value not in set(['cleaning', 'unknown_default_open_api']):
|
||||
raise ValueError("must be one of enum values ('cleaning', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
@field_validator('function_name')
|
||||
def function_name_validate_enum(cls, value):
|
||||
"""Validates the enum"""
|
||||
if value not in set(['care_nourish']):
|
||||
raise ValueError("must be one of enum values ('care_nourish')")
|
||||
if value not in set(['care_nourish', 'unknown_default_open_api']):
|
||||
raise ValueError("must be one of enum values ('care_nourish', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
model_config = ConfigDict(
|
||||
|
||||
@@ -39,8 +39,8 @@ class MapTest(BaseModel):
|
||||
return value
|
||||
|
||||
for i in value.values():
|
||||
if i not in set(['UPPER', 'lower']):
|
||||
raise ValueError("dict values must be one of enum values ('UPPER', 'lower')")
|
||||
if i not in set(['UPPER', 'lower', 'unknown_default_open_api']):
|
||||
raise ValueError("dict values must be one of enum values ('UPPER', 'lower', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
model_config = ConfigDict(
|
||||
|
||||
@@ -30,10 +30,16 @@ class OneOfEnumString(str, Enum):
|
||||
B = 'b'
|
||||
C = 'c'
|
||||
D = 'd'
|
||||
UNKNOWN_DEFAULT_OPEN_API = 'unknown_default_open_api'
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of OneOfEnumString from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -41,8 +41,8 @@ class Order(BaseModel):
|
||||
if value is None:
|
||||
return value
|
||||
|
||||
if value not in set(['placed', 'approved', 'delivered']):
|
||||
raise ValueError("must be one of enum values ('placed', 'approved', 'delivered')")
|
||||
if value not in set(['placed', 'approved', 'delivered', 'unknown_default_open_api']):
|
||||
raise ValueError("must be one of enum values ('placed', 'approved', 'delivered', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
model_config = ConfigDict(
|
||||
|
||||
@@ -29,10 +29,16 @@ class OuterEnum(str, Enum):
|
||||
PLACED = 'placed'
|
||||
APPROVED = 'approved'
|
||||
DELIVERED = 'delivered'
|
||||
UNKNOWN_DEFAULT_OPEN_API = 'unknown_default_open_api'
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of OuterEnum from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -29,10 +29,16 @@ class OuterEnumDefaultValue(str, Enum):
|
||||
PLACED = 'placed'
|
||||
APPROVED = 'approved'
|
||||
DELIVERED = 'delivered'
|
||||
UNKNOWN_DEFAULT_OPEN_API = 'unknown_default_open_api'
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of OuterEnumDefaultValue from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -29,10 +29,16 @@ class OuterEnumInteger(int, Enum):
|
||||
NUMBER_0 = 0
|
||||
NUMBER_1 = 1
|
||||
NUMBER_2 = 2
|
||||
NUMBER_11184809 = 11184809
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of OuterEnumInteger from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -30,10 +30,16 @@ class OuterEnumIntegerDefaultValue(int, Enum):
|
||||
NUMBER_0 = 0
|
||||
NUMBER_1 = 1
|
||||
NUMBER_2 = 2
|
||||
NUMBER_11184809 = 11184809
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of OuterEnumIntegerDefaultValue from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -43,8 +43,8 @@ class Pet(BaseModel):
|
||||
if value is None:
|
||||
return value
|
||||
|
||||
if value not in set(['available', 'pending', 'sold']):
|
||||
raise ValueError("must be one of enum values ('available', 'pending', 'sold')")
|
||||
if value not in set(['available', 'pending', 'sold', 'unknown_default_open_api']):
|
||||
raise ValueError("must be one of enum values ('available', 'pending', 'sold', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
model_config = ConfigDict(
|
||||
|
||||
@@ -34,15 +34,15 @@ class PoopCleaning(BaseModel):
|
||||
@field_validator('task_name')
|
||||
def task_name_validate_enum(cls, value):
|
||||
"""Validates the enum"""
|
||||
if value not in set(['cleaning']):
|
||||
raise ValueError("must be one of enum values ('cleaning')")
|
||||
if value not in set(['cleaning', 'unknown_default_open_api']):
|
||||
raise ValueError("must be one of enum values ('cleaning', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
@field_validator('function_name')
|
||||
def function_name_validate_enum(cls, value):
|
||||
"""Validates the enum"""
|
||||
if value not in set(['care']):
|
||||
raise ValueError("must be one of enum values ('care')")
|
||||
if value not in set(['care', 'unknown_default_open_api']):
|
||||
raise ValueError("must be one of enum values ('care', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
model_config = ConfigDict(
|
||||
|
||||
@@ -28,10 +28,16 @@ class SingleRefType(str, Enum):
|
||||
"""
|
||||
ADMIN = 'admin'
|
||||
USER = 'user'
|
||||
UNKNOWN_DEFAULT_OPEN_API = 'unknown_default_open_api'
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of SingleRefType from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -36,10 +36,16 @@ class SpecialCharacterEnum(str, Enum):
|
||||
THIS_IS_EXCLAMATION = 'this_is_!'
|
||||
IMPORT = 'import'
|
||||
HELLO_WORLD = ' hello world '
|
||||
UNKNOWN_DEFAULT_OPEN_API = 'unknown_default_open_api'
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of SpecialCharacterEnum from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -38,8 +38,8 @@ class SpecialName(BaseModel):
|
||||
if value is None:
|
||||
return value
|
||||
|
||||
if value not in set(['available', 'pending', 'sold']):
|
||||
raise ValueError("must be one of enum values ('available', 'pending', 'sold')")
|
||||
if value not in set(['available', 'pending', 'sold', 'unknown_default_open_api']):
|
||||
raise ValueError("must be one of enum values ('available', 'pending', 'sold', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
model_config = ConfigDict(
|
||||
|
||||
@@ -30,10 +30,16 @@ class TestEnum(str, Enum):
|
||||
TWO = 'TWO'
|
||||
THREE = 'THREE'
|
||||
FOUR = 'foUr'
|
||||
UNKNOWN_DEFAULT_OPEN_API = 'unknown_default_open_api'
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of TestEnum from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -29,10 +29,16 @@ class TestEnumWithDefault(str, Enum):
|
||||
EIN = 'EIN'
|
||||
ZWEI = 'ZWEI'
|
||||
DREI = 'DREI'
|
||||
UNKNOWN_DEFAULT_OPEN_API = 'unknown_default_open_api'
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of TestEnumWithDefault from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
@@ -41,8 +41,8 @@ class TestModelWithEnumDefault(BaseModel):
|
||||
if value is None:
|
||||
return value
|
||||
|
||||
if value not in set(['A', 'B', 'C']):
|
||||
raise ValueError("must be one of enum values ('A', 'B', 'C')")
|
||||
if value not in set(['A', 'B', 'C', 'unknown_default_open_api']):
|
||||
raise ValueError("must be one of enum values ('A', 'B', 'C', 'unknown_default_open_api')")
|
||||
return value
|
||||
|
||||
model_config = ConfigDict(
|
||||
|
||||
@@ -30,10 +30,16 @@ class Type(int, Enum):
|
||||
NUMBER_1_DOT_0 = 1.0
|
||||
NUMBER_0_DOT_5 = 0.5
|
||||
NUMBER_0_DOT_25 = 0.25
|
||||
NUMBER_11184809 = 11184809
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
"""Create an instance of Type from a JSON string"""
|
||||
return cls(json.loads(json_str))
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
"""Handle unknown enum values"""
|
||||
return cls.UNKNOWN_DEFAULT_OPEN_API
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user