From 95edab15a9d299c621b0b0acbd1d8a90406ef14e Mon Sep 17 00:00:00 2001 From: Shubham Tiwari Date: Tue, 5 Dec 2023 16:11:14 +0530 Subject: [PATCH] docs: added javadocs --- .../oai/api/PythonApiResourceBuilder.java | 26 ++++++++++++-- ...CodegenModelContainerDataTypeResolver.java | 35 ++++--------------- .../PythonCodegenModelDataTypeResolver.java | 33 +++++++++++++++++ .../python/PythonCodegenModelResolver.java | 23 ++++++++++++ 4 files changed, 85 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/twilio/oai/api/PythonApiResourceBuilder.java b/src/main/java/com/twilio/oai/api/PythonApiResourceBuilder.java index ecccfca3d..b82f008fb 100644 --- a/src/main/java/com/twilio/oai/api/PythonApiResourceBuilder.java +++ b/src/main/java/com/twilio/oai/api/PythonApiResourceBuilder.java @@ -39,6 +39,12 @@ public PythonApiResourceBuilder(final IApiActionTemplate template, this.toggleMap = toggleMap; } + /** + * Processes the operations list and resolves the parameters and properties of request body. + * Returns the resource builder with resolved request body. + * @param codegenParameterIResolver the Python Parameter Resolver + * @return updated PythonApiResourceBuilder + */ @Override public ApiResourceBuilder updateOperations(final Resolver codegenParameterIResolver) { super.updateOperations(codegenParameterIResolver); @@ -59,6 +65,13 @@ public ApiResourceBuilder updateOperations(final Resolver code return this; } + /** + * Processes the response body and its models to resolve nested response models. + * Returns the resource builder with resolved response body. + * @param codegenPropertyResolver the Python Property Resolver + * @param codegenModelResolver the CodegenModelResolver for python + * @return updated PythonApiResourceBuilder + */ public ApiResourceBuilder updateResponseModel(Resolver codegenPropertyResolver, PythonCodegenModelResolver codegenModelResolver) { final String resourceName = getApiName(); @@ -126,13 +139,20 @@ public ApiResourceBuilder updateResponseModel(Resolver codegenP return this; } + /** + * Processes the response body and its datatypes using parent function + * Returns the resource builder with resolved response body. + * @param codegenPropertyResolver the Python Property Resolver + * @param codegenModelResolver the CodegenModelResolver for python + * @return updated PythonApiResourceBuilder + */ @Override - public ApiResourceBuilder updateResponseModel(Resolver codegenPropertyResolver, Resolver codegenModelResolver) { - + public PythonApiResourceBuilder updateResponseModel(final Resolver codegenPropertyResolver, + final Resolver codegenModelResolver) { super.updateResponseModel(codegenPropertyResolver, codegenModelResolver); if (responseModel != null) { responseModel.getVars().forEach(variable -> { - if (variable.complexType != null && !variable.complexType.contains(ApplicationConstants.ENUM) && !variable.getHasVars()) { + if (variable.complexType != null && !variable.complexType.contains(ApplicationConstants.ENUM)) { getModelByClassname(variable.complexType).ifPresent(model -> { variable.baseType = variable.baseType.replace(variable.datatypeWithEnum, "str"); variable.datatypeWithEnum = "str"; diff --git a/src/main/java/com/twilio/oai/resolver/python/PythonCodegenModelContainerDataTypeResolver.java b/src/main/java/com/twilio/oai/resolver/python/PythonCodegenModelContainerDataTypeResolver.java index bf7a0b745..fcb94e7e6 100644 --- a/src/main/java/com/twilio/oai/resolver/python/PythonCodegenModelContainerDataTypeResolver.java +++ b/src/main/java/com/twilio/oai/resolver/python/PythonCodegenModelContainerDataTypeResolver.java @@ -4,13 +4,11 @@ import com.twilio.oai.common.ApplicationConstants; import com.twilio.oai.common.LanguageDataType; import com.twilio.oai.resolver.common.CodegenModelContainerDataTypeResolver; -import com.twilio.oai.resolver.csharp.OperationStore; import org.openapitools.codegen.CodegenModel; import org.openapitools.codegen.CodegenProperty; import java.util.List; import java.util.Stack; -import java.util.regex.Pattern; public class PythonCodegenModelContainerDataTypeResolver extends CodegenModelContainerDataTypeResolver { private final PythonCodegenModelDataTypeResolver codegenModelDataTypeResolver; @@ -34,33 +32,12 @@ public CodegenProperty resolve(CodegenProperty codegenProperty, ApiResourceBuild return codegenProperty; } - @Override - protected String unwrapContainerType(CodegenProperty codegenProperty, Stack containerTypes) { - String codegenPropertyDataType = ""; - codegenPropertyDataType = codegenProperty.dataType; - - String currentContainerType = ""; - boolean isContainerType = false; - - while(codegenPropertyDataType != null && !codegenPropertyDataType.isEmpty()) { - for (LanguageDataType dataType : languageDataTypes) { - if (codegenPropertyDataType.startsWith(dataType.getValue())) { - isContainerType = true; - currentContainerType = dataType.getValue(); - } - } - if(isContainerType) { - containerTypes.push(currentContainerType); - codegenPropertyDataType = codegenPropertyDataType.replaceFirst(Pattern.quote(currentContainerType), ""); - codegenPropertyDataType = codegenPropertyDataType.substring(0, codegenPropertyDataType.length()-1); - isContainerType = false; - } - else - return codegenPropertyDataType; - } - return codegenPropertyDataType; - } - + /** + * Re-wraps the property dataType with the container types in the given stack. Sets the property dataType to the + * rewrapped value (i.e. "IceServer" -> "List[IceServer]"). + * @param codegenProperty the property whose dataType is to be rewrapped + * @param containerTypes the stack which stores the containers used to re-wrap + */ @Override public void rewrapContainerType(CodegenProperty codegenProperty,Stack containerTypes) { String currentContainerType = ""; diff --git a/src/main/java/com/twilio/oai/resolver/python/PythonCodegenModelDataTypeResolver.java b/src/main/java/com/twilio/oai/resolver/python/PythonCodegenModelDataTypeResolver.java index 7b79dc532..4f2ce2da0 100644 --- a/src/main/java/com/twilio/oai/resolver/python/PythonCodegenModelDataTypeResolver.java +++ b/src/main/java/com/twilio/oai/resolver/python/PythonCodegenModelDataTypeResolver.java @@ -24,10 +24,20 @@ public PythonCodegenModelDataTypeResolver(IConventionMapper mapper, Map languageDataT this.codegenModelDataTypeResolver.setCodegenModel(this); } + /** + * Resolves the model using its nestedModel and resolving recursively. If the nestedModel is not found, then if + * it is a container, the container is resolved else the dataType is resolved straightaway. + * @param model the codegenModel to be resolved + * @param apiResourceBuilder the PythonApiResourceBuilder + * @return resolved model + */ @Override public CodegenModel resolve(CodegenModel model, ApiResourceBuilder apiResourceBuilder) { if (model == null) { @@ -63,6 +70,10 @@ public CodegenModel resolve(CodegenModel model, ApiResourceBuilder apiResourceBu return model; } + /** + * Sets Json name in the vendorExtensions of the property + * @param property the dataType of the variable + */ private void setJsonName(CodegenProperty property) { if (property.name.contains("from") && property.dataFormat != null && property.dataFormat.equals(ApplicationConstants.PHONE_NUMBER)) { @@ -73,6 +84,11 @@ private void setJsonName(CodegenProperty property) { } } + /** + * Resolves the response model using parent method + * @param model the CodegenModel to be resolved + * @param apiResourceBuilder the PythonApiResourceBuilder to access getApiName() + */ public void resolveResponseModel(CodegenModel model, ApiResourceBuilder apiResourceBuilder) { if (model == null) { return; @@ -88,6 +104,13 @@ public void resolveResponseModel(CodegenModel model, ApiResourceBuilder apiResou } + /** + * Fetches the model for the property and resolves it. Further updates the dataType, baseType and datatypeWithEnum + * according to the nested structure. + * @param property the CodegenProperty to be resolved + * @param apiResourceBuilder the PythonApiResourceBuilder to access getApiName() + * @return resolved model + */ public CodegenModel resolveNestedModel(CodegenProperty property, ApiResourceBuilder apiResourceBuilder) { CodegenModel derivedCodegenModel = apiResourceBuilder.getModel(property.dataType); if(derivedCodegenModel != null && !CodegenUtils.isPropertySchemaEnum(property) &&