visitToMap()

in lib/generator.js [1188:1228]


  visitToMap(ast, level) {
    this.emit('def to_map(self):\n', level);
    this.emit('result = dict()\n' , level + 2);
    this.emit('_map = super().to_map()\n' , level + 2);
    this.emit('if _map is not None:\n' , level + 2);
    this.emit('result = _map\n', level + 4);
    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(`result['${realName}'] = []\n`, level + 2);
          arr = true;
        } else if (node.fieldValue.fieldType === 'map' || node.fieldValue.type === 'map') {
          this.emit(`result['${realName}'] = {}\n`, level + 2);
        }
      }
      this.emit(`if self.${param} is not None:\n`, level + 2);
      if(!hasModel) {
        this.emit(`result['${realName}'] = self.${param}\n`, level + 4);
      } else {
        if(this.config.noneEmpty) {
          if (node.fieldValue.type === 'array' || node.fieldValue.fieldType === 'array') {
            this.emit(`result['${realName}'] = []\n`, level + 4);
            arr = true;
          } else if (node.fieldValue.fieldType === 'map' || node.fieldValue.type === 'map') {
            this.emit(`result['${realName}'] = {}\n`, level + 4);
          }
        }
        this.visitToMapField(node.fieldValue, param, `result['${realName}']`, `self.${param}`, level + 4, arr);
      }
      this.emit('\n');
    }
    this.emit('return result\n', level + 2);
    this.emit('\n');
  }