@darabonba/python-generator 2.0.4 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ChangeLog.md +8 -1
- package/lib/generator.js +120 -80
- package/package.json +1 -1
- package/tests/expected/annotation/tea_python_tests/models/_test.py +5 -4
- package/tests/expected/comment/tea_python_tests/models/_test_1.py +15 -4
- package/tests/expected/comment/tea_python_tests/models/_test_2.py +7 -4
- package/tests/expected/comment/tea_python_tests/models/_test_3.py +7 -4
- package/tests/expected/complex/tea_python_tests/exceptions/_err_1.py +1 -1
- package/tests/expected/complex/tea_python_tests/exceptions/_err_2.py +1 -1
- package/tests/expected/complex/tea_python_tests/models/_complex_request.py +85 -63
- package/tests/expected/complex/tea_python_tests/models/_complex_request_configs.py +9 -4
- package/tests/expected/complex/tea_python_tests/models/_complex_request_header.py +5 -4
- package/tests/expected/complex/tea_python_tests/models/_complex_request_part.py +5 -4
- package/tests/expected/complex/tea_python_tests/models/_response.py +5 -4
- package/tests/expected/model/tea_python_tests/exceptions/_main_file.py +1 -1
- package/tests/expected/model/tea_python_tests/models/_class.py +2 -3
- package/tests/expected/model/tea_python_tests/models/_m.py +3 -4
- package/tests/expected/model/tea_python_tests/models/_main_file_model.py +5 -4
- package/tests/expected/model/tea_python_tests/models/_main_file_model_model.py +5 -4
- package/tests/expected/model/tea_python_tests/models/_model.py +5 -4
- package/tests/expected/model/tea_python_tests/models/_msub_m.py +2 -3
- package/tests/expected/model/tea_python_tests/models/_my_model.py +216 -74
- package/tests/expected/model/tea_python_tests/models/_my_model_model.py +5 -4
- package/tests/expected/model/tea_python_tests/models/_my_model_model_model.py +5 -4
- package/tests/expected/model/tea_python_tests/models/_my_model_subarraymodel.py +2 -3
- package/tests/expected/model/tea_python_tests/models/_my_model_submodel.py +5 -4
- package/tests/expected/model/tea_python_tests/models/_my_model_submodel_model.py +5 -4
- package/tests/expected/modelConfig/tea_python_tests/__init__.py +1 -0
- package/tests/expected/modelConfig/tea_python_tests/client.py +10 -0
- package/tests/expected/modelConfig/tea_python_tests/exceptions/__init__.py +11 -0
- package/tests/expected/modelConfig/tea_python_tests/exceptions/_main_file.py +28 -0
- package/tests/expected/modelConfig/tea_python_tests/models/__init__.py +33 -0
- package/tests/expected/modelConfig/tea_python_tests/models/_class.py +23 -0
- package/tests/expected/modelConfig/tea_python_tests/models/_m.py +37 -0
- package/tests/expected/modelConfig/tea_python_tests/models/_main_file_model.py +46 -0
- package/tests/expected/modelConfig/tea_python_tests/models/_main_file_model_model.py +33 -0
- package/tests/expected/modelConfig/tea_python_tests/models/_model.py +33 -0
- package/tests/expected/modelConfig/tea_python_tests/models/_msub_m.py +25 -0
- package/tests/expected/modelConfig/tea_python_tests/models/_my_model.py +600 -0
- package/tests/expected/modelConfig/tea_python_tests/models/_my_model_model.py +46 -0
- package/tests/expected/modelConfig/tea_python_tests/models/_my_model_model_model.py +33 -0
- package/tests/expected/modelConfig/tea_python_tests/models/_my_model_subarraymodel.py +23 -0
- package/tests/expected/modelConfig/tea_python_tests/models/_my_model_submodel.py +46 -0
- package/tests/expected/modelConfig/tea_python_tests/models/_my_model_submodel_model.py +33 -0
- package/tests/expected/multi/tea_python_tests/api_models/_test_model_dir_2.py +5 -4
- package/tests/expected/multi/tea_python_tests/exceptions/_err.py +2 -2
- package/tests/expected/multi/tea_python_tests/model/user_exceptions/_err.py +1 -1
- package/tests/expected/multi/tea_python_tests/model/user_exceptions/_err_1.py +1 -1
- package/tests/expected/multi/tea_python_tests/model/user_exceptions/_err_2.py +1 -1
- package/tests/expected/multi/tea_python_tests/model/user_models/_base_info.py +5 -4
- package/tests/expected/multi/tea_python_tests/model/user_models/_info.py +7 -4
- package/tests/expected/multi/tea_python_tests/models/_test_model_dir.py +12 -8
- package/tests/expected/typedef/tea_python_tests/models/_m.py +7 -4
- package/tests/fixtures/model/main.dara +4 -0
- package/tests/fixtures/modelConfig/.libraries.json +3 -0
- package/tests/fixtures/modelConfig/Darafile +13 -0
- package/tests/fixtures/modelConfig/libraries/Darafile +20 -0
- package/tests/fixtures/modelConfig/libraries/import.dara +27 -0
- package/tests/fixtures/modelConfig/main.dara +81 -0
- package/tests/main.tests.js +18 -0
- package/tests/output/annotation/tea_python_tests/models/_test.py +5 -4
- package/tests/output/comment/tea_python_tests/models/_test_1.py +15 -4
- package/tests/output/comment/tea_python_tests/models/_test_2.py +7 -4
- package/tests/output/comment/tea_python_tests/models/_test_3.py +7 -4
- package/tests/output/complex/tea_python_tests/exceptions/_err_1.py +1 -1
- package/tests/output/complex/tea_python_tests/exceptions/_err_2.py +1 -1
- package/tests/output/complex/tea_python_tests/models/_complex_request.py +85 -63
- package/tests/output/complex/tea_python_tests/models/_complex_request_configs.py +9 -4
- package/tests/output/complex/tea_python_tests/models/_complex_request_header.py +5 -4
- package/tests/output/complex/tea_python_tests/models/_complex_request_part.py +5 -4
- package/tests/output/complex/tea_python_tests/models/_response.py +5 -4
- package/tests/output/model/tea_python_tests/exceptions/_main_file.py +1 -1
- package/tests/output/model/tea_python_tests/models/_class.py +2 -3
- package/tests/output/model/tea_python_tests/models/_m.py +3 -4
- package/tests/output/model/tea_python_tests/models/_main_file_model.py +5 -4
- package/tests/output/model/tea_python_tests/models/_main_file_model_model.py +5 -4
- package/tests/output/model/tea_python_tests/models/_model.py +5 -4
- package/tests/output/model/tea_python_tests/models/_msub_m.py +2 -3
- package/tests/output/model/tea_python_tests/models/_my_model.py +216 -74
- package/tests/output/model/tea_python_tests/models/_my_model_model.py +5 -4
- package/tests/output/model/tea_python_tests/models/_my_model_model_model.py +5 -4
- package/tests/output/model/tea_python_tests/models/_my_model_subarraymodel.py +2 -3
- package/tests/output/model/tea_python_tests/models/_my_model_submodel.py +5 -4
- package/tests/output/model/tea_python_tests/models/_my_model_submodel_model.py +5 -4
- package/tests/output/modelConfig/setup.py +77 -0
- package/tests/output/modelConfig/tea_python_tests/__init__.py +1 -0
- package/tests/output/modelConfig/tea_python_tests/client.py +10 -0
- package/tests/output/modelConfig/tea_python_tests/exceptions/__init__.py +11 -0
- package/tests/output/modelConfig/tea_python_tests/exceptions/_main_file.py +28 -0
- package/tests/output/modelConfig/tea_python_tests/models/__init__.py +33 -0
- package/tests/output/modelConfig/tea_python_tests/models/_class.py +23 -0
- package/tests/output/modelConfig/tea_python_tests/models/_m.py +37 -0
- package/tests/output/modelConfig/tea_python_tests/models/_main_file_model.py +46 -0
- package/tests/output/modelConfig/tea_python_tests/models/_main_file_model_model.py +33 -0
- package/tests/output/modelConfig/tea_python_tests/models/_model.py +33 -0
- package/tests/output/modelConfig/tea_python_tests/models/_msub_m.py +25 -0
- package/tests/output/modelConfig/tea_python_tests/models/_my_model.py +600 -0
- package/tests/output/modelConfig/tea_python_tests/models/_my_model_model.py +46 -0
- package/tests/output/modelConfig/tea_python_tests/models/_my_model_model_model.py +33 -0
- package/tests/output/modelConfig/tea_python_tests/models/_my_model_subarraymodel.py +23 -0
- package/tests/output/modelConfig/tea_python_tests/models/_my_model_submodel.py +46 -0
- package/tests/output/modelConfig/tea_python_tests/models/_my_model_submodel_model.py +33 -0
- package/tests/output/multi/tea_python_tests/api_models/_test_model_dir_2.py +5 -4
- package/tests/output/multi/tea_python_tests/exceptions/_err.py +2 -2
- package/tests/output/multi/tea_python_tests/model/user_exceptions/_err.py +1 -1
- package/tests/output/multi/tea_python_tests/model/user_exceptions/_err_1.py +1 -1
- package/tests/output/multi/tea_python_tests/model/user_exceptions/_err_2.py +1 -1
- package/tests/output/multi/tea_python_tests/model/user_models/_base_info.py +5 -4
- package/tests/output/multi/tea_python_tests/model/user_models/_info.py +7 -4
- package/tests/output/multi/tea_python_tests/models/_test_model_dir.py +12 -8
- package/tests/output/typedef/tea_python_tests/models/_m.py +7 -4
package/ChangeLog.md
CHANGED
package/lib/generator.js
CHANGED
|
@@ -921,7 +921,7 @@ setup(
|
|
|
921
921
|
|
|
922
922
|
visitFieldType(value, level, modelName, fieldName) {
|
|
923
923
|
if (value.type === 'modelBody') {
|
|
924
|
-
const subModelName = _subModelName([modelName, fieldName].join('.'))
|
|
924
|
+
const subModelName = _subModelName([modelName, fieldName].join('.'));
|
|
925
925
|
this.emit(this.getModelName(subModelName));
|
|
926
926
|
} else if (value.type === 'array') {
|
|
927
927
|
this.visitType(value);
|
|
@@ -1062,6 +1062,30 @@ setup(
|
|
|
1062
1062
|
|
|
1063
1063
|
}
|
|
1064
1064
|
|
|
1065
|
+
visitFieldValidate(fieldValue, fieldName, value, level) {
|
|
1066
|
+
const deep = Math.floor(level / 4);
|
|
1067
|
+
if (fieldValue.type === 'modelBody' || fieldValue.type === 'moduleModel' ||
|
|
1068
|
+
fieldValue.type === 'subModel' || fieldValue.idType === 'model' ||
|
|
1069
|
+
(fieldValue.fieldType && (fieldValue.fieldType.type === 'moduleModel' ||
|
|
1070
|
+
fieldValue.fieldType.idType === 'model' || fieldValue.fieldType.idType === 'builtin_model'))) {
|
|
1071
|
+
if(deep > 1) {
|
|
1072
|
+
this.emit(` if ${value}:\n`, level);
|
|
1073
|
+
}
|
|
1074
|
+
this.emit(`${value}.validate()\n`, level + 2);
|
|
1075
|
+
} else if (fieldValue.type === 'array' || fieldValue.fieldType === 'array') {
|
|
1076
|
+
this.emit(`for v${deep} in ${value}:\n`, level);
|
|
1077
|
+
this.visitFieldValidate(fieldValue.fieldItemType || fieldValue.subType, fieldName, `v${deep}`, level + 2);
|
|
1078
|
+
} else if (fieldValue.fieldType === 'map' || fieldValue.type === 'map') {
|
|
1079
|
+
this.emit(`for v${deep} in self.${fieldName}.values():\n`, level);
|
|
1080
|
+
this.visitFieldValidate(fieldValue.valueType, fieldName, `v${deep}`, level + 2);
|
|
1081
|
+
} else {
|
|
1082
|
+
if(deep > 1) {
|
|
1083
|
+
this.emit(` if ${value}:\n`, level);
|
|
1084
|
+
}
|
|
1085
|
+
this.emit(`${value}.validate()\n`, level + 2);
|
|
1086
|
+
}
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1065
1089
|
visitModelValidate(ast, level) {
|
|
1066
1090
|
let notPass = false;
|
|
1067
1091
|
for (let i = 0; i < ast.nodes.length; i++) {
|
|
@@ -1080,47 +1104,16 @@ setup(
|
|
|
1080
1104
|
this.emit(`self.validate_required(self.${param}, '${param}')\n`, level + 2);
|
|
1081
1105
|
}
|
|
1082
1106
|
// 这里判断类中属性的结构
|
|
1083
|
-
if(node.fieldValue.fieldType === 'array'
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
notPass = true;
|
|
1089
|
-
this.emit(`if self.${param}:\n`, level + 2);
|
|
1090
|
-
this.emit(`for k in self.${param}:\n`, level + 4);
|
|
1091
|
-
let baseLevel = level + 6;
|
|
1092
|
-
// 二层数组
|
|
1093
|
-
if(node.fieldValue.fieldItemType && node.fieldValue.fieldItemType.fieldType === 'array' || node.fieldValue.fieldItemType.fieldType === 'string') {
|
|
1094
|
-
this.emit('for k1 in k:\n', baseLevel);
|
|
1095
|
-
this.emit('if k1:\n', baseLevel += 2);
|
|
1096
|
-
this.emit('k1.validate()\n', baseLevel += 2);
|
|
1097
|
-
} else {
|
|
1098
|
-
this.emit('if k:\n', baseLevel);
|
|
1099
|
-
this.emit('k.validate()\n', baseLevel + 2);
|
|
1100
|
-
}
|
|
1101
|
-
} else if(node.fieldValue.fieldType === 'map' && node.fieldValue.valueType.lexeme !== 'string') {
|
|
1102
|
-
// TODO: 这里为array的时候不做validate
|
|
1103
|
-
// $dara.Model.validateMap
|
|
1104
|
-
if(this.checkFieldItemTypeAllString(node.fieldValue)){
|
|
1107
|
+
if(node.fieldValue.fieldType === 'array' || node.fieldValue.fieldType === 'map' ||
|
|
1108
|
+
node.fieldValue.type === 'array' || node.fieldValue.type === 'map'
|
|
1109
|
+
) {
|
|
1110
|
+
// 下面不包含model的就不需要validate
|
|
1111
|
+
if(!this.checkFieldHasModel(node.fieldValue)){
|
|
1105
1112
|
continue;
|
|
1106
1113
|
}
|
|
1107
1114
|
notPass = true;
|
|
1108
1115
|
this.emit(`if self.${param}:\n`, level + 2);
|
|
1109
|
-
this.
|
|
1110
|
-
let baseLevel = level + 6;
|
|
1111
|
-
// 二层map 或 array 特殊操作
|
|
1112
|
-
if(node.fieldValue.fieldItemType && node.fieldValue.fieldItemType.fieldType === 'array') {
|
|
1113
|
-
this.emit('for v1 in k:\n', baseLevel);
|
|
1114
|
-
this.emit('if v1:\n', baseLevel += 2);
|
|
1115
|
-
this.emit('v1.validate()\n', baseLevel += 2);
|
|
1116
|
-
} else if(node.fieldValue.valueType.type === 'array'){
|
|
1117
|
-
this.emit('for k1 in v:\n', baseLevel);
|
|
1118
|
-
this.emit('if k1:\n', baseLevel += 2);
|
|
1119
|
-
this.emit('k1.validate()\n', baseLevel += 2);
|
|
1120
|
-
} else {
|
|
1121
|
-
this.emit('if v:\n', baseLevel);
|
|
1122
|
-
this.emit('v.validate()\n', baseLevel + 2);
|
|
1123
|
-
}
|
|
1116
|
+
this.visitFieldValidate(node.fieldValue, param, `self.${param}`, level + 4);
|
|
1124
1117
|
} else if(node.fieldValue.fieldType && node.fieldValue.fieldType.idType === 'model' || node.fieldValue.type === 'modelBody'){
|
|
1125
1118
|
notPass = true;
|
|
1126
1119
|
this.emit(`if self.${param}:\n`, level + 2);
|
|
@@ -1154,7 +1147,7 @@ setup(
|
|
|
1154
1147
|
}
|
|
1155
1148
|
|
|
1156
1149
|
visitToMapField(fieldValue, fieldName, key, value, level, arr = false) {
|
|
1157
|
-
const deep = Math.floor(level
|
|
1150
|
+
const deep = Math.floor((level - 4) / 2);
|
|
1158
1151
|
if (fieldValue.type === 'modelBody' || fieldValue.type === 'moduleModel' ||
|
|
1159
1152
|
fieldValue.type === 'subModel' || fieldValue.idType === 'model' ||
|
|
1160
1153
|
(fieldValue.fieldType && (fieldValue.fieldType.type === 'moduleModel' ||
|
|
@@ -1165,13 +1158,27 @@ setup(
|
|
|
1165
1158
|
}
|
|
1166
1159
|
this.emitFieldConvert(key, realVal, level, arr);
|
|
1167
1160
|
} else if (fieldValue.type === 'array' || fieldValue.fieldType === 'array') {
|
|
1168
|
-
|
|
1161
|
+
let subKey = key;
|
|
1162
|
+
if(deep > 1) {
|
|
1163
|
+
subKey = `l${deep - 1}`;
|
|
1164
|
+
this.emit(`${subKey} = []\n`, level);
|
|
1165
|
+
}
|
|
1169
1166
|
this.emit(`for k${deep} in ${value}:\n`, level);
|
|
1170
|
-
this.visitToMapField(fieldValue.fieldItemType || fieldValue.subType, fieldName, `${
|
|
1167
|
+
this.visitToMapField(fieldValue.fieldItemType || fieldValue.subType, fieldName, `${subKey}`, `k${deep}`, level + 2, true);
|
|
1168
|
+
if(deep > 1) {
|
|
1169
|
+
this.emitFieldConvert(key, subKey, level, arr);
|
|
1170
|
+
}
|
|
1171
1171
|
} else if (fieldValue.fieldType === 'map' || fieldValue.type === 'map') {
|
|
1172
|
-
|
|
1172
|
+
let subKey = key;
|
|
1173
|
+
if(deep > 1) {
|
|
1174
|
+
subKey = `d${deep - 1}`;
|
|
1175
|
+
this.emit(`${subKey} = {}\n`, level);
|
|
1176
|
+
}
|
|
1173
1177
|
this.emit(`for k${deep}, v${deep} in self.${fieldName}.items():\n`, level);
|
|
1174
|
-
this.visitToMapField(fieldValue.valueType, fieldName, `${
|
|
1178
|
+
this.visitToMapField(fieldValue.valueType, fieldName, `${subKey}[k${deep}]`, `v${deep}`, level + 2);
|
|
1179
|
+
if(deep > 1) {
|
|
1180
|
+
this.emitFieldConvert(key, subKey, level, arr);
|
|
1181
|
+
}
|
|
1175
1182
|
} else {
|
|
1176
1183
|
this.emitFieldConvert(key, value, level, arr);
|
|
1177
1184
|
}
|
|
@@ -1180,22 +1187,39 @@ setup(
|
|
|
1180
1187
|
|
|
1181
1188
|
visitToMap(ast, level) {
|
|
1182
1189
|
this.emit('def to_map(self):\n', level);
|
|
1183
|
-
this.emit(
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
result = dict()\n`);
|
|
1190
|
+
this.emit('result = dict()\n' , level + 2);
|
|
1191
|
+
this.emit('_map = super().to_map()\n' , level + 2);
|
|
1192
|
+
this.emit('if _map is not None:\n' , level + 2);
|
|
1193
|
+
this.emit('result = _map\n', level + 4);
|
|
1188
1194
|
for (let i = 0; i < ast.nodes.length; i++) {
|
|
1189
1195
|
const node = ast.nodes[i];
|
|
1190
1196
|
let realName = this.getRealName(node);
|
|
1191
1197
|
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
|
|
1192
1198
|
this.visitComments(comments, level);
|
|
1193
1199
|
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1200
|
+
const hasModel = this.checkFieldHasModel(node.fieldValue);
|
|
1201
|
+
let arr = false;
|
|
1202
|
+
if(hasModel && !this.config.noneEmpty) {
|
|
1203
|
+
if (node.fieldValue.type === 'array' || node.fieldValue.fieldType === 'array') {
|
|
1204
|
+
this.emit(`result['${realName}'] = []\n`, level + 2);
|
|
1205
|
+
arr = true;
|
|
1206
|
+
} else if (node.fieldValue.fieldType === 'map' || node.fieldValue.type === 'map') {
|
|
1207
|
+
this.emit(`result['${realName}'] = {}\n`, level + 2);
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1194
1210
|
this.emit(`if self.${param} is not None:\n`, level + 2);
|
|
1195
|
-
if(!
|
|
1196
|
-
this.emit(`result['${realName}'] = self.${param}`, level + 4);
|
|
1211
|
+
if(!hasModel) {
|
|
1212
|
+
this.emit(`result['${realName}'] = self.${param}\n`, level + 4);
|
|
1197
1213
|
} else {
|
|
1198
|
-
this.
|
|
1214
|
+
if(this.config.noneEmpty) {
|
|
1215
|
+
if (node.fieldValue.type === 'array' || node.fieldValue.fieldType === 'array') {
|
|
1216
|
+
this.emit(`result['${realName}'] = []\n`, level + 4);
|
|
1217
|
+
arr = true;
|
|
1218
|
+
} else if (node.fieldValue.fieldType === 'map' || node.fieldValue.type === 'map') {
|
|
1219
|
+
this.emit(`result['${realName}'] = {}\n`, level + 4);
|
|
1220
|
+
}
|
|
1221
|
+
}
|
|
1222
|
+
this.visitToMapField(node.fieldValue, param, `result['${realName}']`, `self.${param}`, level + 4, arr);
|
|
1199
1223
|
}
|
|
1200
1224
|
this.emit('\n');
|
|
1201
1225
|
}
|
|
@@ -1212,20 +1236,33 @@ setup(
|
|
|
1212
1236
|
}
|
|
1213
1237
|
|
|
1214
1238
|
visitFromField(fieldValue, fieldName, key, value, level, arr = false) {
|
|
1215
|
-
const deep = Math.floor(level
|
|
1239
|
+
const deep = Math.floor((level - 4) / 2);
|
|
1216
1240
|
if (fieldValue.type === 'modelBody') {
|
|
1217
|
-
const subModelName = _subModelName(
|
|
1241
|
+
const subModelName = _subModelName(fieldName);
|
|
1218
1242
|
this.emit(`temp_model = ${this.getModelName(subModelName)}()\n`, level);
|
|
1219
1243
|
this.emitFieldConvert(key, `temp_model.from_map(${value})`, level, arr);
|
|
1220
1244
|
} else if (fieldValue.type === 'array' || fieldValue.fieldType === 'array') {
|
|
1221
|
-
this.emit(`l${deep} = 0\n`, level);
|
|
1222
|
-
this.emit(`${key} = []\n`, level);
|
|
1223
1245
|
this.emit(`for k${deep} in ${value}:\n`, level);
|
|
1224
|
-
|
|
1246
|
+
let subKey = key;
|
|
1247
|
+
if(deep > 1) {
|
|
1248
|
+
subKey = `l${deep - 1}`;
|
|
1249
|
+
this.emit(`${subKey} = []\n`, level + 2);
|
|
1250
|
+
}
|
|
1251
|
+
this.visitFromField(fieldValue.fieldItemType || fieldValue.subType, fieldName, `${subKey}`, `k${deep}`, level + 2, true);
|
|
1252
|
+
if(deep > 1) {
|
|
1253
|
+
this.emitFieldConvert(key, subKey, level, arr);
|
|
1254
|
+
}
|
|
1225
1255
|
} else if (fieldValue.fieldType === 'map' || fieldValue.type === 'map') {
|
|
1226
|
-
this.emit(`${key} = {}\n`, level);
|
|
1227
1256
|
this.emit(`for k${deep}, v${deep} in ${value}.items():\n`, level);
|
|
1228
|
-
|
|
1257
|
+
let subKey = key;
|
|
1258
|
+
if(deep > 1) {
|
|
1259
|
+
subKey = `d${deep - 1}`;
|
|
1260
|
+
this.emit(`${subKey} = {}\n`, level + 2);
|
|
1261
|
+
}
|
|
1262
|
+
this.visitFromField(fieldValue.valueType, fieldName, `${subKey}[k${deep}]`, `v${deep}`, level + 2);
|
|
1263
|
+
if(deep > 1) {
|
|
1264
|
+
this.emitFieldConvert(key, subKey, level, arr);
|
|
1265
|
+
}
|
|
1229
1266
|
} else if (fieldValue.type === 'moduleModel' ||
|
|
1230
1267
|
(fieldValue.fieldType && fieldValue.fieldType.type === 'moduleModel')) {
|
|
1231
1268
|
const [moduleId, ...rest] = fieldValue.path || fieldValue.fieldType.path;
|
|
@@ -1257,6 +1294,7 @@ setup(
|
|
|
1257
1294
|
} else {
|
|
1258
1295
|
this.emitFieldConvert(key, value, level, arr);
|
|
1259
1296
|
}
|
|
1297
|
+
|
|
1260
1298
|
}
|
|
1261
1299
|
|
|
1262
1300
|
visitFromMap(ast, modelName, level) {
|
|
@@ -1269,11 +1307,31 @@ setup(
|
|
|
1269
1307
|
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
|
|
1270
1308
|
this.visitComments(comments, level);
|
|
1271
1309
|
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1310
|
+
const hasModel = this.checkFieldHasModel(node.fieldValue);
|
|
1311
|
+
let arr = false;
|
|
1312
|
+
if(hasModel && !this.config.noneEmpty) {
|
|
1313
|
+
if (node.fieldValue.type === 'array' || node.fieldValue.fieldType === 'array') {
|
|
1314
|
+
this.emit(`self.${param} = []\n`, level + 2);
|
|
1315
|
+
arr = true;
|
|
1316
|
+
} else if (node.fieldValue.fieldType === 'map' || node.fieldValue.type === 'map') {
|
|
1317
|
+
this.emit(`self.${param} = {}\n`, level + 2);
|
|
1318
|
+
arr = false;
|
|
1319
|
+
}
|
|
1320
|
+
}
|
|
1272
1321
|
this.emit(`if m.get('${realName}') is not None:\n`, level + 2);
|
|
1273
|
-
if(!
|
|
1274
|
-
this.emit(`self.${param} = m.get('${realName}')`, level + 4);
|
|
1322
|
+
if(!hasModel) {
|
|
1323
|
+
this.emit(`self.${param} = m.get('${realName}')\n`, level + 4);
|
|
1275
1324
|
} else {
|
|
1276
|
-
this.
|
|
1325
|
+
if(this.config.noneEmpty) {
|
|
1326
|
+
if (node.fieldValue.type === 'array' || node.fieldValue.fieldType === 'array') {
|
|
1327
|
+
this.emit(`self.${param} = []\n`, level + 4);
|
|
1328
|
+
arr = true;
|
|
1329
|
+
} else if (node.fieldValue.fieldType === 'map' || node.fieldValue.type === 'map') {
|
|
1330
|
+
this.emit(`self.${param} = {}\n`, level + 4);
|
|
1331
|
+
arr = false;
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
this.visitFromField(node.fieldValue, [modelName, _name(node.fieldName)].join('.'), `self.${param}`, `m.get('${realName}')`, level + 4, arr);
|
|
1277
1335
|
}
|
|
1278
1336
|
this.emit('\n');
|
|
1279
1337
|
}
|
|
@@ -1291,24 +1349,6 @@ setup(
|
|
|
1291
1349
|
return attr.attrValue.string || attr.attrValue.lexeme || attr.attrValue.value;
|
|
1292
1350
|
}
|
|
1293
1351
|
|
|
1294
|
-
visitFieldValidate(value, level, name) {
|
|
1295
|
-
if (value.type === 'array' || value.fieldType === 'array') {
|
|
1296
|
-
this.emit(`if(Array.isArray(${name})) {\n`, level);
|
|
1297
|
-
this.emit(`$dara.Model.validateArray(${name})\n`, level + 1);
|
|
1298
|
-
this.emit('}\n', level);
|
|
1299
|
-
} else if (value.fieldType === 'map' || value.type === 'map') {
|
|
1300
|
-
this.emit(`if(${name}) {\n`, level);
|
|
1301
|
-
this.emit(`$dara.Model.validateMap(${name})\n`, level + 1);
|
|
1302
|
-
this.emit('}\n', level);
|
|
1303
|
-
} else if (value.type === 'moduleModel' || value.type === 'modelBody'
|
|
1304
|
-
|| value.type === 'subModel' || value.fieldType.type === 'moduleModel'
|
|
1305
|
-
|| value.fieldType.idType === 'model' || value.fieldType.idType === 'module') {
|
|
1306
|
-
this.emit(`if(${name} && typeof (${name} as any).validate === 'function') {\n`, level);
|
|
1307
|
-
this.emit(`(${name} as any).validate()\n`, level + 1);
|
|
1308
|
-
this.emit('}\n', level);
|
|
1309
|
-
}
|
|
1310
|
-
}
|
|
1311
|
-
|
|
1312
1352
|
extendBaseErr(extendOn){
|
|
1313
1353
|
if (!extendOn) {
|
|
1314
1354
|
return true;
|
|
@@ -1474,7 +1514,7 @@ setup(
|
|
|
1474
1514
|
return;
|
|
1475
1515
|
}
|
|
1476
1516
|
this.emit('\n');
|
|
1477
|
-
this.emit(
|
|
1517
|
+
this.emit(`self,${ this.config.strictModel ? ' *,' : '' }\n`, level + 2);
|
|
1478
1518
|
for (let i = 0; i < paramNodes.length; i++) {
|
|
1479
1519
|
node = paramNodes[i];
|
|
1480
1520
|
if(!node.extend) {
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@ from darabonba.model import DaraModel
|
|
|
10
10
|
"""
|
|
11
11
|
class Test(DaraModel):
|
|
12
12
|
def __init__(
|
|
13
|
-
self,
|
|
13
|
+
self,
|
|
14
14
|
test: str = None,
|
|
15
15
|
):
|
|
16
16
|
# Alichange app id
|
|
@@ -20,18 +20,19 @@ class Test(DaraModel):
|
|
|
20
20
|
self.validate_required(self.test, 'test')
|
|
21
21
|
|
|
22
22
|
def to_map(self):
|
|
23
|
+
result = dict()
|
|
23
24
|
_map = super().to_map()
|
|
24
25
|
if _map is not None:
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
result = dict()
|
|
26
|
+
result = _map
|
|
28
27
|
if self.test is not None:
|
|
29
28
|
result['test'] = self.test
|
|
29
|
+
|
|
30
30
|
return result
|
|
31
31
|
|
|
32
32
|
def from_map(self, m: dict = None):
|
|
33
33
|
m = m or dict()
|
|
34
34
|
if m.get('test') is not None:
|
|
35
35
|
self.test = m.get('test')
|
|
36
|
+
|
|
36
37
|
return self
|
|
37
38
|
|
|
@@ -14,7 +14,7 @@ from typing import List
|
|
|
14
14
|
"""
|
|
15
15
|
class Test1(DaraModel):
|
|
16
16
|
def __init__(
|
|
17
|
-
self,
|
|
17
|
+
self,
|
|
18
18
|
test: str = None,
|
|
19
19
|
# odel的test back comment
|
|
20
20
|
test_2: str = None,
|
|
@@ -50,42 +50,53 @@ class Test1(DaraModel):
|
|
|
50
50
|
self.validate_required(self.a_sts, 'a_sts')
|
|
51
51
|
|
|
52
52
|
def to_map(self):
|
|
53
|
+
result = dict()
|
|
53
54
|
_map = super().to_map()
|
|
54
55
|
if _map is not None:
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
result = dict()
|
|
56
|
+
result = _map
|
|
58
57
|
if self.test is not None:
|
|
59
58
|
result['test'] = self.test
|
|
59
|
+
|
|
60
60
|
# odel的test back comment
|
|
61
61
|
if self.test_2 is not None:
|
|
62
62
|
result['test2'] = self.test_2
|
|
63
|
+
|
|
63
64
|
# odel的test2 back comment
|
|
64
65
|
if self.test_3 is not None:
|
|
65
66
|
result['test3'] = self.test_3
|
|
67
|
+
|
|
66
68
|
if self.test_5 is not None:
|
|
67
69
|
result['test5'] = self.test_5
|
|
70
|
+
|
|
68
71
|
if self.sts is not None:
|
|
69
72
|
result['sts'] = self.sts
|
|
73
|
+
|
|
70
74
|
if self.a_sts is not None:
|
|
71
75
|
result['asts'] = self.a_sts
|
|
76
|
+
|
|
72
77
|
return result
|
|
73
78
|
|
|
74
79
|
def from_map(self, m: dict = None):
|
|
75
80
|
m = m or dict()
|
|
76
81
|
if m.get('test') is not None:
|
|
77
82
|
self.test = m.get('test')
|
|
83
|
+
|
|
78
84
|
# odel的test back comment
|
|
79
85
|
if m.get('test2') is not None:
|
|
80
86
|
self.test_2 = m.get('test2')
|
|
87
|
+
|
|
81
88
|
# odel的test2 back comment
|
|
82
89
|
if m.get('test3') is not None:
|
|
83
90
|
self.test_3 = m.get('test3')
|
|
91
|
+
|
|
84
92
|
if m.get('test5') is not None:
|
|
85
93
|
self.test_5 = m.get('test5')
|
|
94
|
+
|
|
86
95
|
if m.get('sts') is not None:
|
|
87
96
|
self.sts = m.get('sts')
|
|
97
|
+
|
|
88
98
|
if m.get('asts') is not None:
|
|
89
99
|
self.a_sts = m.get('asts')
|
|
100
|
+
|
|
90
101
|
return self
|
|
91
102
|
|
|
@@ -10,7 +10,7 @@ from darabonba.model import DaraModel
|
|
|
10
10
|
"""
|
|
11
11
|
class Test2(DaraModel):
|
|
12
12
|
def __init__(
|
|
13
|
-
self,
|
|
13
|
+
self,
|
|
14
14
|
# model的test front comment
|
|
15
15
|
test: str = None,
|
|
16
16
|
# model的test front comment
|
|
@@ -30,17 +30,18 @@ class Test2(DaraModel):
|
|
|
30
30
|
self.validate_required(self.test_2, 'test_2')
|
|
31
31
|
|
|
32
32
|
def to_map(self):
|
|
33
|
+
result = dict()
|
|
33
34
|
_map = super().to_map()
|
|
34
35
|
if _map is not None:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
result = dict()
|
|
36
|
+
result = _map
|
|
38
37
|
# model的test front comment
|
|
39
38
|
if self.test is not None:
|
|
40
39
|
result['test'] = self.test
|
|
40
|
+
|
|
41
41
|
# model的test front comment
|
|
42
42
|
if self.test_2 is not None:
|
|
43
43
|
result['test2'] = self.test_2
|
|
44
|
+
|
|
44
45
|
return result
|
|
45
46
|
|
|
46
47
|
def from_map(self, m: dict = None):
|
|
@@ -48,8 +49,10 @@ class Test2(DaraModel):
|
|
|
48
49
|
# model的test front comment
|
|
49
50
|
if m.get('test') is not None:
|
|
50
51
|
self.test = m.get('test')
|
|
52
|
+
|
|
51
53
|
# model的test front comment
|
|
52
54
|
if m.get('test2') is not None:
|
|
53
55
|
self.test_2 = m.get('test2')
|
|
56
|
+
|
|
54
57
|
return self
|
|
55
58
|
|
|
@@ -10,7 +10,7 @@ from darabonba.model import DaraModel
|
|
|
10
10
|
"""
|
|
11
11
|
class Test3(DaraModel):
|
|
12
12
|
def __init__(
|
|
13
|
-
self,
|
|
13
|
+
self,
|
|
14
14
|
# model的test front comment
|
|
15
15
|
test: str = None,
|
|
16
16
|
# empty comment1
|
|
@@ -33,18 +33,19 @@ class Test3(DaraModel):
|
|
|
33
33
|
self.validate_required(self.test_1, 'test_1')
|
|
34
34
|
|
|
35
35
|
def to_map(self):
|
|
36
|
+
result = dict()
|
|
36
37
|
_map = super().to_map()
|
|
37
38
|
if _map is not None:
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
result = dict()
|
|
39
|
+
result = _map
|
|
41
40
|
# model的test front comment
|
|
42
41
|
if self.test is not None:
|
|
43
42
|
result['test'] = self.test
|
|
43
|
+
|
|
44
44
|
# empty comment1
|
|
45
45
|
# empy comment2
|
|
46
46
|
if self.test_1 is not None:
|
|
47
47
|
result['test1'] = self.test_1
|
|
48
|
+
|
|
48
49
|
return result
|
|
49
50
|
|
|
50
51
|
def from_map(self, m: dict = None):
|
|
@@ -52,10 +53,12 @@ class Test3(DaraModel):
|
|
|
52
53
|
# model的test front comment
|
|
53
54
|
if m.get('test') is not None:
|
|
54
55
|
self.test = m.get('test')
|
|
56
|
+
|
|
55
57
|
# empty comment1
|
|
56
58
|
# empy comment2
|
|
57
59
|
if m.get('test1') is not None:
|
|
58
60
|
self.test_1 = m.get('test1')
|
|
61
|
+
|
|
59
62
|
return self
|
|
60
63
|
|
|
61
64
|
# odel的test back comment
|