@darabonba/python-generator 1.2.9 → 1.2.12

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 CHANGED
@@ -1,5 +1,17 @@
1
1
  # ChangeLog
2
2
 
3
+ ## 1.2.12 - 2022-07-20
4
+
5
+ * Support infinite loop reference in model.
6
+
7
+ ## 1.2.11 - 2022-07-11
8
+
9
+ * Support complex list(`array-in-array`).
10
+
11
+ ## 1.2.10 - 2022-05-31
12
+
13
+ * Fix import package for typedef.
14
+
3
15
  ## 1.2.9 - 2022-05-31
4
16
 
5
17
  * Support Typedef.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@darabonba/python-generator",
3
- "version": "1.2.9",
3
+ "version": "1.2.12",
4
4
  "description": "The darabonba generator for Python",
5
5
  "main": "src/generator.js",
6
6
  "directories": {
package/src/generator.js CHANGED
@@ -175,7 +175,7 @@ class Generator {
175
175
  }
176
176
  importsTypedef[aliasId][types].import = moduleTypedef[types].import;
177
177
  importsTypedef[aliasId][types].type = moduleTypedef[types].type;
178
- if (!requirePackage.includes(moduleTypedef[types].package)) {
178
+ if (moduleTypedef[types].package && !requirePackage.includes(moduleTypedef[types].package)) {
179
179
  requirePackage.push(moduleTypedef[types].package);
180
180
  }
181
181
  });
@@ -393,6 +393,7 @@ class Combinator extends CombinatorBase {
393
393
  if (_contain(this.definedModels, model.name)) {
394
394
  return;
395
395
  }
396
+ this.definedModels.push(model_name);
396
397
  if (model.subObject.length) {
397
398
  model.subObject.forEach(obj => {
398
399
  this.emitModel(emitter, obj);
@@ -401,7 +402,6 @@ class Combinator extends CombinatorBase {
401
402
  model.body.filter(node => node instanceof PropItem && !this.hasModel(node.type, model.name)).forEach(item => {
402
403
  this.findUndefinedModel(emitter, item.type);
403
404
  });
404
- this.definedModels.push(model_name);
405
405
  this.emitClass(emitter, model);
406
406
  emitter.emitln().emitln();
407
407
  }
@@ -153,7 +153,7 @@ class BaseResolver {
153
153
  }
154
154
 
155
155
  resolveType(typeNode, sourceNode, prop) {
156
- let typeInfo = {objectType: 'module'};
156
+ let typeInfo = { objectType: 'module' };
157
157
  if (typeNode.idType) {
158
158
  if (typeNode.idType === 'model') {
159
159
  typeInfo['objectType'] = 'model';
@@ -172,7 +172,7 @@ class BaseResolver {
172
172
  debug.stack(typeNode, sourceNode);
173
173
  } else if (typeNode.type) {
174
174
  if (typeNode.type === 'fieldType') {
175
- return this.resolveType(typeNode.fieldType, typeNode);
175
+ return this.resolveType(typeNode.fieldType, typeNode, prop);
176
176
  } else if (typeNode.type === 'modelBody') {
177
177
  // is sub model
178
178
  typeInfo['objectType'] = 'model';
@@ -239,14 +239,14 @@ class BaseResolver {
239
239
  let itemType;
240
240
  if (sourceNode.fieldItemType.type === 'modelBody') {
241
241
  typeInfo['objectType'] = 'model';
242
- typeInfo['lexeme'] = this.combinator.addModelInclude(sourceNode.itemType);
242
+ typeInfo['lexeme'] = this.combinator.addModelInclude(sourceNode.itemType ? sourceNode.itemType : prop);
243
243
  itemType = typeInfo;
244
244
  } else if (sourceNode.fieldItemType.idType === 'model') {
245
245
  typeInfo['objectType'] = 'model';
246
246
  typeInfo['lexeme'] = this.combinator.addModelInclude(sourceNode.fieldItemType.lexeme);
247
247
  itemType = typeInfo;
248
248
  } else {
249
- itemType = this.resolveType(sourceNode.fieldItemType, sourceNode);
249
+ itemType = this.resolveType(sourceNode.fieldItemType, sourceNode, sourceNode.itemType ? sourceNode.itemType : prop);
250
250
  }
251
251
  const arrayType = {
252
252
  lexeme: 'array',
@@ -163,6 +163,18 @@ class Client(SourceClient):
163
163
  '1'
164
164
  ]
165
165
 
166
+ @staticmethod
167
+ def array_2():
168
+ temp = source_models.Config()
169
+ any_arr = [
170
+ temp
171
+ ]
172
+ return [
173
+ [
174
+ any_arr
175
+ ]
176
+ ]
177
+
166
178
  def template_string(self):
167
179
  return '/%s' % TeaConverter.to_unicode(self._protocol)
168
180
 
@@ -89,8 +89,38 @@ class ComplexRequestPart(TeaModel):
89
89
  return self
90
90
 
91
91
 
92
+ class ComplexRequestComplexList(TeaModel):
93
+ def __init__(self, name=None, code=None):
94
+ self.name = name # type: str
95
+ self.code = code # type: int
96
+
97
+ def validate(self):
98
+ pass
99
+
100
+ def to_map(self):
101
+ _map = super(ComplexRequestComplexList, self).to_map()
102
+ if _map is not None:
103
+ return _map
104
+
105
+ result = dict()
106
+ if self.name is not None:
107
+ result['Name'] = self.name
108
+ if self.code is not None:
109
+ result['Code'] = self.code
110
+ return result
111
+
112
+ def from_map(self, m=None):
113
+ m = m or dict()
114
+ if m.get('Name') is not None:
115
+ self.name = m.get('Name')
116
+ if m.get('Code') is not None:
117
+ self.code = m.get('Code')
118
+ return self
119
+
120
+
92
121
  class ComplexRequest(TeaModel):
93
- def __init__(self, access_key=None, body=None, strs=None, header=None, num=None, configs=None, part=None):
122
+ def __init__(self, access_key=None, body=None, strs=None, header=None, num=None, configs=None, part=None,
123
+ complex_list=None, complex_list_1=None):
94
124
  self.access_key = access_key # type: str
95
125
  # Body
96
126
  self.body = body # type: READABLE
@@ -102,6 +132,8 @@ class ComplexRequest(TeaModel):
102
132
  self.configs = configs # type: ComplexRequestConfigs
103
133
  # Part
104
134
  self.part = part # type: list[ComplexRequestPart]
135
+ self.complex_list = complex_list # type: list[list[list[ComplexRequestComplexList]]]
136
+ self.complex_list_1 = complex_list_1 # type: list[list[dict[str, str]]]
105
137
 
106
138
  def validate(self):
107
139
  self.validate_required(self.access_key, 'access_key')
@@ -118,6 +150,14 @@ class ComplexRequest(TeaModel):
118
150
  for k in self.part:
119
151
  if k:
120
152
  k.validate()
153
+ self.validate_required(self.complex_list, 'complex_list')
154
+ if self.complex_list:
155
+ for k in self.complex_list:
156
+ for k1 in k:
157
+ for k2 in k1:
158
+ if k2:
159
+ k2.validate()
160
+ self.validate_required(self.complex_list_1, 'complex_list_1')
121
161
 
122
162
  def to_map(self):
123
163
  _map = super(ComplexRequest, self).to_map()
@@ -141,6 +181,18 @@ class ComplexRequest(TeaModel):
141
181
  if self.part is not None:
142
182
  for k in self.part:
143
183
  result['Part'].append(k.to_map() if k else None)
184
+ result['complexList'] = []
185
+ if self.complex_list is not None:
186
+ for k in self.complex_list:
187
+ l1 = []
188
+ for k1 in k:
189
+ l2 = []
190
+ for k2 in k1:
191
+ l2.append(k2.to_map() if k2 else None)
192
+ l1.append(l2)
193
+ result['complexList'].append(l1)
194
+ if self.complex_list_1 is not None:
195
+ result['complexList1'] = self.complex_list_1
144
196
  return result
145
197
 
146
198
  def from_map(self, m=None):
@@ -164,6 +216,19 @@ class ComplexRequest(TeaModel):
164
216
  for k in m.get('Part'):
165
217
  temp_model = ComplexRequestPart()
166
218
  self.part.append(temp_model.from_map(k))
219
+ self.complex_list = []
220
+ if m.get('complexList') is not None:
221
+ for k in m.get('complexList'):
222
+ l1 = []
223
+ for k1 in k:
224
+ l2 = []
225
+ for k2 in k1:
226
+ temp_model = ComplexRequestComplexList()
227
+ l2.append(temp_model.from_map(k2))
228
+ l1.append(l2)
229
+ self.complex_list.append(l1)
230
+ if m.get('complexList1') is not None:
231
+ self.complex_list_1 = m.get('complexList1')
167
232
  return self
168
233
 
169
234
 
@@ -468,3 +468,81 @@ class M(TeaModel):
468
468
  return self
469
469
 
470
470
 
471
+ class NodeChildSubChild(TeaModel):
472
+ def __init__(self, child_node=None):
473
+ self.child_node = child_node # type: Node
474
+
475
+ def validate(self):
476
+ if self.child_node:
477
+ self.child_node.validate()
478
+
479
+ def to_map(self):
480
+ _map = super(NodeChildSubChild, self).to_map()
481
+ if _map is not None:
482
+ return _map
483
+
484
+ result = dict()
485
+ if self.child_node is not None:
486
+ result['childNode'] = self.child_node.to_map()
487
+ return result
488
+
489
+ def from_map(self, m=None):
490
+ m = m or dict()
491
+ if m.get('childNode') is not None:
492
+ temp_model = Node()
493
+ self.child_node = temp_model.from_map(m['childNode'])
494
+ return self
495
+
496
+
497
+ class NodeChild(TeaModel):
498
+ def __init__(self, sub_child=None):
499
+ self.sub_child = sub_child # type: NodeChildSubChild
500
+
501
+ def validate(self):
502
+ if self.sub_child:
503
+ self.sub_child.validate()
504
+
505
+ def to_map(self):
506
+ _map = super(NodeChild, self).to_map()
507
+ if _map is not None:
508
+ return _map
509
+
510
+ result = dict()
511
+ if self.sub_child is not None:
512
+ result['subChild'] = self.sub_child.to_map()
513
+ return result
514
+
515
+ def from_map(self, m=None):
516
+ m = m or dict()
517
+ if m.get('subChild') is not None:
518
+ temp_model = NodeChildSubChild()
519
+ self.sub_child = temp_model.from_map(m['subChild'])
520
+ return self
521
+
522
+
523
+ class Node(TeaModel):
524
+ def __init__(self, child=None):
525
+ self.child = child # type: NodeChild
526
+
527
+ def validate(self):
528
+ if self.child:
529
+ self.child.validate()
530
+
531
+ def to_map(self):
532
+ _map = super(Node, self).to_map()
533
+ if _map is not None:
534
+ return _map
535
+
536
+ result = dict()
537
+ if self.child is not None:
538
+ result['child'] = self.child.to_map()
539
+ return result
540
+
541
+ def from_map(self, m=None):
542
+ m = m or dict()
543
+ if m.get('child') is not None:
544
+ temp_model = NodeChild()
545
+ self.child = temp_model.from_map(m['child'])
546
+ return self
547
+
548
+
@@ -337,6 +337,18 @@ class Client(SourceClient):
337
337
  '1'
338
338
  ]
339
339
 
340
+ @staticmethod
341
+ def array_2() -> List[List[Any]]:
342
+ temp = source_models.Config()
343
+ any_arr = [
344
+ temp
345
+ ]
346
+ return [
347
+ [
348
+ any_arr
349
+ ]
350
+ ]
351
+
340
352
  def template_string(self) -> str:
341
353
  return f'/{self._protocol}'
342
354
 
@@ -101,6 +101,39 @@ class ComplexRequestPart(TeaModel):
101
101
  return self
102
102
 
103
103
 
104
+ class ComplexRequestComplexList(TeaModel):
105
+ def __init__(
106
+ self,
107
+ name: str = None,
108
+ code: int = None,
109
+ ):
110
+ self.name = name
111
+ self.code = code
112
+
113
+ def validate(self):
114
+ pass
115
+
116
+ def to_map(self):
117
+ _map = super().to_map()
118
+ if _map is not None:
119
+ return _map
120
+
121
+ result = dict()
122
+ if self.name is not None:
123
+ result['Name'] = self.name
124
+ if self.code is not None:
125
+ result['Code'] = self.code
126
+ return result
127
+
128
+ def from_map(self, m: dict = None):
129
+ m = m or dict()
130
+ if m.get('Name') is not None:
131
+ self.name = m.get('Name')
132
+ if m.get('Code') is not None:
133
+ self.code = m.get('Code')
134
+ return self
135
+
136
+
104
137
  class ComplexRequest(TeaModel):
105
138
  def __init__(
106
139
  self,
@@ -111,6 +144,8 @@ class ComplexRequest(TeaModel):
111
144
  num: int = None,
112
145
  configs: ComplexRequestConfigs = None,
113
146
  part: List[ComplexRequestPart] = None,
147
+ complex_list: List[List[List[ComplexRequestComplexList]]] = None,
148
+ complex_list_1: List[List[Dict[str, str]]] = None,
114
149
  ):
115
150
  self.access_key = access_key
116
151
  # Body
@@ -123,6 +158,8 @@ class ComplexRequest(TeaModel):
123
158
  self.configs = configs
124
159
  # Part
125
160
  self.part = part
161
+ self.complex_list = complex_list
162
+ self.complex_list_1 = complex_list_1
126
163
 
127
164
  def validate(self):
128
165
  self.validate_required(self.access_key, 'access_key')
@@ -139,6 +176,14 @@ class ComplexRequest(TeaModel):
139
176
  for k in self.part:
140
177
  if k:
141
178
  k.validate()
179
+ self.validate_required(self.complex_list, 'complex_list')
180
+ if self.complex_list:
181
+ for k in self.complex_list:
182
+ for k1 in k:
183
+ for k2 in k1:
184
+ if k2:
185
+ k2.validate()
186
+ self.validate_required(self.complex_list_1, 'complex_list_1')
142
187
 
143
188
  def to_map(self):
144
189
  _map = super().to_map()
@@ -162,6 +207,18 @@ class ComplexRequest(TeaModel):
162
207
  if self.part is not None:
163
208
  for k in self.part:
164
209
  result['Part'].append(k.to_map() if k else None)
210
+ result['complexList'] = []
211
+ if self.complex_list is not None:
212
+ for k in self.complex_list:
213
+ l1 = []
214
+ for k1 in k:
215
+ l2 = []
216
+ for k2 in k1:
217
+ l2.append(k2.to_map() if k2 else None)
218
+ l1.append(l2)
219
+ result['complexList'].append(l1)
220
+ if self.complex_list_1 is not None:
221
+ result['complexList1'] = self.complex_list_1
165
222
  return result
166
223
 
167
224
  def from_map(self, m: dict = None):
@@ -185,6 +242,19 @@ class ComplexRequest(TeaModel):
185
242
  for k in m.get('Part'):
186
243
  temp_model = ComplexRequestPart()
187
244
  self.part.append(temp_model.from_map(k))
245
+ self.complex_list = []
246
+ if m.get('complexList') is not None:
247
+ for k in m.get('complexList'):
248
+ l1 = []
249
+ for k1 in k:
250
+ l2 = []
251
+ for k2 in k1:
252
+ temp_model = ComplexRequestComplexList()
253
+ l2.append(temp_model.from_map(k2))
254
+ l1.append(l2)
255
+ self.complex_list.append(l1)
256
+ if m.get('complexList1') is not None:
257
+ self.complex_list_1 = m.get('complexList1')
188
258
  return self
189
259
 
190
260
 
@@ -513,3 +513,90 @@ class UseBeforeDefineModel(TeaModel):
513
513
  return self
514
514
 
515
515
 
516
+ class NodeChildSubChild(TeaModel):
517
+ def __init__(
518
+ self,
519
+ child_node: Node = None,
520
+ ):
521
+ self.child_node = child_node
522
+
523
+ def validate(self):
524
+ if self.child_node:
525
+ self.child_node.validate()
526
+
527
+ def to_map(self):
528
+ _map = super().to_map()
529
+ if _map is not None:
530
+ return _map
531
+
532
+ result = dict()
533
+ if self.child_node is not None:
534
+ result['childNode'] = self.child_node.to_map()
535
+ return result
536
+
537
+ def from_map(self, m: dict = None):
538
+ m = m or dict()
539
+ if m.get('childNode') is not None:
540
+ temp_model = Node()
541
+ self.child_node = temp_model.from_map(m['childNode'])
542
+ return self
543
+
544
+
545
+ class NodeChild(TeaModel):
546
+ def __init__(
547
+ self,
548
+ sub_child: NodeChildSubChild = None,
549
+ ):
550
+ self.sub_child = sub_child
551
+
552
+ def validate(self):
553
+ if self.sub_child:
554
+ self.sub_child.validate()
555
+
556
+ def to_map(self):
557
+ _map = super().to_map()
558
+ if _map is not None:
559
+ return _map
560
+
561
+ result = dict()
562
+ if self.sub_child is not None:
563
+ result['subChild'] = self.sub_child.to_map()
564
+ return result
565
+
566
+ def from_map(self, m: dict = None):
567
+ m = m or dict()
568
+ if m.get('subChild') is not None:
569
+ temp_model = NodeChildSubChild()
570
+ self.sub_child = temp_model.from_map(m['subChild'])
571
+ return self
572
+
573
+
574
+ class Node(TeaModel):
575
+ def __init__(
576
+ self,
577
+ child: NodeChild = None,
578
+ ):
579
+ self.child = child
580
+
581
+ def validate(self):
582
+ if self.child:
583
+ self.child.validate()
584
+
585
+ def to_map(self):
586
+ _map = super().to_map()
587
+ if _map is not None:
588
+ return _map
589
+
590
+ result = dict()
591
+ if self.child is not None:
592
+ result['child'] = self.child.to_map()
593
+ return result
594
+
595
+ def from_map(self, m: dict = None):
596
+ m = m or dict()
597
+ if m.get('child') is not None:
598
+ temp_model = NodeChild()
599
+ self.child = temp_model.from_map(m['child'])
600
+ return self
601
+
602
+
@@ -29,6 +29,13 @@ model ComplexRequest = {
29
29
  partNumber?: string(description='PartNumber', name='PartNumber')
30
30
  }
31
31
  ](description='Part', name='Part'),
32
+ complexList: [[[
33
+ {
34
+ name?: string(name='Name'),
35
+ code?: int32(name='Code'),
36
+ }
37
+ ]]](name='complexList'),
38
+ complexList1: [[map[string]string]],
32
39
  }
33
40
 
34
41
  async function hello(request: object, strs: [ string ]): [ string ] {
@@ -138,6 +145,12 @@ static function array1(): [ string ] {
138
145
  return ["1"];
139
146
  }
140
147
 
148
+ static function array2(): [[ any ]] {
149
+ var temp = new Source.Config{};
150
+ var anyArr : [Source.Config] = [temp];
151
+ return [[anyArr]];
152
+ }
153
+
141
154
  async function TemplateString(): string {
142
155
  return `/${@protocol}`;
143
156
  }
@@ -47,3 +47,11 @@ model M = {
47
47
  selfArrayMap: [ map[string]M ],
48
48
  selfArrayArray: [ [ M ] ]
49
49
  };
50
+
51
+ model Node {
52
+ child?: {
53
+ subChild?: {
54
+ childNode?: Node(name='childNode'),
55
+ }(name='subChild'),
56
+ }(name='child'),
57
+ }
@@ -13,6 +13,11 @@
13
13
  "import": "requests",
14
14
  "type": "Request",
15
15
  "package": "requests:2.21.0"
16
+ },
17
+ "HttpHeader": {
18
+ "import": null,
19
+ "type": "Dict[str, Any]",
20
+ "package": null
16
21
  }
17
22
  }
18
23
  },
@@ -24,6 +29,11 @@
24
29
  "import": "requests",
25
30
  "type": "Request",
26
31
  "package": "requests:2.21.0"
32
+ },
33
+ "HttpHeader": {
34
+ "import": null,
35
+ "type": "Dict[str, Any]",
36
+ "package": null
27
37
  }
28
38
  }
29
39
  }