Skip to content

Commit 3d1b656

Browse files
authored
Merge branch 'master' into add.media.type
2 parents 2985c0c + 5894bfd commit 3d1b656

File tree

5 files changed

+100
-10
lines changed

5 files changed

+100
-10
lines changed

src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2235,11 +2235,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
22352235
}
22362236
}
22372237

2238-
for (String i : imports) {
2239-
if (needToImport(i)) {
2240-
codegenOperation.imports.add(i);
2241-
}
2242-
}
2238+
addOperationImports(codegenOperation, imports);
22432239

22442240
codegenOperation.bodyParam = bodyParam;
22452241
codegenOperation.httpMethod = httpMethod.toUpperCase();
@@ -2293,6 +2289,14 @@ public int compare(CodegenParameter one, CodegenParameter another) {
22932289
return codegenOperation;
22942290
}
22952291

2292+
protected void addOperationImports(CodegenOperation codegenOperation, Set<String> operationImports) {
2293+
for (String operationImport : operationImports) {
2294+
if (needToImport(operationImport)) {
2295+
codegenOperation.imports.add(operationImport);
2296+
}
2297+
}
2298+
}
2299+
22962300
/**
22972301
* Convert Swagger Response object to Codegen Response object
22982302
*

src/main/java/io/swagger/codegen/v3/generators/SchemaHandler.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ protected CodegenModel processArrayItemSchema(String codegenModelName, CodegenPr
140140
return null;
141141
}
142142
this.updatePropertyDataType(codegenProperty, composedModel.name, arraySchema);
143+
this.updatePropertyDataType(codegenProperty.items, composedModel);
143144
return composedModel;
144145
}
145146
return null;
@@ -208,6 +209,7 @@ protected void updatePropertyDataType(CodegenProperty codegenProperty, String sc
208209
arraySchema.setItems(refSchema);
209210
codegenProperty.setDatatype(this.codegenConfig.getTypeDeclaration(arraySchema));
210211
codegenProperty.setDatatypeWithEnum(codegenProperty.getDatatype());
212+
codegenProperty.vendorExtensions.put("x-is-composed", true);
211213

212214
codegenProperty.defaultValue = this.codegenConfig.toDefaultValue(arraySchema);
213215
codegenProperty.defaultValueWithParam = this.codegenConfig.toDefaultValueWithParam(codegenProperty.baseName, arraySchema);
@@ -235,5 +237,6 @@ private void updatePropertyDataType(CodegenProperty codegenProperty, CodegenMode
235237
codegenProperty.datatypeWithEnum = composedModel.getClassname();
236238
codegenProperty.baseType = composedModel.getClassname();
237239
codegenProperty.complexType = composedModel.getClassname();
240+
codegenProperty.vendorExtensions.put("x-is-composed", true);
238241
}
239242
}

src/main/java/io/swagger/codegen/v3/generators/python/PythonFlaskConnexionCodegen.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.HashMap;
2323
import java.util.List;
2424
import java.util.Map;
25+
import java.util.Set;
2526

2627
import io.swagger.v3.core.util.Yaml;
2728
import io.swagger.v3.oas.models.OpenAPI;
@@ -191,6 +192,7 @@ public void processOpts() {
191192
supportingFiles.add(new SupportingFile("__main__.mustache", packageName, "__main__.py"));
192193
supportingFiles.add(new SupportingFile("encoder.mustache", packageName, "encoder.py"));
193194
supportingFiles.add(new SupportingFile("util.mustache", packageName, "util.py"));
195+
supportingFiles.add(new SupportingFile("type_util.mustache", packageName, "type_util.py"));
194196
supportingFiles.add(new SupportingFile("__init__.mustache", packageName + File.separatorChar + controllerPackage, "__init__.py"));
195197
supportingFiles.add(new SupportingFile("__init__model.mustache", packageName + File.separatorChar + modelPackage, "__init__.py"));
196198
supportingFiles.add(new SupportingFile("base_model_.mustache", packageName + File.separatorChar + modelPackage, "base_model_.py"));
@@ -340,6 +342,17 @@ private static List<Map<String, Object>> getOperations(Map<String, Object> objs)
340342
return result;
341343
}
342344

345+
protected void addOperationImports(CodegenOperation codegenOperation, Set<String> operationImports) {
346+
for (String operationImport : operationImports) {
347+
if ("object".equalsIgnoreCase(operationImport)) {
348+
continue;
349+
}
350+
if (needToImport(operationImport)) {
351+
codegenOperation.imports.add(operationImport);
352+
}
353+
}
354+
}
355+
343356
private static List<Map<String, Object>> sortOperationsByPath(List<CodegenOperation> ops) {
344357
Multimap<String, CodegenOperation> opsByPath = ArrayListMultimap.create();
345358

@@ -760,4 +773,41 @@ protected void addSecurityExtensions(Map<String, SecurityScheme> securitySchemes
760773
}
761774
}
762775
}
776+
777+
public Map<String, Object> postProcessAllModels(Map<String, Object> processedModels) {
778+
Map<String, CodegenModel> allModels = new HashMap<>();
779+
for (Map.Entry<String, Object> entry : processedModels.entrySet()) {
780+
String modelName = toModelName(entry.getKey());
781+
Map<String, Object> inner = (Map<String, Object>) entry.getValue();
782+
List<Map<String, Object>> models = (List<Map<String, Object>>) inner.get("models");
783+
List<Map<String, String>> imports = (List<Map<String, String>>) inner.get("imports");
784+
for (Map<String, Object> mo : models) {
785+
CodegenModel codegenModel = (CodegenModel) mo.get("model");
786+
787+
for (CodegenProperty codegenProperty : codegenModel.vars) {
788+
if (Boolean.parseBoolean(String.valueOf(codegenProperty.vendorExtensions.get("x-is-composed")))) {
789+
Map<String, String> item = new HashMap<>();
790+
if (codegenProperty.getIsContainer()) {
791+
item.put("import", toModelImport(codegenProperty.items.datatype));
792+
} else {
793+
item.put("import", toModelImport(codegenProperty.datatype));
794+
}
795+
imports.add(item);
796+
}
797+
}
798+
799+
allModels.put(modelName, codegenModel);
800+
}
801+
}
802+
postProcessAllCodegenModels(allModels);
803+
return processedModels;
804+
}
805+
806+
@Override
807+
protected void addImport(CodegenModel codegenModel, String type) {
808+
if ("object".equalsIgnoreCase(type)) {
809+
return;
810+
}
811+
super.addImport(codegenModel, type);
812+
}
763813
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# coding: utf-8
2+
3+
import sys
4+
5+
if sys.version_info < (3, 7):
6+
import typing
7+
8+
def is_generic(klass):
9+
""" Determine whether klass is a generic class """
10+
return type(klass) == typing.GenericMeta
11+
12+
def is_dict(klass):
13+
""" Determine whether klass is a Dict """
14+
return klass.__extra__ == dict
15+
16+
def is_list(klass):
17+
""" Determine whether klass is a List """
18+
return klass.__extra__ == list
19+
20+
else:
21+
22+
def is_generic(klass):
23+
""" Determine whether klass is a generic class """
24+
return hasattr(klass, '__origin__')
25+
26+
def is_dict(klass):
27+
""" Determine whether klass is a Dict """
28+
return klass.__origin__ == dict
29+
30+
def is_list(klass):
31+
""" Determine whether klass is a List """
32+
return klass.__origin__ == list

src/main/resources/handlebars/pythonFlaskConnexion/util.mustache

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import datetime
22

33
import six
44
import typing
5+
from {{packageName}} import type_util
56

67

78
def _deserialize(data, klass):
@@ -15,18 +16,18 @@ def _deserialize(data, klass):
1516
if data is None:
1617
return None
1718

18-
if klass in six.integer_types or klass in (float, str, bool):
19+
if klass in six.integer_types or klass in (float, str, bool, bytearray):
1920
return _deserialize_primitive(data, klass)
2021
elif klass == object:
2122
return _deserialize_object(data)
2223
elif klass == datetime.date:
2324
return deserialize_date(data)
2425
elif klass == datetime.datetime:
2526
return deserialize_datetime(data)
26-
elif type(klass) == typing.GenericMeta:
27-
if klass.__extra__ == list:
27+
elif type_util.is_generic(klass):
28+
if type_util.is_list(klass):
2829
return _deserialize_list(data, klass.__args__[0])
29-
if klass.__extra__ == dict:
30+
if type_util.is_dict(klass):
3031
return _deserialize_dict(data, klass.__args__[1])
3132
else:
3233
return deserialize_model(data, klass)
@@ -51,7 +52,7 @@ def _deserialize_primitive(data, klass):
5152

5253

5354
def _deserialize_object(value):
54-
"""Return a original value.
55+
"""Return an original value.
5556

5657
:return: object.
5758
"""

0 commit comments

Comments
 (0)