Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

Commit 5fc90e2

Browse files
authored
Fixes enum naming bug (#72)
* Adds enum test spec and test * Reverts defaultcodegen * Adds fix for enum names when first char is invalid * Java code updated * Removes unused import
1 parent cb04efb commit 5fc90e2

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed

modules/openapi-json-schema-generator/src/main/java/org/openapitools/codegen/languages/PythonClientCodegen.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1273,7 +1273,10 @@ public String toEnumVarName(String value, String datatype) {
12731273
// Replace " " with _
12741274
String usedValue = value.replaceAll("\\s+", "_");
12751275
// strip first character if it is invalid
1276+
int lengthBeforeFirstCharStrip = usedValue.length();
1277+
Character firstChar = usedValue.charAt(0);
12761278
usedValue = usedValue.replaceAll("^[^_a-zA-Z]", "");
1279+
boolean firstCharStripped = usedValue.length() == lengthBeforeFirstCharStrip - 1;
12771280
// Replace / with _ for path enums
12781281
usedValue = usedValue.replaceAll("/", "_");
12791282
// Replace . with _ for tag enums
@@ -1296,6 +1299,14 @@ public String toEnumVarName(String value, String datatype) {
12961299
// remove trailing _
12971300
usedValue = usedValue.replaceAll("[_]$", "");
12981301
}
1302+
// check first character to see if it is valid
1303+
// if not then add a valid prefix
1304+
boolean validFirstChar = Pattern.matches("^[_a-zA-Z]", usedValue.substring(0,1));
1305+
if (!validFirstChar && firstCharStripped) {
1306+
String charName = Character.getName(firstChar.hashCode());
1307+
usedValue = charNameToVarName(charName) + "_" + usedValue;
1308+
}
1309+
12991310
return usedValue;
13001311
}
13011312

modules/openapi-json-schema-generator/src/test/java/org/openapitools/codegen/python/PythonClientTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import org.openapitools.codegen.*;
2424
import org.openapitools.codegen.config.CodegenConfigurator;
2525
import org.openapitools.codegen.languages.PythonClientCodegen;
26+
import org.openapitools.codegen.model.ModelMap;
27+
import org.openapitools.codegen.model.ModelsMap;
2628
import org.openapitools.codegen.utils.ModelUtils;
2729
import org.testng.Assert;
2830
import org.testng.annotations.Test;
@@ -32,6 +34,7 @@
3234
import java.nio.charset.StandardCharsets;
3335
import java.nio.file.Files;
3436
import java.nio.file.Path;
37+
import java.util.ArrayList;
3538
import java.util.Arrays;
3639
import java.util.Collections;
3740
import java.util.List;
@@ -197,4 +200,28 @@ public void testRegexWithMultipleFlagsWorks() {
197200
Assert.assertEquals(cm.vendorExtensions.get("x-regex"), expectedRegexPattern);
198201
Assert.assertEquals(cm.vendorExtensions.get("x-modifiers"), Arrays.asList("DOTALL", "IGNORECASE", "MULTILINE"));
199202
}
203+
204+
@Test
205+
public void testEnumNames() {
206+
OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/70_schema_enum_names.yaml");
207+
PythonClientCodegen codegen = new PythonClientCodegen();
208+
codegen.setOpenAPI(openAPI);
209+
210+
String modelName = "StringEnum";
211+
Schema schema = openAPI.getComponents().getSchemas().get(modelName);
212+
213+
CodegenModel cm = codegen.fromModel(modelName, schema);
214+
215+
ModelMap modelMap = new ModelMap();
216+
modelMap.setModel(cm);
217+
218+
ModelsMap modelsMap = new ModelsMap();
219+
modelsMap.setModels(Collections.singletonList(modelMap));
220+
codegen.postProcessModels(modelsMap);
221+
222+
ArrayList<Map<String, Object>> enumVars = (ArrayList<Map<String, Object>>) cm.getAllowableValues().get("enumVars");
223+
Assert.assertEquals(enumVars.size(), 2);
224+
Assert.assertEquals(enumVars.get(0).get("name"), "DIGIT_THREE_67B9C");
225+
Assert.assertEquals(enumVars.get(1).get("name"), "FFA5A4");
226+
}
200227
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
openapi: 3.0.3
2+
info:
3+
title: Test
4+
version: 1.0.0-SNAPSHOT
5+
paths: {}
6+
components:
7+
schemas:
8+
StringEnum:
9+
type: string
10+
enum:
11+
- "#367B9C"
12+
- "#FFA5A4"

0 commit comments

Comments
 (0)