@darabonba/python-generator 1.2.19 → 2.0.1

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.
Files changed (152) hide show
  1. package/ChangeLog.md +0 -158
  2. package/lib/builtin.js +818 -0
  3. package/lib/generator.js +2708 -0
  4. package/lib/helper.js +422 -0
  5. package/package.json +6 -5
  6. package/tests/expected/alias/setup.py +79 -0
  7. package/tests/expected/alias/tea_python_tests/__init__.py +1 -0
  8. package/tests/expected/alias/tea_python_tests/client.py +35 -0
  9. package/tests/expected/annotation/tea_python_tests/__init__.py +1 -0
  10. package/tests/expected/annotation/tea_python_tests/client.py +93 -0
  11. package/tests/expected/annotation/tea_python_tests/models.py +37 -0
  12. package/tests/expected/api/tea_python_tests/__init__.py +1 -0
  13. package/tests/expected/api/tea_python_tests/client.py +106 -0
  14. package/tests/expected/builtin/tea_python_tests/client.py +685 -0
  15. package/tests/expected/comment/tea_python_tests/__init__.py +1 -0
  16. package/tests/expected/comment/tea_python_tests/client.py +288 -0
  17. package/tests/expected/comment/tea_python_tests/models.py +195 -0
  18. package/tests/expected/complex/tea_python_tests/__init__.py +1 -0
  19. package/tests/expected/complex/tea_python_tests/client.py +1169 -0
  20. package/tests/expected/complex/tea_python_tests/exceptions.py +39 -0
  21. package/tests/expected/complex/tea_python_tests/models.py +570 -0
  22. package/tests/expected/const/tea_python_tests/__init__.py +1 -0
  23. package/tests/expected/const/tea_python_tests/client.py +14 -0
  24. package/{src/langs/python/files/setup.py.tmpl → tests/expected/empty/setup.py} +11 -11
  25. package/tests/expected/empty/tea_python_tests/__init__.py +1 -0
  26. package/tests/expected/empty/tea_python_tests/client.py +10 -0
  27. package/tests/expected/exec/tea_python_tests/__init__.py +1 -0
  28. package/tests/expected/exec/tea_python_tests/exec_client.py +21 -0
  29. package/tests/expected/function/tea_python_tests/__init__.py +1 -0
  30. package/tests/expected/function/tea_python_tests/client.py +64 -0
  31. package/tests/expected/import/setup.py +78 -0
  32. package/tests/expected/import/tea_python_tests/__init__.py +1 -0
  33. package/tests/expected/import/tea_python_tests/client.py +29 -0
  34. package/tests/expected/map/tea_python_tests/__init__.py +1 -0
  35. package/tests/expected/map/tea_python_tests/client.py +39 -0
  36. package/tests/expected/model/tea_python_tests/__init__.py +1 -0
  37. package/tests/expected/model/tea_python_tests/client.py +10 -0
  38. package/tests/expected/model/tea_python_tests/exceptions.py +28 -0
  39. package/tests/expected/model/tea_python_tests/models.py +780 -0
  40. package/tests/expected/multi/tea_python_tests/api.py +95 -0
  41. package/tests/expected/multi/tea_python_tests/client.py +40 -0
  42. package/tests/expected/multi/tea_python_tests/lib/util.py +19 -0
  43. package/tests/expected/multi/tea_python_tests/model/user.py +26 -0
  44. package/tests/expected/multi/tea_python_tests/model/user_exceptions.py +83 -0
  45. package/tests/expected/multi/tea_python_tests/model/user_models.py +145 -0
  46. package/tests/expected/statements/tea_python_tests/__init__.py +1 -0
  47. package/tests/expected/statements/tea_python_tests/client.py +86 -0
  48. package/tests/expected/super/tea_python_tests/__init__.py +1 -0
  49. package/tests/expected/super/tea_python_tests/client.py +16 -0
  50. package/tests/expected/typedef/setup.py +77 -0
  51. package/tests/expected/typedef/tea_python_tests/__init__.py +1 -0
  52. package/tests/expected/typedef/tea_python_tests/client.py +74 -0
  53. package/tests/expected/typedef/tea_python_tests/models.py +42 -0
  54. package/tests/fixtures/alias/Darafile +11 -0
  55. package/tests/fixtures/alias/libraries/Alias/Darafile +11 -0
  56. package/tests/fixtures/alias/libraries/Alias-Symbol/Darafile +11 -0
  57. package/tests/fixtures/builtin/Darafile +6 -0
  58. package/tests/fixtures/builtin/main.dara +333 -0
  59. package/tests/fixtures/complex/libraries/import.dara +18 -11
  60. package/tests/fixtures/complex/main.dara +452 -103
  61. package/tests/fixtures/import/libraries/Darafile +1 -1
  62. package/tests/fixtures/import/pack/Darafile +3 -0
  63. package/tests/fixtures/map/libraries/Darafile +3 -0
  64. package/tests/fixtures/map/libraries/import.dara +4 -0
  65. package/tests/fixtures/map/main.dara +17 -2
  66. package/tests/fixtures/model/.libraries.json +3 -0
  67. package/tests/fixtures/model/Darafile +5 -2
  68. package/tests/fixtures/model/libraries/Darafile +20 -0
  69. package/tests/fixtures/model/libraries/import.dara +27 -0
  70. package/tests/fixtures/model/main.dara +60 -42
  71. package/tests/fixtures/multi/.libraries.json +3 -0
  72. package/tests/fixtures/multi/Darafile +12 -0
  73. package/tests/fixtures/multi/api.dara +20 -0
  74. package/tests/fixtures/multi/lib/util.dara +5 -0
  75. package/tests/fixtures/multi/libraries/darabonba_Util_0.2.11/Teafile +68 -0
  76. package/tests/fixtures/multi/libraries/darabonba_Util_0.2.11/main.tea +244 -0
  77. package/tests/fixtures/multi/libraries/darabonba_Util_0.2.11/util.tea +2 -0
  78. package/tests/fixtures/multi/main.dara +32 -0
  79. package/tests/fixtures/multi/model/user.dara +35 -0
  80. package/tests/{python3.tests.js → main.tests.js} +107 -65
  81. package/tests/output/alias/setup.py +79 -0
  82. package/tests/output/alias/tea_python_tests/client.py +35 -0
  83. package/{src/langs/python2/files/setup.py.tmpl → tests/output/annotation/setup.py} +19 -24
  84. package/tests/output/annotation/tea_python_tests/client.py +93 -0
  85. package/tests/output/annotation/tea_python_tests/models.py +37 -0
  86. package/tests/output/api/setup.py +77 -0
  87. package/tests/output/api/tea_python_tests/client.py +106 -0
  88. package/tests/output/builtin/setup.py +77 -0
  89. package/tests/output/builtin/tea_python_tests/client.py +685 -0
  90. package/tests/output/comment/setup.py +77 -0
  91. package/tests/output/comment/tea_python_tests/client.py +288 -0
  92. package/tests/output/comment/tea_python_tests/models.py +195 -0
  93. package/tests/output/complex/setup.py +77 -0
  94. package/tests/output/complex/tea_python_tests/client.py +1169 -0
  95. package/tests/output/complex/tea_python_tests/exceptions.py +39 -0
  96. package/tests/output/complex/tea_python_tests/models.py +570 -0
  97. package/tests/output/const/setup.py +77 -0
  98. package/tests/output/const/tea_python_tests/client.py +14 -0
  99. package/tests/output/empty/setup.py +77 -0
  100. package/tests/output/empty/tea_python_tests/client.py +10 -0
  101. package/tests/output/exec/setup.py +77 -0
  102. package/tests/output/exec/tea_python_tests/exec_client.py +21 -0
  103. package/tests/output/function/setup.py +77 -0
  104. package/tests/output/function/tea_python_tests/client.py +64 -0
  105. package/tests/output/import/setup.py +78 -0
  106. package/tests/output/import/tea_python_tests/client.py +29 -0
  107. package/tests/output/map/setup.py +77 -0
  108. package/tests/output/map/tea_python_tests/client.py +39 -0
  109. package/tests/output/model/setup.py +77 -0
  110. package/tests/output/model/tea_python_tests/client.py +10 -0
  111. package/tests/output/model/tea_python_tests/exceptions.py +28 -0
  112. package/tests/output/model/tea_python_tests/models.py +780 -0
  113. package/tests/output/multi/setup.py +77 -0
  114. package/tests/output/multi/tea_python_tests/api.py +95 -0
  115. package/tests/output/multi/tea_python_tests/client.py +40 -0
  116. package/tests/output/multi/tea_python_tests/lib/util.py +19 -0
  117. package/tests/output/multi/tea_python_tests/model/user.py +26 -0
  118. package/tests/output/multi/tea_python_tests/model/user_exceptions.py +83 -0
  119. package/tests/output/multi/tea_python_tests/model/user_models.py +145 -0
  120. package/tests/output/statements/setup.py +77 -0
  121. package/tests/output/statements/tea_python_tests/client.py +86 -0
  122. package/tests/output/super/setup.py +77 -0
  123. package/tests/output/super/tea_python_tests/client.py +16 -0
  124. package/tests/output/typedef/setup.py +78 -0
  125. package/tests/output/typedef/tea_python_tests/client.py +74 -0
  126. package/tests/output/typedef/tea_python_tests/models.py +42 -0
  127. package/src/generator.js +0 -231
  128. package/src/langs/common/combinator.js +0 -193
  129. package/src/langs/common/config.js +0 -60
  130. package/src/langs/common/enum.js +0 -179
  131. package/src/langs/common/items.js +0 -551
  132. package/src/langs/common/package_info.js +0 -53
  133. package/src/langs/python/combinator.js +0 -1898
  134. package/src/langs/python/config.js +0 -169
  135. package/src/langs/python/files/.gitignore.tmpl +0 -5
  136. package/src/langs/python/files/__init__.py.tmpl +0 -1
  137. package/src/langs/python/package_info.js +0 -78
  138. package/src/langs/python2/combinator.js +0 -1770
  139. package/src/langs/python2/config.js +0 -162
  140. package/src/langs/python2/files/.gitignore.tmpl +0 -5
  141. package/src/langs/python2/files/__init__.py.tmpl +0 -1
  142. package/src/langs/python2/package_info.js +0 -78
  143. package/src/lib/debug.js +0 -55
  144. package/src/lib/emitter.js +0 -95
  145. package/src/lib/helper.js +0 -207
  146. package/src/resolver/base.js +0 -282
  147. package/src/resolver/client.js +0 -1013
  148. package/src/resolver/model.js +0 -159
  149. package/tests/common.tests.js +0 -244
  150. package/tests/lib.tests.js +0 -269
  151. package/tests/python2.tests.js +0 -283
  152. package/tests/resolver.tests.js +0 -434
@@ -1,282 +0,0 @@
1
- 'use strict';
2
-
3
- const debug = require('../lib/debug');
4
-
5
- const {
6
- _string,
7
- _escape,
8
- _isBasicType
9
- } = require('../lib/helper');
10
-
11
- const {
12
- AnnotationItem,
13
- PropItem,
14
- } = require('../langs/common/items');
15
-
16
- const {
17
- // Symbol,
18
- Modify,
19
- // Exceptions,
20
- // Types
21
- } = require('../langs/common/enum');
22
-
23
- const DSL = require('@darabonba/parser');
24
-
25
- class BaseResolver {
26
- constructor(astNode, combinator, globalAst) {
27
- this.ast = astNode;
28
- this.combinator = combinator;
29
- this.config = combinator.config;
30
-
31
- this.comments = globalAst.comments ? globalAst.comments : {};
32
- this.commentsSet = [];
33
- }
34
-
35
- resolveAnnotations(annotations, belong) {
36
- if (annotations.length > 0) {
37
- let comments = [];
38
- annotations.forEach(annotation => {
39
- comments.push(this.resolveAnnotation(annotation, belong));
40
- });
41
- return comments;
42
- }
43
- return [];
44
- }
45
-
46
- resolveAnnotation(annotation, belong) {
47
- let type = annotation.value.indexOf('/**') === 0 ? 'multi' : 'single';
48
- let content = '';
49
- if (type === 'multi') {
50
- content = annotation.value.substring(3, annotation.value.length - 2)
51
- .trim().split('\n').filter(c => c.length > 0).map(c => {
52
- if (c.indexOf(' * ') === 0) {
53
- return c.substring(3);
54
- } else if (c.indexOf('* ') === 0) {
55
- return c.substring(2);
56
- }
57
- return c;
58
- });
59
- } else {
60
- content = annotation.value.substring(2).trim();
61
- }
62
- return new AnnotationItem(belong, type, content);
63
- }
64
-
65
- getBackComments(index) {
66
- return DSL.comment.getBackComments(this.comments, index);
67
- }
68
-
69
- getBetweenComments(begin, end) {
70
- return DSL.comment.getBetweenComments(this.comments, begin, end);
71
- }
72
-
73
- getFrontComments(index) {
74
- return DSL.comment.getFrontComments(this.comments, index);
75
- }
76
-
77
- getComments(node, position = 'front') {
78
- if (typeof node.tokenRange === 'undefined') {
79
- return [];
80
- }
81
- switch (position) {
82
- case 'back':
83
- return this.getBackComments(node.tokenRange[1]);
84
- case 'between':
85
- return this.getBetweenComments(node.tokenRange[0], node.tokenRange[1]);
86
- default:
87
- return this.getFrontComments(node.tokenRange[0]);
88
- }
89
- }
90
-
91
- addAnnotations(obj, node, position = 'front') {
92
- let comments = this.getComments(node, position);
93
- if (comments.length > 0) {
94
- comments.forEach(c => {
95
- if (this.commentsSet.indexOf(c.index) < 0) {
96
- if (typeof obj.annotations !== 'undefined') {
97
- obj.annotations.push(this.resolveAnnotation(c, obj.index));
98
- } else {
99
- debug.stack(obj, node);
100
- }
101
- this.commentsSet.push(c.index);
102
- }
103
- });
104
- }
105
- }
106
-
107
- findComments(obj, node, position = 'front') {
108
- let comments = this.getComments(node, position);
109
-
110
- if (comments.length > 0) {
111
- comments.forEach(c => {
112
- if (this.commentsSet.indexOf(c.index) < 0) {
113
- if (typeof obj.body !== 'undefined') {
114
- obj.body.push(this.resolveAnnotation(c, obj.index));
115
- } else if (typeof obj.value !== 'undefined') {
116
- obj.value.push(this.resolveAnnotation(c, obj.index));
117
- } else {
118
- debug.stack('Invalid data node', obj, node);
119
- }
120
- this.commentsSet.push(c.index);
121
- }
122
- });
123
- }
124
- }
125
-
126
- initAnnotation(annotation) {
127
- let topComments = this.getFrontComments(annotation.index);
128
- topComments.map(c => {
129
- this.object.topAnnotation.push(this.resolveAnnotation(c, this.object.index));
130
- });
131
- if (annotation && annotation.value) {
132
- this.object.annotations.push(this.resolveAnnotation(annotation, this.object.index));
133
- }
134
- }
135
-
136
- resolveProps(ast) {
137
- this.comments = ast.comments;
138
- ast.moduleBody.nodes.filter((item) => {
139
- return item.type === 'type';
140
- }).forEach(item => {
141
- const prop = new PropItem();
142
- prop.name = item.vid.lexeme.replace('@', '_');
143
- prop.type = this.resolveType(item.value, item);
144
- prop.addModify(Modify.protected());
145
- if (item.tokenRange) {
146
- let comments = this.getFrontComments(item.tokenRange[0]);
147
- if (comments.length > 0) {
148
- comments.forEach(c => {
149
- this.object.addBodyNode(this.resolveAnnotation(c, this.object.index));
150
- });
151
- }
152
- }
153
- this.object.addBodyNode(prop);
154
- });
155
- }
156
-
157
- resolveType(typeNode, sourceNode, prop) {
158
- let typeInfo = { objectType: 'module' };
159
- if (typeNode.idType) {
160
- if (typeNode.idType === 'model') {
161
- typeInfo['objectType'] = 'model';
162
- typeInfo['lexeme'] = this.combinator.addModelInclude(typeNode.lexeme);
163
- return typeInfo;
164
- } else if (typeNode.idType === 'module') {
165
- typeInfo['lexeme'] = this.combinator.addInclude(typeNode.lexeme);
166
- return typeInfo;
167
- } else if (typeNode.idType === 'typedef') {
168
- typeInfo['lexeme'] = this.combinator.addTypedefInclude(typeNode.lexeme);
169
- return typeInfo;
170
- } else if (typeNode.idType === 'builtin_model') {
171
- typeInfo['objectType'] = 'builtin_model';
172
- return this.combinator.addInclude(typeNode.lexeme);
173
- }
174
- debug.stack(typeNode, sourceNode);
175
- } else if (typeNode.type) {
176
- if (typeNode.type === 'fieldType') {
177
- return this.resolveType(typeNode.fieldType, typeNode, prop);
178
- } else if (typeNode.type === 'modelBody') {
179
- // is sub model
180
- typeInfo['objectType'] = 'model';
181
- typeInfo['lexeme'] = this.combinator.addModelInclude([this.object.name, _escape(sourceNode.fieldName.lexeme) || _string(sourceNode.fieldName)].join('.'));
182
- return typeInfo;
183
- } else if (_isBasicType(typeNode.type)) {
184
- return this.resolveType(typeNode.type, typeNode);
185
- } else if (typeNode.type === 'basic') {
186
- return this.resolveType(typeNode.name, sourceNode);
187
- } else if (typeNode.type === 'model') {
188
- let name = typeNode.name;
189
- if (typeNode.moduleName) {
190
- name = typeNode.moduleName + '.' + name;
191
- }
192
- typeInfo['objectType'] = 'model';
193
- typeInfo['lexeme'] = this.combinator.addModelInclude(name);
194
- return typeInfo;
195
- } else if (typeNode.type === 'module_instance') {
196
- typeInfo['lexeme'] = this.combinator.addInclude(typeNode.name);
197
- return typeInfo;
198
- } else if (typeNode.type === 'param') {
199
- if (typeNode.paramType.idType) {
200
- typeInfo['objectType'] = 'model';
201
- typeInfo['lexeme'] = this.combinator.addModelInclude(typeNode.paramType.lexeme);
202
- return typeInfo;
203
- }
204
- return this.resolveType(typeNode.paramType, typeNode);
205
- } else if (typeNode.type === 'array') {
206
- const subType = typeNode.subType ? typeNode.subType : typeNode.itemType;
207
- const arrayType = {
208
- lexeme: 'array',
209
- objectType: 'array',
210
- itemType: this.resolveType(subType)
211
- };
212
- return arrayType;
213
- } else if (typeNode.type === 'moduleModel') {
214
- let tmp = [];
215
- typeNode.path.forEach(item => {
216
- tmp.push(item.lexeme);
217
- });
218
- typeInfo['objectType'] = 'model';
219
- typeInfo['lexeme'] = this.combinator.addModelInclude(tmp.join('.'));
220
- return typeInfo;
221
- } else if (typeNode.type === 'moduleTypedef') {
222
- let tmp = [];
223
- typeNode.path.forEach(item => {
224
- tmp.push(item.lexeme);
225
- });
226
- typeInfo['lexeme'] = this.combinator.addTypedefInclude(tmp.join('.'));
227
- return typeInfo;
228
- } else if (typeNode.type === 'subModel') {
229
- let tmp = [];
230
- typeNode.path.forEach(item => {
231
- tmp.push(item.lexeme);
232
- });
233
- typeInfo['objectType'] = 'model';
234
- typeInfo['lexeme'] = this.combinator.addModelInclude(tmp.join('.'));
235
- return typeInfo;
236
- }
237
- debug.stack(typeNode, sourceNode);
238
- } else if (typeNode.lexeme) {
239
- return this.resolveType(typeNode.lexeme, sourceNode);
240
- } else if (typeNode === 'array') {
241
- let itemType;
242
- if (sourceNode.fieldItemType.type === 'modelBody') {
243
- typeInfo['objectType'] = 'model';
244
- typeInfo['lexeme'] = this.combinator.addModelInclude(sourceNode.itemType ? sourceNode.itemType : prop);
245
- itemType = typeInfo;
246
- } else if (sourceNode.fieldItemType.idType === 'model') {
247
- typeInfo['objectType'] = 'model';
248
- typeInfo['lexeme'] = this.combinator.addModelInclude(sourceNode.fieldItemType.lexeme);
249
- itemType = typeInfo;
250
- } else {
251
- itemType = this.resolveType(sourceNode.fieldItemType, sourceNode, sourceNode.itemType ? sourceNode.itemType : prop);
252
- }
253
- const arrayType = {
254
- lexeme: 'array',
255
- objectType: 'array',
256
- itemType: itemType
257
- };
258
- return arrayType;
259
- } else if (typeNode === 'map') {
260
- const keyType = this.resolveType(sourceNode.keyType);
261
- const valType = this.resolveType(sourceNode.valueType);
262
- const mapType = {
263
- lexeme: 'map',
264
- objectType: 'map',
265
- keyType: keyType,
266
- valType: valType
267
- };
268
- return mapType;
269
- } else if (typeNode) {
270
- return typeNode;
271
- }
272
-
273
- if (typeof typeNode === 'string' && typeNode.length > 0) {
274
- typeInfo['objectType'] = 'model';
275
- typeInfo['lexeme'] = this.combinator.addModelInclude(typeNode);
276
- return typeInfo;
277
- }
278
- debug.stack('Unsupported type node', { typeNode, sourceNode });
279
- }
280
- }
281
-
282
- module.exports = BaseResolver;