Skip to content

Commit 59d96a3

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 d911a71 commit 59d96a3

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
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
@@ -140,6 +140,11 @@ public PythonFastAPIServerCodegen() {
140140
.defaultValue(implPackage));
141141
}
142142

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

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

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

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;
37
import org.openapitools.codegen.CodegenConstants;
8+
import org.openapitools.codegen.CodegenModel;
9+
import org.openapitools.codegen.DefaultCodegen;
410
import org.openapitools.codegen.DefaultGenerator;
511
import org.openapitools.codegen.TestUtils;
612
import org.openapitools.codegen.config.CodegenConfigurator;
13+
import org.openapitools.codegen.languages.PythonClientCodegen;
14+
import org.testng.Assert;
715
import org.testng.annotations.Test;
816

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

0 commit comments

Comments
 (0)