visitFromMap()

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');
  }