Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Class | Method | HTTP request | Description

## Documentation For Models

{{#models}}{{#model}} - [{{{classname}}}]({{modelDocPath}}{{{unescapedDescription}}}.md)
{{#models}}{{#model}} - [{{{classname}}}]({{modelDocPath}}{{{classname}}}.md)
{{/model}}{{/models}}

## Documentation For Authorization
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@

{{#models}}
{{#model}}
from {{modelPackage}}.{{classFilename}} import {{unescapedDescription}}
from {{modelPackage}}.{{classFilename}} import {{classname}}
{{/model}}
{{/models}}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,11 @@ from {{packageName}}.model_utils import ( # noqa: F401
{{#models}}
{{#model}}
{{#imports}}
{{{.}}}
{{#-first}}

def lazy_import():
{{/-first}}
{{{.}}}
{{/imports}}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,20 +64,41 @@
{{/optionalVars}}
}

additional_properties_type = {{#additionalPropertiesType}}({{{additionalPropertiesType}}},) # noqa: E501{{/additionalPropertiesType}}{{^additionalPropertiesType}}None{{/additionalPropertiesType}}
{{#additionalPropertiesType}}
@cached_property
def additional_properties_type():
"""
This must be a method because a model may have properties that are
of type self, this must run after the class is loaded
"""
{{#imports}}
{{#-first}}
lazy_import()
{{/-first}}
{{/imports}}
return ({{{additionalPropertiesType}}},) # noqa: E501
{{/additionalPropertiesType}}
{{^additionalPropertiesType}}
additional_properties_type = None
{{/additionalPropertiesType}}

_nullable = {{#isNullable}}True{{/isNullable}}{{^isNullable}}False{{/isNullable}}

@cached_property
def openapi_types():
"""
This must be a class method so a model may have properties that are
of type self, this ensures that we don't create a cyclic import
This must be a method because a model may have properties that are
of type self, this must run after the class is loaded

Returns
openapi_types (dict): The key is attribute name
and the value is attribute type.
"""
{{#imports}}
{{#-first}}
lazy_import()
{{/-first}}
{{/imports}}
return {
{{#isAlias}}
'value': ({{{dataType}}},),
Expand All @@ -98,7 +119,20 @@

@cached_property
def discriminator():
{{^discriminator}}return None{{/discriminator}}{{#discriminator}}val = {
{{^discriminator}}
return None
{{/discriminator}}
{{#discriminator}}
{{#mappedModels}}
{{#-first}}
{{#imports}}
{{#-first}}
lazy_import()
{{/-first}}
{{/imports}}
{{/-first}}
{{/mappedModels}}
val = {
{{#mappedModels}}
'{{mappingName}}': {{{modelName}}},
{{/mappedModels}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
class {{unescapedDescription}}(ModelComposed):
class {{classname}}(ModelComposed):
"""NOTE: This class is auto generated by OpenAPI Generator.
Ref: https://openapi-generator.tech

Expand Down Expand Up @@ -35,6 +35,11 @@ class {{unescapedDescription}}(ModelComposed):
# code would be run when this module is imported, and these composed
# classes don't exist yet because their module has not finished
# loading
{{#imports}}
{{#-first}}
lazy_import()
{{/-first}}
{{/imports}}
return {
'anyOf': [
{{#anyOf}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
class {{unescapedDescription}}(ModelNormal):
class {{classname}}(ModelNormal):
"""NOTE: This class is auto generated by OpenAPI Generator.
Ref: https://openapi-generator.tech

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
class {{unescapedDescription}}(ModelSimple):
class {{classname}}(ModelSimple):
"""NOTE: This class is auto generated by OpenAPI Generator.
Ref: https://openapi-generator.tech

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ class cached_property(object):
self._fn = fn

def __get__(self, instance, cls=None):
try:
if self.result_key in vars(self):
return vars(self)[self.result_key]
except KeyError:
else:
result = self._fn()
setattr(self, self.result_key, result)
return result
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,19 @@ public void modelTest() {
codegen.setOpenAPI(openAPI);
final CodegenModel simpleName = codegen.fromModel("v1beta3.Binding", openAPI.getComponents().getSchemas().get("v1beta3.Binding"));
Assert.assertEquals(simpleName.name, "v1beta3.Binding");
Assert.assertEquals(simpleName.classname, "v1beta3_binding.V1beta3Binding");
Assert.assertEquals(simpleName.classname, "V1beta3Binding");
Assert.assertEquals(simpleName.classVarName, "v1beta3_binding");

codegen.setOpenAPI(openAPI);
final CodegenModel compoundName = codegen.fromModel("v1beta3.ComponentStatus", openAPI.getComponents().getSchemas().get("v1beta3.ComponentStatus"));
Assert.assertEquals(compoundName.name, "v1beta3.ComponentStatus");
Assert.assertEquals(compoundName.classname, "v1beta3_component_status.V1beta3ComponentStatus");
Assert.assertEquals(compoundName.classname, "V1beta3ComponentStatus");
Assert.assertEquals(compoundName.classVarName, "v1beta3_component_status");

final String path = "/api/v1beta3/namespaces/{namespaces}/bindings";
final Operation operation = openAPI.getPaths().get(path).getPost();
final CodegenOperation codegenOperation = codegen.fromOperation(path, "get", operation, null);
Assert.assertEquals(codegenOperation.returnType, "v1beta3_binding.V1beta3Binding");
Assert.assertEquals(codegenOperation.returnType, "V1beta3Binding");
Assert.assertEquals(codegenOperation.returnBaseType, "V1beta3Binding");
}

Expand All @@ -71,7 +71,7 @@ public void simpleModelTest() {
final CodegenModel cm = codegen.fromModel("sample", schema);

Assert.assertEquals(cm.name, "sample");
Assert.assertEquals(cm.classname, "sample.Sample");
Assert.assertEquals(cm.classname, "Sample");
Assert.assertEquals(cm.description, "a sample model");
Assert.assertEquals(cm.vars.size(), 3);

Expand Down Expand Up @@ -119,7 +119,7 @@ public void listPropertyTest() {
final CodegenModel cm = codegen.fromModel("sample", model);

Assert.assertEquals(cm.name, "sample");
Assert.assertEquals(cm.classname, "sample.Sample");
Assert.assertEquals(cm.classname, "Sample");
Assert.assertEquals(cm.description, "a sample model");
Assert.assertEquals(cm.vars.size(), 2);

Expand Down Expand Up @@ -159,7 +159,7 @@ public void mapPropertyTest() {
final CodegenModel cm = codegen.fromModel("sample", model);

Assert.assertEquals(cm.name, "sample");
Assert.assertEquals(cm.classname, "sample.Sample");
Assert.assertEquals(cm.classname, "Sample");
Assert.assertEquals(cm.description, "a sample model");
Assert.assertEquals(cm.vars.size(), 1);

Expand All @@ -176,48 +176,60 @@ public void mapPropertyTest() {

@Test(description = "convert a model with complex property")
public void complexPropertyTest() {
final DefaultCodegen codegen = new PythonClientExperimentalCodegen();
OpenAPI openAPI = TestUtils.createOpenAPI();
final Schema model = new Schema()
.description("a sample model")
.addProperties("children", new Schema().$ref("#/definitions/Children"));
final DefaultCodegen codegen = new PythonClientExperimentalCodegen();
OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model);
.addProperties("children", new Schema().$ref("#/components/schemas/Children"));
final Schema children = new Schema()
.type("object")
.addProperties("number", new Schema().type("integer"));
openAPI.getComponents().addSchemas("sample", model);
openAPI.getComponents().addSchemas("Children", children);
codegen.setOpenAPI(openAPI);

final CodegenModel cm = codegen.fromModel("sample", model);

Assert.assertEquals(cm.name, "sample");
Assert.assertEquals(cm.classname, "sample.Sample");
Assert.assertEquals(cm.classname, "Sample");
Assert.assertEquals(cm.description, "a sample model");
Assert.assertEquals(cm.vars.size(), 1);

final CodegenProperty property1 = cm.vars.get(0);
Assert.assertEquals(property1.baseName, "children");
Assert.assertEquals(property1.dataType, "children.Children");
Assert.assertEquals(property1.dataType, "Children");
Assert.assertEquals(property1.name, "children");
Assert.assertEquals(property1.baseType, "children.Children");
Assert.assertEquals(property1.baseType, "Children");
Assert.assertFalse(property1.required);
Assert.assertFalse(property1.isContainer);
}

@Test(description = "convert a model with complex list property")
public void complexListPropertyTest() {
final DefaultCodegen codegen = new PythonClientExperimentalCodegen();
OpenAPI openAPI = TestUtils.createOpenAPI();
final Schema model = new Schema()
.description("a sample model")
.addProperties("children", new ArraySchema()
.items(new Schema().$ref("#/definitions/Children")));
final DefaultCodegen codegen = new PythonClientExperimentalCodegen();
OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model);
.items(new Schema().$ref("#/components/schemas/Children")));
final Schema children = new Schema()
.type("object")
.addProperties("number", new Schema().type("integer"));
openAPI.getComponents().addSchemas("sample", model);
openAPI.getComponents().addSchemas("Children", children);
codegen.setOpenAPI(openAPI);

final CodegenModel cm = codegen.fromModel("sample", model);

Assert.assertEquals(cm.name, "sample");
Assert.assertEquals(cm.classname, "sample.Sample");
Assert.assertEquals(cm.classname, "Sample");
Assert.assertEquals(cm.description, "a sample model");
Assert.assertEquals(cm.vars.size(), 1);

final CodegenProperty property1 = cm.vars.get(0);
Assert.assertEquals(property1.baseName, "children");
Assert.assertEquals(property1.complexType, "Children");
Assert.assertEquals(property1.dataType, "[children.Children]");
Assert.assertEquals(property1.dataType, "[Children]");
Assert.assertEquals(property1.name, "children");
Assert.assertEquals(property1.baseType, "list");
Assert.assertEquals(property1.containerType, "array");
Expand All @@ -227,25 +239,31 @@ public void complexListPropertyTest() {

@Test(description = "convert a model with complex map property")
public void complexMapPropertyTest() {
final DefaultCodegen codegen = new PythonClientExperimentalCodegen();
OpenAPI openAPI = TestUtils.createOpenAPI();
final Schema model = new Schema()
.description("a sample model")
.addProperties("children", new MapSchema()
.additionalProperties(new Schema().$ref("#/definitions/Children")));
final DefaultCodegen codegen = new PythonClientExperimentalCodegen();
OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model);
.additionalProperties(new Schema().$ref("#/components/schemas/Children")));
final Schema children = new Schema()
.type("object")
.addProperties("number", new Schema().type("integer"));
openAPI.getComponents().addSchemas("sample", model);
openAPI.getComponents().addSchemas("Children", children);
codegen.setOpenAPI(openAPI);

final CodegenModel cm = codegen.fromModel("sample", model);

Assert.assertEquals(cm.name, "sample");
Assert.assertEquals(cm.classname, "sample.Sample");
Assert.assertEquals(cm.classname, "Sample");
Assert.assertEquals(cm.description, "a sample model");
Assert.assertEquals(cm.vars.size(), 1);
Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("children.Children")).size(), 1);
Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("Children")).size(), 1);

final CodegenProperty property1 = cm.vars.get(0);
Assert.assertEquals(property1.baseName, "children");
Assert.assertEquals(property1.complexType, "Children");
Assert.assertEquals(property1.dataType, "{str: (children.Children,)}");
Assert.assertEquals(property1.dataType, "{str: (Children,)}");
Assert.assertEquals(property1.name, "children");
Assert.assertEquals(property1.baseType, "dict");
Assert.assertEquals(property1.containerType, "map");
Expand All @@ -257,38 +275,48 @@ public void complexMapPropertyTest() {
// should not start with 'null'. need help from the community to investigate further
@Test(description = "convert an array model")
public void arrayModelTest() {
final DefaultCodegen codegen = new PythonClientExperimentalCodegen();
OpenAPI openAPI = TestUtils.createOpenAPI();
final Schema model = new ArraySchema()
//.description()
.items(new Schema().$ref("#/definitions/Children"))
.items(new Schema().$ref("#/components/schemas/Children"))
.description("an array model");
final DefaultCodegen codegen = new PythonClientExperimentalCodegen();
OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model);
final Schema children = new Schema()
.type("object")
.addProperties("number", new Schema().type("integer"));
openAPI.getComponents().addSchemas("sample", model);
openAPI.getComponents().addSchemas("Children", children);
codegen.setOpenAPI(openAPI);

final CodegenModel cm = codegen.fromModel("sample", model);

Assert.assertEquals(cm.name, "sample");
Assert.assertEquals(cm.classname, "sample.Sample");
Assert.assertEquals(cm.classname, "Sample");
Assert.assertEquals(cm.classVarName, "sample");
Assert.assertEquals(cm.description, "an array model");
Assert.assertEquals(cm.vars.size(), 0); // the array model has no vars
Assert.assertEquals(cm.parent, "list");
Assert.assertEquals(cm.imports.size(), 1);
Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("children.Children")).size(), 1);
Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("Children")).size(), 1);
}

// should not start with 'null'. need help from the community to investigate further
@Test(description = "convert a map model")
public void mapModelTest() {
final Schema model = new Schema()
.description("a map model")
.additionalProperties(new Schema().$ref("#/definitions/Children"));
final DefaultCodegen codegen = new PythonClientExperimentalCodegen();
OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model);
OpenAPI openAPI = TestUtils.createOpenAPI();
final Schema sample = new Schema()
.description("a map model")
.additionalProperties(new Schema().$ref("#/components/schemas/Children"));
final Schema children = new Schema()
.type("object")
.addProperties("number", new Schema().type("integer"));
openAPI.getComponents().addSchemas("sample", sample);
openAPI.getComponents().addSchemas("Children", children);
codegen.setOpenAPI(openAPI);
final CodegenModel cm = codegen.fromModel("sample", model);
final CodegenModel cm = codegen.fromModel("sample", sample);

Assert.assertEquals(cm.name, "sample");
Assert.assertEquals(cm.classname, "sample.Sample");
Assert.assertEquals(cm.classname, "Sample");
Assert.assertEquals(cm.description, "a map model");
Assert.assertEquals(cm.vars.size(), 0);
Assert.assertEquals(cm.parent, null);
Expand Down
Loading