in lib/generator.js [1300:1340]
visitFromMap(ast, modelName, level) {
//
this.emit('def from_map(self, m: dict = None):\n', level);
this.emit('m = m or dict()\n', level + 2);
for (let i = 0; i < ast.nodes.length; i++) {
const node = ast.nodes[i];
let realName = this.getRealName(node);
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
this.visitComments(comments, level);
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
const hasModel = this.checkFieldHasModel(node.fieldValue);
let arr = false;
if(hasModel && !this.config.noneEmpty) {
if (node.fieldValue.type === 'array' || node.fieldValue.fieldType === 'array') {
this.emit(`self.${param} = []\n`, level + 2);
arr = true;
} else if (node.fieldValue.fieldType === 'map' || node.fieldValue.type === 'map') {
this.emit(`self.${param} = {}\n`, level + 2);
arr = false;
}
}
this.emit(`if m.get('${realName}') is not None:\n`, level + 2);
if(!hasModel) {
this.emit(`self.${param} = m.get('${realName}')\n`, level + 4);
} else {
if(this.config.noneEmpty) {
if (node.fieldValue.type === 'array' || node.fieldValue.fieldType === 'array') {
this.emit(`self.${param} = []\n`, level + 4);
arr = true;
} else if (node.fieldValue.fieldType === 'map' || node.fieldValue.type === 'map') {
this.emit(`self.${param} = {}\n`, level + 4);
arr = false;
}
}
this.visitFromField(node.fieldValue, [modelName, _name(node.fieldName)].join('.'), `self.${param}`, `m.get('${realName}')`, level + 4, arr);
}
this.emit('\n');
}
this.emit('return self\n', level + 2);
this.emit('\n');
}