Skip to content

Commit

Permalink
feat: fixed enum datatype
Browse files Browse the repository at this point in the history
  • Loading branch information
tiwarishubham635 committed Dec 4, 2023
1 parent d9719b4 commit c99252c
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 91 deletions.
102 changes: 20 additions & 82 deletions src/main/java/com/twilio/oai/api/PythonApiResourceBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,11 @@
import com.twilio.oai.common.ApplicationConstants;
import com.twilio.oai.common.Utility;
import com.twilio.oai.resolver.Resolver;
import com.twilio.oai.resolver.python.PythonCodegenModelResolver;
import com.twilio.oai.template.IApiActionTemplate;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;

import org.openapitools.codegen.CodegenModel;
Expand All @@ -20,7 +18,6 @@
import org.openapitools.codegen.CodegenProperty;

import static com.twilio.oai.common.ApplicationConstants.PATH_SEPARATOR_PLACEHOLDER;
import static com.twilio.oai.common.ApplicationConstants.STRING;

public class PythonApiResourceBuilder extends FluentApiResourceBuilder {
public PythonApiResourceBuilder(final IApiActionTemplate template,
Expand Down Expand Up @@ -56,91 +53,32 @@ public ApiResourceBuilder updateOperations(final Resolver<CodegenParameter> code
}
}
}
nestedModels.forEach(nestedModel -> nestedModel.getVars().forEach(variable -> {
if (variable.complexType != null) {
getModelByClassname(variable.complexType).ifPresent(model -> {
variable.datatypeWithEnum = getApiName() + ApplicationConstants.LIST + ApplicationConstants.DOT + Utility.removeEnumName(variable.complexType);
variable.dataType = variable.dataType.replaceFirst(variable.complexType, variable.datatypeWithEnum);
variable.baseType = variable.dataType;
});
}
}));
return this;
}

// public PythonApiResourceBuilder updateResponseModel(final Resolver<CodegenProperty> codegenPropertyResolver,
// final PythonCodegenModelResolver codegenModelResolver) {
// final String resourceName = getApiName();
//
// final List<CodegenModel> allResponseModels = codegenOperationList
// .stream()
// .flatMap(co -> co.responses
// .stream()
// .map(response -> response.dataType)
// .filter(Objects::nonNull)
// .flatMap(modelName -> getModel(modelName, co).stream())
// .findFirst()
// .stream())
// .collect(Collectors.toList());
//
// allResponseModels.stream().findFirst().ifPresent(firstModel -> {
// responseModel = firstModel;
//
// allResponseModels.forEach(model -> {
// codegenModelResolver.resolve(model, this);
//
// model.setName(resourceName);
// model.getVars().forEach(variable -> {
// codegenPropertyResolver.resolve(variable, this);
//
// instancePathParams
// .stream()
// .filter(param -> param.paramName.equals(variable.name))
// .filter(param -> param.dataType.equals(STRING))
// .filter(param -> !param.dataType.equals(variable.dataType))
// .forEach(param -> param.vendorExtensions.put("x-stringify", true));
// });
//
// if (model != responseModel) {
// // Merge any vars from the model that aren't part of the response model.
// model.getVars().forEach(variable -> {
// if (responseModel.getVars().stream().noneMatch(v -> v.getName().equals(variable.getName()))) {
// responseModel.getVars().add(variable);
// }
// });
// }
// });
//
// responseModel.getVars().forEach(variable -> {
// addModel(modelTree, variable.complexType, variable.dataType);
//
// super.updateDataType(variable.complexType, variable.dataType, (dataTypeWithEnum, dataType) -> {
// variable.datatypeWithEnum = dataTypeWithEnum;
// variable.baseType = dataType;
// });
// });
// });
//
// modelTree.values().forEach(model -> model.setName(getModelName(model.getClassname())));
//
//// if (responseModel != null) {
//// responseModel.getVars().forEach(variable -> {
//// 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";
//// });
//// }
//// });
//// }
//
// return this;
// }

@Override
public ApiResourceBuilder updateResponseModel(Resolver<CodegenProperty> codegenPropertyResolver, Resolver<CodegenModel> codegenModelResolver) {

super.updateResponseModel(codegenPropertyResolver, codegenModelResolver);
// if (responseModel != null) {
// responseModel.getVars().forEach(variable -> {
// 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";
// });
// }
// });
// }
if (responseModel != null) {
responseModel.getVars().forEach(variable -> {
if (variable.complexType != null && !variable.complexType.contains(ApplicationConstants.ENUM) && !variable.getHasVars()) {
getModelByClassname(variable.complexType).ifPresent(model -> {
variable.baseType = variable.baseType.replace(variable.datatypeWithEnum, "str");
variable.datatypeWithEnum = "str";
});
}
});
}

return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public CodegenProperty resolve(CodegenProperty property, ApiResourceBuilder apiR
apiResourceBuilder.addNestedModel(codegenModel);
} else {
super.resolve(property, apiResourceBuilder);
resolveProperty(property);
resolveProperty(property, apiResourceBuilder);
}
return property;
}
Expand All @@ -47,34 +47,35 @@ public void resolveResponseModel(CodegenProperty property, ApiResourceBuilder ap
super.resolve(property, apiResourceBuilder);
}

protected void resolveProperty(CodegenProperty property) {
protected void resolveProperty(CodegenProperty property, ApiResourceBuilder apiResourceBuilder) {
if (property.name.contains("from") && property.dataFormat != null &&
property.dataFormat.equals(ApplicationConstants.PHONE_NUMBER)) {
property.name = "from_";
property.vendorExtensions.put("json-name", "from");
} else {
property.vendorExtensions.put("json-name", property.name);
}
updateDataType(property.baseType, property.dataType, (dataTypeWithEnum, dataType) -> {
updateDataType(property.baseType, property.dataType, apiResourceBuilder, (dataTypeWithEnum, dataType) -> {
property.datatypeWithEnum = dataTypeWithEnum;
property.dataType = dataType;
});
}

private void updateDataType(final String baseType,
final String dataType,
final ApiResourceBuilder apiResourceBuilder,
final BiConsumer<String, String> consumer) {
consumer.accept(baseType, removeEnumName(dataType));
consumer.accept(baseType, removeEnumName(dataType, apiResourceBuilder));

if (baseType != null && dataType != null) {
final String datatypeWithEnum = removeEnumName(baseType);
final String datatypeWithEnum = removeEnumName(baseType, apiResourceBuilder);
consumer.accept(datatypeWithEnum, dataType.replaceFirst(baseType, datatypeWithEnum));
}
}

private String removeEnumName(final String dataType) {
private String removeEnumName(final String dataType, ApiResourceBuilder apiResourceBuilder) {
if (dataType != null && dataType.contains(ApplicationConstants.ENUM)) {
return Utility.removeEnumName(dataType);
return '"' + apiResourceBuilder.getApiName() + "Instance." + Utility.removeEnumName(dataType) + '"';
}

return dataType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public CodegenModel resolve(CodegenModel model, ApiResourceBuilder apiResourceBu
} else {
codegenModelDataTypeResolver.resolve(property, apiResourceBuilder);
}
setJsonName(property);
property.getVendorExtensions().computeIfPresent(X_IMPORT, (key, value) -> {
if(model.vendorExtensions.containsKey(key)) {
((HashMap) model.vendorExtensions.get(key)).putAll((Map) value);
Expand All @@ -62,6 +63,16 @@ public CodegenModel resolve(CodegenModel model, ApiResourceBuilder apiResourceBu
return model;
}

private void setJsonName(CodegenProperty property) {
if (property.name.contains("from") && property.dataFormat != null &&
property.dataFormat.equals(ApplicationConstants.PHONE_NUMBER)) {
property.name = "from_";
property.vendorExtensions.put("json-name", "from");
} else {
property.vendorExtensions.put("json-name", property.name);
}
}

public void resolveResponseModel(CodegenModel model, ApiResourceBuilder apiResourceBuilder) {
if (model == null) {
return;
Expand All @@ -83,8 +94,6 @@ public CodegenModel resolveNestedModel(CodegenProperty property, ApiResourceBuil
!codegenModelDataTypeResolver.modelFormatMap.containsKey(property.dataType)) {
this.resolve(derivedCodegenModel, apiResourceBuilder);
CodegenUtils.mergeVendorExtensionProperty(property.vendorExtensions,(LinkedHashMap) derivedCodegenModel.getVendorExtensions().get(X_IMPORT), X_IMPORT);
property.dataType = apiResourceBuilder.getApiName() + ApplicationConstants.LIST + ApplicationConstants.DOT + property.dataType;
property.baseType = property.dataType;
return derivedCodegenModel;
}
return null;
Expand Down

0 comments on commit c99252c

Please sign in to comment.