from pydantic import BaseModel, validator from typing import Dict, Any, Optional, Union class RuleField(BaseModel): """ 规则字段模型,用于验证单个规则字段 """ min: Union[int, float] = 0 max: Union[int, float] = 0 # @validator('max') # def validate_min_max(cls, v, values, field): # if 'min' in values and v != 0 and values['min'] > v: # raise ValueError('min value cannot be greater than max value') # return v class RuleModel(BaseModel): """ 规则模型,用于验证规则字典 """ period: Optional[RuleField] = None duration: Optional[RuleField] = None play_cnt: Optional[RuleField] = None like_cnt: Optional[RuleField] = None comment_cnt: Optional[RuleField] = None share_cnt: Optional[RuleField] = None videos_cnt: Optional[RuleField] = None width: Optional[RuleField] = None height: Optional[RuleField] = None @validator('*') def validate_rule_fields(cls, v): if v is not None and not isinstance(v, RuleField): raise ValueError('Rule fields must be of type RuleField') return v class Config: extra = "allow" # 允许额外的字段