in lib/generator.js [1089:1147]
visitModelValidate(ast, level) {
let notPass = false;
for (let i = 0; i < ast.nodes.length; i++) {
const node = ast.nodes[i];
const pattern = this.getAttributes(node, 'pattern') || '';
const maxLength = this.getAttributes(node, 'maxLength') || 0;
const minLength = this.getAttributes(node, 'minLength') || 0;
const maximum = this.getAttributes(node, 'maximum') || 0;
const minimum = this.getAttributes(node, 'minimum') || 0;
let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
this.visitComments(comments, level);
let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
// 这里判断类中属性是否是必填
if (node.required) {
notPass = true;
this.emit(`self.validate_required(self.${param}, '${param}')\n`, level + 2);
}
// 这里判断类中属性的结构
if(node.fieldValue.fieldType === 'array' || node.fieldValue.fieldType === 'map' ||
node.fieldValue.type === 'array' || node.fieldValue.type === 'map'
) {
// 下面不包含model的就不需要validate
if(!this.checkFieldHasModel(node.fieldValue)){
continue;
}
notPass = true;
this.emit(`if self.${param}:\n`, level + 2);
this.visitFieldValidate(node.fieldValue, param, `self.${param}`, level + 4);
} else if(node.fieldValue.fieldType && node.fieldValue.fieldType.idType === 'model' || node.fieldValue.type === 'modelBody'){
notPass = true;
this.emit(`if self.${param}:\n`, level + 2);
this.emit(`self.${param}.validate()\n`, level + 4);
} else if(pattern !== ''){
notPass = true;
this.emit(`if self.${param} is not None:\n`, level + 2);
this.emit(`self.validate_pattern(self.${param}, '${param}', '${pattern}')\n`, level + 4);
} else if(maxLength > 0 && maxLength <= 2147483647){
notPass = true;
this.emit(`if self.${param} is not None:\n`, level + 2);
this.emit(`self.validate_max_length(self.${param}, '${param}', ${maxLength})\n`, level + 4);
} else if(minLength > 0 && minLength <= 2147483647){
notPass = true;
this.emit(`if self.${param} is not None:\n`, level + 2);
this.emit(`self.validate_min_length(self.${param}, '${param}', ${minLength})\n`, level + 4);
} else if(maximum > 0 && maximum <= Number.MAX_SAFE_INTEGER){
notPass = true;
this.emit(`if self.${param} is not None:\n`, level + 2);
this.emit(`self.validate_maximum(self.${param}, '${param}', ${maximum})\n`, level + 4);
} else if(minimum > 0 && minimum <= Number.MAX_SAFE_INTEGER){
notPass = true;
this.emit(`if self.${param} is not None:\n`, level + 2);
this.emit(`self.validate_minimum(self.${param}, '${param}', ${minimum})\n`, level + 4);
}
}
if(!notPass) {
this.emit('pass\n', level + 2);
}
}