visitFieldsInit()

in lib/generator.js [1507:1561]


  visitFieldsInit(ast, level, modelName, type = 'model', baseErr = false){ 
    let node;
    this.emit('    def __init__(');
    const paramNodes = this.dealExtendFileds(ast);
    if (!paramNodes.length)  {
      this.emit('self):\n');
      this.emit('pass', level + 2);
      return;
    }
    this.emit('\n');
    this.emit(`self,${ this.config.strictModel ? ' *,' : '' }\n`, level + 2);
    for (let i = 0; i < paramNodes.length; i++) {
      node = paramNodes[i];
      if(!node.extend) {
        let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
        this.visitComments(comments, level);
      }
      let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
      if(param === 'name' && type === 'exception') {
        continue;
      }
      this.emit(`${param}: `, level + 2);
      this.visitFieldType(node.fieldValue, level, modelName, _name(node.fieldName));
      this.emit(' = None,\n');
    }
    this.emit('):\n', level);
    
    if(ast.extendFileds && ast.extendFileds.length > 0) {
      this.emit('super().__init__(', level + 2);
      if(baseErr) {
        this.emit('{\n');
        for (let i = 0; i < ast.extendFileds.length; i++) {
          node = ast.extendFileds[i];
          let value = _snakeCase(_escape(_name(node.fieldName)));
          let key = _avoidKeywords(_escape(_name(node.fieldName)));
          if(key === 'name' && type === 'exception') {
            continue;
          }
          this.emit(`'${key}': ${value},\n`, level + 4);
        }
        this.emit('})\n', level + 2);
      } else {
        this.emit('\n');
        for (let i = 0; i < ast.extendFileds.length; i++) {
          node = ast.extendFileds[i];
          let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
          if(param === 'name' && type === 'exception') {
            continue;
          }
          this.emit(`${param} = ${param},\n`, level + 4);
        }
        this.emit(')\n', level + 2);
      }
    }
  }