Skip to content

Commit

Permalink
docs: added javadocs
Browse files Browse the repository at this point in the history
  • Loading branch information
tiwarishubham635 committed Dec 5, 2023
1 parent 826ff20 commit 95edab1
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 32 deletions.
26 changes: 23 additions & 3 deletions src/main/java/com/twilio/oai/api/PythonApiResourceBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<CodegenParameter> codegenParameterIResolver) {
super.updateOperations(codegenParameterIResolver);
Expand All @@ -59,6 +65,13 @@ public ApiResourceBuilder updateOperations(final Resolver<CodegenParameter> 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<CodegenProperty> codegenPropertyResolver, PythonCodegenModelResolver codegenModelResolver) {
final String resourceName = getApiName();

Expand Down Expand Up @@ -126,13 +139,20 @@ public ApiResourceBuilder updateResponseModel(Resolver<CodegenProperty> 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<CodegenProperty> codegenPropertyResolver, Resolver<CodegenModel> codegenModelResolver) {

public PythonApiResourceBuilder updateResponseModel(final Resolver<CodegenProperty> codegenPropertyResolver,
final Resolver<CodegenModel> 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";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -34,33 +32,12 @@ public CodegenProperty resolve(CodegenProperty codegenProperty, ApiResourceBuild
return codegenProperty;
}

@Override
protected String unwrapContainerType(CodegenProperty codegenProperty, Stack<String> 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<String> containerTypes) {
String currentContainerType = "";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,20 @@ public PythonCodegenModelDataTypeResolver(IConventionMapper mapper, Map<String,
this.modelFormatMap = modelFormatMap;
}

/**
* Setter for codegenModelResolver
* @param codegenModelResolver the modelResolver to be set
*/
public void setCodegenModel(CodegenModelResolver codegenModelResolver) {
this.codegenModelResolver = codegenModelResolver;
}

/**
* Resolves the property using its codegenModel and resolving recursively
* @param property the CodegenProperty to be resolved
* @param apiResourceBuilder the PythonApiResourceBuilder to access getApiName()
* @return resolved property
*/
@Override
public CodegenProperty resolve(CodegenProperty property, ApiResourceBuilder apiResourceBuilder) {
property = super.resolve(property, apiResourceBuilder);
Expand All @@ -43,10 +53,20 @@ public CodegenProperty resolve(CodegenProperty property, ApiResourceBuilder apiR
return property;
}

/**
* Resolves the response model property using parent method
* @param property the CodegenProperty to be resolved
* @param apiResourceBuilder the PythonApiResourceBuilder to access getApiName()
*/
public void resolveResponseModel(CodegenProperty property, ApiResourceBuilder apiResourceBuilder) {
super.resolve(property, apiResourceBuilder);
}

/**
* Resolves the property to set 'json-name' in vendor extension and update dataType
* @param property the CodegenProperty to be resolved
* @param apiResourceBuilder the PythonApiResourceBuilder to access getApiName()
*/
protected void resolveProperty(CodegenProperty property, ApiResourceBuilder apiResourceBuilder) {
if (property.name.contains("from") && property.dataFormat != null &&
property.dataFormat.equals(ApplicationConstants.PHONE_NUMBER)) {
Expand All @@ -61,6 +81,13 @@ protected void resolveProperty(CodegenProperty property, ApiResourceBuilder apiR
});
}

/**
* Updates the dataType and datatypeWithEnum using baseType and dataType by removing enum from name
* @param baseType the baseType of the variable
* @param dataType the dataType of the variable
* @param apiResourceBuilder the PythonApiResourceBuilder to access getApiName()
* @param consumer the consumer function to set values
*/
private void updateDataType(final String baseType,
final String dataType,
final ApiResourceBuilder apiResourceBuilder,
Expand All @@ -73,6 +100,12 @@ private void updateDataType(final String baseType,
}
}

/**
* Removes 'Enum' from the dataType
* @param dataType the dataType of the variable
* @param apiResourceBuilder the PythonApiResourceBuilder to access getApiName()
* @return updated dataType
*/
private String removeEnumName(final String dataType, ApiResourceBuilder apiResourceBuilder) {
if (dataType != null && dataType.contains(ApplicationConstants.ENUM)) {
return '"' + apiResourceBuilder.getApiName() + "Instance." + Utility.removeEnumName(dataType) + '"';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@ public PythonCodegenModelResolver(List<? extends LanguageDataType> 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) {
Expand Down Expand Up @@ -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)) {
Expand All @@ -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;
Expand All @@ -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) &&
Expand Down

0 comments on commit 95edab1

Please sign in to comment.