Skip to content

Commit 3843b18

Browse files
committed
[python-fastapi] dont inherit additionalProperties
Don't let models inherit the value type of additionalProperties and arrays. This is to fix a bug where the `python-fastapi` server generator generated invalid models that inherited the value type specified within additionalProperties.
1 parent 9a18fc1 commit 3843b18

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,11 @@ public PythonFastAPIServerCodegen() {
139139
.defaultValue(implPackage));
140140
}
141141

142+
@Override
143+
protected void addParentFromContainer(CodegenModel model, Schema schema) {
144+
// we do not want to inherit simply because additionalProperties is set
145+
}
146+
142147
@Override
143148
public void processOpts() {
144149
super.processOpts();

modules/openapi-generator/src/test/java/org/openapitools/codegen/python/PythonFastapiCodegenTest.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package org.openapitools.codegen.python;
22

3-
import org.openapitools.codegen.DefaultGenerator;
4-
import org.openapitools.codegen.TestUtils;
3+
import com.google.common.collect.Sets;
4+
import io.swagger.v3.oas.models.OpenAPI;
5+
import io.swagger.v3.oas.models.media.ArraySchema;
6+
import io.swagger.v3.oas.models.media.Schema;
7+
import org.openapitools.codegen.*;
58
import org.openapitools.codegen.config.CodegenConfigurator;
9+
import org.openapitools.codegen.languages.PythonClientCodegen;
10+
import org.testng.Assert;
611
import org.testng.annotations.Test;
7-
import org.openapitools.codegen.CodegenConstants;
812

913
import java.io.File;
1014
import java.io.IOException;
1115
import java.nio.file.Files;
1216
import java.nio.file.Paths;
17+
import java.util.Collections;
1318
import java.util.List;
1419

1520
public class PythonFastapiCodegenTest {
@@ -53,4 +58,24 @@ public void testEndpointSpecsWithoutDescription() throws IOException {
5358
TestUtils.assertFileContains(Paths.get(output + "/src/nodesc/apis/desc_api.py"),
5459
"return await BaseDescApi.subclasses[0]().desc()\n");
5560
}
61+
62+
@Test(description = "additionalProperties should not let container type inherit their type")
63+
public void additionalPropertiesModelTest() {
64+
final Schema model = new ArraySchema()
65+
//.description()
66+
.items(new Schema().type("object").additionalProperties(new Schema().type("string")))
67+
.description("model with additionalProperties");
68+
final DefaultCodegen codegen = new PythonClientCodegen();
69+
OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model);
70+
codegen.setOpenAPI(openAPI);
71+
final CodegenModel cm = codegen.fromModel("sample", model);
72+
73+
Assert.assertEquals(cm.name, "sample");
74+
Assert.assertEquals(cm.classname, "Sample");
75+
Assert.assertEquals(cm.description, "model with additionalProperties");
76+
Assert.assertEquals(cm.vars.size(), 0);
77+
Assert.assertEquals(cm.parent, "null<Dict>");
78+
Assert.assertEquals(cm.imports.size(), 0);
79+
Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet()).size(), 0);
80+
}
5681
}

0 commit comments

Comments
 (0)