@darabonba/python-generator 2.0.2 → 2.0.3
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/.github/workflows/ci.yml +1 -1
- package/ChangeLog.md +12 -0
- package/lib/generator.js +195 -109
- package/lib/helper.js +21 -1
- package/package.json +1 -1
- package/tests/expected/{python3/model/tea_python_tests/client.py → annotation/tea_python_tests/models/__init__.py} +6 -3
- package/tests/expected/annotation/tea_python_tests/{models.py → models/_test.py} +1 -1
- package/tests/expected/comment/tea_python_tests/models/__init__.py +15 -0
- package/tests/expected/comment/tea_python_tests/models/_test_1.py +91 -0
- package/tests/expected/comment/tea_python_tests/models/_test_2.py +55 -0
- package/tests/expected/comment/tea_python_tests/models/_test_3.py +61 -0
- package/tests/expected/complex/tea_python_tests/client.py +6 -6
- package/tests/expected/complex/tea_python_tests/exceptions/__init__.py +13 -0
- package/tests/expected/complex/tea_python_tests/exceptions/_err_1.py +23 -0
- package/tests/expected/complex/tea_python_tests/exceptions/_err_2.py +22 -0
- package/tests/expected/complex/tea_python_tests/models/__init__.py +19 -0
- package/tests/{output/complex/tea_python_tests/models.py → expected/complex/tea_python_tests/models/_complex_request.py} +12 -141
- package/tests/expected/complex/tea_python_tests/models/_complex_request_configs.py +47 -0
- package/tests/expected/complex/tea_python_tests/models/_complex_request_header.py +42 -0
- package/tests/expected/complex/tea_python_tests/models/_complex_request_part.py +33 -0
- package/tests/expected/complex/tea_python_tests/models/_response.py +33 -0
- package/tests/expected/model/tea_python_tests/exceptions/__init__.py +11 -0
- package/tests/expected/model/tea_python_tests/{exceptions.py → exceptions/_main_file.py} +1 -1
- package/tests/expected/model/tea_python_tests/models/__init__.py +33 -0
- package/tests/expected/model/tea_python_tests/models/_class.py +24 -0
- package/tests/expected/model/tea_python_tests/models/_m.py +38 -0
- package/tests/expected/model/tea_python_tests/models/_main_file_model.py +45 -0
- package/tests/expected/model/tea_python_tests/models/_main_file_model_model.py +32 -0
- package/tests/expected/model/tea_python_tests/models/_model.py +32 -0
- package/tests/expected/model/tea_python_tests/models/_msub_m.py +26 -0
- package/tests/expected/model/tea_python_tests/{models.py → models/_my_model.py} +16 -321
- package/tests/expected/model/tea_python_tests/models/_my_model_model.py +45 -0
- package/tests/expected/model/tea_python_tests/models/_my_model_model_model.py +32 -0
- package/tests/expected/model/tea_python_tests/models/_my_model_subarraymodel.py +24 -0
- package/tests/expected/model/tea_python_tests/models/_my_model_submodel.py +45 -0
- package/tests/expected/model/tea_python_tests/models/_my_model_submodel_model.py +32 -0
- package/tests/expected/multi/tea_python_tests/api.py +0 -2
- package/tests/expected/multi/tea_python_tests/api_models/__init__.py +11 -0
- package/tests/expected/{python3/annotation/tea_python_tests/models.py → multi/tea_python_tests/api_models/_test_model_dir_2.py} +7 -9
- package/tests/expected/multi/tea_python_tests/client.py +0 -2
- package/tests/expected/multi/tea_python_tests/exceptions/__init__.py +13 -0
- package/tests/{output/complex/tea_python_tests/exceptions.py → expected/multi/tea_python_tests/exceptions/_err.py} +10 -11
- package/tests/expected/multi/tea_python_tests/model/user_exceptions/__init__.py +15 -0
- package/tests/expected/multi/tea_python_tests/model/user_exceptions/_err.py +22 -0
- package/tests/expected/multi/tea_python_tests/model/{user_exceptions.py → user_exceptions/_err_1.py} +3 -32
- package/tests/expected/multi/tea_python_tests/model/user_exceptions/_err_2.py +18 -0
- package/tests/expected/multi/tea_python_tests/model/user_models/__init__.py +13 -0
- package/tests/expected/multi/tea_python_tests/model/user_models/_base_info.py +72 -0
- package/tests/expected/multi/tea_python_tests/model/{user_models.py → user_models/_info.py} +3 -69
- package/tests/expected/multi/tea_python_tests/models/__init__.py +13 -0
- package/tests/expected/multi/tea_python_tests/models/_test_model_dir.py +79 -0
- package/tests/expected/{python2/empty/tea_python_tests/client.py → typedef/tea_python_tests/models/__init__.py} +9 -3
- package/tests/{output/typedef/tea_python_tests/models.py → expected/typedef/tea_python_tests/models/_m.py} +1 -1
- package/tests/fixtures/multi/api.dara +4 -0
- package/tests/fixtures/multi/main.dara +18 -0
- package/tests/main.tests.js +194 -219
- package/tests/output/annotation/tea_python_tests/models/__init__.py +11 -0
- package/tests/output/annotation/tea_python_tests/{models.py → models/_test.py} +1 -1
- package/tests/output/comment/tea_python_tests/models/__init__.py +15 -0
- package/tests/output/comment/tea_python_tests/models/_test_1.py +91 -0
- package/tests/output/comment/tea_python_tests/models/_test_2.py +55 -0
- package/tests/output/comment/tea_python_tests/models/_test_3.py +61 -0
- package/tests/output/complex/tea_python_tests/client.py +6 -6
- package/tests/output/complex/tea_python_tests/exceptions/__init__.py +13 -0
- package/tests/output/complex/tea_python_tests/exceptions/_err_1.py +23 -0
- package/tests/output/complex/tea_python_tests/exceptions/_err_2.py +22 -0
- package/tests/output/complex/tea_python_tests/models/__init__.py +19 -0
- package/tests/{expected/complex/tea_python_tests/models.py → output/complex/tea_python_tests/models/_complex_request.py} +12 -141
- package/tests/output/complex/tea_python_tests/models/_complex_request_configs.py +47 -0
- package/tests/output/complex/tea_python_tests/models/_complex_request_header.py +42 -0
- package/tests/output/complex/tea_python_tests/models/_complex_request_part.py +33 -0
- package/tests/output/complex/tea_python_tests/models/_response.py +33 -0
- package/tests/output/model/tea_python_tests/exceptions/__init__.py +11 -0
- package/tests/output/model/tea_python_tests/{exceptions.py → exceptions/_main_file.py} +1 -1
- package/tests/output/model/tea_python_tests/models/__init__.py +33 -0
- package/tests/output/model/tea_python_tests/models/_class.py +24 -0
- package/tests/output/model/tea_python_tests/models/_m.py +38 -0
- package/tests/output/model/tea_python_tests/models/_main_file_model.py +45 -0
- package/tests/output/model/tea_python_tests/models/_main_file_model_model.py +32 -0
- package/tests/output/model/tea_python_tests/models/_model.py +32 -0
- package/tests/output/model/tea_python_tests/models/_msub_m.py +26 -0
- package/tests/output/model/tea_python_tests/{models.py → models/_my_model.py} +16 -321
- package/tests/output/model/tea_python_tests/models/_my_model_model.py +45 -0
- package/tests/output/model/tea_python_tests/models/_my_model_model_model.py +32 -0
- package/tests/output/model/tea_python_tests/models/_my_model_subarraymodel.py +24 -0
- package/tests/output/model/tea_python_tests/models/_my_model_submodel.py +45 -0
- package/tests/output/model/tea_python_tests/models/_my_model_submodel_model.py +32 -0
- package/tests/output/multi/tea_python_tests/api.py +0 -2
- package/tests/output/multi/tea_python_tests/api_models/__init__.py +11 -0
- package/tests/{expected/python2/annotation/tea_python_tests/models.py → output/multi/tea_python_tests/api_models/_test_model_dir_2.py} +12 -11
- package/tests/output/multi/tea_python_tests/client.py +0 -2
- package/tests/output/multi/tea_python_tests/exceptions/__init__.py +13 -0
- package/tests/{expected/complex/tea_python_tests/exceptions.py → output/multi/tea_python_tests/exceptions/_err.py} +10 -11
- package/tests/output/multi/tea_python_tests/model/user_exceptions/__init__.py +15 -0
- package/tests/output/multi/tea_python_tests/model/user_exceptions/_err.py +22 -0
- package/tests/output/multi/tea_python_tests/model/{user_exceptions.py → user_exceptions/_err_1.py} +3 -32
- package/tests/output/multi/tea_python_tests/model/user_exceptions/_err_2.py +18 -0
- package/tests/output/multi/tea_python_tests/model/user_models/__init__.py +13 -0
- package/tests/output/multi/tea_python_tests/model/user_models/_base_info.py +72 -0
- package/tests/output/multi/tea_python_tests/model/{user_models.py → user_models/_info.py} +3 -69
- package/tests/output/multi/tea_python_tests/models/__init__.py +13 -0
- package/tests/output/multi/tea_python_tests/models/_test_model_dir.py +79 -0
- package/tests/{expected/python2/model/tea_python_tests/client.py → output/typedef/tea_python_tests/models/__init__.py} +9 -3
- package/tests/{expected/typedef/tea_python_tests/models.py → output/typedef/tea_python_tests/models/_m.py} +1 -1
- package/tests/expected/comment/tea_python_tests/models.py +0 -195
- package/tests/expected/python2/alias/setup.py +0 -79
- package/tests/expected/python2/alias/tea_python_tests/client.py +0 -23
- package/tests/expected/python2/annotation/tea_python_tests/client.py +0 -54
- package/tests/expected/python2/api/tea_python_tests/client.py +0 -54
- package/tests/expected/python2/comment/tea_python_tests/client.py +0 -188
- package/tests/expected/python2/comment/tea_python_tests/models.py +0 -146
- package/tests/expected/python2/complex/tea_python_tests/client.py +0 -301
- package/tests/expected/python2/complex/tea_python_tests/models.py +0 -315
- package/tests/expected/python2/const/tea_python_tests/client.py +0 -14
- package/tests/expected/python2/empty/setup.py +0 -76
- package/tests/expected/python2/exec/tea_python_tests/exec_client.py +0 -16
- package/tests/expected/python2/function/tea_python_tests/client.py +0 -47
- package/tests/expected/python2/import/setup.py +0 -85
- package/tests/expected/python2/import/tea_python_tests/client.py +0 -24
- package/tests/expected/python2/map/tea_python_tests/client.py +0 -19
- package/tests/expected/python2/model/tea_python_tests/models.py +0 -575
- package/tests/expected/python2/statements/tea_python_tests/client.py +0 -64
- package/tests/expected/python2/super/tea_python_tests/client.py +0 -8
- package/tests/expected/python2/typedef/setup.py +0 -85
- package/tests/expected/python2/typedef/tea_python_tests/client.py +0 -38
- package/tests/expected/python2/typedef/tea_python_tests/models.py +0 -35
- package/tests/expected/python3/alias/setup.py +0 -77
- package/tests/expected/python3/alias/tea_python_tests/client.py +0 -32
- package/tests/expected/python3/annotation/tea_python_tests/client.py +0 -88
- package/tests/expected/python3/api/tea_python_tests/client.py +0 -92
- package/tests/expected/python3/comment/tea_python_tests/__init__.py +0 -1
- package/tests/expected/python3/comment/tea_python_tests/client.py +0 -319
- package/tests/expected/python3/comment/tea_python_tests/models.py +0 -163
- package/tests/expected/python3/complex/tea_python_tests/__init__.py +0 -1
- package/tests/expected/python3/complex/tea_python_tests/client.py +0 -514
- package/tests/expected/python3/complex/tea_python_tests/models.py +0 -349
- package/tests/expected/python3/const/tea_python_tests/__init__.py +0 -1
- package/tests/expected/python3/const/tea_python_tests/client.py +0 -9
- package/tests/expected/python3/empty/setup.py +0 -74
- package/tests/expected/python3/empty/tea_python_tests/__init__.py +0 -1
- package/tests/expected/python3/empty/tea_python_tests/client.py +0 -5
- package/tests/expected/python3/exec/tea_python_tests/__init__.py +0 -1
- package/tests/expected/python3/exec/tea_python_tests/exec_client.py +0 -20
- package/tests/expected/python3/function/tea_python_tests/__init__.py +0 -1
- package/tests/expected/python3/function/tea_python_tests/client.py +0 -67
- package/tests/expected/python3/import/setup.py +0 -77
- package/tests/expected/python3/import/tea_python_tests/__init__.py +0 -1
- package/tests/expected/python3/import/tea_python_tests/client.py +0 -28
- package/tests/expected/python3/map/tea_python_tests/__init__.py +0 -1
- package/tests/expected/python3/map/tea_python_tests/client.py +0 -22
- package/tests/expected/python3/model/tea_python_tests/__init__.py +0 -1
- package/tests/expected/python3/model/tea_python_tests/models.py +0 -631
- package/tests/expected/python3/statements/tea_python_tests/__init__.py +0 -1
- package/tests/expected/python3/statements/tea_python_tests/client.py +0 -83
- package/tests/expected/python3/super/tea_python_tests/__init__.py +0 -1
- package/tests/expected/python3/super/tea_python_tests/client.py +0 -13
- package/tests/expected/python3/typedef/setup.py +0 -77
- package/tests/expected/python3/typedef/tea_python_tests/__init__.py +0 -1
- package/tests/expected/python3/typedef/tea_python_tests/client.py +0 -72
- package/tests/expected/python3/typedef/tea_python_tests/models.py +0 -39
- package/tests/output/comment/tea_python_tests/models.py +0 -195
- /package/tests/expected/{python2/alias → multi}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python2/annotation → output/alias}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python2/api → output/annotation}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python2/comment → output/api}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python2/complex → output/builtin}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python2/const → output/comment}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python2/empty → output/complex}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python2/exec → output/const}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python2/function → output/empty}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python2/import → output/exec}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python2/map → output/function}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python2/model → output/import}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python2/statements → output/map}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python2/super → output/model}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python2/typedef → output/multi}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python3/alias → output/statements}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python3/annotation → output/super}/tea_python_tests/__init__.py +0 -0
- /package/tests/{expected/python3/api → output/typedef}/tea_python_tests/__init__.py +0 -0
package/lib/generator.js
CHANGED
|
@@ -9,24 +9,13 @@ const DSL = require('@darabonba/parser');
|
|
|
9
9
|
const {
|
|
10
10
|
_name, _vid, _string, _upperFirst, _type, _escape,
|
|
11
11
|
_subModelName, _camelCase, _snakeCase, _getImport,
|
|
12
|
-
_isBinaryOp, _adaptedQuotes, CORE, REQUEST, RESPONSE
|
|
12
|
+
_isBinaryOp, _adaptedQuotes, CORE, REQUEST, RESPONSE,
|
|
13
|
+
_avoidKeywords, _removeFilesInDirectory
|
|
13
14
|
} = require('./helper');
|
|
14
15
|
const getBuiltin = require('./builtin');
|
|
15
16
|
const { Tag } = require('@darabonba/parser/lib/tag');
|
|
16
17
|
const Annotation = require('@darabonba/annotation-parser');
|
|
17
18
|
|
|
18
|
-
function avoidReserveName(name) {
|
|
19
|
-
const reserves = [
|
|
20
|
-
'function'
|
|
21
|
-
];
|
|
22
|
-
|
|
23
|
-
if (reserves.indexOf(name) !== -1) {
|
|
24
|
-
return `_${name}`;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return name;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
19
|
class Visitor {
|
|
31
20
|
|
|
32
21
|
static get supportGenerateTest() {
|
|
@@ -52,8 +41,10 @@ class Visitor {
|
|
|
52
41
|
this.imports = [];
|
|
53
42
|
this.outputDir = this.config.outputDir;
|
|
54
43
|
this.setupPath = path.join(this.outputDir, 'setup.py');
|
|
55
|
-
this.modelPath = path.join(this.outputDir, this.config.package, 'models
|
|
56
|
-
this.
|
|
44
|
+
this.modelPath = path.join(this.outputDir, this.config.package, 'models');
|
|
45
|
+
this.modelPackage = 'models';
|
|
46
|
+
this.exceptionPath = path.join(this.outputDir, this.config.package, 'exceptions');
|
|
47
|
+
this.exceptionPackage = 'exceptions';
|
|
57
48
|
this.config.clientPath = path.join(this.outputDir, this.config.package, `${_snakeCase(this.config.clientName)}.py`);
|
|
58
49
|
this.classNamespace = new Map();
|
|
59
50
|
// 新增:用于存储已使用的类型
|
|
@@ -211,8 +202,10 @@ setup(
|
|
|
211
202
|
// this.exceptionPath = path.join(this.outputDir, this.config.package, 'exceptions.py');
|
|
212
203
|
const filepath = ast.innerModule.get(aliasId);
|
|
213
204
|
this.className = this.getInnerClient(aliasId);
|
|
214
|
-
this.modelPath = filepath.replace('.py', '_models
|
|
215
|
-
this.
|
|
205
|
+
this.modelPath = filepath.replace('.py', '_models');
|
|
206
|
+
this.modelPackage = path.basename(this.modelPath);
|
|
207
|
+
this.exceptionPath = filepath.replace('.py', '_exceptions');
|
|
208
|
+
this.exceptionPackage = path.basename(this.exceptionPath);
|
|
216
209
|
this.visitModule(moduleAst, filepath, false, 0);
|
|
217
210
|
data = keys.next();
|
|
218
211
|
}
|
|
@@ -262,6 +255,27 @@ setup(
|
|
|
262
255
|
return true;
|
|
263
256
|
}
|
|
264
257
|
|
|
258
|
+
modelBefore() {
|
|
259
|
+
// clear model.py
|
|
260
|
+
if(fs.existsSync(this.modelPath + '.py')) {
|
|
261
|
+
fs.unlinkSync(this.modelPath + '.py');
|
|
262
|
+
}
|
|
263
|
+
_removeFilesInDirectory(this.modelPath);
|
|
264
|
+
_removeFilesInDirectory(this.exceptionPath);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
visitModuleInit() {
|
|
268
|
+
const initFile = path.join(this.outputDir, this.config.package, '__init__.py');
|
|
269
|
+
if(!fs.existsSync(initFile)) {
|
|
270
|
+
if(!fs.existsSync(path.dirname(initFile))) {
|
|
271
|
+
fs.mkdirSync(path.dirname(initFile), {
|
|
272
|
+
recursive: true
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
fs.writeFileSync(initFile, '__version__ = "1.0.0"\n');
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
265
279
|
visitModule(ast, filepath, level) {
|
|
266
280
|
assert.equal(ast.type, 'module');
|
|
267
281
|
this.ast = ast;
|
|
@@ -276,6 +290,7 @@ setup(
|
|
|
276
290
|
|
|
277
291
|
this.clientName = new Map();
|
|
278
292
|
this.packageInfo = {};
|
|
293
|
+
this.fileBuffer = {};
|
|
279
294
|
this.usedTypes = [];
|
|
280
295
|
this.imports = [];
|
|
281
296
|
if(this.overwrite(ast, filepath) === false) {
|
|
@@ -310,12 +325,10 @@ setup(
|
|
|
310
325
|
for (let i = 0; i < models.length; i++) {
|
|
311
326
|
this.eachModel(models[i], level);
|
|
312
327
|
}
|
|
313
|
-
if (models.length > 0) {
|
|
328
|
+
if (models.length > 0 || subModels.length > 0) {
|
|
314
329
|
// 存一笔 models
|
|
315
|
-
|
|
316
|
-
this.
|
|
317
|
-
this.usedTypes = [];
|
|
318
|
-
this.imports = [];
|
|
330
|
+
this.modelInitBefore(ast, level);
|
|
331
|
+
this.visitModelInit(subModels.concat(models));
|
|
319
332
|
}
|
|
320
333
|
|
|
321
334
|
const exceptions = ast.moduleBody.nodes.filter((item) => {
|
|
@@ -324,17 +337,15 @@ setup(
|
|
|
324
337
|
|
|
325
338
|
|
|
326
339
|
if (exceptions.length > 0) {
|
|
327
|
-
this.exceptionsBody = true;
|
|
328
340
|
for (let i = 0; i < exceptions.length; i++) {
|
|
329
341
|
this.eachException(exceptions[i], level);
|
|
330
342
|
}
|
|
331
|
-
this.
|
|
332
|
-
this.save(this.exceptionPath);
|
|
333
|
-
this.usedTypes = [];
|
|
334
|
-
this.imports = [];
|
|
343
|
+
this.visitExceptionInit(exceptions);
|
|
335
344
|
}
|
|
345
|
+
this.flushBuffer();
|
|
336
346
|
|
|
337
347
|
|
|
348
|
+
this.visitModuleInit();
|
|
338
349
|
this.moduleBefore(ast, level);
|
|
339
350
|
|
|
340
351
|
this.visitAnnotation(ast.annotation, level);
|
|
@@ -554,8 +565,8 @@ setup(
|
|
|
554
565
|
for (var i = 0; i < ast.params.params.length; i++) {
|
|
555
566
|
const node = ast.params.params[i];
|
|
556
567
|
assert.equal(node.type, 'param');
|
|
557
|
-
const name = _snakeCase(_name(node.paramName));
|
|
558
|
-
this.emit(`${
|
|
568
|
+
const name = _avoidKeywords(_snakeCase(_name(node.paramName)));
|
|
569
|
+
this.emit(`${name}: `, level + 4);
|
|
559
570
|
this.visitType(node.paramType, level);
|
|
560
571
|
this.emit(',');
|
|
561
572
|
if (i !== ast.params.length - 1) {
|
|
@@ -741,8 +752,8 @@ setup(
|
|
|
741
752
|
for (var i = 0; i < ast.params.length; i++) {
|
|
742
753
|
const node = ast.params[i];
|
|
743
754
|
assert.equal(node.type, 'param');
|
|
744
|
-
const name = _snakeCase(_name(node.paramName));
|
|
745
|
-
this.emit(`${
|
|
755
|
+
const name = _avoidKeywords(_snakeCase(_name(node.paramName)));
|
|
756
|
+
this.emit(`${name}: `, level);
|
|
746
757
|
this.visitType(node.paramType, level);
|
|
747
758
|
this.emit(',');
|
|
748
759
|
if (i !== ast.params.length - 1) {
|
|
@@ -762,13 +773,18 @@ setup(
|
|
|
762
773
|
} else if (ast.type === 'moduleModel') {
|
|
763
774
|
const [moduleId, ...rest] = ast.path;
|
|
764
775
|
const modelName = _subModelName(rest.map((item) => item.lexeme).join('.'));
|
|
765
|
-
|
|
776
|
+
let type = 'model';
|
|
777
|
+
const externEx = this.usedExternException.get(_name(moduleId));
|
|
778
|
+
if (externEx && externEx.has(modelName)) {
|
|
779
|
+
type = 'exception';
|
|
780
|
+
}
|
|
781
|
+
this.emit(this.getModelName(modelName, _name(moduleId), type));
|
|
766
782
|
} else if (ast.type === 'subModel') {
|
|
767
783
|
const [moduleId, ...rest] = ast.path;
|
|
768
|
-
|
|
769
|
-
this.emit(_subModelName([moduleId.lexeme, ...rest.map((item) => {
|
|
784
|
+
const modelName = _subModelName([moduleId.lexeme, ...rest.map((item) => {
|
|
770
785
|
return item.lexeme;
|
|
771
|
-
})].join('.'))
|
|
786
|
+
})].join('.'));
|
|
787
|
+
this.emit(this.getModelName(modelName));
|
|
772
788
|
} else if (ast.type === 'moduleTypedef') {
|
|
773
789
|
const [moduleId, ...rest] = ast.path;
|
|
774
790
|
const type = rest.map((item) => { return item.lexeme; }).join('.');
|
|
@@ -784,9 +800,19 @@ setup(
|
|
|
784
800
|
this.visitType(ast.valueType, level);
|
|
785
801
|
this.emit(']');
|
|
786
802
|
} else if (ast.type === 'model') {
|
|
787
|
-
|
|
803
|
+
const predefined = ast.moduleName ? this.usedExternException.get(ast.moduleName) : this.predefined;
|
|
804
|
+
let type = 'model';
|
|
805
|
+
if (predefined[_name(ast)] && predefined[_name(ast)].isException) {
|
|
806
|
+
type = 'exception';
|
|
807
|
+
}
|
|
808
|
+
this.emit(this.getModelName(_upperFirst(_name(ast)), ast.moduleName, type));
|
|
788
809
|
} else if (ast.idType === 'model') {
|
|
789
|
-
|
|
810
|
+
const predefined = ast.moduleName ? this.usedExternException.get(ast.moduleName) : this.predefined;
|
|
811
|
+
let type = 'model';
|
|
812
|
+
if (predefined[_name(ast)] && predefined[_name(ast)].isException) {
|
|
813
|
+
type = 'exception';
|
|
814
|
+
}
|
|
815
|
+
this.emit(this.getModelName(_upperFirst(_name(ast)), ast.moduleName, type));
|
|
790
816
|
} else if (ast.type === 'module') {
|
|
791
817
|
this.emit(this.getModelName('', _name(ast), 'module'));
|
|
792
818
|
} else if (ast.idType === 'module') {
|
|
@@ -895,10 +921,8 @@ setup(
|
|
|
895
921
|
|
|
896
922
|
visitFieldType(value, level, modelName, fieldName) {
|
|
897
923
|
if (value.type === 'modelBody') {
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
}
|
|
901
|
-
this.emit(`${_subModelName([modelName, fieldName].join('.'))}`);
|
|
924
|
+
const subModelName = _subModelName([modelName, fieldName].join('.'))
|
|
925
|
+
this.emit(this.getModelName(subModelName));
|
|
902
926
|
} else if (value.type === 'array') {
|
|
903
927
|
this.visitType(value);
|
|
904
928
|
} else if (value.fieldType === 'array') {
|
|
@@ -972,8 +996,9 @@ setup(
|
|
|
972
996
|
this.pushImports(type);
|
|
973
997
|
this.emit(`${type}`);
|
|
974
998
|
} else if (value.fieldType.idType === 'model') {
|
|
999
|
+
const predefined = value.fieldType.moduleName ? this.usedExternException.get(value.fieldType.moduleName) : this.predefined;
|
|
975
1000
|
let type = 'model';
|
|
976
|
-
if (
|
|
1001
|
+
if (predefined[_name(value.fieldType)] && predefined[_name(value.fieldType)].isException) {
|
|
977
1002
|
type = 'exception';
|
|
978
1003
|
}
|
|
979
1004
|
this.emit(this.getModelName(_name(value.fieldType), value.fieldType.moduleName, type));
|
|
@@ -995,7 +1020,7 @@ setup(
|
|
|
995
1020
|
node = ast.nodes[i];
|
|
996
1021
|
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
|
|
997
1022
|
this.visitComments(comments, level);
|
|
998
|
-
let param = _snakeCase(_escape(_name(node.fieldName)));
|
|
1023
|
+
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
999
1024
|
const description = this.getAttributes(node, 'description');
|
|
1000
1025
|
if (description) {
|
|
1001
1026
|
const descriptions = description.trimEnd().split('\n');
|
|
@@ -1048,7 +1073,7 @@ setup(
|
|
|
1048
1073
|
const minimum = this.getAttributes(node, 'minimum') || 0;
|
|
1049
1074
|
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
|
|
1050
1075
|
this.visitComments(comments, level);
|
|
1051
|
-
let param = _snakeCase(_escape(_name(node.fieldName)));
|
|
1076
|
+
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1052
1077
|
// 这里判断类中属性是否是必填
|
|
1053
1078
|
if (node.required) {
|
|
1054
1079
|
notPass = true;
|
|
@@ -1165,7 +1190,7 @@ setup(
|
|
|
1165
1190
|
let realName = this.getRealName(node);
|
|
1166
1191
|
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
|
|
1167
1192
|
this.visitComments(comments, level);
|
|
1168
|
-
let param = _snakeCase(_escape(_name(node.fieldName)));
|
|
1193
|
+
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1169
1194
|
this.emit(`if self.${param} is not None:\n`, level + 2);
|
|
1170
1195
|
if(!this.checkFieldHasModel(node.fieldValue)) {
|
|
1171
1196
|
this.emit(`result['${realName}'] = self.${param}`, level + 4);
|
|
@@ -1190,7 +1215,7 @@ setup(
|
|
|
1190
1215
|
const deep = Math.floor(level / 4);
|
|
1191
1216
|
if (fieldValue.type === 'modelBody') {
|
|
1192
1217
|
const subModelName = _subModelName(_camelCase(fieldName));
|
|
1193
|
-
this.emit(`temp_model = ${subModelName}()\n`, level);
|
|
1218
|
+
this.emit(`temp_model = ${this.getModelName(subModelName)}()\n`, level);
|
|
1194
1219
|
this.emitFieldConvert(key, `temp_model.from_map(${value})`, level, arr);
|
|
1195
1220
|
} else if (fieldValue.type === 'array' || fieldValue.fieldType === 'array') {
|
|
1196
1221
|
this.emit(`l${deep} = 0\n`, level);
|
|
@@ -1207,22 +1232,22 @@ setup(
|
|
|
1207
1232
|
const modelName = _subModelName(rest.map((item) => {
|
|
1208
1233
|
return item.lexeme;
|
|
1209
1234
|
}).join('.'));
|
|
1210
|
-
this.emit(`temp_model = ${this.getModelName(modelName, _name(moduleId)
|
|
1235
|
+
this.emit(`temp_model = ${this.getModelName(modelName, _name(moduleId))}()\n`, level);
|
|
1211
1236
|
this.emitFieldConvert(key, `temp_model.from_map(${value})`, level, arr);
|
|
1212
1237
|
} else if (fieldValue.type === 'subModel') {
|
|
1213
1238
|
const [moduleId, ...rest] = fieldValue.path;
|
|
1214
1239
|
const subModelName = _subModelName([moduleId.lexeme, ...rest.map((item) => {
|
|
1215
1240
|
return item.lexeme;
|
|
1216
1241
|
})].join('.'));
|
|
1217
|
-
this.emit(`temp_model = ${subModelName}()\n`, level);
|
|
1242
|
+
this.emit(`temp_model = ${this.getModelName(subModelName)}()\n`, level);
|
|
1218
1243
|
this.emitFieldConvert(key, `temp_model.from_map(${value})`, level, arr);
|
|
1219
1244
|
} else if (fieldValue.idType === 'model') {
|
|
1220
1245
|
const modelName = _type(_name(fieldValue));
|
|
1221
|
-
this.emit(`temp_model = ${modelName}()\n`, level);
|
|
1246
|
+
this.emit(`temp_model = ${this.getModelName(modelName)}()\n`, level);
|
|
1222
1247
|
this.emitFieldConvert(key, `temp_model.from_map(${value})`, level, arr);
|
|
1223
1248
|
} else if (fieldValue.fieldType && fieldValue.fieldType.idType === 'model') {
|
|
1224
1249
|
const modelName = _type(_name(fieldValue.fieldType));
|
|
1225
|
-
this.emit(`temp_model = ${modelName}()\n`, level);
|
|
1250
|
+
this.emit(`temp_model = ${this.getModelName(modelName)}()\n`, level);
|
|
1226
1251
|
this.emitFieldConvert(key, `temp_model.from_map(${value})`, level, arr);
|
|
1227
1252
|
} else if (fieldValue.fieldType && fieldValue.fieldType.idType === 'builtin_model') {
|
|
1228
1253
|
const typeName = _type(_name(fieldValue.fieldType));
|
|
@@ -1243,7 +1268,7 @@ setup(
|
|
|
1243
1268
|
let realName = this.getRealName(node);
|
|
1244
1269
|
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
|
|
1245
1270
|
this.visitComments(comments, level);
|
|
1246
|
-
let param = _snakeCase(_escape(_name(node.fieldName)));
|
|
1271
|
+
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1247
1272
|
this.emit(`if m.get('${realName}') is not None:\n`, level + 2);
|
|
1248
1273
|
if(!this.checkFieldHasModel(node.fieldValue)) {
|
|
1249
1274
|
this.emit(`self.${param} = m.get('${realName}')`, level + 4);
|
|
@@ -1333,40 +1358,13 @@ setup(
|
|
|
1333
1358
|
this.emit(`(${this.getModelName(modelName, moduleName, type)}`);
|
|
1334
1359
|
} else if (extendOn.type === 'subModel') {
|
|
1335
1360
|
const [moduleId, ...rest] = extendOn.path;
|
|
1336
|
-
|
|
1337
|
-
needBaseException = true;
|
|
1338
|
-
const modelPkgName = path.basename(this.modelPath, '.py');
|
|
1339
|
-
this.imports.push({
|
|
1340
|
-
className: modelPkgName,
|
|
1341
|
-
});
|
|
1342
|
-
this.emit(`${modelPkgName}.`);
|
|
1343
|
-
}
|
|
1344
|
-
this.emit(`(${_subModelName([moduleId.lexeme, ...rest.map((item) => {
|
|
1361
|
+
const subModelName = _subModelName([moduleId.lexeme, ...rest.map((item) => {
|
|
1345
1362
|
return item.lexeme;
|
|
1346
|
-
})].join('.'))
|
|
1363
|
+
})].join('.'));
|
|
1364
|
+
this.emit(`(${this.emit(this.getModelName(subModelName, '', type))}`);
|
|
1347
1365
|
} else {
|
|
1348
|
-
let modelName = _upperFirst(_name(extendOn));
|
|
1349
1366
|
this.emit('(');
|
|
1350
|
-
|
|
1351
|
-
this.getModelName(_upperFirst(_name(extendOn)), extendOn.moduleName, type);
|
|
1352
|
-
} else if (this.predefined[modelName] && this.predefined[modelName].isException && type === 'model') {
|
|
1353
|
-
const exPkgName = path.basename(this.exceptionPath, '.py');
|
|
1354
|
-
this.imports.push({
|
|
1355
|
-
className: exPkgName,
|
|
1356
|
-
});
|
|
1357
|
-
this.emit(`${exPkgName}.`);
|
|
1358
|
-
} else if (this.predefined[modelName] && !this.predefined[modelName].isException && type === 'exception') {
|
|
1359
|
-
needBaseException = true;
|
|
1360
|
-
const modelPkgName = path.basename(this.modelPath, '.py');
|
|
1361
|
-
this.imports.push({
|
|
1362
|
-
className: modelPkgName,
|
|
1363
|
-
});
|
|
1364
|
-
this.emit(`${modelPkgName}.`);
|
|
1365
|
-
}
|
|
1366
|
-
this.emit(`${modelName}`);
|
|
1367
|
-
if(type === 'exception' && !needBaseException) {
|
|
1368
|
-
this.emit('Exception');
|
|
1369
|
-
}
|
|
1367
|
+
this.emit(this.getModelName(_upperFirst(_name(extendOn)), extendOn.moduleName, type));
|
|
1370
1368
|
}
|
|
1371
1369
|
if(needBaseException) {
|
|
1372
1370
|
this.emit(`, ${CORE}Exception`);
|
|
@@ -1401,6 +1399,37 @@ setup(
|
|
|
1401
1399
|
this.visitExtendOn(extendOn);
|
|
1402
1400
|
this.emit(':\n');
|
|
1403
1401
|
this.visitModelBody(modelBody, level + 2, modelName);
|
|
1402
|
+
this.saveBuffer(path.join(this.modelPath, `_${_snakeCase(modelName)}.py`));
|
|
1403
|
+
this.usedTypes = [];
|
|
1404
|
+
this.imports = [];
|
|
1405
|
+
this.output = '';
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
saveBuffer(filepath) {
|
|
1409
|
+
if(this.fileBuffer[filepath]) {
|
|
1410
|
+
this.fileBuffer[filepath].imports = this.imports.concat(this.fileBuffer[filepath].imports);
|
|
1411
|
+
this.fileBuffer[filepath].usedTypes = this.usedTypes.concat(this.fileBuffer[filepath].usedTypes);
|
|
1412
|
+
this.fileBuffer[filepath].output = this.output + this.fileBuffer[filepath].output;
|
|
1413
|
+
return;
|
|
1414
|
+
}
|
|
1415
|
+
|
|
1416
|
+
this.fileBuffer[filepath] = {
|
|
1417
|
+
imports: this.imports,
|
|
1418
|
+
usedTypes: this.usedTypes,
|
|
1419
|
+
output: this.output,
|
|
1420
|
+
};
|
|
1421
|
+
}
|
|
1422
|
+
|
|
1423
|
+
flushBuffer() {
|
|
1424
|
+
Object.keys(this.fileBuffer).map(filepath => {
|
|
1425
|
+
this.output = this.fileBuffer[filepath].output;
|
|
1426
|
+
this.imports = this.fileBuffer[filepath].imports;
|
|
1427
|
+
this.usedTypes = this.fileBuffer[filepath].usedTypes;
|
|
1428
|
+
this.save(filepath);
|
|
1429
|
+
this.output = '';
|
|
1430
|
+
this.imports = [];
|
|
1431
|
+
this.usedTypes = [];
|
|
1432
|
+
});
|
|
1404
1433
|
}
|
|
1405
1434
|
|
|
1406
1435
|
eachModel(ast, level) {
|
|
@@ -1412,6 +1441,29 @@ setup(
|
|
|
1412
1441
|
this.visitModel(ast.modelBody, modelName, ast.extendOn, level);
|
|
1413
1442
|
}
|
|
1414
1443
|
|
|
1444
|
+
visitModelInit(models) {
|
|
1445
|
+
const modelNames = [];
|
|
1446
|
+
const moreExports = this.moreExports || [];
|
|
1447
|
+
for (let i = 0; i < models.length; i++) {
|
|
1448
|
+
const ast = models[i];
|
|
1449
|
+
const modelName = _subModelName(_name(ast.modelName));
|
|
1450
|
+
modelNames.push(modelName);
|
|
1451
|
+
this.emit(`from ._${_snakeCase(modelName)} import ${modelName}\n`);
|
|
1452
|
+
}
|
|
1453
|
+
|
|
1454
|
+
this.emit('\n__all__ = [\n');
|
|
1455
|
+
this.emit(modelNames.join(',\n '), 2);
|
|
1456
|
+
if(moreExports && moreExports.length > 0) {
|
|
1457
|
+
this.emit((',\n'));
|
|
1458
|
+
this.emit(moreExports.join(',\n '), 2);
|
|
1459
|
+
}
|
|
1460
|
+
|
|
1461
|
+
this.emit('\n]\n');
|
|
1462
|
+
|
|
1463
|
+
this.save(path.join(this.modelPath, '__init__.py'));
|
|
1464
|
+
this.moreExports = [];
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1415
1467
|
visitFieldsInit(ast, level, modelName, type = 'model', baseErr = false){
|
|
1416
1468
|
let node;
|
|
1417
1469
|
this.emit(' def __init__(');
|
|
@@ -1422,14 +1474,14 @@ setup(
|
|
|
1422
1474
|
return;
|
|
1423
1475
|
}
|
|
1424
1476
|
this.emit('\n');
|
|
1425
|
-
this.emit('self,
|
|
1477
|
+
this.emit('self, *,\n', level + 2);
|
|
1426
1478
|
for (let i = 0; i < paramNodes.length; i++) {
|
|
1427
1479
|
node = paramNodes[i];
|
|
1428
1480
|
if(!node.extend) {
|
|
1429
1481
|
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
|
|
1430
1482
|
this.visitComments(comments, level);
|
|
1431
1483
|
}
|
|
1432
|
-
let param = _snakeCase(_escape(_name(node.fieldName)));
|
|
1484
|
+
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1433
1485
|
if(param === 'name' && type === 'exception') {
|
|
1434
1486
|
continue;
|
|
1435
1487
|
}
|
|
@@ -1446,7 +1498,7 @@ setup(
|
|
|
1446
1498
|
for (let i = 0; i < ast.extendFileds.length; i++) {
|
|
1447
1499
|
node = ast.extendFileds[i];
|
|
1448
1500
|
let value = _snakeCase(_escape(_name(node.fieldName)));
|
|
1449
|
-
let key = _escape(_name(node.fieldName));
|
|
1501
|
+
let key = _avoidKeywords(_escape(_name(node.fieldName)));
|
|
1450
1502
|
if(key === 'name' && type === 'exception') {
|
|
1451
1503
|
continue;
|
|
1452
1504
|
}
|
|
@@ -1457,7 +1509,7 @@ setup(
|
|
|
1457
1509
|
this.emit('\n');
|
|
1458
1510
|
for (let i = 0; i < ast.extendFileds.length; i++) {
|
|
1459
1511
|
node = ast.extendFileds[i];
|
|
1460
|
-
let param = _snakeCase(_escape(_name(node.fieldName)));
|
|
1512
|
+
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1461
1513
|
if(param === 'name' && type === 'exception') {
|
|
1462
1514
|
continue;
|
|
1463
1515
|
}
|
|
@@ -1478,7 +1530,7 @@ setup(
|
|
|
1478
1530
|
node = ast.nodes[i];
|
|
1479
1531
|
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
|
|
1480
1532
|
this.visitComments(comments, level);
|
|
1481
|
-
let param = _snakeCase(_escape(_name(node.fieldName)));
|
|
1533
|
+
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1482
1534
|
if(param === 'name') {
|
|
1483
1535
|
continue;
|
|
1484
1536
|
}
|
|
@@ -1503,6 +1555,10 @@ setup(
|
|
|
1503
1555
|
this.visitExtendOn(extendOn, 'exception');
|
|
1504
1556
|
this.emit(':\n');
|
|
1505
1557
|
this.visitEcxceptionBody(exceptionBody, extendOn, exceptionName, level + 2);
|
|
1558
|
+
this.saveBuffer(path.join(this.exceptionPath, `_${_snakeCase(exceptionName)}.py`));
|
|
1559
|
+
this.usedTypes = [];
|
|
1560
|
+
this.imports = [];
|
|
1561
|
+
this.output = '';
|
|
1506
1562
|
}
|
|
1507
1563
|
|
|
1508
1564
|
eachException(ast, level) {
|
|
@@ -1514,6 +1570,22 @@ setup(
|
|
|
1514
1570
|
this.visitException(ast.exceptionBody, exceptionName, ast.extendOn, level);
|
|
1515
1571
|
}
|
|
1516
1572
|
|
|
1573
|
+
visitExceptionInit(excpetions) {
|
|
1574
|
+
const exceptionNames = [];
|
|
1575
|
+
for (let i = 0; i < excpetions.length; i++) {
|
|
1576
|
+
const ast = excpetions[i];
|
|
1577
|
+
const exceptionName = _subModelName(_name(ast.exceptionName));
|
|
1578
|
+
exceptionNames.push(exceptionName);
|
|
1579
|
+
this.emit(`from ._${_snakeCase(exceptionName)} import ${exceptionName}Exception\n`);
|
|
1580
|
+
}
|
|
1581
|
+
|
|
1582
|
+
this.emit('\n__all__ = [\n');
|
|
1583
|
+
this.emit(exceptionNames.join('Exception,\n '), 2);
|
|
1584
|
+
this.emit('Exception\n]\n');
|
|
1585
|
+
|
|
1586
|
+
this.save(path.join(this.exceptionPath, '__init__.py'));
|
|
1587
|
+
}
|
|
1588
|
+
|
|
1517
1589
|
eachSubModel(ast, level) {
|
|
1518
1590
|
assert.equal(ast.type, 'model');
|
|
1519
1591
|
const modelName = _subModelName(_name(ast.modelName));
|
|
@@ -1548,7 +1620,7 @@ setup(
|
|
|
1548
1620
|
if (ast.type === 'objectField') {
|
|
1549
1621
|
// TODO 这里粗暴处理的双引号,可以考虑优化
|
|
1550
1622
|
var key = _escape(_name(ast.fieldName) || _string(ast.fieldName)).replace(/['"]/g, '');
|
|
1551
|
-
this.emit(`${_snakeCase(key)} = `, level + 2);
|
|
1623
|
+
this.emit(`${_avoidKeywords(_snakeCase(key))} = `, level + 2);
|
|
1552
1624
|
this.visitObjectFieldValue(ast.expr, level + 2);
|
|
1553
1625
|
if (!end) {
|
|
1554
1626
|
this.emit(',\n');
|
|
@@ -1615,7 +1687,7 @@ setup(
|
|
|
1615
1687
|
visitMethodCall(ast, level) {
|
|
1616
1688
|
assert.equal(ast.left.type, 'method_call');
|
|
1617
1689
|
const name = _name(ast.left.id);
|
|
1618
|
-
const functionName = _snakeCase(name);
|
|
1690
|
+
const functionName = _avoidKeywords(_snakeCase(name));
|
|
1619
1691
|
if (name.startsWith('$') && this.builtin[name]) {
|
|
1620
1692
|
const method = name.replace('$', '');
|
|
1621
1693
|
this.builtin[name][method](ast, level, ast.isAsync && this.isAsyncFunction);
|
|
@@ -1650,7 +1722,7 @@ setup(
|
|
|
1650
1722
|
const aliasId = _snakeCase(_name(ast.left.id));
|
|
1651
1723
|
this.emit(aliasId);
|
|
1652
1724
|
}
|
|
1653
|
-
this.emit(`.${(_snakeCase(method))}`);
|
|
1725
|
+
this.emit(`.${(_avoidKeywords(_snakeCase(method)))}`);
|
|
1654
1726
|
if(async) {
|
|
1655
1727
|
this.emit('_async');
|
|
1656
1728
|
}
|
|
@@ -1669,7 +1741,7 @@ setup(
|
|
|
1669
1741
|
const aliasId = _name(ast.left.id);
|
|
1670
1742
|
let clientName = this.getModelName('', aliasId, 'module');
|
|
1671
1743
|
|
|
1672
|
-
const functionName = _snakeCase(_name(ast.left.propertyPath[0]));
|
|
1744
|
+
const functionName = _avoidKeywords(_snakeCase(_name(ast.left.propertyPath[0])));
|
|
1673
1745
|
|
|
1674
1746
|
if (ast.isAsync && this.isAsyncFunction) {
|
|
1675
1747
|
this.emit(`await ${clientName}.${functionName}_async`);
|
|
@@ -1750,7 +1822,7 @@ setup(
|
|
|
1750
1822
|
if (ast.id.tag === Tag.VID) {
|
|
1751
1823
|
id = `self.${_snakeCase(_vid(ast.id))}`;
|
|
1752
1824
|
}
|
|
1753
|
-
var expr =
|
|
1825
|
+
var expr = _avoidKeywords(id);
|
|
1754
1826
|
const prefix = env.left ? '[' : '.get(';
|
|
1755
1827
|
const suffix = env.left ? ']' : ')';
|
|
1756
1828
|
var current = ast.id.inferred;
|
|
@@ -1758,7 +1830,7 @@ setup(
|
|
|
1758
1830
|
for (var i = 0; i < ast.propertyPath.length; i++) {
|
|
1759
1831
|
var name = _name(ast.propertyPath[i]);
|
|
1760
1832
|
if (current.type === 'model') {
|
|
1761
|
-
expr += `.${_snakeCase(name)}`;
|
|
1833
|
+
expr += `.${_avoidKeywords(_snakeCase(name))}`;
|
|
1762
1834
|
} else {
|
|
1763
1835
|
expr += `${prefix}"${name}"${suffix}`;
|
|
1764
1836
|
}
|
|
@@ -1784,7 +1856,7 @@ setup(
|
|
|
1784
1856
|
if(ast.inferred && ast.inferred.type === 'basic' && ast.inferred.name === 'class') {
|
|
1785
1857
|
this.emit(this.getModelName('', _name(ast.id), 'module'));
|
|
1786
1858
|
} else {
|
|
1787
|
-
this.emit(
|
|
1859
|
+
this.emit(_avoidKeywords(_snakeCase(_name(ast.id))));
|
|
1788
1860
|
}
|
|
1789
1861
|
} else if (ast.type === 'virtualVariable') {
|
|
1790
1862
|
this.emit(`self.${_snakeCase(_vid(ast.vid))}`);
|
|
@@ -1926,7 +1998,7 @@ setup(
|
|
|
1926
1998
|
if (ast.id.tag === DSL.Tag.Tag.VID) {
|
|
1927
1999
|
expr = `self.${_snakeCase(_vid(ast.id))}`;
|
|
1928
2000
|
} else {
|
|
1929
|
-
expr = `${_snakeCase(_name(ast.id))}`;
|
|
2001
|
+
expr = `${_avoidKeywords(_snakeCase(_name(ast.id)))}`;
|
|
1930
2002
|
}
|
|
1931
2003
|
const prefix = env.left ? '[' : '.get(';
|
|
1932
2004
|
const suffix = env.left ? ']' : ')';
|
|
@@ -1935,7 +2007,7 @@ setup(
|
|
|
1935
2007
|
for (var i = 0; i < ast.propertyPath.length; i++) {
|
|
1936
2008
|
var name = _name(ast.propertyPath[i]);
|
|
1937
2009
|
if (current.type === 'model') {
|
|
1938
|
-
expr += `.${_snakeCase(name)}`;
|
|
2010
|
+
expr += `.${_avoidKeywords(_snakeCase(name))}`;
|
|
1939
2011
|
} else {
|
|
1940
2012
|
expr += `${prefix}"${name}"${suffix}`;
|
|
1941
2013
|
}
|
|
@@ -1954,14 +2026,14 @@ setup(
|
|
|
1954
2026
|
// 这个判断很奇怪诶
|
|
1955
2027
|
expr = `self.${_snakeCase(_vid(ast.id))}`;
|
|
1956
2028
|
} else {
|
|
1957
|
-
expr = `${_snakeCase(_name(ast.id))}`;
|
|
2029
|
+
expr = `${_avoidKeywords(_snakeCase(_name(ast.id)))}`;
|
|
1958
2030
|
}
|
|
1959
2031
|
if (ast.propertyPath && ast.propertyPath.length) {
|
|
1960
2032
|
var current = ast.id.inferred;
|
|
1961
2033
|
for (var i = 0; i < ast.propertyPath.length; i++) {
|
|
1962
2034
|
var name = _name(ast.propertyPath[i]);
|
|
1963
2035
|
if (current.type === 'model') {
|
|
1964
|
-
expr += `.${_snakeCase(name)}`;
|
|
2036
|
+
expr += `.${_avoidKeywords(_snakeCase(name))}`;
|
|
1965
2037
|
} else {
|
|
1966
2038
|
expr += `["${name}"]`;
|
|
1967
2039
|
}
|
|
@@ -2078,16 +2150,16 @@ setup(
|
|
|
2078
2150
|
return;
|
|
2079
2151
|
}
|
|
2080
2152
|
if (!catchBlock.id.type) {
|
|
2081
|
-
this.emit(`except Exception as ${_name(ast.catchId)} :\n`, level);
|
|
2153
|
+
this.emit(`except Exception as ${_avoidKeywords(_name(ast.catchId))} :\n`, level);
|
|
2082
2154
|
} else {
|
|
2083
2155
|
this.emit('except ', level);
|
|
2084
2156
|
this.visitType(catchBlock.id.type);
|
|
2085
|
-
this.emit(` as ${_name(ast.catchId)} :\n`);
|
|
2157
|
+
this.emit(` as ${_avoidKeywords(_name(ast.catchId))} :\n`);
|
|
2086
2158
|
}
|
|
2087
2159
|
this.visitStmts(catchBlock.catchStmts, level + 2);
|
|
2088
2160
|
});
|
|
2089
2161
|
} else if (ast.catchBlock && ast.catchBlock.stmts.length > 0) {
|
|
2090
|
-
this.emit(`except Exception as ${_name(ast.catchId)} :\n`, level);
|
|
2162
|
+
this.emit(`except Exception as ${_avoidKeywords(_name(ast.catchId))} :\n`, level);
|
|
2091
2163
|
this.visitStmts(ast.catchBlock, level + 2);
|
|
2092
2164
|
}
|
|
2093
2165
|
if (ast.finallyBlock && ast.finallyBlock.stmts.length > 0) {
|
|
@@ -2119,7 +2191,7 @@ setup(
|
|
|
2119
2191
|
this.emit('k, v in ');
|
|
2120
2192
|
this.visitExpr(ast.list, level);
|
|
2121
2193
|
} else {
|
|
2122
|
-
this.emit(`${_snakeCase(_name(ast.id))} in `);
|
|
2194
|
+
this.emit(`${_avoidKeywords(_snakeCase(_name(ast.id)))} in `);
|
|
2123
2195
|
this.visitExpr(ast.list, level);
|
|
2124
2196
|
}
|
|
2125
2197
|
this.emit(':\n');
|
|
@@ -2177,7 +2249,7 @@ setup(
|
|
|
2177
2249
|
} else if (ast.left.type === 'virtualVariable') { // vid
|
|
2178
2250
|
this.emit(`self.${_snakeCase(_vid((ast.left.vid)))}`, level);
|
|
2179
2251
|
} else if (ast.left.type === 'variable') {
|
|
2180
|
-
this.emit(`${_snakeCase(_name(ast.left.id))}`, level);
|
|
2252
|
+
this.emit(`${_avoidKeywords(_snakeCase(_name(ast.left.id)))}`, level);
|
|
2181
2253
|
} else if (ast.left.type === 'map_access') {
|
|
2182
2254
|
// 声明时不能用get去赋值
|
|
2183
2255
|
this.emit('', level);
|
|
@@ -2202,7 +2274,7 @@ setup(
|
|
|
2202
2274
|
|
|
2203
2275
|
// 实例初始化 new的地方
|
|
2204
2276
|
visitDeclare(ast, level) {
|
|
2205
|
-
var id = _snakeCase(_name(ast.id));
|
|
2277
|
+
var id = _avoidKeywords(_snakeCase(_name(ast.id)));
|
|
2206
2278
|
this.emit(`${id}`, level);
|
|
2207
2279
|
if(id === 'new_full_str'){
|
|
2208
2280
|
this.emit('');
|
|
@@ -2268,7 +2340,7 @@ setup(
|
|
|
2268
2340
|
// this.visitAnnotation(ast.annotation, level);
|
|
2269
2341
|
// let comments = DSL.comment.getFrontComments(this.comments, ast.tokenRange[0]);
|
|
2270
2342
|
// this.visitComments(comments, level);
|
|
2271
|
-
const functionName = _snakeCase(_name(ast.functionName));
|
|
2343
|
+
const functionName = _avoidKeywords(_snakeCase(_name(ast.functionName)));
|
|
2272
2344
|
|
|
2273
2345
|
if (ast.isStatic) {
|
|
2274
2346
|
this.emit('@staticmethod\n', level);
|
|
@@ -2345,7 +2417,7 @@ setup(
|
|
|
2345
2417
|
let comments = DSL.comment.getFrontComments(this.comments, ast.tokenRange[0]);
|
|
2346
2418
|
this.visitComments(comments, level);
|
|
2347
2419
|
// set api name to _snakeCase
|
|
2348
|
-
const apiName = _snakeCase(_name(ast.apiName));
|
|
2420
|
+
const apiName = _avoidKeywords(_snakeCase(_name(ast.apiName)));
|
|
2349
2421
|
this.isStaticFunction = false;
|
|
2350
2422
|
this.emit(`def ${apiName}`, level);
|
|
2351
2423
|
this.visitParams(ast.params, level, true);
|
|
@@ -2470,7 +2542,7 @@ setup(
|
|
|
2470
2542
|
this.output = tempOutput + '\n\n' + this.output;
|
|
2471
2543
|
}
|
|
2472
2544
|
|
|
2473
|
-
|
|
2545
|
+
modelInitBefore(ast, level) {
|
|
2474
2546
|
let beginToken = 0;
|
|
2475
2547
|
if(ast.imports.length > 0) {
|
|
2476
2548
|
const lastIndex = ast.imports.length - 1;
|
|
@@ -2485,6 +2557,20 @@ setup(
|
|
|
2485
2557
|
if(part && part.arg.value) {
|
|
2486
2558
|
this.emit(_string(part.arg.value));
|
|
2487
2559
|
}
|
|
2560
|
+
|
|
2561
|
+
if(part && part.arg.type === 'object') {
|
|
2562
|
+
part.arg.fields.map(field => {
|
|
2563
|
+
if(_name(field.fieldName) === 'header') {
|
|
2564
|
+
this.emit(_string(field.expr.value));
|
|
2565
|
+
}
|
|
2566
|
+
|
|
2567
|
+
if(_name(field.fieldName) === 'exports') {
|
|
2568
|
+
this.moreExports = field.expr.items.map(item => {
|
|
2569
|
+
return _string(item.value);
|
|
2570
|
+
});
|
|
2571
|
+
}
|
|
2572
|
+
});
|
|
2573
|
+
}
|
|
2488
2574
|
}
|
|
2489
2575
|
|
|
2490
2576
|
moduleBefore(ast, level) {
|
|
@@ -2614,7 +2700,7 @@ setup(
|
|
|
2614
2700
|
this.imports.push({
|
|
2615
2701
|
aliasName,
|
|
2616
2702
|
packageName: this.config.package,
|
|
2617
|
-
className:
|
|
2703
|
+
className: this.modelPackage,
|
|
2618
2704
|
});
|
|
2619
2705
|
return `${aliasName}.${name}`;
|
|
2620
2706
|
}
|
|
@@ -2635,7 +2721,7 @@ setup(
|
|
|
2635
2721
|
this.imports.push({
|
|
2636
2722
|
aliasName,
|
|
2637
2723
|
packageName: this.config.package,
|
|
2638
|
-
className:
|
|
2724
|
+
className: this.exceptionPackage,
|
|
2639
2725
|
});
|
|
2640
2726
|
return `${aliasName}.${name}Exception`;
|
|
2641
2727
|
}
|