@darabonba/python-generator 2.0.12 → 2.0.13
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 +3 -0
- package/lib/generator.js +50 -50
- package/lib/helper.js +45 -3
- package/package.json +1 -1
- package/tests/expected/complex/tea_python_tests/client.py +7 -5
- package/tests/expected/function/tea_python_tests/client.py +12 -0
- package/tests/expected/model/tea_python_tests/models/_my_model.py +36 -0
- package/tests/fixtures/complex/Darafile +5 -0
- package/tests/fixtures/complex/libraries/Darafile +4 -1
- package/tests/fixtures/complex/libraries/import.dara +1 -0
- package/tests/fixtures/complex/main.dara +1 -0
- package/tests/fixtures/function/Darafile +7 -1
- package/tests/fixtures/function/main.dara +8 -0
- package/tests/fixtures/model/Darafile +8 -0
- package/tests/fixtures/model/main.dara +4 -0
- package/tests/output/alias/setup.py +1 -1
- package/tests/output/annotation/setup.py +1 -1
- package/tests/output/api/setup.py +1 -1
- package/tests/output/builtin/setup.py +1 -1
- package/tests/output/comment/setup.py +1 -1
- package/tests/output/complex/setup.py +1 -1
- package/tests/output/complex/tea_python_tests/client.py +7 -5
- package/tests/output/const/setup.py +1 -1
- package/tests/output/empty/setup.py +1 -1
- package/tests/output/exec/setup.py +1 -1
- package/tests/output/function/setup.py +1 -1
- package/tests/output/function/tea_python_tests/client.py +12 -0
- package/tests/output/import/setup.py +1 -1
- package/tests/output/map/setup.py +1 -1
- package/tests/output/model/setup.py +1 -1
- package/tests/output/model/tea_python_tests/models/_my_model.py +36 -0
- package/tests/output/modelConfig/setup.py +1 -1
- package/tests/output/multi/setup.py +1 -1
- package/tests/output/statements/setup.py +1 -1
- package/tests/output/super/setup.py +1 -1
- package/tests/output/typedef/setup.py +1 -1
package/ChangeLog.md
CHANGED
package/lib/generator.js
CHANGED
|
@@ -46,7 +46,7 @@ class Visitor {
|
|
|
46
46
|
this.modelPackage = 'models';
|
|
47
47
|
this.exceptionPath = path.join(this.outputDir, this.config.package, 'exceptions');
|
|
48
48
|
this.exceptionPackage = 'exceptions';
|
|
49
|
-
this.config.clientPath = path.join(this.outputDir, this.config.package, `${_snakeCase(this.config.clientName)}.py`);
|
|
49
|
+
this.config.clientPath = path.join(this.outputDir, this.config.package, `${_snakeCase(this.config.clientName, this.config.keywords)}.py`);
|
|
50
50
|
this.classNamespace = new Map();
|
|
51
51
|
// 新增:用于存储已使用的类型
|
|
52
52
|
this.isAsyncFunction = false; // 新增:用于标记是否为异步函数
|
|
@@ -376,7 +376,7 @@ setup(
|
|
|
376
376
|
types.forEach((type) => {
|
|
377
377
|
let comments = DSL.comment.getFrontComments(this.comments, type.tokenRange[0]);
|
|
378
378
|
this.visitComments(comments, level + 2);
|
|
379
|
-
this.emit(`${_snakeCase(_vid(type.vid))}: `, level + 2);
|
|
379
|
+
this.emit(`${_snakeCase(_vid(type.vid), this.config.keywords)}: `, level + 2);
|
|
380
380
|
this.visitType(type.value);
|
|
381
381
|
this.emit(' = None\n');
|
|
382
382
|
});
|
|
@@ -558,7 +558,7 @@ setup(
|
|
|
558
558
|
types.forEach((item) => {
|
|
559
559
|
let comments = DSL.comment.getFrontComments(this.comments, item.tokenRange[0]);
|
|
560
560
|
this.visitComments(comments, level + 2);
|
|
561
|
-
this.emit(`${_snakeCase(_vid(item.vid))}: `, level + 2);
|
|
561
|
+
this.emit(`${_snakeCase(_vid(item.vid), this.config.keywords)}: `, level + 2);
|
|
562
562
|
this.visitType(item.value);
|
|
563
563
|
this.emit(' = None\n', level);
|
|
564
564
|
});
|
|
@@ -569,7 +569,7 @@ setup(
|
|
|
569
569
|
for (var i = 0; i < ast.params.params.length; i++) {
|
|
570
570
|
const node = ast.params.params[i];
|
|
571
571
|
assert.equal(node.type, 'param');
|
|
572
|
-
const name = _avoidKeywords(_snakeCase(_name(node.paramName)));
|
|
572
|
+
const name = _avoidKeywords(_snakeCase(_name(node.paramName), this.config.keywords));
|
|
573
573
|
this.emit(`${name}: `, level + 4);
|
|
574
574
|
this.visitType(node.paramType, level);
|
|
575
575
|
this.emit(',');
|
|
@@ -607,17 +607,17 @@ setup(
|
|
|
607
607
|
if (!moduleDir && innerPath) {
|
|
608
608
|
let pyPath = innerPath.replace(/(\.tea)$|(\.spec)$|(\.dara)$/gi, '') + '.py';
|
|
609
609
|
if (pyPath.startsWith('./') || pyPath.startsWith('../')) {
|
|
610
|
-
pyPath = pyPath.split('/').map(dir => _snakeCase(dir)).join(path.sep);
|
|
610
|
+
pyPath = pyPath.split('/').map(dir => _snakeCase(dir, this.config.keywords)).join(path.sep);
|
|
611
611
|
pyPath = path.join(path.dirname(filepath), `${pyPath}`);
|
|
612
612
|
} else if (pyPath.startsWith('/')) {
|
|
613
|
-
pyPath = pyPath.split('/').map(dir => _snakeCase(dir)).join(path.sep);
|
|
613
|
+
pyPath = pyPath.split('/').map(dir => _snakeCase(dir, this.config.keywords)).join(path.sep);
|
|
614
614
|
pyPath = `${pyPath}`;
|
|
615
615
|
}
|
|
616
616
|
|
|
617
617
|
const classNamespace = this.getClassNamespace(pyPath);
|
|
618
618
|
const className = this.getInnerClient(aliasId, pyPath);
|
|
619
619
|
const aliasName = this.getAliasName(className, aliasId);
|
|
620
|
-
const filename = _snakeCase(path.basename(pyPath, '.py'));
|
|
620
|
+
const filename = _snakeCase(path.basename(pyPath, '.py'), this.config.keywords);
|
|
621
621
|
this.packageInfo[aliasId] = {
|
|
622
622
|
aliasName: aliasName || className,
|
|
623
623
|
clientName: className,
|
|
@@ -646,7 +646,7 @@ setup(
|
|
|
646
646
|
throw new Error(`The '${aliasId}' has no Python supported.`);
|
|
647
647
|
}
|
|
648
648
|
let className = _camelCase(pyPkg.clientName || 'client');
|
|
649
|
-
let filename = _snakeCase(className);
|
|
649
|
+
let filename = _snakeCase(className, this.config.keywords);
|
|
650
650
|
let classNamespace = pyPkg.package;
|
|
651
651
|
let models = 'models';
|
|
652
652
|
let exceptions = 'exceptions';
|
|
@@ -657,7 +657,7 @@ setup(
|
|
|
657
657
|
exceptions = filename + '_exceptions';
|
|
658
658
|
const arr = pyPath.split(path.sep).slice(1, -1);
|
|
659
659
|
arr.map(key => {
|
|
660
|
-
classNamespace += '.' + _snakeCase(key);
|
|
660
|
+
classNamespace += '.' + _snakeCase(key, this.config.keywords);
|
|
661
661
|
});
|
|
662
662
|
const exportClientName = pyPkg.exports && pyPkg.exports[inner];
|
|
663
663
|
className = _camelCase(exportClientName || 'Client');
|
|
@@ -756,7 +756,7 @@ setup(
|
|
|
756
756
|
for (var i = 0; i < ast.params.length; i++) {
|
|
757
757
|
const node = ast.params[i];
|
|
758
758
|
assert.equal(node.type, 'param');
|
|
759
|
-
const name = _avoidKeywords(_snakeCase(_name(node.paramName)));
|
|
759
|
+
const name = _avoidKeywords(_snakeCase(_name(node.paramName), this.config.keywords));
|
|
760
760
|
this.emit(`${name}: `, level);
|
|
761
761
|
this.visitType(node.paramType, level);
|
|
762
762
|
this.emit(',');
|
|
@@ -1024,7 +1024,7 @@ setup(
|
|
|
1024
1024
|
node = ast.nodes[i];
|
|
1025
1025
|
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
|
|
1026
1026
|
this.visitComments(comments, level);
|
|
1027
|
-
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1027
|
+
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName)), this.config.keywords));
|
|
1028
1028
|
const description = this.getAttributes(node, 'description');
|
|
1029
1029
|
if (description) {
|
|
1030
1030
|
const descriptions = description.trimEnd().split('\n');
|
|
@@ -1101,7 +1101,7 @@ setup(
|
|
|
1101
1101
|
const minimum = this.getAttributes(node, 'minimum') || 0;
|
|
1102
1102
|
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
|
|
1103
1103
|
this.visitComments(comments, level);
|
|
1104
|
-
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1104
|
+
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName)), this.config.keywords));
|
|
1105
1105
|
// 这里判断类中属性是否是必填
|
|
1106
1106
|
if (node.required) {
|
|
1107
1107
|
notPass = true;
|
|
@@ -1200,7 +1200,7 @@ setup(
|
|
|
1200
1200
|
let realName = this.getRealName(node);
|
|
1201
1201
|
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
|
|
1202
1202
|
this.visitComments(comments, level);
|
|
1203
|
-
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1203
|
+
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName)), this.config.keywords));
|
|
1204
1204
|
const hasModel = this.checkFieldHasModel(node.fieldValue);
|
|
1205
1205
|
let arr = false;
|
|
1206
1206
|
if (hasModel && !this.config.noneEmpty) {
|
|
@@ -1310,7 +1310,7 @@ setup(
|
|
|
1310
1310
|
let realName = this.getRealName(node);
|
|
1311
1311
|
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
|
|
1312
1312
|
this.visitComments(comments, level);
|
|
1313
|
-
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1313
|
+
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName)), this.config.keywords));
|
|
1314
1314
|
const hasModel = this.checkFieldHasModel(node.fieldValue);
|
|
1315
1315
|
let arr = false;
|
|
1316
1316
|
if (hasModel && !this.config.noneEmpty) {
|
|
@@ -1443,7 +1443,7 @@ setup(
|
|
|
1443
1443
|
this.visitExtendOn(extendOn);
|
|
1444
1444
|
this.emit(':\n');
|
|
1445
1445
|
this.visitModelBody(modelBody, level + 2, modelName);
|
|
1446
|
-
this.saveBuffer(path.join(this.modelPath, filename || `_${_snakeCase(modelName)}.py`));
|
|
1446
|
+
this.saveBuffer(path.join(this.modelPath, filename || `_${_snakeCase(modelName, this.config.keywords)}.py`));
|
|
1447
1447
|
this.usedTypes = [];
|
|
1448
1448
|
this.imports = [];
|
|
1449
1449
|
this.output = '';
|
|
@@ -1492,7 +1492,7 @@ setup(
|
|
|
1492
1492
|
const ast = models[i];
|
|
1493
1493
|
const modelName = _subModelName(_name(ast.modelName));
|
|
1494
1494
|
modelNames.push(modelName);
|
|
1495
|
-
this.emit(`from ._${_snakeCase(modelName)} import ${modelName}\n`);
|
|
1495
|
+
this.emit(`from ._${_snakeCase(modelName, this.config.keywords)} import ${modelName}\n`);
|
|
1496
1496
|
}
|
|
1497
1497
|
|
|
1498
1498
|
for (let i = 0; i < subModels.length; i++) {
|
|
@@ -1500,7 +1500,7 @@ setup(
|
|
|
1500
1500
|
const modelName = _subModelName(_name(ast.modelName));
|
|
1501
1501
|
const mainModelName = _name(ast.modelName).split('.')[0];
|
|
1502
1502
|
modelNames.push(modelName);
|
|
1503
|
-
this.emit(`from ._${_snakeCase(mainModelName)} import ${modelName}\n`);
|
|
1503
|
+
this.emit(`from ._${_snakeCase(mainModelName, this.config.keywords)} import ${modelName}\n`);
|
|
1504
1504
|
}
|
|
1505
1505
|
|
|
1506
1506
|
this.emit('\n__all__ = [\n');
|
|
@@ -1533,7 +1533,7 @@ setup(
|
|
|
1533
1533
|
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
|
|
1534
1534
|
this.visitComments(comments, level);
|
|
1535
1535
|
}
|
|
1536
|
-
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1536
|
+
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName)), this.config.keywords));
|
|
1537
1537
|
if (param === 'name' && type === 'exception') {
|
|
1538
1538
|
continue;
|
|
1539
1539
|
}
|
|
@@ -1549,7 +1549,7 @@ setup(
|
|
|
1549
1549
|
this.emit('{\n');
|
|
1550
1550
|
for (let i = 0; i < ast.extendFileds.length; i++) {
|
|
1551
1551
|
node = ast.extendFileds[i];
|
|
1552
|
-
let value = _snakeCase(_escape(_name(node.fieldName)));
|
|
1552
|
+
let value = _snakeCase(_escape(_name(node.fieldName)), this.config.keywords);
|
|
1553
1553
|
let key = _avoidKeywords(_escape(_name(node.fieldName)));
|
|
1554
1554
|
if (key === 'name' && type === 'exception') {
|
|
1555
1555
|
continue;
|
|
@@ -1561,7 +1561,7 @@ setup(
|
|
|
1561
1561
|
this.emit('\n');
|
|
1562
1562
|
for (let i = 0; i < ast.extendFileds.length; i++) {
|
|
1563
1563
|
node = ast.extendFileds[i];
|
|
1564
|
-
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1564
|
+
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName)), this.config.keywords));
|
|
1565
1565
|
if (param === 'name' && type === 'exception') {
|
|
1566
1566
|
continue;
|
|
1567
1567
|
}
|
|
@@ -1582,7 +1582,7 @@ setup(
|
|
|
1582
1582
|
node = ast.nodes[i];
|
|
1583
1583
|
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
|
|
1584
1584
|
this.visitComments(comments, level);
|
|
1585
|
-
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
|
|
1585
|
+
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName)), this.config.keywords));
|
|
1586
1586
|
if (param === 'name') {
|
|
1587
1587
|
continue;
|
|
1588
1588
|
}
|
|
@@ -1607,7 +1607,7 @@ setup(
|
|
|
1607
1607
|
this.visitExtendOn(extendOn, 'exception');
|
|
1608
1608
|
this.emit(':\n');
|
|
1609
1609
|
this.visitEcxceptionBody(exceptionBody, extendOn, exceptionName, level + 2);
|
|
1610
|
-
this.saveBuffer(path.join(this.exceptionPath, `_${_snakeCase(exceptionName)}.py`));
|
|
1610
|
+
this.saveBuffer(path.join(this.exceptionPath, `_${_snakeCase(exceptionName, this.config.keywords)}.py`));
|
|
1611
1611
|
this.usedTypes = [];
|
|
1612
1612
|
this.imports = [];
|
|
1613
1613
|
this.output = '';
|
|
@@ -1628,7 +1628,7 @@ setup(
|
|
|
1628
1628
|
const ast = excpetions[i];
|
|
1629
1629
|
const exceptionName = _subModelName(_name(ast.exceptionName));
|
|
1630
1630
|
exceptionNames.push(exceptionName);
|
|
1631
|
-
this.emit(`from ._${_snakeCase(exceptionName)} import ${exceptionName}Exception\n`);
|
|
1631
|
+
this.emit(`from ._${_snakeCase(exceptionName, this.config.keywords)} import ${exceptionName}Exception\n`);
|
|
1632
1632
|
}
|
|
1633
1633
|
|
|
1634
1634
|
this.emit('\n__all__ = [\n');
|
|
@@ -1642,7 +1642,7 @@ setup(
|
|
|
1642
1642
|
assert.equal(ast.type, 'model');
|
|
1643
1643
|
const modelName = _subModelName(_name(ast.modelName));
|
|
1644
1644
|
const mainModelName = _name(ast.modelName).split('.')[0];
|
|
1645
|
-
this.visitModel(ast.modelBody, modelName, ast.extendOn, level, `_${_snakeCase(mainModelName)}.py`);
|
|
1645
|
+
this.visitModel(ast.modelBody, modelName, ast.extendOn, level, `_${_snakeCase(mainModelName, this.config.keywords)}.py`);
|
|
1646
1646
|
}
|
|
1647
1647
|
|
|
1648
1648
|
visitObjectFieldValue(ast, level) {
|
|
@@ -1673,7 +1673,7 @@ setup(
|
|
|
1673
1673
|
if (ast.type === 'objectField') {
|
|
1674
1674
|
// TODO 这里粗暴处理的双引号,可以考虑优化
|
|
1675
1675
|
var key = _escape(_name(ast.fieldName) || _string(ast.fieldName)).replace(/['"]/g, '');
|
|
1676
|
-
this.emit(`${_avoidKeywords(_snakeCase(key))} = `, level + 2);
|
|
1676
|
+
this.emit(`${_avoidKeywords(_snakeCase(key, this.config.keywords))} = `, level + 2);
|
|
1677
1677
|
this.visitObjectFieldValue(ast.expr, level + 2);
|
|
1678
1678
|
if (!end) {
|
|
1679
1679
|
this.emit(',\n');
|
|
@@ -1740,7 +1740,7 @@ setup(
|
|
|
1740
1740
|
visitMethodCall(ast, level) {
|
|
1741
1741
|
assert.equal(ast.left.type, 'method_call');
|
|
1742
1742
|
const name = _name(ast.left.id);
|
|
1743
|
-
const functionName = _avoidKeywords(_snakeCase(name));
|
|
1743
|
+
const functionName = _avoidKeywords(_snakeCase(name, this.config.keywords));
|
|
1744
1744
|
const sse = ast.notes && ast.notes.find(note => note.note.lexeme === '@sse');
|
|
1745
1745
|
const isSSE = sse && sse.arg.value;
|
|
1746
1746
|
if (name.startsWith('$') && this.builtin[name]) {
|
|
@@ -1754,7 +1754,7 @@ setup(
|
|
|
1754
1754
|
} else if (ast.isAsync && this.isAsyncFunction) {
|
|
1755
1755
|
this.emit(`${isSSE ? '' : 'await '}${this.className}.${functionName}_async`);
|
|
1756
1756
|
} else {
|
|
1757
|
-
const functionName = _snakeCase(name);
|
|
1757
|
+
const functionName = _snakeCase(name, this.config.keywords);
|
|
1758
1758
|
this.emit(`${this.className}.${functionName}`);
|
|
1759
1759
|
}
|
|
1760
1760
|
this.visitArgs(ast.args, level);
|
|
@@ -1774,12 +1774,12 @@ setup(
|
|
|
1774
1774
|
this.builtin[ast.builtinModule][method](ast, level, async);
|
|
1775
1775
|
} else {
|
|
1776
1776
|
if (ast.left.id.tag === DSL.Tag.Tag.VID) {
|
|
1777
|
-
this.emit(`self.${_snakeCase(_vid(ast.left.id))}`);
|
|
1777
|
+
this.emit(`self.${_snakeCase(_vid(ast.left.id), this.config.keywords)}`);
|
|
1778
1778
|
} else {
|
|
1779
|
-
const aliasId = _snakeCase(_name(ast.left.id));
|
|
1779
|
+
const aliasId = _snakeCase(_name(ast.left.id), this.config.keywords);
|
|
1780
1780
|
this.emit(aliasId);
|
|
1781
1781
|
}
|
|
1782
|
-
this.emit(`.${(_avoidKeywords(_snakeCase(method)))}`);
|
|
1782
|
+
this.emit(`.${(_avoidKeywords(_snakeCase(method, this.config.keywords)))}`);
|
|
1783
1783
|
if (async) {
|
|
1784
1784
|
this.emit('_async');
|
|
1785
1785
|
}
|
|
@@ -1798,7 +1798,7 @@ setup(
|
|
|
1798
1798
|
const aliasId = _name(ast.left.id);
|
|
1799
1799
|
let clientName = this.getModelName('', aliasId, 'module');
|
|
1800
1800
|
|
|
1801
|
-
const functionName = _avoidKeywords(_snakeCase(_name(ast.left.propertyPath[0])));
|
|
1801
|
+
const functionName = _avoidKeywords(_snakeCase(_name(ast.left.propertyPath[0]), this.config.keywords));
|
|
1802
1802
|
|
|
1803
1803
|
const sse = ast.notes && ast.notes.find(note => note.note.lexeme === '@sse');
|
|
1804
1804
|
const isSSE = sse && sse.arg.value;
|
|
@@ -1877,9 +1877,9 @@ setup(
|
|
|
1877
1877
|
|
|
1878
1878
|
visitPropertyAccess(ast, env = {}) {
|
|
1879
1879
|
assert.ok(ast.type === 'property_access' || ast.type === 'property');
|
|
1880
|
-
var id = _snakeCase(_name(ast.id));
|
|
1880
|
+
var id = _snakeCase(_name(ast.id), this.config.keywords);
|
|
1881
1881
|
if (ast.id.tag === Tag.VID) {
|
|
1882
|
-
id = `self.${_snakeCase(_vid(ast.id))}`;
|
|
1882
|
+
id = `self.${_snakeCase(_vid(ast.id), this.config.keywords)}`;
|
|
1883
1883
|
}
|
|
1884
1884
|
var expr = _avoidKeywords(id);
|
|
1885
1885
|
const prefix = env.left ? '[' : '.get(';
|
|
@@ -1889,7 +1889,7 @@ setup(
|
|
|
1889
1889
|
for (var i = 0; i < ast.propertyPath.length; i++) {
|
|
1890
1890
|
var name = _name(ast.propertyPath[i]);
|
|
1891
1891
|
if (current.type === 'model') {
|
|
1892
|
-
expr += `.${_avoidKeywords(_snakeCase(name))}`;
|
|
1892
|
+
expr += `.${_avoidKeywords(_snakeCase(name, this.config.keywords))}`;
|
|
1893
1893
|
} else {
|
|
1894
1894
|
expr += `${prefix}"${name}"${suffix}`;
|
|
1895
1895
|
}
|
|
@@ -1915,10 +1915,10 @@ setup(
|
|
|
1915
1915
|
if (ast.inferred && ast.inferred.type === 'basic' && ast.inferred.name === 'class') {
|
|
1916
1916
|
this.emit(this.getModelName('', _name(ast.id), 'module'));
|
|
1917
1917
|
} else {
|
|
1918
|
-
this.emit(_avoidKeywords(_snakeCase(_name(ast.id))));
|
|
1918
|
+
this.emit(_avoidKeywords(_snakeCase(_name(ast.id), this.config.keywords)));
|
|
1919
1919
|
}
|
|
1920
1920
|
} else if (ast.type === 'virtualVariable') {
|
|
1921
|
-
this.emit(`self.${_snakeCase(_vid(ast.vid))}`);
|
|
1921
|
+
this.emit(`self.${_snakeCase(_vid(ast.vid), this.config.keywords)}`);
|
|
1922
1922
|
} else if (ast.type === 'decrement') {
|
|
1923
1923
|
this.visitExpr(ast.expr, level, { left: true });
|
|
1924
1924
|
this.emit('-= 1');
|
|
@@ -2055,9 +2055,9 @@ setup(
|
|
|
2055
2055
|
assert.equal(ast.type, 'map_access');
|
|
2056
2056
|
let expr;
|
|
2057
2057
|
if (ast.id.tag === DSL.Tag.Tag.VID) {
|
|
2058
|
-
expr = `self.${_snakeCase(_vid(ast.id))}`;
|
|
2058
|
+
expr = `self.${_snakeCase(_vid(ast.id), this.config.keywords)}`;
|
|
2059
2059
|
} else {
|
|
2060
|
-
expr = `${_avoidKeywords(_snakeCase(_name(ast.id)))}`;
|
|
2060
|
+
expr = `${_avoidKeywords(_snakeCase(_name(ast.id), this.config.keywords))}`;
|
|
2061
2061
|
}
|
|
2062
2062
|
const prefix = env.left ? '[' : '.get(';
|
|
2063
2063
|
const suffix = env.left ? ']' : ')';
|
|
@@ -2066,7 +2066,7 @@ setup(
|
|
|
2066
2066
|
for (var i = 0; i < ast.propertyPath.length; i++) {
|
|
2067
2067
|
var name = _name(ast.propertyPath[i]);
|
|
2068
2068
|
if (current.type === 'model') {
|
|
2069
|
-
expr += `.${_avoidKeywords(_snakeCase(name))}`;
|
|
2069
|
+
expr += `.${_avoidKeywords(_snakeCase(name, this.config.keywords))}`;
|
|
2070
2070
|
} else {
|
|
2071
2071
|
expr += `${prefix}"${name}"${suffix}`;
|
|
2072
2072
|
}
|
|
@@ -2083,16 +2083,16 @@ setup(
|
|
|
2083
2083
|
let expr;
|
|
2084
2084
|
if (ast.id.tag === DSL.Tag.Tag.VID) {
|
|
2085
2085
|
// 这个判断很奇怪诶
|
|
2086
|
-
expr = `self.${_snakeCase(_vid(ast.id))}`;
|
|
2086
|
+
expr = `self.${_snakeCase(_vid(ast.id, this.config.keywords))}`;
|
|
2087
2087
|
} else {
|
|
2088
|
-
expr = `${_avoidKeywords(_snakeCase(_name(ast.id)))}`;
|
|
2088
|
+
expr = `${_avoidKeywords(_snakeCase(_name(ast.id), this.config.keywords))}`;
|
|
2089
2089
|
}
|
|
2090
2090
|
if (ast.propertyPath && ast.propertyPath.length) {
|
|
2091
2091
|
var current = ast.id.inferred;
|
|
2092
2092
|
for (var i = 0; i < ast.propertyPath.length; i++) {
|
|
2093
2093
|
var name = _name(ast.propertyPath[i]);
|
|
2094
2094
|
if (current.type === 'model') {
|
|
2095
|
-
expr += `.${_avoidKeywords(_snakeCase(name))}`;
|
|
2095
|
+
expr += `.${_avoidKeywords(_snakeCase(name, this.config.keywords))}`;
|
|
2096
2096
|
} else {
|
|
2097
2097
|
expr += `["${name}"]`;
|
|
2098
2098
|
}
|
|
@@ -2250,7 +2250,7 @@ setup(
|
|
|
2250
2250
|
this.emit('k, v in ');
|
|
2251
2251
|
this.visitExpr(ast.list, level);
|
|
2252
2252
|
} else {
|
|
2253
|
-
this.emit(`${_avoidKeywords(_snakeCase(_name(ast.id)))} in `);
|
|
2253
|
+
this.emit(`${_avoidKeywords(_snakeCase(_name(ast.id), this.config.keywords))} in `);
|
|
2254
2254
|
this.visitExpr(ast.list, level);
|
|
2255
2255
|
}
|
|
2256
2256
|
this.emit(':\n');
|
|
@@ -2306,9 +2306,9 @@ setup(
|
|
|
2306
2306
|
this.emit('', level);
|
|
2307
2307
|
this.visitPropertyAccess(ast.left, { left: true });
|
|
2308
2308
|
} else if (ast.left.type === 'virtualVariable') { // vid
|
|
2309
|
-
this.emit(`self.${_snakeCase(_vid((ast.left.vid)))}`, level);
|
|
2309
|
+
this.emit(`self.${_snakeCase(_vid((ast.left.vid)), this.config.keywords)}`, level);
|
|
2310
2310
|
} else if (ast.left.type === 'variable') {
|
|
2311
|
-
this.emit(`${_avoidKeywords(_snakeCase(_name(ast.left.id)))}`, level);
|
|
2311
|
+
this.emit(`${_avoidKeywords(_snakeCase(_name(ast.left.id), this.config.keywords))}`, level);
|
|
2312
2312
|
} else if (ast.left.type === 'map_access') {
|
|
2313
2313
|
// 声明时不能用get去赋值
|
|
2314
2314
|
this.emit('', level);
|
|
@@ -2333,7 +2333,7 @@ setup(
|
|
|
2333
2333
|
|
|
2334
2334
|
// 实例初始化 new的地方
|
|
2335
2335
|
visitDeclare(ast, level) {
|
|
2336
|
-
var id = _avoidKeywords(_snakeCase(_name(ast.id)));
|
|
2336
|
+
var id = _avoidKeywords(_snakeCase(_name(ast.id), this.config.keywords));
|
|
2337
2337
|
this.emit(`${id}`, level);
|
|
2338
2338
|
if (id === 'new_full_str') {
|
|
2339
2339
|
this.emit('');
|
|
@@ -2399,7 +2399,7 @@ setup(
|
|
|
2399
2399
|
// this.visitAnnotation(ast.annotation, level);
|
|
2400
2400
|
// let comments = DSL.comment.getFrontComments(this.comments, ast.tokenRange[0]);
|
|
2401
2401
|
// this.visitComments(comments, level);
|
|
2402
|
-
const functionName = _avoidKeywords(_snakeCase(_name(ast.functionName)));
|
|
2402
|
+
const functionName = _avoidKeywords(_snakeCase(_name(ast.functionName), this.config.keywords));
|
|
2403
2403
|
|
|
2404
2404
|
if (ast.isStatic) {
|
|
2405
2405
|
this.emit('@staticmethod\n', level);
|
|
@@ -2477,7 +2477,7 @@ setup(
|
|
|
2477
2477
|
let comments = DSL.comment.getFrontComments(this.comments, ast.tokenRange[0]);
|
|
2478
2478
|
this.visitComments(comments, level);
|
|
2479
2479
|
// set api name to _snakeCase
|
|
2480
|
-
const apiName = _avoidKeywords(_snakeCase(_name(ast.apiName)));
|
|
2480
|
+
const apiName = _avoidKeywords(_snakeCase(_name(ast.apiName), this.config.keywords));
|
|
2481
2481
|
this.isStaticFunction = false;
|
|
2482
2482
|
this.emit(`def ${apiName}`, level);
|
|
2483
2483
|
this.visitParams(ast.params, level, true);
|
|
@@ -2755,7 +2755,7 @@ setup(
|
|
|
2755
2755
|
|
|
2756
2756
|
if (type === 'model' && moduleName) {
|
|
2757
2757
|
const { namemespace, models } = this.packageInfo[moduleName];
|
|
2758
|
-
const aliasName = `${_snakeCase(moduleName.replace(/-/g, ''))}_models`;
|
|
2758
|
+
const aliasName = `${_snakeCase(moduleName.replace(/-/g, ''), this.config.keywords)}_models`;
|
|
2759
2759
|
this.imports.push({
|
|
2760
2760
|
aliasName,
|
|
2761
2761
|
packageName: namemespace,
|
|
@@ -2776,7 +2776,7 @@ setup(
|
|
|
2776
2776
|
|
|
2777
2777
|
if (type === 'exception' && moduleName) {
|
|
2778
2778
|
const { namemespace, exceptions } = this.packageInfo[moduleName];
|
|
2779
|
-
const aliasName = `${_snakeCase(moduleName.replace(/-/g, ''))}_exceptions`;
|
|
2779
|
+
const aliasName = `${_snakeCase(moduleName.replace(/-/g, ''), this.config.keywords)}_exceptions`;
|
|
2780
2780
|
this.imports.push({
|
|
2781
2781
|
aliasName,
|
|
2782
2782
|
packageName: namemespace,
|
package/lib/helper.js
CHANGED
|
@@ -213,13 +213,34 @@ function _camelCase(str, split = '_') {
|
|
|
213
213
|
return str;
|
|
214
214
|
}
|
|
215
215
|
|
|
216
|
-
function _snakeCase(str) {
|
|
216
|
+
function _snakeCase(str, keys = []) {
|
|
217
217
|
if (!str) {
|
|
218
218
|
return '';
|
|
219
219
|
}
|
|
220
|
+
|
|
221
|
+
// Convert keys to array if it's a single string
|
|
222
|
+
if (typeof keys === 'string') {
|
|
223
|
+
keys = [keys];
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
let result = str;
|
|
227
|
+
|
|
228
|
+
// First, handle the keywords by replacing them with placeholders
|
|
229
|
+
const placeholders = {};
|
|
230
|
+
for (let i = 0; i < keys.length; i++) {
|
|
231
|
+
const key = keys[i];
|
|
232
|
+
if (key && result.includes(key)) {
|
|
233
|
+
const placeholder = `@@_${i}@@`;
|
|
234
|
+
placeholders[placeholder] = `_${key.toLowerCase()}_`;
|
|
235
|
+
result = result.split(key).join(placeholder);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Process the string normally
|
|
220
240
|
let res = '';
|
|
221
241
|
let tmp = '';
|
|
222
|
-
|
|
242
|
+
|
|
243
|
+
for (const c of result) {
|
|
223
244
|
if (/[A-Z|0-9]/.test(c)) {
|
|
224
245
|
tmp += c;
|
|
225
246
|
} else {
|
|
@@ -230,13 +251,34 @@ function _snakeCase(str) {
|
|
|
230
251
|
res += c;
|
|
231
252
|
}
|
|
232
253
|
}
|
|
254
|
+
|
|
233
255
|
if (tmp.length > 0) {
|
|
234
|
-
res += '_' + tmp.toLowerCase();
|
|
256
|
+
res += (res === '' ? '' : '_') + tmp.toLowerCase();
|
|
235
257
|
}
|
|
258
|
+
|
|
236
259
|
res = res.replace(/-/g, '_');
|
|
260
|
+
|
|
261
|
+
// Clean up any double underscores
|
|
262
|
+
res = res.replace(/_+/g, '_');
|
|
263
|
+
|
|
264
|
+
// Restore the special keywords from placeholders
|
|
265
|
+
for (const [placeholder, value] of Object.entries(placeholders)) {
|
|
266
|
+
const regex = new RegExp(placeholder, 'g');
|
|
267
|
+
res = res.replace(regex, value);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
res = res.replace(/_+/g, '_');
|
|
271
|
+
|
|
272
|
+
// Remove leading underscore if original string didn't start with one
|
|
237
273
|
if (res[0] === '_' && str[0] !== '_') {
|
|
238
274
|
res = res.substring(1);
|
|
239
275
|
}
|
|
276
|
+
|
|
277
|
+
// Remove trailing underscore if original string didn't end with one
|
|
278
|
+
if (res[res.length - 1] === '_' && str[str.length - 1] !== '_') {
|
|
279
|
+
res = res.substring(0, res.length - 1);
|
|
280
|
+
}
|
|
281
|
+
|
|
240
282
|
return res;
|
|
241
283
|
}
|
|
242
284
|
|
package/package.json
CHANGED
|
@@ -20,7 +20,7 @@ from tea_python_tests import models as main_models
|
|
|
20
20
|
class Client(SourceClient):
|
|
21
21
|
_protocol: str = None
|
|
22
22
|
_pathname: str = None
|
|
23
|
-
|
|
23
|
+
_strs: List[str] = None
|
|
24
24
|
_comple_list: List[List[str]] = None
|
|
25
25
|
_endpoint_map: Dict[str, str] = None
|
|
26
26
|
_configs: List[source_models.Config] = None
|
|
@@ -206,11 +206,11 @@ class Client(SourceClient):
|
|
|
206
206
|
any_map = {}
|
|
207
207
|
any_map[item] = 'test'
|
|
208
208
|
break
|
|
209
|
-
self.
|
|
209
|
+
self._strs = request.strs
|
|
210
210
|
self._protocol = 'test'
|
|
211
211
|
self._endpoint_map.get(self._protocol)
|
|
212
212
|
self._endpoint_map['test'] = 'ok'
|
|
213
|
-
request.strs = self.
|
|
213
|
+
request.strs = self._strs
|
|
214
214
|
_request.protocol = self._protocol
|
|
215
215
|
_request.port = request.num
|
|
216
216
|
_request.method = 'GET'
|
|
@@ -421,11 +421,11 @@ class Client(SourceClient):
|
|
|
421
421
|
any_map = {}
|
|
422
422
|
any_map[item] = 'test'
|
|
423
423
|
break
|
|
424
|
-
self.
|
|
424
|
+
self._strs = request.strs
|
|
425
425
|
self._protocol = 'test'
|
|
426
426
|
self._endpoint_map.get(self._protocol)
|
|
427
427
|
self._endpoint_map['test'] = 'ok'
|
|
428
|
-
request.strs = self.
|
|
428
|
+
request.strs = self._strs
|
|
429
429
|
_request.protocol = self._protocol
|
|
430
430
|
_request.port = request.num
|
|
431
431
|
_request.method = 'GET'
|
|
@@ -611,6 +611,7 @@ class Client(SourceClient):
|
|
|
611
611
|
x = y
|
|
612
612
|
resp = _response
|
|
613
613
|
req = source_models.Request(
|
|
614
|
+
cors_rules = 'test',
|
|
614
615
|
accesskey = request.access_key,
|
|
615
616
|
region = resp.status_message
|
|
616
617
|
)
|
|
@@ -653,6 +654,7 @@ class Client(SourceClient):
|
|
|
653
654
|
x = y
|
|
654
655
|
resp = _response
|
|
655
656
|
req = source_models.Request(
|
|
657
|
+
cors_rules = 'test',
|
|
656
658
|
accesskey = request.access_key,
|
|
657
659
|
region = resp.status_message
|
|
658
660
|
)
|
|
@@ -63,3 +63,15 @@ class Client:
|
|
|
63
63
|
|
|
64
64
|
async def a_params_async(self) -> None:
|
|
65
65
|
await self.hello_params_async('a', 'b')
|
|
66
|
+
|
|
67
|
+
def test_jwt_with_option(self) -> None:
|
|
68
|
+
self.hello_params('a', 'b')
|
|
69
|
+
|
|
70
|
+
async def test_jwt_with_option_async(self) -> None:
|
|
71
|
+
await self.hello_params_async('a', 'b')
|
|
72
|
+
|
|
73
|
+
def test_oauth2_for_option(self) -> None:
|
|
74
|
+
self.hello_params('a', 'b')
|
|
75
|
+
|
|
76
|
+
async def test_oauth2_for_option_async(self) -> None:
|
|
77
|
+
await self.hello_params_async('a', 'b')
|
|
@@ -14,6 +14,10 @@ class MyModel(DaraModel):
|
|
|
14
14
|
def __init__(
|
|
15
15
|
self,
|
|
16
16
|
model: main_models.MyModelModel = None,
|
|
17
|
+
cors_rules: str = None,
|
|
18
|
+
cors_rules_cors_r: str = None,
|
|
19
|
+
xml_parser_http_message: str = None,
|
|
20
|
+
test_oauth2_name: str = None,
|
|
17
21
|
stringfield: str = None,
|
|
18
22
|
bytesfield: bytes = None,
|
|
19
23
|
stringarrayfield: List[str] = None,
|
|
@@ -60,6 +64,10 @@ class MyModel(DaraModel):
|
|
|
60
64
|
link: str = None,
|
|
61
65
|
):
|
|
62
66
|
self.model = model
|
|
67
|
+
self.cors_rules = cors_rules
|
|
68
|
+
self.cors_rules_cors_r = cors_rules_cors_r
|
|
69
|
+
self.xml_parser_http_message = xml_parser_http_message
|
|
70
|
+
self.test_oauth2_name = test_oauth2_name
|
|
63
71
|
self.stringfield = stringfield
|
|
64
72
|
self.bytesfield = bytesfield
|
|
65
73
|
self.stringarrayfield = stringarrayfield
|
|
@@ -109,6 +117,10 @@ class MyModel(DaraModel):
|
|
|
109
117
|
self.validate_required(self.model, 'model')
|
|
110
118
|
if self.model:
|
|
111
119
|
self.model.validate()
|
|
120
|
+
self.validate_required(self.cors_rules, 'cors_rules')
|
|
121
|
+
self.validate_required(self.cors_rules_cors_r, 'cors_rules_cors_r')
|
|
122
|
+
self.validate_required(self.xml_parser_http_message, 'xml_parser_http_message')
|
|
123
|
+
self.validate_required(self.test_oauth2_name, 'test_oauth2_name')
|
|
112
124
|
self.validate_required(self.stringfield, 'stringfield')
|
|
113
125
|
self.validate_required(self.bytesfield, 'bytesfield')
|
|
114
126
|
self.validate_required(self.stringarrayfield, 'stringarrayfield')
|
|
@@ -220,6 +232,18 @@ class MyModel(DaraModel):
|
|
|
220
232
|
if self.model is not None:
|
|
221
233
|
result['model'] = self.model.to_map()
|
|
222
234
|
|
|
235
|
+
if self.cors_rules is not None:
|
|
236
|
+
result['CORSRules'] = self.cors_rules
|
|
237
|
+
|
|
238
|
+
if self.cors_rules_cors_r is not None:
|
|
239
|
+
result['CORSRulesCORSR'] = self.cors_rules_cors_r
|
|
240
|
+
|
|
241
|
+
if self.xml_parser_http_message is not None:
|
|
242
|
+
result['XMLParserHTTPMessage'] = self.xml_parser_http_message
|
|
243
|
+
|
|
244
|
+
if self.test_oauth2_name is not None:
|
|
245
|
+
result['TestOAuth2Name'] = self.test_oauth2_name
|
|
246
|
+
|
|
223
247
|
if self.stringfield is not None:
|
|
224
248
|
result['stringfield'] = self.stringfield
|
|
225
249
|
|
|
@@ -405,6 +429,18 @@ class MyModel(DaraModel):
|
|
|
405
429
|
temp_model = main_models.MyModelModel()
|
|
406
430
|
self.model = temp_model.from_map(m.get('model'))
|
|
407
431
|
|
|
432
|
+
if m.get('CORSRules') is not None:
|
|
433
|
+
self.cors_rules = m.get('CORSRules')
|
|
434
|
+
|
|
435
|
+
if m.get('CORSRulesCORSR') is not None:
|
|
436
|
+
self.cors_rules_cors_r = m.get('CORSRulesCORSR')
|
|
437
|
+
|
|
438
|
+
if m.get('XMLParserHTTPMessage') is not None:
|
|
439
|
+
self.xml_parser_http_message = m.get('XMLParserHTTPMessage')
|
|
440
|
+
|
|
441
|
+
if m.get('TestOAuth2Name') is not None:
|
|
442
|
+
self.test_oauth2_name = m.get('TestOAuth2Name')
|
|
443
|
+
|
|
408
444
|
if m.get('stringfield') is not None:
|
|
409
445
|
self.stringfield = m.get('stringfield')
|
|
410
446
|
|
|
@@ -30,6 +30,7 @@ static function parse(c: class): void;
|
|
|
30
30
|
static async function asyncFunc(): void;
|
|
31
31
|
|
|
32
32
|
model Request = {
|
|
33
|
+
CORSRules: string,
|
|
33
34
|
accesskey?: string(name='accesskey', description='accesskey'),
|
|
34
35
|
region?: string(name='region', description='region'),
|
|
35
36
|
instance: {
|
|
@@ -34,4 +34,12 @@ static async function helloInterface(): void;
|
|
|
34
34
|
|
|
35
35
|
async function aParams(): void {
|
|
36
36
|
helloParams("a", "b");
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async function testJWTWithOption(): void {
|
|
40
|
+
helloParams("a", "b");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async function testOAuth2forOption(): void {
|
|
44
|
+
helloParams("a", "b");
|
|
37
45
|
}
|
|
@@ -20,7 +20,7 @@ from tea_python_tests import models as main_models
|
|
|
20
20
|
class Client(SourceClient):
|
|
21
21
|
_protocol: str = None
|
|
22
22
|
_pathname: str = None
|
|
23
|
-
|
|
23
|
+
_strs: List[str] = None
|
|
24
24
|
_comple_list: List[List[str]] = None
|
|
25
25
|
_endpoint_map: Dict[str, str] = None
|
|
26
26
|
_configs: List[source_models.Config] = None
|
|
@@ -206,11 +206,11 @@ class Client(SourceClient):
|
|
|
206
206
|
any_map = {}
|
|
207
207
|
any_map[item] = 'test'
|
|
208
208
|
break
|
|
209
|
-
self.
|
|
209
|
+
self._strs = request.strs
|
|
210
210
|
self._protocol = 'test'
|
|
211
211
|
self._endpoint_map.get(self._protocol)
|
|
212
212
|
self._endpoint_map['test'] = 'ok'
|
|
213
|
-
request.strs = self.
|
|
213
|
+
request.strs = self._strs
|
|
214
214
|
_request.protocol = self._protocol
|
|
215
215
|
_request.port = request.num
|
|
216
216
|
_request.method = 'GET'
|
|
@@ -421,11 +421,11 @@ class Client(SourceClient):
|
|
|
421
421
|
any_map = {}
|
|
422
422
|
any_map[item] = 'test'
|
|
423
423
|
break
|
|
424
|
-
self.
|
|
424
|
+
self._strs = request.strs
|
|
425
425
|
self._protocol = 'test'
|
|
426
426
|
self._endpoint_map.get(self._protocol)
|
|
427
427
|
self._endpoint_map['test'] = 'ok'
|
|
428
|
-
request.strs = self.
|
|
428
|
+
request.strs = self._strs
|
|
429
429
|
_request.protocol = self._protocol
|
|
430
430
|
_request.port = request.num
|
|
431
431
|
_request.method = 'GET'
|
|
@@ -611,6 +611,7 @@ class Client(SourceClient):
|
|
|
611
611
|
x = y
|
|
612
612
|
resp = _response
|
|
613
613
|
req = source_models.Request(
|
|
614
|
+
cors_rules = 'test',
|
|
614
615
|
accesskey = request.access_key,
|
|
615
616
|
region = resp.status_message
|
|
616
617
|
)
|
|
@@ -653,6 +654,7 @@ class Client(SourceClient):
|
|
|
653
654
|
x = y
|
|
654
655
|
resp = _response
|
|
655
656
|
req = source_models.Request(
|
|
657
|
+
cors_rules = 'test',
|
|
656
658
|
accesskey = request.access_key,
|
|
657
659
|
region = resp.status_message
|
|
658
660
|
)
|
|
@@ -63,3 +63,15 @@ class Client:
|
|
|
63
63
|
|
|
64
64
|
async def a_params_async(self) -> None:
|
|
65
65
|
await self.hello_params_async('a', 'b')
|
|
66
|
+
|
|
67
|
+
def test_jwt_with_option(self) -> None:
|
|
68
|
+
self.hello_params('a', 'b')
|
|
69
|
+
|
|
70
|
+
async def test_jwt_with_option_async(self) -> None:
|
|
71
|
+
await self.hello_params_async('a', 'b')
|
|
72
|
+
|
|
73
|
+
def test_oauth2_for_option(self) -> None:
|
|
74
|
+
self.hello_params('a', 'b')
|
|
75
|
+
|
|
76
|
+
async def test_oauth2_for_option_async(self) -> None:
|
|
77
|
+
await self.hello_params_async('a', 'b')
|
|
@@ -14,6 +14,10 @@ class MyModel(DaraModel):
|
|
|
14
14
|
def __init__(
|
|
15
15
|
self,
|
|
16
16
|
model: main_models.MyModelModel = None,
|
|
17
|
+
cors_rules: str = None,
|
|
18
|
+
cors_rules_cors_r: str = None,
|
|
19
|
+
xml_parser_http_message: str = None,
|
|
20
|
+
test_oauth2_name: str = None,
|
|
17
21
|
stringfield: str = None,
|
|
18
22
|
bytesfield: bytes = None,
|
|
19
23
|
stringarrayfield: List[str] = None,
|
|
@@ -60,6 +64,10 @@ class MyModel(DaraModel):
|
|
|
60
64
|
link: str = None,
|
|
61
65
|
):
|
|
62
66
|
self.model = model
|
|
67
|
+
self.cors_rules = cors_rules
|
|
68
|
+
self.cors_rules_cors_r = cors_rules_cors_r
|
|
69
|
+
self.xml_parser_http_message = xml_parser_http_message
|
|
70
|
+
self.test_oauth2_name = test_oauth2_name
|
|
63
71
|
self.stringfield = stringfield
|
|
64
72
|
self.bytesfield = bytesfield
|
|
65
73
|
self.stringarrayfield = stringarrayfield
|
|
@@ -109,6 +117,10 @@ class MyModel(DaraModel):
|
|
|
109
117
|
self.validate_required(self.model, 'model')
|
|
110
118
|
if self.model:
|
|
111
119
|
self.model.validate()
|
|
120
|
+
self.validate_required(self.cors_rules, 'cors_rules')
|
|
121
|
+
self.validate_required(self.cors_rules_cors_r, 'cors_rules_cors_r')
|
|
122
|
+
self.validate_required(self.xml_parser_http_message, 'xml_parser_http_message')
|
|
123
|
+
self.validate_required(self.test_oauth2_name, 'test_oauth2_name')
|
|
112
124
|
self.validate_required(self.stringfield, 'stringfield')
|
|
113
125
|
self.validate_required(self.bytesfield, 'bytesfield')
|
|
114
126
|
self.validate_required(self.stringarrayfield, 'stringarrayfield')
|
|
@@ -220,6 +232,18 @@ class MyModel(DaraModel):
|
|
|
220
232
|
if self.model is not None:
|
|
221
233
|
result['model'] = self.model.to_map()
|
|
222
234
|
|
|
235
|
+
if self.cors_rules is not None:
|
|
236
|
+
result['CORSRules'] = self.cors_rules
|
|
237
|
+
|
|
238
|
+
if self.cors_rules_cors_r is not None:
|
|
239
|
+
result['CORSRulesCORSR'] = self.cors_rules_cors_r
|
|
240
|
+
|
|
241
|
+
if self.xml_parser_http_message is not None:
|
|
242
|
+
result['XMLParserHTTPMessage'] = self.xml_parser_http_message
|
|
243
|
+
|
|
244
|
+
if self.test_oauth2_name is not None:
|
|
245
|
+
result['TestOAuth2Name'] = self.test_oauth2_name
|
|
246
|
+
|
|
223
247
|
if self.stringfield is not None:
|
|
224
248
|
result['stringfield'] = self.stringfield
|
|
225
249
|
|
|
@@ -405,6 +429,18 @@ class MyModel(DaraModel):
|
|
|
405
429
|
temp_model = main_models.MyModelModel()
|
|
406
430
|
self.model = temp_model.from_map(m.get('model'))
|
|
407
431
|
|
|
432
|
+
if m.get('CORSRules') is not None:
|
|
433
|
+
self.cors_rules = m.get('CORSRules')
|
|
434
|
+
|
|
435
|
+
if m.get('CORSRulesCORSR') is not None:
|
|
436
|
+
self.cors_rules_cors_r = m.get('CORSRulesCORSR')
|
|
437
|
+
|
|
438
|
+
if m.get('XMLParserHTTPMessage') is not None:
|
|
439
|
+
self.xml_parser_http_message = m.get('XMLParserHTTPMessage')
|
|
440
|
+
|
|
441
|
+
if m.get('TestOAuth2Name') is not None:
|
|
442
|
+
self.test_oauth2_name = m.get('TestOAuth2Name')
|
|
443
|
+
|
|
408
444
|
if m.get('stringfield') is not None:
|
|
409
445
|
self.stringfield = m.get('stringfield')
|
|
410
446
|
|